rspreedly 0.1.14 → 0.1.15
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.
- data/Rakefile +1 -1
- data/lib/rspreedly/subscriber.rb +35 -24
- data/rspreedly.gemspec +1 -1
- data/spec/fixtures/subscriber.xml +135 -0
- data/spec/subscriber_spec.rb +9 -0
- metadata +7 -7
data/Rakefile
CHANGED
@@ -20,7 +20,7 @@ spec = Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
# Change these as appropriate
|
22
22
|
s.name = "rspreedly"
|
23
|
-
s.version = "0.1.
|
23
|
+
s.version = "0.1.15"
|
24
24
|
s.summary = "Ruby library for the Spreedly API"
|
25
25
|
s.author = "Richard Livsey"
|
26
26
|
s.email = "richard@livsey.org"
|
data/lib/rspreedly/subscriber.rb
CHANGED
@@ -26,13 +26,14 @@ module RSpreedly
|
|
26
26
|
:store_credit_currency_code,
|
27
27
|
:subscription_plan_name,
|
28
28
|
:token,
|
29
|
-
:updated_at
|
29
|
+
:updated_at,
|
30
|
+
:invoices
|
30
31
|
|
31
32
|
class << self
|
32
33
|
|
33
34
|
# Get a subscriber’s details
|
34
|
-
# GET /api/v4/[short site name]/subscribers/[subscriber id].xml
|
35
|
-
def find(id)
|
35
|
+
# GET /api/v4/[short site name]/subscribers/[subscriber id].xml
|
36
|
+
def find(id)
|
36
37
|
return all if id == :all
|
37
38
|
|
38
39
|
begin
|
@@ -44,7 +45,7 @@ module RSpreedly
|
|
44
45
|
end
|
45
46
|
|
46
47
|
# Get a list of all subscribers (more)
|
47
|
-
# GET /api/v4/[short site name]/subscribers.xml
|
48
|
+
# GET /api/v4/[short site name]/subscribers.xml
|
48
49
|
def all
|
49
50
|
response = api_request(:get, "/subscribers.xml")
|
50
51
|
return [] unless response.has_key?("subscribers")
|
@@ -54,13 +55,23 @@ module RSpreedly
|
|
54
55
|
# Clear all subscribers from a *test* site (more)
|
55
56
|
# DELETE /api/v4/[short site name]/subscribers.xml
|
56
57
|
def delete_all
|
57
|
-
!! api_request(:delete, "/subscribers.xml")
|
58
|
+
!! api_request(:delete, "/subscribers.xml")
|
58
59
|
end
|
59
60
|
|
60
61
|
alias_method :destroy_all, :delete_all
|
61
62
|
|
62
63
|
end
|
63
64
|
|
65
|
+
def invoices=(data)
|
66
|
+
@invoices = []
|
67
|
+
data.each do |item|
|
68
|
+
if item.is_a? Hash
|
69
|
+
item = RSpreedly::Invoice.new(item)
|
70
|
+
end
|
71
|
+
@invoices << item
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
64
75
|
def new_record?
|
65
76
|
!self.token
|
66
77
|
end
|
@@ -74,7 +85,7 @@ module RSpreedly
|
|
74
85
|
end
|
75
86
|
|
76
87
|
# Create a subscriber (more)
|
77
|
-
# POST /api/v4/[short site name]/subscribers.xml
|
88
|
+
# POST /api/v4/[short site name]/subscribers.xml
|
78
89
|
def create!
|
79
90
|
result = api_request(:post, "/subscribers.xml", :body => self.to_xml)
|
80
91
|
self.attributes = result["subscriber"]
|
@@ -92,7 +103,7 @@ module RSpreedly
|
|
92
103
|
end
|
93
104
|
|
94
105
|
# Update a Subscriber (more)
|
95
|
-
# PUT /api/v4/[short site name]/subscribers/[subscriber id].xml
|
106
|
+
# PUT /api/v4/[short site name]/subscribers/[subscriber id].xml
|
96
107
|
def update!
|
97
108
|
!! api_request(:put, "/subscribers/#{self.customer_id}.xml", :body => self.to_xml(:exclude => [:customer_id]))
|
98
109
|
end
|
@@ -104,22 +115,22 @@ module RSpreedly
|
|
104
115
|
# gulp those errors down
|
105
116
|
# TODO - set self.errors or something?
|
106
117
|
nil
|
107
|
-
end
|
118
|
+
end
|
108
119
|
end
|
109
120
|
|
110
121
|
# Delete one subscriber from a *test* site (more)
|
111
|
-
# DELETE /api/v4/[short site name]/subscribers/[subscriber id].xml
|
122
|
+
# DELETE /api/v4/[short site name]/subscribers/[subscriber id].xml
|
112
123
|
def destroy
|
113
124
|
begin
|
114
125
|
!! api_request(:delete, "/subscribers/#{self.customer_id}.xml")
|
115
126
|
rescue RSpreedly::Error::NotFound
|
116
127
|
nil
|
117
|
-
end
|
128
|
+
end
|
118
129
|
end
|
119
130
|
alias_method :delete, :destroy
|
120
131
|
|
121
132
|
# Give a subscriber a complimentary subscription (more)
|
122
|
-
# POST /api/v4/[short site name]/subscribers/[subscriber id]/complimentary_subscriptions.xml
|
133
|
+
# POST /api/v4/[short site name]/subscribers/[subscriber id]/complimentary_subscriptions.xml
|
123
134
|
def comp_subscription(subscription)
|
124
135
|
result = api_request(:post, "/subscribers/#{self.customer_id}/complimentary_subscriptions.xml", :body => subscription.to_xml)
|
125
136
|
self.attributes = result["subscriber"]
|
@@ -154,7 +165,7 @@ module RSpreedly
|
|
154
165
|
def subscribe_to_free_trial(plan)
|
155
166
|
result = api_request(:post, "/subscribers/#{self.customer_id}/subscribe_to_free_trial.xml", :body => plan.to_xml)
|
156
167
|
self.attributes = result["subscriber"]
|
157
|
-
true
|
168
|
+
true
|
158
169
|
end
|
159
170
|
|
160
171
|
# Programatically Allow Another Free Trial (more)
|
@@ -162,33 +173,33 @@ module RSpreedly
|
|
162
173
|
def allow_free_trial
|
163
174
|
result = api_request(:post, "/subscribers/#{self.customer_id}/allow_free_trial.xml")
|
164
175
|
self.attributes = result["subscriber"]
|
165
|
-
true
|
176
|
+
true
|
166
177
|
end
|
167
|
-
|
178
|
+
|
168
179
|
def grant_lifetime_subscription(feature_level)
|
169
180
|
subscription = LifetimeComplimentarySubscription.new(:feature_level => feature_level)
|
170
181
|
result = api_request(:post, "/subscribers/#{self.customer_id}/lifetime_complimentary_subscriptions.xml", :body => subscription.to_xml)
|
171
182
|
self.attributes = result["subscriber"]
|
172
183
|
true
|
173
184
|
end
|
174
|
-
|
185
|
+
|
175
186
|
def to_xml(opts={})
|
176
|
-
|
187
|
+
|
177
188
|
# the api doesn't let us send these things
|
178
189
|
# so let's strip them out of the XML
|
179
190
|
exclude = [
|
180
|
-
:active, :active_until, :card_expires_before_next_auto_renew,
|
181
|
-
:created_at, :eligible_for_free_trial, :feature_level,
|
182
|
-
:grace_until, :in_grace_period, :lifetime_subscription,
|
183
|
-
:on_trial, :ready_to_renew, :recurring,
|
184
|
-
:store_credit, :store_credit_currency_code, :subscription_plan_name,
|
191
|
+
:active, :active_until, :card_expires_before_next_auto_renew,
|
192
|
+
:created_at, :eligible_for_free_trial, :feature_level,
|
193
|
+
:grace_until, :in_grace_period, :lifetime_subscription,
|
194
|
+
:on_trial, :ready_to_renew, :recurring,
|
195
|
+
:store_credit, :store_credit_currency_code, :subscription_plan_name,
|
185
196
|
:token, :updated_at, :ready_to_renew_since
|
186
197
|
]
|
187
|
-
|
198
|
+
|
188
199
|
opts[:exclude] ||= []
|
189
200
|
opts[:exclude] |= exclude
|
190
|
-
|
191
|
-
super(opts)
|
201
|
+
|
202
|
+
super(opts)
|
192
203
|
end
|
193
204
|
end
|
194
205
|
end
|
data/rspreedly.gemspec
CHANGED
@@ -22,4 +22,139 @@
|
|
22
22
|
<in_grace_period type="boolean"></in_grace_period>
|
23
23
|
<on-trial type="boolean">false</on-trial>
|
24
24
|
<feature-level type="string"></feature-level>
|
25
|
+
<invoices type="array">
|
26
|
+
<invoice>
|
27
|
+
<closed type="boolean">true</closed>
|
28
|
+
<created-at type="datetime">2011-07-21T19:04:45Z</created-at>
|
29
|
+
<response-client-message nil="true"></response-client-message>
|
30
|
+
<response-customer-message nil="true"></response-customer-message>
|
31
|
+
<response-message nil="true"></response-message>
|
32
|
+
<token>46089ee32310b4983c6acb0bc02dec955886d411</token>
|
33
|
+
<updated-at type="datetime">2011-07-21T19:05:07Z</updated-at>
|
34
|
+
<price>$0.05</price>
|
35
|
+
<amount type="decimal">0.05</amount>
|
36
|
+
<currency-code>USD</currency-code>
|
37
|
+
<line-items type="array">
|
38
|
+
<line-item>
|
39
|
+
<amount type="decimal">99.0</amount>
|
40
|
+
<currency-code>USD</currency-code>
|
41
|
+
<description>Every 1 month</description>
|
42
|
+
<notes nil="true"></notes>
|
43
|
+
<price>$99.00</price>
|
44
|
+
</line-item>
|
45
|
+
<line-item>
|
46
|
+
<amount type="decimal">-48.99</amount>
|
47
|
+
<currency-code>USD</currency-code>
|
48
|
+
<description>Credit from current subscription</description>
|
49
|
+
<notes nil="true"></notes>
|
50
|
+
<price>$-48.99</price>
|
51
|
+
</line-item>
|
52
|
+
<line-item>
|
53
|
+
<amount type="decimal">-49.96</amount>
|
54
|
+
<currency-code>USD</currency-code>
|
55
|
+
<description>Your store credit</description>
|
56
|
+
<notes nil="true"></notes>
|
57
|
+
<price>$-49.96</price>
|
58
|
+
</line-item>
|
59
|
+
</line-items>
|
60
|
+
</invoice>
|
61
|
+
<invoice>
|
62
|
+
<closed type="boolean">true</closed>
|
63
|
+
<created-at type="datetime">2011-07-21T18:56:52Z</created-at>
|
64
|
+
<response-client-message nil="true"></response-client-message>
|
65
|
+
<response-customer-message nil="true"></response-customer-message>
|
66
|
+
<response-message nil="true"></response-message>
|
67
|
+
<token>4730937c43a57b333b78ba474e6384bfb434bee3</token>
|
68
|
+
<updated-at type="datetime">2011-07-21T18:57:12Z</updated-at>
|
69
|
+
<price>$-49.96</price>
|
70
|
+
<amount type="decimal">-49.96</amount>
|
71
|
+
<currency-code>USD</currency-code>
|
72
|
+
<line-items type="array">
|
73
|
+
<line-item>
|
74
|
+
<amount type="decimal">49.0</amount>
|
75
|
+
<currency-code>USD</currency-code>
|
76
|
+
<description>Every 1 month</description>
|
77
|
+
<notes nil="true"></notes>
|
78
|
+
<price>$49.00</price>
|
79
|
+
</line-item>
|
80
|
+
<line-item>
|
81
|
+
<amount type="decimal">-98.96</amount>
|
82
|
+
<currency-code>USD</currency-code>
|
83
|
+
<description>Credit from current subscription</description>
|
84
|
+
<notes nil="true"></notes>
|
85
|
+
<price>$-98.96</price>
|
86
|
+
</line-item>
|
87
|
+
</line-items>
|
88
|
+
</invoice>
|
89
|
+
<invoice>
|
90
|
+
<closed type="boolean">true</closed>
|
91
|
+
<created-at type="datetime">2011-07-21T18:39:17Z</created-at>
|
92
|
+
<response-client-message nil="true"></response-client-message>
|
93
|
+
<response-customer-message nil="true"></response-customer-message>
|
94
|
+
<response-message nil="true"></response-message>
|
95
|
+
<token>4bf20627d684dbaab231b349b1ed1ae6388f4ffc</token>
|
96
|
+
<updated-at type="datetime">2011-07-21T18:39:32Z</updated-at>
|
97
|
+
<price>$50.00</price>
|
98
|
+
<amount type="decimal">50.0</amount>
|
99
|
+
<currency-code>USD</currency-code>
|
100
|
+
<line-items type="array">
|
101
|
+
<line-item>
|
102
|
+
<amount type="decimal">99.0</amount>
|
103
|
+
<currency-code>USD</currency-code>
|
104
|
+
<description>Every 1 month</description>
|
105
|
+
<notes nil="true"></notes>
|
106
|
+
<price>$99.00</price>
|
107
|
+
</line-item>
|
108
|
+
<line-item>
|
109
|
+
<amount type="decimal">-49.0</amount>
|
110
|
+
<currency-code>USD</currency-code>
|
111
|
+
<description>Credit from current subscription</description>
|
112
|
+
<notes nil="true"></notes>
|
113
|
+
<price>$-49.00</price>
|
114
|
+
</line-item>
|
115
|
+
</line-items>
|
116
|
+
</invoice>
|
117
|
+
<invoice>
|
118
|
+
<closed type="boolean">true</closed>
|
119
|
+
<created-at type="datetime">2011-07-21T18:15:11Z</created-at>
|
120
|
+
<response-client-message nil="true"></response-client-message>
|
121
|
+
<response-customer-message nil="true"></response-customer-message>
|
122
|
+
<response-message nil="true"></response-message>
|
123
|
+
<token>a5190437c9651aa77ac6e39e9833b579bff4658e</token>
|
124
|
+
<updated-at type="datetime">2011-07-21T18:15:36Z</updated-at>
|
125
|
+
<price>$49.00</price>
|
126
|
+
<amount type="decimal">49.0</amount>
|
127
|
+
<currency-code>USD</currency-code>
|
128
|
+
<line-items type="array">
|
129
|
+
<line-item>
|
130
|
+
<amount type="decimal">49.0</amount>
|
131
|
+
<currency-code>USD</currency-code>
|
132
|
+
<description>Every 1 month</description>
|
133
|
+
<notes nil="true"></notes>
|
134
|
+
<price>$49.00</price>
|
135
|
+
</line-item>
|
136
|
+
</line-items>
|
137
|
+
</invoice>
|
138
|
+
<invoice>
|
139
|
+
<closed type="boolean">true</closed>
|
140
|
+
<created-at type="datetime">2011-07-21T18:14:07Z</created-at>
|
141
|
+
<response-client-message nil="true"></response-client-message>
|
142
|
+
<response-customer-message nil="true"></response-customer-message>
|
143
|
+
<response-message nil="true"></response-message>
|
144
|
+
<token>ea7a657f68908279fdc33c8cf1c7037c4a2eec2d</token>
|
145
|
+
<updated-at type="datetime">2011-07-21T18:14:32Z</updated-at>
|
146
|
+
<price>$0.00</price>
|
147
|
+
<amount type="decimal">0.0</amount>
|
148
|
+
<currency-code>USD</currency-code>
|
149
|
+
<line-items type="array">
|
150
|
+
<line-item>
|
151
|
+
<amount type="decimal">0.0</amount>
|
152
|
+
<currency-code>USD</currency-code>
|
153
|
+
<description>Initial 1 month</description>
|
154
|
+
<notes>Subsequent Time Periods are $49.00 every 1 month</notes>
|
155
|
+
<price>$0.00</price>
|
156
|
+
</line-item>
|
157
|
+
</line-items>
|
158
|
+
</invoice>
|
159
|
+
</invoices>
|
25
160
|
</subscriber>
|
data/spec/subscriber_spec.rb
CHANGED
@@ -22,6 +22,15 @@ describe RSpreedly::Subscriber do
|
|
22
22
|
|
23
23
|
RSpreedly::Subscriber.find(42).should be_a(RSpreedly::Subscriber)
|
24
24
|
end
|
25
|
+
|
26
|
+
it "should include invoices on the Subscriber" do
|
27
|
+
stub_request(:get, spreedly_url("/subscribers/42.xml")).
|
28
|
+
to_return(:body => fixture("subscriber.xml"), :status => 200)
|
29
|
+
|
30
|
+
subscriber = RSpreedly::Subscriber.find(42)
|
31
|
+
subscriber.invoices.size.should == 5
|
32
|
+
subscriber.invoices.select{|x| x.is_a?(RSpreedly::Invoice )}.size.should == 5
|
33
|
+
end
|
25
34
|
end
|
26
35
|
|
27
36
|
describe ".all" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspreedly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.15
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ default_executable:
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
17
|
-
requirement: &
|
17
|
+
requirement: &2164641520 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 0.5.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2164641520
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rspec
|
28
|
-
requirement: &
|
28
|
+
requirement: &2164640940 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2164640940
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: webmock
|
39
|
-
requirement: &
|
39
|
+
requirement: &2164640420 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,7 +44,7 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2164640420
|
48
48
|
description:
|
49
49
|
email: richard@livsey.org
|
50
50
|
executables: []
|