nurego 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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