nurego 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.
Files changed (46) hide show
  1. data/Gemfile +3 -0
  2. data/Gemfile.lock +59 -0
  3. data/LICENSE +32 -0
  4. data/README.md +25 -0
  5. data/Rakefile +41 -0
  6. data/VERSION +1 -0
  7. data/examples/enumerate_plans.rb +17 -0
  8. data/lib/data/ca-certificates.crt +53 -0
  9. data/lib/nurego.rb +287 -0
  10. data/lib/nurego/api_operations/create.rb +16 -0
  11. data/lib/nurego/api_operations/delete.rb +11 -0
  12. data/lib/nurego/api_operations/list.rb +16 -0
  13. data/lib/nurego/api_operations/update.rb +37 -0
  14. data/lib/nurego/api_resource.rb +33 -0
  15. data/lib/nurego/auth.rb +112 -0
  16. data/lib/nurego/bill.rb +6 -0
  17. data/lib/nurego/connector.rb +7 -0
  18. data/lib/nurego/customer.rb +29 -0
  19. data/lib/nurego/entitlement.rb +27 -0
  20. data/lib/nurego/errors/api_connection_error.rb +4 -0
  21. data/lib/nurego/errors/api_error.rb +4 -0
  22. data/lib/nurego/errors/authentication_error.rb +4 -0
  23. data/lib/nurego/errors/card_error.rb +10 -0
  24. data/lib/nurego/errors/invalid_request_error.rb +10 -0
  25. data/lib/nurego/errors/nurego_error.rb +24 -0
  26. data/lib/nurego/errors/user_not_found_error.rb +4 -0
  27. data/lib/nurego/feature.rb +5 -0
  28. data/lib/nurego/instance.rb +9 -0
  29. data/lib/nurego/json.rb +21 -0
  30. data/lib/nurego/list_object.rb +35 -0
  31. data/lib/nurego/nurego_object.rb +167 -0
  32. data/lib/nurego/offering.rb +17 -0
  33. data/lib/nurego/organization.rb +23 -0
  34. data/lib/nurego/password_reset.rb +14 -0
  35. data/lib/nurego/payment_method.rb +16 -0
  36. data/lib/nurego/plan.rb +9 -0
  37. data/lib/nurego/registration.rb +18 -0
  38. data/lib/nurego/util.rb +109 -0
  39. data/lib/nurego/version.rb +3 -0
  40. data/nurego.gemspec +31 -0
  41. data/spec/unit/nurego/api_resource_spec.rb +326 -0
  42. data/spec/unit/nurego/customer_spec.rb +75 -0
  43. data/spec/unit/nurego/list_object_spec.rb +14 -0
  44. data/spec/unit/nurego/util_spec.rb +27 -0
  45. data/spec/unit/test_helper.rb +94 -0
  46. metadata +279 -0
@@ -0,0 +1,75 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ describe "Nurego::Customer" do
4
+ before(:each) do
5
+ @mock = double
6
+ Nurego.mock_rest_client = @mock
7
+ Nurego.api_key="foo"
8
+ end
9
+
10
+ it "customers should be listable" do
11
+ @mock.should_receive(:get).and_return(test_response(test_customer_array))
12
+ c = Nurego::Customer.all
13
+ c.kind_of?(Array).should be_true
14
+ c[0].kind_of?(Nurego::Customer).should be_true
15
+ end
16
+
17
+ xit "customers should be deletable" do
18
+ @mock.should_receive(:delete).once.and_return(test_response(test_customer({:deleted => true})))
19
+ c = Nurego::Customer.new("test_customer")
20
+ c.delete
21
+ c.deleted.should be_true
22
+ end
23
+
24
+ xit "customers should be updateable" do
25
+ @mock.should_receive(:get).once.and_return(test_response(test_customer({:mnemonic => "foo"})))
26
+ @mock.should_receive(:post).once.and_return(test_response(test_customer({:mnemonic => "bar"})))
27
+ c = Nurego::Customer.new("test_customer").refresh
28
+ assert_equal c.mnemonic, "foo"
29
+ c.mnemonic = "bar"
30
+ c.save
31
+ assert_equal c.mnemonic, "bar"
32
+ end
33
+
34
+ xit "create should return a new customer" do
35
+ @mock.should_receive(:post).once.and_return(test_response(test_customer))
36
+ c = Nurego::Customer.create
37
+ assert_equal "c_test_customer", c.id
38
+ end
39
+
40
+ xit "be able to update a customer's subscription" do
41
+ @mock.should_receive(:get).once.and_return(test_response(test_customer))
42
+ c = Nurego::Customer.retrieve("test_customer")
43
+
44
+ @mock.should_receive(:post).once.with do |url, api_key, params|
45
+ url == "#{Nurego.api_base}/v1/customers/c_test_customer/subscription" && api_key.nil? && CGI.parse(params) == {'plan' => ['silver']}
46
+ end.and_return(test_response(test_subscription('silver')))
47
+ s = c.update_subscription({:plan => 'silver'})
48
+
49
+ assert_equal 'subscription', s.object
50
+ assert_equal 'silver', s.plan.identifier
51
+ end
52
+
53
+ xit "be able to cancel a customer's subscription" do
54
+ @mock.should_receive(:get).once.and_return(test_response(test_customer))
55
+ c = Nurego::Customer.retrieve("test_customer")
56
+
57
+ # Not an accurate response, but whatever
58
+
59
+ @mock.should_receive(:delete).once.with("#{Nurego.api_base}/v1/customers/c_test_customer/subscription?at_period_end=true", nil, nil).and_return(test_response(test_subscription('silver')))
60
+ c.cancel_subscription({:at_period_end => 'true'})
61
+
62
+ @mock.should_receive(:delete).once.with("#{Nurego.api_base}/v1/customers/c_test_customer/subscription", nil, nil).and_return(test_response(test_subscription('silver')))
63
+ c.cancel_subscription
64
+ end
65
+
66
+ xit "be able to delete a customer's discount" do
67
+ @mock.should_receive(:get).once.and_return(test_response(test_customer))
68
+ c = Nurego::Customer.retrieve("test_customer")
69
+
70
+ @mock.should_receive(:delete).once.with("#{Nurego.api_base}/v1/customers/c_test_customer/discount", nil, nil)
71
+ .and_return(test_response(test_delete_discount_response))
72
+ c.delete_discount
73
+ assert_equal nil, c.discount
74
+ end
75
+ end
@@ -0,0 +1,14 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ describe "Nurego::ListObject" do
4
+ xit "be able to retrieve full lists given a listobject" do
5
+ @mock.should_receive(:get).twice.and_return(test_response(test_charge_array))
6
+ c = Nurego::Charge.all
7
+ c.kind_of?(Nurego::ListObject).should be_true
8
+ c.url.should eq('/v1/charges')
9
+ all = c.all
10
+ all.kind_of?(Nurego::ListObject).should be_true
11
+ all.url.should eq('/v1/charges')
12
+ all.data.kind_of?(Array).should be_true
13
+ end
14
+ end
@@ -0,0 +1,27 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ describe "Nurego::Util" do
4
+ it "symbolize_names should convert names to symbols" do
5
+ start = {
6
+ 'foo' => 'bar',
7
+ 'array' => [{ 'foo' => 'bar' }],
8
+ 'nested' => {
9
+ 1 => 2,
10
+ :symbol => 9,
11
+ 'string' => nil
12
+ }
13
+ }
14
+ finish = {
15
+ :foo => 'bar',
16
+ :array => [{ :foo => 'bar' }],
17
+ :nested => {
18
+ 1 => 2,
19
+ :symbol => 9,
20
+ :string => nil
21
+ }
22
+ }
23
+
24
+ symbolized = Nurego::Util.symbolize_names(start)
25
+ symbolized.should eq(finish)
26
+ end
27
+ end
@@ -0,0 +1,94 @@
1
+ require 'nurego'
2
+ require 'minitest/unit'
3
+ require 'stringio'
4
+
5
+ #monkeypatch request methods
6
+ module Nurego
7
+ @mock_rest_client = nil
8
+
9
+ def self.mock_rest_client=(mock_client)
10
+ @mock_rest_client = mock_client
11
+ end
12
+
13
+ def self.execute_request(opts)
14
+ get_params = (opts[:headers] || {})[:params]
15
+ post_params = opts[:payload]
16
+ case opts[:method]
17
+ when :get then @mock_rest_client.get opts[:url], get_params, post_params
18
+ when :post then @mock_rest_client.post opts[:url], get_params, post_params
19
+ when :delete then @mock_rest_client.delete opts[:url], get_params, post_params
20
+ end
21
+ end
22
+ end
23
+
24
+ def test_response(body, code=200)
25
+ # When an exception is raised, restclient clobbers method_missing. Hence we
26
+ # can't just use the stubs interface.
27
+ body = MultiJson.dump(body) if !(body.kind_of? String)
28
+ m = double
29
+ m.instance_variable_set('@nurego_values', { :body => body, :code => code })
30
+ def m.body; @nurego_values[:body]; end
31
+ def m.code; @nurego_values[:code]; end
32
+ m
33
+ end
34
+
35
+ def test_customer(params={})
36
+ {
37
+ :object => "customer",
38
+ :id => "c_test_customer",
39
+ :email => 'test@email.com'
40
+ }.merge(params)
41
+ end
42
+
43
+ def test_customer_array
44
+ (0..5).collect { test_customer }
45
+ end
46
+
47
+ #FIXME nested overrides would be better than hardcoding plan_id
48
+ def test_subscription(plan_id="gold")
49
+ {
50
+ :current_period_end => 1308681468,
51
+ :status => "trialing",
52
+ :plan => {
53
+ :interval => "month",
54
+ :amount => 7500,
55
+ :trial_period_days => 30,
56
+ :object => "plan",
57
+ :identifier => plan_id
58
+ },
59
+ :current_period_start => 1308595038,
60
+ :start => 1308595038,
61
+ :object => "subscription",
62
+ :trial_start => 1308595038,
63
+ :trial_end => 1308681468,
64
+ :customer => "c_test_customer"
65
+ }
66
+ end
67
+
68
+ def test_invalid_api_key_error
69
+ {
70
+ "error" => {
71
+ "type" => "invalid_request_error",
72
+ "message" => "Invalid API Key provided: invalid"
73
+ }
74
+ }
75
+ end
76
+
77
+ def test_missing_id_error
78
+ {
79
+ :error => {
80
+ :param => "id",
81
+ :type => "invalid_request_error",
82
+ :message => "Missing id"
83
+ }
84
+ }
85
+ end
86
+
87
+ def test_api_error
88
+ {
89
+ :error => {
90
+ :type => "api_error"
91
+ }
92
+ }
93
+ end
94
+
metadata ADDED
@@ -0,0 +1,279 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nurego
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ilia Gilderman
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-05-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rest-client
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.4'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.4'
30
+ - !ruby/object:Gem::Dependency
31
+ name: mime-types
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '1.25'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '1.25'
46
+ - !ruby/object:Gem::Dependency
47
+ name: multi_json
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 1.0.4
54
+ - - <
55
+ - !ruby/object:Gem::Version
56
+ version: '2'
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: 1.0.4
65
+ - - <
66
+ - !ruby/object:Gem::Version
67
+ version: '2'
68
+ - !ruby/object:Gem::Dependency
69
+ name: cf-uaa-lib
70
+ requirement: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.3.10
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - '='
82
+ - !ruby/object:Gem::Version
83
+ version: 1.3.10
84
+ - !ruby/object:Gem::Dependency
85
+ name: rake
86
+ requirement: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ - !ruby/object:Gem::Dependency
101
+ name: uuidtools
102
+ requirement: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ - !ruby/object:Gem::Dependency
117
+ name: rspec
118
+ requirement: !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ - !ruby/object:Gem::Dependency
133
+ name: simplecov
134
+ requirement: !ruby/object:Gem::Requirement
135
+ none: false
136
+ requirements:
137
+ - - ! '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ type: :development
141
+ prerelease: false
142
+ version_requirements: !ruby/object:Gem::Requirement
143
+ none: false
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ - !ruby/object:Gem::Dependency
149
+ name: simplecov-rcov
150
+ requirement: !ruby/object:Gem::Requirement
151
+ none: false
152
+ requirements:
153
+ - - ! '>='
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ type: :development
157
+ prerelease: false
158
+ version_requirements: !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ! '>='
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ - !ruby/object:Gem::Dependency
165
+ name: rack-test
166
+ requirement: !ruby/object:Gem::Requirement
167
+ none: false
168
+ requirements:
169
+ - - ! '>='
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ type: :development
173
+ prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ none: false
176
+ requirements:
177
+ - - ! '>='
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ - !ruby/object:Gem::Dependency
181
+ name: ci_reporter
182
+ requirement: !ruby/object:Gem::Requirement
183
+ none: false
184
+ requirements:
185
+ - - ! '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ none: false
192
+ requirements:
193
+ - - ! '>='
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ description: Business Operations for Subscription Services. See http://www.nurego.com
197
+ for details.
198
+ email:
199
+ - ilia@nurego.com
200
+ executables: []
201
+ extensions: []
202
+ extra_rdoc_files: []
203
+ files:
204
+ - lib/data/ca-certificates.crt
205
+ - lib/nurego/registration.rb
206
+ - lib/nurego/plan.rb
207
+ - lib/nurego/nurego_object.rb
208
+ - lib/nurego/connector.rb
209
+ - lib/nurego/feature.rb
210
+ - lib/nurego/payment_method.rb
211
+ - lib/nurego/api_operations/list.rb
212
+ - lib/nurego/api_operations/update.rb
213
+ - lib/nurego/api_operations/create.rb
214
+ - lib/nurego/api_operations/delete.rb
215
+ - lib/nurego/customer.rb
216
+ - lib/nurego/errors/user_not_found_error.rb
217
+ - lib/nurego/errors/card_error.rb
218
+ - lib/nurego/errors/api_error.rb
219
+ - lib/nurego/errors/invalid_request_error.rb
220
+ - lib/nurego/errors/nurego_error.rb
221
+ - lib/nurego/errors/authentication_error.rb
222
+ - lib/nurego/errors/api_connection_error.rb
223
+ - lib/nurego/organization.rb
224
+ - lib/nurego/auth.rb
225
+ - lib/nurego/entitlement.rb
226
+ - lib/nurego/instance.rb
227
+ - lib/nurego/offering.rb
228
+ - lib/nurego/version.rb
229
+ - lib/nurego/password_reset.rb
230
+ - lib/nurego/list_object.rb
231
+ - lib/nurego/api_resource.rb
232
+ - lib/nurego/json.rb
233
+ - lib/nurego/bill.rb
234
+ - lib/nurego/util.rb
235
+ - lib/nurego.rb
236
+ - examples/enumerate_plans.rb
237
+ - Gemfile
238
+ - Gemfile.lock
239
+ - nurego.gemspec
240
+ - Rakefile
241
+ - VERSION
242
+ - LICENSE
243
+ - README.md
244
+ - spec/unit/nurego/api_resource_spec.rb
245
+ - spec/unit/nurego/customer_spec.rb
246
+ - spec/unit/nurego/list_object_spec.rb
247
+ - spec/unit/nurego/util_spec.rb
248
+ - spec/unit/test_helper.rb
249
+ homepage: http://www.nurego.com/api
250
+ licenses:
251
+ - MIT
252
+ post_install_message:
253
+ rdoc_options: []
254
+ require_paths:
255
+ - lib
256
+ required_ruby_version: !ruby/object:Gem::Requirement
257
+ none: false
258
+ requirements:
259
+ - - ! '>='
260
+ - !ruby/object:Gem::Version
261
+ version: '0'
262
+ required_rubygems_version: !ruby/object:Gem::Requirement
263
+ none: false
264
+ requirements:
265
+ - - ! '>='
266
+ - !ruby/object:Gem::Version
267
+ version: '0'
268
+ requirements: []
269
+ rubyforge_project:
270
+ rubygems_version: 1.8.25
271
+ signing_key:
272
+ specification_version: 3
273
+ summary: Ruby bindings for the Nurego API
274
+ test_files:
275
+ - spec/unit/nurego/api_resource_spec.rb
276
+ - spec/unit/nurego/customer_spec.rb
277
+ - spec/unit/nurego/list_object_spec.rb
278
+ - spec/unit/nurego/util_spec.rb
279
+ - spec/unit/test_helper.rb