drip-ruby 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,33 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ class Drip::ClientTest < Drip::TestCase
4
+ context "initialization" do
5
+ should "accept api key" do
6
+ client = Drip::Client.new do |config|
7
+ config.api_key = "aaaa"
8
+ end
9
+
10
+ assert_equal "aaaa", client.api_key
11
+ end
12
+
13
+ should "accept default account id" do
14
+ client = Drip::Client.new do |config|
15
+ config.account_id = "1234567"
16
+ end
17
+
18
+ assert_equal "1234567", client.account_id
19
+ end
20
+ end
21
+
22
+ context "#generate_resource" do
23
+ setup do
24
+ @key = "subscribers"
25
+ @data = { "email" => "foo" }
26
+ @client = Drip::Client.new
27
+ end
28
+
29
+ should "return a JSON API payload" do
30
+ assert_equal({ @key => [@data] }, @client.generate_resource(@key, @data))
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,54 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ class Drip::CollectionTest < Drip::TestCase
4
+ should "yield resources of the correct type" do
5
+ raw_data = [ load_json_fixture("resources/subscriber.json") ]
6
+ collection = TestCollection.new(raw_data)
7
+
8
+ collection.each do |item|
9
+ assert item.is_a?(Drip::Subscriber)
10
+ end
11
+ end
12
+
13
+ context "#singular?" do
14
+ context "if there are no items" do
15
+ setup do
16
+ @collection = TestCollection.new([])
17
+ end
18
+
19
+ should "return true" do
20
+ assert @collection.singular?
21
+ end
22
+ end
23
+
24
+ context "if there is one item" do
25
+ setup do
26
+ @collection = TestCollection.new([{}])
27
+ end
28
+
29
+ should "return true" do
30
+ assert @collection.singular?
31
+ end
32
+ end
33
+
34
+ context "if there is more than one item" do
35
+ setup do
36
+ @collection = TestCollection.new([{}, {}])
37
+ end
38
+
39
+ should "return false" do
40
+ assert !@collection.singular?
41
+ end
42
+ end
43
+ end
44
+
45
+ class TestCollection < Drip::Collection
46
+ def self.collection_name
47
+ "subscribers"
48
+ end
49
+
50
+ def self.resource_name
51
+ "subscriber"
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,12 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ class Drip::CollectionsTest < Drip::TestCase
4
+ should "find collections" do
5
+ assert_equal Drip::Subscribers, Drip::Collections.find_class("subscribers")
6
+ assert_equal Drip::Errors, Drip::Collections.find_class("errors")
7
+ end
8
+
9
+ should "return base collection by default" do
10
+ assert_equal Drip::Collection, Drip::Collections.find_class("foo")
11
+ end
12
+ end
@@ -0,0 +1,34 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ class Drip::ResourceTest < Drip::TestCase
4
+ class TestResource < Drip::Resource
5
+ def attribute_keys
6
+ %i{id name}
7
+ end
8
+
9
+ def process_attribute(key, value)
10
+ case key
11
+ when :id
12
+ value.to_i
13
+ else
14
+ value
15
+ end
16
+ end
17
+ end
18
+
19
+ should "respond to all attribute keys" do
20
+ resource = TestResource.new
21
+ assert resource.respond_to?(:id)
22
+ assert resource.respond_to?(:name)
23
+ end
24
+
25
+ should "process raw data" do
26
+ resource = TestResource.new("id" => "1234")
27
+ assert_equal 1234, resource.id
28
+ end
29
+
30
+ should "default unset attributes to nil" do
31
+ resource = TestResource.new("id" => "1234")
32
+ assert_equal nil, resource.name
33
+ end
34
+ end
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper.rb'
2
+
3
+ class Drip::SubscriberTest < Drip::TestCase
4
+ should "parse created_at" do
5
+ created_at = Time.new(2014, 11, 15, 3, 0, 0, 0)
6
+
7
+ data = load_json_fixture("resources/subscriber.json")
8
+ data["created_at"] = created_at.iso8601
9
+
10
+ resource = Drip::Subscriber.new(data)
11
+
12
+ assert_equal created_at, resource.created_at
13
+ end
14
+
15
+ context ".resource_name" do
16
+ should "be subscriber" do
17
+ assert_equal "subscriber", Drip::Subscriber.resource_name
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,12 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ class Drip::ResourcesTest < Drip::TestCase
4
+ should "find resources" do
5
+ assert_equal Drip::Subscriber, Drip::Resources.find_class("subscriber")
6
+ assert_equal Drip::Error, Drip::Resources.find_class("error")
7
+ end
8
+
9
+ should "return base resource by default" do
10
+ assert_equal Drip::Resource, Drip::Resources.find_class("foo")
11
+ end
12
+ end
@@ -0,0 +1,124 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ class Drip::ResponseTest < Drip::TestCase
4
+ context "#success?" do
5
+ should "be true if status is in the 200..299 range" do
6
+ (200..299).each do |status|
7
+ subject = Drip::Response.new(status, {})
8
+ assert subject.success?
9
+ end
10
+ end
11
+
12
+ should "be false if status is 404" do
13
+ subject = Drip::Response.new(404, {})
14
+ assert !subject.success?
15
+ end
16
+
17
+ should "be false if status is 415" do
18
+ subject = Drip::Response.new(415, {})
19
+ assert !subject.success?
20
+ end
21
+
22
+ should "be false if status is 500" do
23
+ subject = Drip::Response.new(500, {})
24
+ assert !subject.success?
25
+ end
26
+ end
27
+
28
+ context "#==" do
29
+ should "be true if status and body are equal" do
30
+ status = 200
31
+ body = { "foo" => "bar" }
32
+
33
+ subject1 = Drip::Response.new(status, body.clone)
34
+ subject2 = Drip::Response.new(status, body.clone)
35
+
36
+ assert subject1 == subject2
37
+ end
38
+ end
39
+
40
+ context "#links" do
41
+ context "if links are present in body" do
42
+ setup do
43
+ @links = { "account" => "123" }
44
+ @body = { "links" => @links }
45
+ @subject = Drip::Response.new(200, @body)
46
+ end
47
+
48
+ should "return the links object" do
49
+ assert_equal @links, @subject.links
50
+ end
51
+ end
52
+
53
+ context "if links are not present in body" do
54
+ setup do
55
+ @body = {}
56
+ @subject = Drip::Response.new(200, @body)
57
+ end
58
+
59
+ should "return nil" do
60
+ assert_nil @subject.links
61
+ end
62
+ end
63
+
64
+ context "if body is empty" do
65
+ setup do
66
+ @body = ""
67
+ @subject = Drip::Response.new(200, @body)
68
+ end
69
+
70
+ should "return nil" do
71
+ assert_nil @subject.links
72
+ end
73
+ end
74
+ end
75
+
76
+ context "#meta" do
77
+ context "if meta is present in body" do
78
+ setup do
79
+ @meta = { "page" => 1 }
80
+ @body = { "meta" => @meta }
81
+ @subject = Drip::Response.new(200, @body)
82
+ end
83
+
84
+ should "return the meta object" do
85
+ assert_equal @meta, @subject.meta
86
+ end
87
+ end
88
+
89
+ context "if meta is not present in body" do
90
+ setup do
91
+ @body = {}
92
+ @subject = Drip::Response.new(200, @body)
93
+ end
94
+
95
+ should "return nil" do
96
+ assert_nil @subject.meta
97
+ end
98
+ end
99
+
100
+ context "if body is empty" do
101
+ setup do
102
+ @body = ""
103
+ @subject = Drip::Response.new(200, @body)
104
+ end
105
+
106
+ should "return nil" do
107
+ assert_nil @subject.meta
108
+ end
109
+ end
110
+ end
111
+
112
+ context "members" do
113
+ setup do
114
+ @members = [ load_json_fixture("resources/subscriber.json") ]
115
+ @body = { "subscribers" => @members }
116
+ @subject = Drip::Response.new(200, @body)
117
+ end
118
+
119
+ should "be accessible via method call" do
120
+ assert @subject.subscribers.is_a?(Drip::Subscribers)
121
+ assert_equal 1, @subject.subscribers.count
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,4 @@
1
+ {
2
+ "code": "not_found_error",
3
+ "message": "The resource you requested was not found"
4
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "id": "z1togz2hcjrkpp5treip",
3
+ "status": "active",
4
+ "email": "john@acme.com",
5
+ "time_zone": "America/Los_Angeles",
6
+ "utc_offset": -440,
7
+ "visitor_uuid": "sa8f7sdf78sdsdahf788d7asf8sd",
8
+ "custom_fields": {
9
+ "name": "John Doe"
10
+ },
11
+ "tags": ["Customer", "SEO"],
12
+ "created_at": "2013-06-21T10:31:58Z",
13
+ "href": "https://api.getdrip.com/v2/9999999/subscribers/12345",
14
+ "links": {
15
+ "account": "9999999"
16
+ }
17
+ }
@@ -0,0 +1,25 @@
1
+ $:.unshift File.expand_path('../../lib', __FILE__)
2
+
3
+ require "drip"
4
+ require "minitest/autorun"
5
+ require "shoulda-context"
6
+ require "mocha/setup"
7
+ # require "webmock/minitest"
8
+ # require "vcr"
9
+ require "faraday"
10
+
11
+ # VCR.configure do |c|
12
+ # c.cassette_library_dir = 'test/cassettes'
13
+ # c.hook_into :webmock # or :fakeweb
14
+ # end
15
+
16
+ class Drip::TestCase < Minitest::Test
17
+ def expand_fixture_path(path)
18
+ File.expand_path("../fixtures/#{path}", __FILE__)
19
+ end
20
+
21
+ def load_json_fixture(path)
22
+ fixture_path = expand_fixture_path(path)
23
+ JSON.parse(File.read(fixture_path))
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,191 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: drip-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Derrick Reimer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: shoulda-context
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mocha
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: faraday
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: faraday_middleware
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: json
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: A simple wrapper for the Drip API
112
+ email:
113
+ - derrickreimer@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - .gitignore
119
+ - .travis.yml
120
+ - Gemfile
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Rakefile
124
+ - drip-ruby.gemspec
125
+ - lib/drip.rb
126
+ - lib/drip/client.rb
127
+ - lib/drip/client/events.rb
128
+ - lib/drip/client/subscribers.rb
129
+ - lib/drip/client/tags.rb
130
+ - lib/drip/collection.rb
131
+ - lib/drip/collections.rb
132
+ - lib/drip/collections/errors.rb
133
+ - lib/drip/collections/subscribers.rb
134
+ - lib/drip/resource.rb
135
+ - lib/drip/resources.rb
136
+ - lib/drip/resources/error.rb
137
+ - lib/drip/resources/subscriber.rb
138
+ - lib/drip/response.rb
139
+ - lib/drip/version.rb
140
+ - test/drip/client/events_test.rb
141
+ - test/drip/client/subscribers_test.rb
142
+ - test/drip/client/tags_test.rb
143
+ - test/drip/client_test.rb
144
+ - test/drip/collection_test.rb
145
+ - test/drip/collections_test.rb
146
+ - test/drip/resource_test.rb
147
+ - test/drip/resources/subscriber_test.rb
148
+ - test/drip/resources_test.rb
149
+ - test/drip/response_test.rb
150
+ - test/fixtures/resources/not_found_error.json
151
+ - test/fixtures/resources/subscriber.json
152
+ - test/test_helper.rb
153
+ homepage: http://github.com/DripEmail/drip-ruby
154
+ licenses:
155
+ - MIT
156
+ metadata: {}
157
+ post_install_message:
158
+ rdoc_options: []
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - '>='
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ requirements: []
172
+ rubyforge_project:
173
+ rubygems_version: 2.3.0
174
+ signing_key:
175
+ specification_version: 4
176
+ summary: A Ruby gem for interacting with the Drip API
177
+ test_files:
178
+ - test/drip/client/events_test.rb
179
+ - test/drip/client/subscribers_test.rb
180
+ - test/drip/client/tags_test.rb
181
+ - test/drip/client_test.rb
182
+ - test/drip/collection_test.rb
183
+ - test/drip/collections_test.rb
184
+ - test/drip/resource_test.rb
185
+ - test/drip/resources/subscriber_test.rb
186
+ - test/drip/resources_test.rb
187
+ - test/drip/response_test.rb
188
+ - test/fixtures/resources/not_found_error.json
189
+ - test/fixtures/resources/subscriber.json
190
+ - test/test_helper.rb
191
+ has_rdoc: