drip-ruby 0.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.
@@ -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: