firstgiving 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +13 -5
- data/.gitignore +1 -0
- data/firstgiving.gemspec +15 -15
- data/lib/firstgiving.rb +4 -6
- data/lib/firstgiving/base.rb +7 -11
- data/lib/firstgiving/donation.rb +3 -7
- data/lib/firstgiving/lookup.rb +2 -5
- data/lib/firstgiving/search.rb +2 -5
- data/lib/firstgiving/version.rb +1 -1
- data/spec/first_giving_spec.rb +59 -57
- data/spec/spec_helper.rb +0 -1
- metadata +14 -14
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZTBmYmNjYzNmNGMwODhjN2QzMTE1ZWIyZjU4MGIyYmRhMGM4ZmRiOA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NmNhYTY2YTA5OGY4ZWQxZTIzZmMwNmFiMDMwNzQzNjllNTM5ZGQ1ZQ==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MjM2NjBjMDQ4ZDkzOTc3MGYyNzg5MDcxZTEzNjNjM2IxODJmMzk0N2ZiMjFi
|
10
|
+
NTNlZTRmZjM1YzVkMzQ1NDNhMzIzOWQzZWNlYjA1ZjA2YzBiMmIzMTAyM2Ri
|
11
|
+
NjU4ZDE4NzZmOWM2MGU5ZDMxMTQ5NDhkNGI0ZWM4OGViOTc0MTE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZWY4YjNlMTZkMjQ5NzRmNGFiYjc2NGMzZmI0MzM5MWU1NjMwZTQzYTU2ODUw
|
14
|
+
MTYwNDM4ZDBlYzg4Y2QwM2FiZTBjODAwMTg2YTljM2I0MWY1MTZhNDQyNGVm
|
15
|
+
MGVkYTc0ZDJhYTI0YjJiNjllMDU3YTFjZGE1ZTcyMGQ1MThkOTQ=
|
data/.gitignore
CHANGED
data/firstgiving.gemspec
CHANGED
@@ -4,24 +4,24 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'firstgiving/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'firstgiving'
|
8
8
|
spec.version = FirstGiving::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
-
spec.description = %q
|
12
|
-
spec.summary = %q
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
9
|
+
spec.authors = ['Faizal Zakaria']
|
10
|
+
spec.email = ['phaibusiness@gmail.com']
|
11
|
+
spec.description = %q(FirstGiving Ruby API client)
|
12
|
+
spec.summary = %q(FirstGiving API client)
|
13
|
+
spec.homepage = 'https://github.com/boosterllc/firstgiving_ruby'
|
14
|
+
spec.license = 'MIT'
|
15
15
|
|
16
|
-
spec.files = `git ls-files`.split(
|
16
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency
|
22
|
-
spec.add_development_dependency
|
23
|
-
spec.add_development_dependency
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency
|
21
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
22
|
+
spec.add_development_dependency 'rake'
|
23
|
+
spec.add_development_dependency 'rspec'
|
24
|
+
spec.add_development_dependency 'json'
|
25
|
+
spec.add_development_dependency 'crack'
|
26
|
+
spec.add_development_dependency 'faraday'
|
27
27
|
end
|
data/lib/firstgiving.rb
CHANGED
@@ -10,7 +10,6 @@ require 'firstgiving/search'
|
|
10
10
|
# Search API
|
11
11
|
|
12
12
|
module FirstGiving
|
13
|
-
|
14
13
|
class Configuration
|
15
14
|
attr_accessor :application_key, :security_token, :options
|
16
15
|
|
@@ -22,10 +21,10 @@ module FirstGiving
|
|
22
21
|
end
|
23
22
|
|
24
23
|
def set_defaults
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
24
|
+
options[:verbose] ||= false
|
25
|
+
options[:read_timeout] ||= 30
|
26
|
+
options[:use_ssl] ||= false
|
27
|
+
options[:use_staging] ||= true
|
29
28
|
end
|
30
29
|
end
|
31
30
|
|
@@ -48,7 +47,6 @@ module FirstGiving
|
|
48
47
|
def self.donation
|
49
48
|
@donation ||= Donation.new
|
50
49
|
end
|
51
|
-
|
52
50
|
end
|
53
51
|
|
54
52
|
FG = FirstGiving
|
data/lib/firstgiving/base.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
require 'faraday'
|
2
2
|
|
3
3
|
module FirstGiving
|
4
|
-
|
5
4
|
module Base
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
SEARCH_ENDPOINT = "http://graphapi.firstgiving.com"
|
5
|
+
DONATION_SANDBOX_ENDPOINT = 'http://usapisandbox.fgdev.net'
|
6
|
+
DONATION_PRODUCTION_ENDPOINT = 'https://api.firstgiving.com'
|
7
|
+
SEARCH_ENDPOINT = 'http://graphapi.firstgiving.com'
|
10
8
|
|
11
9
|
def headers_json
|
12
10
|
{
|
@@ -23,12 +21,12 @@ module FirstGiving
|
|
23
21
|
end
|
24
22
|
|
25
23
|
def post_call(api_endpoint, action, params, headers)
|
26
|
-
conn = Faraday.new(:
|
24
|
+
conn = Faraday.new(url: api_endpoint) do |faraday|
|
27
25
|
faraday.request :url_encoded
|
28
26
|
faraday.adapter Faraday.default_adapter
|
29
27
|
end
|
30
28
|
|
31
|
-
|
29
|
+
conn.post do |req|
|
32
30
|
req.url action
|
33
31
|
req.params = params
|
34
32
|
req.headers = headers
|
@@ -36,12 +34,12 @@ module FirstGiving
|
|
36
34
|
end
|
37
35
|
|
38
36
|
def get_call(api_endpoint, action, params, headers)
|
39
|
-
conn = Faraday.new(:
|
37
|
+
conn = Faraday.new(url: api_endpoint) do |faraday|
|
40
38
|
faraday.request :url_encoded # form-encode POST params
|
41
39
|
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
|
42
40
|
end
|
43
41
|
|
44
|
-
|
42
|
+
conn.get do |req|
|
45
43
|
req.url action
|
46
44
|
req.params = params
|
47
45
|
req.headers = headers
|
@@ -51,7 +49,5 @@ module FirstGiving
|
|
51
49
|
def logging(msg)
|
52
50
|
puts "[FG-LOG] #{msg}" if FirstGiving.configuration.options[:verbose]
|
53
51
|
end
|
54
|
-
|
55
52
|
end
|
56
53
|
end
|
57
|
-
|
data/lib/firstgiving/donation.rb
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
require 'crack'
|
2
2
|
|
3
3
|
module FirstGiving
|
4
|
-
|
5
4
|
class Donation
|
6
|
-
|
7
5
|
include Base
|
8
6
|
|
9
7
|
module Actions
|
10
|
-
CREDITCARD =
|
11
|
-
RECURRING_CREDITCARD_PROFILE =
|
12
|
-
VERIFY =
|
8
|
+
CREDITCARD = '/donation/creditcard'
|
9
|
+
RECURRING_CREDITCARD_PROFILE = '/donation/recurringcreditcardprofile'
|
10
|
+
VERIFY = '/verify'
|
13
11
|
end
|
14
12
|
|
15
13
|
def initialize
|
@@ -39,6 +37,4 @@ module FirstGiving
|
|
39
37
|
Crack::XML.parse(body)
|
40
38
|
end
|
41
39
|
end
|
42
|
-
|
43
40
|
end
|
44
|
-
|
data/lib/firstgiving/lookup.rb
CHANGED
@@ -2,14 +2,12 @@ require 'crack'
|
|
2
2
|
# lookup API
|
3
3
|
|
4
4
|
module FirstGiving
|
5
|
-
|
6
5
|
class Lookup
|
7
|
-
|
8
6
|
include Base
|
9
7
|
|
10
8
|
module Actions
|
11
|
-
TRANSACTION_LIST =
|
12
|
-
TRANSACTION_DETAIL =
|
9
|
+
TRANSACTION_LIST = '/transaction/list'
|
10
|
+
TRANSACTION_DETAIL = '/transaction/detail'
|
13
11
|
end
|
14
12
|
|
15
13
|
def initialize
|
@@ -38,5 +36,4 @@ module FirstGiving
|
|
38
36
|
Crack::XML.parse(body)
|
39
37
|
end
|
40
38
|
end
|
41
|
-
|
42
39
|
end
|
data/lib/firstgiving/search.rb
CHANGED
@@ -3,13 +3,11 @@ require 'json'
|
|
3
3
|
# Search API
|
4
4
|
|
5
5
|
module FirstGiving
|
6
|
-
|
7
6
|
class Search
|
8
|
-
|
9
7
|
include Base
|
10
8
|
|
11
9
|
module Actions
|
12
|
-
LIST_ORGANIZATION =
|
10
|
+
LIST_ORGANIZATION = '/v1/list/organization'
|
13
11
|
end
|
14
12
|
|
15
13
|
def initialize
|
@@ -17,7 +15,7 @@ module FirstGiving
|
|
17
15
|
end
|
18
16
|
|
19
17
|
def headers
|
20
|
-
{'Accept' => 'application/json'}
|
18
|
+
{ 'Accept' => 'application/json' }
|
21
19
|
end
|
22
20
|
|
23
21
|
def query(params)
|
@@ -30,5 +28,4 @@ module FirstGiving
|
|
30
28
|
response['payload']
|
31
29
|
end
|
32
30
|
end
|
33
|
-
|
34
31
|
end
|
data/lib/firstgiving/version.rb
CHANGED
data/spec/first_giving_spec.rb
CHANGED
@@ -2,11 +2,11 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe FirstGiving do
|
4
4
|
|
5
|
-
APPLICATION_KEY =
|
6
|
-
SECURITY_TOKEN =
|
5
|
+
APPLICATION_KEY = ''
|
6
|
+
SECURITY_TOKEN = ''
|
7
7
|
|
8
8
|
OPTIONS = {
|
9
|
-
:
|
9
|
+
use_staging: true
|
10
10
|
}
|
11
11
|
|
12
12
|
FirstGiving.configure do |config|
|
@@ -15,73 +15,75 @@ describe FirstGiving do
|
|
15
15
|
config.options = OPTIONS
|
16
16
|
end
|
17
17
|
|
18
|
-
|
18
|
+
raise 'Set your APPLICATION_KEY and SECURITY_TOKEN' if APPLICATION_KEY.empty? || SECURITY_TOKEN.empty?
|
19
19
|
|
20
|
-
|
20
|
+
@transaction_id = 'a-a8ca75adcda6874abd9c5b'
|
21
21
|
|
22
|
-
|
22
|
+
describe 'Test Donation API' do
|
23
|
+
|
24
|
+
it 'should donate' do
|
23
25
|
params = {
|
24
|
-
:
|
25
|
-
:
|
26
|
-
:
|
27
|
-
:
|
28
|
-
:
|
29
|
-
:
|
30
|
-
:
|
31
|
-
:
|
32
|
-
:
|
33
|
-
:
|
34
|
-
:
|
35
|
-
:
|
36
|
-
:
|
37
|
-
:
|
38
|
-
:
|
39
|
-
:
|
40
|
-
:
|
41
|
-
:
|
26
|
+
ccNumber: '4457010000000009',
|
27
|
+
ccType: 'VI',
|
28
|
+
ccExpDateMonth: '01',
|
29
|
+
ccExpDateYear: '2020',
|
30
|
+
billToAddressLine1: '1 Main St.',
|
31
|
+
billToCity: 'Burlington',
|
32
|
+
billToState: 'MA',
|
33
|
+
billToZip: '01803',
|
34
|
+
remoteAddr: '120.138.91.2',
|
35
|
+
amount: '10.00',
|
36
|
+
currencyCode: 'USD',
|
37
|
+
charityId: '1234',
|
38
|
+
description: 'Test transaction',
|
39
|
+
ccCardValidationNum: '349',
|
40
|
+
billToFirstName: 'Smith',
|
41
|
+
billToLastName: 'John',
|
42
|
+
billToCountry: 'US',
|
43
|
+
billToEmail: 'test@example.com'
|
42
44
|
}
|
43
45
|
|
44
46
|
response = FG.donation.creditcard(params)
|
45
47
|
## Response should success
|
46
48
|
assert_acknowledgement(response)
|
47
49
|
## Response should contain transaction ID
|
48
|
-
@
|
49
|
-
@
|
50
|
+
@transaction_id = response['firstGivingDonationApi']['firstGivingResponse']['transactionId']
|
51
|
+
@transaction_id.should_not be_nil
|
50
52
|
end
|
51
53
|
|
52
|
-
it
|
54
|
+
it 'should verify' do
|
53
55
|
params = {
|
54
|
-
:
|
55
|
-
:
|
56
|
+
message: 'value1',
|
57
|
+
signature: 'value2'
|
56
58
|
}
|
57
59
|
|
58
60
|
response = FG.donation.verify(params)
|
59
61
|
## Response should return the same message and signature
|
60
|
-
response[
|
61
|
-
response[
|
62
|
+
response['firstGivingDonationApi']['firstGivingResponse']['signature'] == 'value2'
|
63
|
+
response['firstGivingDonationApi']['firstGivingResponse']['message'] == 'value1'
|
62
64
|
end
|
63
65
|
|
64
|
-
it
|
66
|
+
it 'shoould recure the payment' do
|
65
67
|
end
|
66
68
|
|
67
69
|
end
|
68
70
|
|
69
|
-
describe
|
71
|
+
describe 'Test Lookup API' do
|
70
72
|
|
71
|
-
it
|
73
|
+
it 'should return a list of transactions' do
|
72
74
|
params = {
|
73
75
|
page_size: 10,
|
74
|
-
date_from:
|
75
|
-
count:
|
76
|
+
date_from: '1388707200',
|
77
|
+
count: 10,
|
76
78
|
page: 1
|
77
79
|
}
|
78
80
|
resp = FG.lookup.list(params)
|
79
81
|
assert_acknowledgement(resp)
|
80
82
|
end
|
81
83
|
|
82
|
-
it
|
84
|
+
it 'should return a transaction detail' do
|
83
85
|
params = {
|
84
|
-
transactionId:
|
86
|
+
transactionId: 'a-0070dde28ca48048a1fc24'
|
85
87
|
}
|
86
88
|
resp = FG.lookup.detail(params)
|
87
89
|
assert_acknowledgement(resp)
|
@@ -89,53 +91,53 @@ describe FirstGiving do
|
|
89
91
|
|
90
92
|
end
|
91
93
|
|
92
|
-
context
|
94
|
+
context 'Test Search API' do
|
93
95
|
|
94
|
-
describe
|
95
|
-
it
|
96
|
+
describe 'retrieving a charity by EIN' do
|
97
|
+
it 'should return data for charities' do
|
96
98
|
params = {
|
97
|
-
q:
|
99
|
+
q: 'government_id:260046127'
|
98
100
|
}
|
99
101
|
|
100
102
|
response = FG.search.query(params)
|
101
103
|
response.should_not be_nil
|
102
|
-
response[0][
|
104
|
+
response[0]['government_id'].should eq '260046127'
|
103
105
|
end
|
104
106
|
end
|
105
107
|
|
106
|
-
describe
|
107
|
-
it
|
108
|
+
describe 'searching for records by organization name' do
|
109
|
+
it 'exact name matching and partial or name start' do
|
108
110
|
params = {
|
109
|
-
q:
|
111
|
+
q: 'organization_name:humane society'
|
110
112
|
}
|
111
113
|
|
112
114
|
response = FG.search.query(params)
|
113
115
|
response.should_not be_nil
|
114
|
-
response[0][
|
116
|
+
response[0]['organization_name'].should include 'HUMANE SOCIETY'
|
115
117
|
end
|
116
118
|
|
117
|
-
it
|
119
|
+
it 'country constraints' do
|
118
120
|
params = {
|
119
|
-
q:
|
121
|
+
q: 'organization_name:bat AND country:US'
|
120
122
|
}
|
121
123
|
|
122
124
|
response = FG.search.query(params)
|
123
125
|
response.should_not be_nil
|
124
|
-
response[0][
|
125
|
-
response[0][
|
126
|
+
response[0]['organization_name'].should include 'BAT'
|
127
|
+
response[0]['country'].should eq 'US'
|
126
128
|
end
|
127
129
|
|
128
|
-
it
|
130
|
+
it 'pagination' do
|
129
131
|
params = {
|
130
|
-
q:
|
131
|
-
page_size:
|
132
|
+
q: 'organization_name:bat AND country:US',
|
133
|
+
page_size: '10',
|
132
134
|
page: 1
|
133
135
|
}
|
134
136
|
|
135
137
|
response = FG.search.query(params)
|
136
138
|
response.should_not be_nil
|
137
|
-
response[0][
|
138
|
-
response[0][
|
139
|
+
response[0]['organization_name'].should include 'BAT'
|
140
|
+
response[0]['country'].should eq 'US'
|
139
141
|
response.count.should eq 10
|
140
142
|
end
|
141
143
|
end
|
@@ -144,6 +146,6 @@ describe FirstGiving do
|
|
144
146
|
private
|
145
147
|
|
146
148
|
def assert_acknowledgement(response)
|
147
|
-
response[
|
149
|
+
response['firstGivingDonationApi']['firstGivingResponse']['acknowledgement'].should eq 'Success'
|
148
150
|
end
|
149
151
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: firstgiving
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Faizal Zakaria
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,70 +28,70 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - '>='
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - '>='
|
38
|
+
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - '>='
|
45
|
+
- - ! '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - '>='
|
52
|
+
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: json
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - '>='
|
59
|
+
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - '>='
|
66
|
+
- - ! '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: crack
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - '>='
|
73
|
+
- - ! '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - '>='
|
80
|
+
- - ! '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: faraday
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - '>='
|
87
|
+
- - ! '>='
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - '>='
|
94
|
+
- - ! '>='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
description: FirstGiving Ruby API client
|
@@ -126,12 +126,12 @@ require_paths:
|
|
126
126
|
- lib
|
127
127
|
required_ruby_version: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - '>='
|
129
|
+
- - ! '>='
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
133
|
requirements:
|
134
|
-
- - '>='
|
134
|
+
- - ! '>='
|
135
135
|
- !ruby/object:Gem::Version
|
136
136
|
version: '0'
|
137
137
|
requirements: []
|