Repository is archived
No commit activity in last 3 years
No release in over 3 years
There's a lot of open issues
Simple wrapper for Blue State Digital.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

 Project Readme

Blue State Digital Gem

Build Status

Usage

gem blue_state_digital

Configuration:

connection = BlueStateDigital::Connection.new(host:'foo.com', api_id: 'bar', api_secret: 'magic_secret')
cons = BlueStateDigital::Constituent.new({firstname: 'George', lastname: 'Washington', emails: [{ email: 'george@washington.com'}]}.merge({connection: connection}))
cons.save
cons.id # created constituent ID

Use the event machine adapter:

connection = BlueStateDigital::Connection.new(host:'foo.com', api_id: 'bar', api_secret: 'magic_secret', adapter: :em_synchrony)

Unsubscribes

connection = BlueStateDigital::Connection.new(host:'foo.com', api_id: 'bar', api_secret: 'magic_secret')
unsub = BlueStateDigital::EmailUnsubscribe.new({email: 'george@washington.com', reason: 'tea in the harbor'}.merge({connection: connection}))
unsub.unsubscribe! # raises on error, returns true on success.

Signup Forms

connection = BlueStateDigital::Connection.new(host:'foo.com', api_id: 'bar', api_secret: 'magic_secret')
signup_form = BlueStateDigital::SignupForm.clone(clone_from_id: 3, slug: 'foo', name: 'my new form', public_title: 'Sign Here For Puppies', connection: connection)
signup_form.set_cons_group(2345)
fields = signup_form.form_fields  # returns a list of SignupFormField

# The keys of the field_data hash should match the labels of the signup form's fields
signup_form.process_signup(field_data: {'First Name' => 'George', 'Last Name' => 'Washington', 'Email Address' => 'george@example.com', 'A Custom Field' => 'some custom data'},
                           email_opt_in: true, source: 'foo', subsource: 'bar')

Dataset integration

BSD API for uploading Dataset This creates a new personalization dataset from a slug, map_type, and CSV data, or if the supplied slug already exists, replaces the existing dataset. The CSV data can be attached by add_data_header and add_data_row methods. save method will upload the dataset and return true if successful.

dataset=BlueStateDigital::Dataset.new({slug: "downballot_dataset",map_type:"downballot"}.merge(connection: connection))
dataset.add_data_header(%w(index house house_link senate senate_link))
dataset.add_data_row(%w(NJ01 Elect\ Camille\ Andrew http://camilleandrew.com Elect\ Bob\ Smith http://bobsmith.com))
dataset.add_data_row(%w(NJ02 Elect\ David\ Kurkowski http://davidforcongress.com Elect\ Joe\ Jim http://joejim.com))
dataset.save

If there is an error while saving, it will be available via dataset.errors

dataset=BlueStateDigital::Dataset.new({map_type:"downballot"}.merge(connection: connection))
dataset.save
=> false
dataset.errors.full_messages
=> ["slug can't be blank"]

BSD API for listing Datasets This returns a list of all personalization datasets.

connection.datasets.get_datasets
=> [
  {
      "dataset_id":42,
      "slug":"my_dataset",
      "rows":100,
      "map_type":"state"
  },
  {
      "dataset_id":43,
      "slug":"downballot_dataset",
      "rows":50,
      "map_type":"downballot"
  }
]

BSD API for deleting a Dataset This deletes a personalization dataset.

dataset=BlueStateDigital::Dataset.new({dataset_id: 420}.merge(connection: connection))
dataset.delete

If there is any error delete will return ``falseand theerrors``` can be inspected for reasons.

Dataset Map integration

BSD API for uploading Dataset Map This takes a CSV of dataset map data and creates or updates all of the mappings found in the CSV. The CSV data can be attached by add_data_header and add_data_row methods. save method will upload the dataset and return true if successful.

dataset_map=BlueStateDigital::DatasetMap.new({}.merge(connection: connection))
dataset_map.add_data_header(%w(cons_id downballot houseparty))
dataset_map.add_data_row(%w(123456 NJ01 HP01))
dataset_map.add_data_row(%w(123457,NJ02,HP01))
dataset_map.save

If there is an error while saving, it will be available via dataset_map.errors

BSD API for listing Dataset Maps This returns a list of all personalization dataset maps.

connection.dataset_maps.get_dataset_maps
=> [
    {
        "map_id":1,
        "type":"state"
    },
    {
        "map_id":2,
        "type":"downballot"
    },
    {
        "map_id":3,
        "type":"houseparty"
    }
]

BSD API for deleting a Dataset Map This deletes a personalization dataset map.

dataset_map=BlueStateDigital::DatasetMap.new({map_id: 111}.merge(connection: connection))
dataset.delete

## CI
[![Build Status](https://secure.travis-ci.org/controlshift/blue_state_digital.png)](http://travis-ci.org/controlshift/blue_state_digital)