addons-client 0.0.4 → 0.0.5

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.
@@ -1,3 +1,4 @@
1
+ require 'bigdecimal'
1
2
  module Addons::CLI
2
3
  extend self
3
4
 
@@ -9,6 +10,11 @@ module Addons::CLI
9
10
  def run_command!
10
11
  command = Settings.rest.first
11
12
  case command
13
+ when /list/i
14
+ response = client.list(Settings.rest[1..-1].join(" "))
15
+ response.data.each do |addon_plan|
16
+ puts "#{addon_plan["name"]} $%0.2f/#{addon_plan["price_unit"]}" % (BigDecimal.new(addon_plan["price_cents"].to_s) / 100)
17
+ end
12
18
  when /deprovision/i
13
19
  resource_id = Settings.rest[1]
14
20
  raise Addons::UserError, "Must supply resource id" unless resource_id
@@ -8,7 +8,20 @@ module Addons
8
8
  @api_url = validate_api_url!
9
9
  end
10
10
 
11
+ def self.list(search = nil)
12
+ wrap_request do
13
+ if mocked?
14
+ mocked_list(params)
15
+ else
16
+ payload = { :accept => :json }
17
+ payload[:params] = { :search => search } unless search.nil? || search == ""
18
+ resource["/addons"].get payload
19
+ end
20
+ end
21
+ end
22
+
11
23
  def self.provision!(slug, opts = {})
24
+ validate_authenticated_api_url!
12
25
  wrap_request do
13
26
  addon_name, plan = slug.split(':')
14
27
  raise UserError, "No add-on name given" unless addon_name
@@ -36,22 +49,24 @@ module Addons
36
49
  config = config.to_json unless config.is_a? String
37
50
  payload.merge! :config => config
38
51
  end
39
- resource.post payload, :accept => :json
52
+ resource["/resources"].post payload, :accept => :json
40
53
  end
41
54
  end
42
55
  end
43
56
 
44
57
  def self.deprovision!(resource_id)
58
+ validate_authenticated_api_url!
45
59
  wrap_request do
46
60
  if mocked?
47
61
  mocked_deprovision(resource_id)
48
62
  else
49
- resource["/#{resource_id}"].delete :accept => :json
63
+ resource["/resources/#{resource_id}"].delete :accept => :json
50
64
  end
51
65
  end
52
66
  end
53
67
 
54
68
  def self.plan_change!(resource_id, plan)
69
+ validate_authenticated_api_url!
55
70
  wrap_request do
56
71
  if mocked?
57
72
  mocked_plan_change(resource_id, plan)
@@ -59,7 +74,7 @@ module Addons
59
74
  payload = {
60
75
  :plan => plan,
61
76
  }
62
- resource["/#{resource_id}"].put payload, :accept => :json
77
+ resource["/resources/#{resource_id}"].put payload, :accept => :json
63
78
  end
64
79
  end
65
80
  end
@@ -76,16 +91,19 @@ module Addons
76
91
  raise UserError, "Add-on not found: check addon spelling and plan name"
77
92
  end
78
93
 
94
+ def self.validate_authenticated_api_url!
95
+ raise UserError, "No username given" unless api_url.user
96
+ raise UserError, "No password given" unless api_url.password
97
+ end
98
+
79
99
  def self.validate_api_url!
80
100
  api_url = nil
81
101
  raise UserError, "ADDONS_API_URL must be set" unless ENV['ADDONS_API_URL']
82
102
  begin
83
- api_url = URI.join(ENV['ADDONS_API_URL'], '/api/1/resources')
103
+ api_url = URI.join(ENV['ADDONS_API_URL'], '/api/1')
84
104
  rescue URI::InvalidURIError
85
105
  raise UserError, "ADDONS_API_URL is an invalid url"
86
106
  end
87
- raise UserError, "No username given" unless api_url.user
88
- raise UserError, "No password given" unless api_url.password
89
107
  api_url
90
108
  end
91
109
  end
@@ -15,6 +15,10 @@ module Addons
15
15
  @data.to_s
16
16
  end
17
17
 
18
+ def data
19
+ @data
20
+ end
21
+
18
22
  def method_missing(name, *args, &blk)
19
23
  if @data.keys.include? name
20
24
  @data[name]
@@ -22,7 +26,7 @@ module Addons
22
26
  @data[name.to_s]
23
27
  else
24
28
  super
25
- end
29
+ end
26
30
  end
27
31
  end
28
32
  end
@@ -1,5 +1,5 @@
1
1
  module Addons
