netroots-ruby-actblue 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README +0 -0
- data/lib/actblue.rb +110 -0
- data/lib/actblue/candidacy.rb +11 -0
- data/lib/actblue/check.rb +11 -0
- data/lib/actblue/contribution.rb +32 -0
- data/lib/actblue/credit_card.rb +11 -0
- data/lib/actblue/election.rb +11 -0
- data/lib/actblue/entity.rb +11 -0
- data/lib/actblue/expires.rb +11 -0
- data/lib/actblue/instrument.rb +11 -0
- data/lib/actblue/line_item.rb +11 -0
- data/lib/actblue/list_entry.rb +11 -0
- data/lib/actblue/office.rb +11 -0
- data/lib/actblue/page.rb +32 -0
- data/lib/actblue/source.rb +11 -0
- metadata +77 -0
data/README
ADDED
File without changes
|
data/lib/actblue.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'net/https'
|
3
|
+
require 'cgi'
|
4
|
+
require 'httparty'
|
5
|
+
require 'rexml/document'
|
6
|
+
|
7
|
+
class REXMLUtilityNode
|
8
|
+
def undasherize_keys(params)
|
9
|
+
params
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module ActBlue
|
14
|
+
|
15
|
+
ACTBLUE_VERSION = "2007-10-1"
|
16
|
+
ACTBLUE_URL = "https://secure.actblue.com"
|
17
|
+
|
18
|
+
class ActiveBlue
|
19
|
+
include HTTParty
|
20
|
+
format :xml
|
21
|
+
base_uri "#{ACTBLUE_URL}/#{ACTBLUE_VERSION}"
|
22
|
+
basic_auth ENV['ACTBLUE_USER'], ENV['ACTBLUE_PASS'] if (ENV['ACTBLUE_USER'] && ENV['ACTBLUE_PASS'])
|
23
|
+
headers 'Accept' => 'application/xml'
|
24
|
+
|
25
|
+
attr_accessor :variables
|
26
|
+
|
27
|
+
ACT_TYPES = {
|
28
|
+
'source' => 'Source',
|
29
|
+
'page' => 'Page',
|
30
|
+
'lineitem' => 'LineItem',
|
31
|
+
'lineitems' => lambda {|hash| if (hash.is_a?(Array) && hash.first.class.name == "ActBlue::LineItem") then return hash end; collection = []; if hash['lineitem'].is_a?(Hash) then collection << LineItem.new(hash['lineitem']); else hash['lineitem'].each {|l| collection << LineItem.new(l); }; end; return collection; },
|
32
|
+
'entity' => 'Entity',
|
33
|
+
'instrument' => 'Instrument',
|
34
|
+
'election' => 'Election',
|
35
|
+
'expires' => 'Expires',
|
36
|
+
'listentry' => 'ListEntry',
|
37
|
+
'listentries' => lambda {|hash| if (hash.is_a?(Array) && hash.first.class.name == "ActBlue::ListEntry") then return hash end; collection = []; if hash['listentry'].is_a?(Hash) then collection << ListEntry.new(hash['listentry']); else hash['listentry'].each {|l| collection << ListEntry.new(l); }; end; return collection; },
|
38
|
+
'creditcard' => 'CreditCard',
|
39
|
+
'check' => 'Check',
|
40
|
+
'candidacy' => 'Candidacy',
|
41
|
+
'office' => 'Office'
|
42
|
+
}
|
43
|
+
|
44
|
+
def initialize(params = {})
|
45
|
+
@variables = {}
|
46
|
+
params.each do |key, value|
|
47
|
+
if value
|
48
|
+
if ACT_TYPES[key.to_s] && ACT_TYPES[key.to_s].is_a?(Proc)
|
49
|
+
collection = []
|
50
|
+
collection = ACT_TYPES[key.to_s].call(value) if !value.empty?
|
51
|
+
@variables[key.to_s] = collection
|
52
|
+
elsif ACT_TYPES[key.to_s] && value.is_a?(Hash)
|
53
|
+
@variables[key.to_s] = Object.const_get(ACT_TYPES[key.to_s]).new(value)
|
54
|
+
else
|
55
|
+
@variables[key.to_s] = value
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def [](key)
|
62
|
+
@variables[key]
|
63
|
+
end
|
64
|
+
|
65
|
+
def []=(key, val)
|
66
|
+
@variables[key] = val
|
67
|
+
end
|
68
|
+
|
69
|
+
def to_xml
|
70
|
+
doc = REXML::Document.new
|
71
|
+
doc.add_element(to_xml_element)
|
72
|
+
output = ""
|
73
|
+
doc.write(output)
|
74
|
+
output
|
75
|
+
end
|
76
|
+
|
77
|
+
def to_xml_element
|
78
|
+
element = REXML::Element.new(self.class::XML_NAME)
|
79
|
+
self.class::ATTRIBUTES.each do |a|
|
80
|
+
element.add_attribute(a, @variables[a]) if @variables[a]
|
81
|
+
end
|
82
|
+
self.class::ELEMENTS.each do |e|
|
83
|
+
if @variables[e]
|
84
|
+
if ACT_TYPES[e] && ACT_TYPES[e].is_a?(Proc)
|
85
|
+
parentElement = REXML::Element.new(e)
|
86
|
+
@variables[e].each do |c|
|
87
|
+
if c.methods.include? "to_xml_element"
|
88
|
+
parentElement.add_element(c.to_xml_element)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
element.add_element(parentElement)
|
92
|
+
else
|
93
|
+
if @variables[e].methods.include? "to_xml_element"
|
94
|
+
element.add_element(@variables[e].to_xml_element)
|
95
|
+
else
|
96
|
+
newElement = REXML::Element.new(e)
|
97
|
+
newElement.text = @variables[e]
|
98
|
+
element.add_element(newElement)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
element
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
Dir["#{File.dirname(__FILE__)}/actblue/*.rb"].each { |source_file| require source_file }
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module ActBlue
|
2
|
+
|
3
|
+
class Contribution < ActiveBlue
|
4
|
+
|
5
|
+
XML_NAME = 'contribution'
|
6
|
+
ATTRIBUTES = ['order-number', 'created-on']
|
7
|
+
ELEMENTS = ['refcode', 'source', 'timestamp', 'submitter', 'recurring', 'recurringtimes', 'referrer', 'successuri', 'lineitems']
|
8
|
+
|
9
|
+
def self.get(params)
|
10
|
+
hash = ActiveBlue.get('/contributions', :query => params)
|
11
|
+
result = []
|
12
|
+
if hash["contributions"]
|
13
|
+
hash["contributions"]["contribution"].each do |h|
|
14
|
+
result << Contribution.new(h)
|
15
|
+
end
|
16
|
+
elsif hash["contribution"]
|
17
|
+
result << Contribution.new(hash["contribution"])
|
18
|
+
end
|
19
|
+
result
|
20
|
+
end
|
21
|
+
|
22
|
+
def post
|
23
|
+
super.post('/contributions', :body => to_xml)
|
24
|
+
end
|
25
|
+
|
26
|
+
def put
|
27
|
+
super.put('/contributions', :body => to_xml)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module ActBlue
|
2
|
+
|
3
|
+
class Entity < ActiveBlue
|
4
|
+
|
5
|
+
XML_NAME = 'entity'
|
6
|
+
ATTRIBUTES = ['id']
|
7
|
+
ELEMENTS = ['legalname', 'displayname', 'sortname', 'jurisdiction', 'govid', 'prefacewiththe', 'donate', 'kind', 'state', 'party', 'url', 'visible','candidacy']
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
data/lib/actblue/page.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
module ActBlue
|
2
|
+
|
3
|
+
class Page < ActiveBlue
|
4
|
+
|
5
|
+
XML_NAME = 'page'
|
6
|
+
ATTRIBUTES = ['name', 'partner', 'created-on']
|
7
|
+
ELEMENTS = ['title', 'author', 'blurb', 'visibility', 'showcandidatesummary', 'listentries']
|
8
|
+
|
9
|
+
def self.get(params)
|
10
|
+
hash = ActiveBlue.get('/pages', :query => params)
|
11
|
+
result = []
|
12
|
+
if hash["pages"]
|
13
|
+
hash["pages"].each do |h|
|
14
|
+
result << Page.new(h)
|
15
|
+
end
|
16
|
+
elsif hash["page"]
|
17
|
+
result << Page.new(hash["page"])
|
18
|
+
end
|
19
|
+
result
|
20
|
+
end
|
21
|
+
|
22
|
+
def post
|
23
|
+
super.post('/pages', :body => to_xml)
|
24
|
+
end
|
25
|
+
|
26
|
+
def put
|
27
|
+
super.put('/pages', :body => to_xml)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module ActBlue
|
2
|
+
|
3
|
+
class Source < ActiveBlue
|
4
|
+
|
5
|
+
XML_NAME = 'source'
|
6
|
+
ATTRIBUTES = []
|
7
|
+
ELEMENTS = ['firstname', 'lastname', 'addr1', 'addr2', 'city', 'state', 'zip', 'country', 'employer', 'occupation', 'empaddr1', 'empaddr2', 'empcity', 'empstate', 'empzip', 'empcountry', 'email', 'phone']
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: netroots-ruby-actblue
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kyle Shank
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-02-11 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: httparty
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.3.1
|
24
|
+
version:
|
25
|
+
description:
|
26
|
+
email: kyle.shank@gmail.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files: []
|
32
|
+
|
33
|
+
files:
|
34
|
+
- actblue4r.gemspec
|
35
|
+
- lib/actblue.rb
|
36
|
+
- lib/actblue/contribution.rb
|
37
|
+
- lib/actblue/entity.rb
|
38
|
+
- lib/actblue/instrument.rb
|
39
|
+
- lib/actblue/line_item.rb
|
40
|
+
- lib/actblue/page.rb
|
41
|
+
- lib/actblue/source.rb
|
42
|
+
- lib/actblue/candidacy.rb
|
43
|
+
- lib/actblue/check.rb
|
44
|
+
- lib/actblue/credit_card.rb
|
45
|
+
- lib/actblue/election.rb
|
46
|
+
- lib/actblue/expires.rb
|
47
|
+
- lib/actblue/list_entry.rb
|
48
|
+
- lib/actblue/office.rb
|
49
|
+
- README
|
50
|
+
has_rdoc: false
|
51
|
+
homepage: http://github.com/netroots/ruby-actblue
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: "0"
|
62
|
+
version:
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
version:
|
69
|
+
requirements: []
|
70
|
+
|
71
|
+
rubyforge_project:
|
72
|
+
rubygems_version: 1.2.0
|
73
|
+
signing_key:
|
74
|
+
specification_version: 2
|
75
|
+
summary: Library for accessing the ActBlue API.
|
76
|
+
test_files: []
|
77
|
+
|