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.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/.travis.yml +8 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +78 -0
- data/Rakefile +12 -0
- data/drip-ruby.gemspec +29 -0
- data/lib/drip.rb +2 -0
- data/lib/drip/client.rb +82 -0
- data/lib/drip/client/events.rb +20 -0
- data/lib/drip/client/subscribers.rb +81 -0
- data/lib/drip/client/tags.rb +30 -0
- data/lib/drip/collection.rb +39 -0
- data/lib/drip/collections.rb +21 -0
- data/lib/drip/collections/errors.rb +13 -0
- data/lib/drip/collections/subscribers.rb +13 -0
- data/lib/drip/resource.rb +50 -0
- data/lib/drip/resources.rb +21 -0
- data/lib/drip/resources/error.rb +13 -0
- data/lib/drip/resources/subscriber.rb +15 -0
- data/lib/drip/response.rb +68 -0
- data/lib/drip/version.rb +3 -0
- data/test/drip/client/events_test.rb +42 -0
- data/test/drip/client/subscribers_test.rb +132 -0
- data/test/drip/client/tags_test.rb +54 -0
- data/test/drip/client_test.rb +33 -0
- data/test/drip/collection_test.rb +54 -0
- data/test/drip/collections_test.rb +12 -0
- data/test/drip/resource_test.rb +34 -0
- data/test/drip/resources/subscriber_test.rb +20 -0
- data/test/drip/resources_test.rb +12 -0
- data/test/drip/response_test.rb +124 -0
- data/test/fixtures/resources/not_found_error.json +4 -0
- data/test/fixtures/resources/subscriber.json +17 -0
- data/test/test_helper.rb +25 -0
- metadata +191 -0
@@ -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,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
|
+
}
|
data/test/test_helper.rb
ADDED
@@ -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:
|