2
2
  class Client
3
- VERSION = "0.0.4"
3
+ VERSION = "0.0.5"
4
4
  end
5
5
  end
data/test/list_test.rb ADDED
@@ -0,0 +1,42 @@
1
+ require "#{File.dirname(__FILE__)}/test_helper"
2
+
3
+ class ListTest < Addons::Client::TestCase
4
+ def setup
5
+ ENV["ADDONS_API_URL"] = 'https://addons.heroku.com'
6
+ stub_request(:get, %r{#{target_url}}).to_return(:body => [
7
+ {"id" => "https://addons.heroku.com/addons/cloudcounter:basic","url" => "https://addons.heroku.com/addons/cloudcounter:basic","name" => "cloudcounter:basic","description" => "The basic counter of clouds","beta" => false,"state" => "public","price_cents" => 0,"price_unit" => "month"},
8
+ {"id" => "https://addons.heroku.com/addons/cloudcounter:pro","url" => "https://addons.heroku.com/addons/cloudcounter:pro","name" => "cloudcounter:pro","description" => "The counter of clouds for professionals","beta" => false,"state" => "public","price_cents" => 1500,"price_unit" => "month"}].
9
+ to_json)
10
+ stub(Addons::CLI).puts
11
+ end
12
+
13
+ def target_url
14
+ URI.join(ENV["ADDONS_API_URL"], '/api/1/addons').to_s
15
+ end
16
+
17
+ def test_cmd_line_lists_addons
18
+ addons_client! "list"
19
+ assert_requested(:get, target_url)
20
+ assert_received(Addons::CLI) do |cli|
21
+ cli.puts "cloudcounter:basic $0.00/month"
22
+ #cli.puts "cloudcounter:pro $15.00/month"
23
+ end
24
+ end
25
+
26
+ def test_cmd_line_passes_arguments
27
+ addons_client! "list cloud thing"
28
+ assert_requested(:get, target_url + "?search=cloud+thing")
29
+ end
30
+
31
+ def test_lists_from_ruby
32
+ Addons::Client.list
33
+ assert_requested(:get, target_url)
34
+ end
35
+
36
+ def test_passes_args_from_ruby
37
+ Addons::Client.list "cloud thing"
38
+ assert_requested(:get, target_url + "?search=cloud+thing")
39
+ end
40
+
41
+ end
42
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: addons-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-06-16 00:00:00.000000000 Z
13
+ date: 2012-08-03 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client
17
- requirement: &70319713811360 !ruby/object:Gem::Requirement
17
+ requirement: &70213275701300 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70319713811360
25
+ version_requirements: *70213275701300
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: configliere
28
- requirement: &70319713810520 !ruby/object:Gem::Requirement
28
+ requirement: &70213275696460 !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: :runtime
35
35
  prerelease: false
36
- version_requirements: *70319713810520
36
+ version_requirements: *70213275696460
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: json
39
- requirement: &70319713809040 !ruby/object:Gem::Requirement
39
+ requirement: &70213275695480 !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: :runtime
46
46
  prerelease: false
47
- version_requirements: *70319713809040
47
+ version_requirements: *70213275695480
48
48
  description: Addons Platform API client
49
49
  email:
50
50
  - csquared@gmail.com
@@ -71,6 +71,7 @@ files:
71
71
  - lib/addons-client/version.rb
72
72
  - test/client_test.rb
73
73
  - test/deprovision_test.rb
74
+ - test/list_test.rb
74
75
  - test/plan_change_test.rb
75
76
  - test/provision_test.rb
76
77
  - test/response_test.rb
@@ -89,7 +90,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
90
  version: '0'
90
91
  segments:
91
92
  - 0
92
- hash: -920029003357087713
93
+ hash: -1801222150168737241
93
94
  required_rubygems_version: !ruby/object:Gem::Requirement
94
95
  none: false
95
96
  requirements:
@@ -98,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
99
  version: '0'
99
100
  segments:
100
101
  - 0
101
- hash: -920029003357087713
102
+ hash: -1801222150168737241
102
103
  requirements: []
103
104
  rubyforge_project:
104
105
  rubygems_version: 1.8.15
@@ -108,6 +109,7 @@ summary: Allows platfomrs to provision, deprovision, and change plans for add-on
108
109
  test_files:
109
110
  - test/client_test.rb
110
111
  - test/deprovision_test.rb
112
+ - test/list_test.rb
111
113
  - test/plan_change_test.rb
112
114
  - test/provision_test.rb
113
115
  - test/response_test.rb