stacker_bee 2.1.0.pre201 → 2.1.0.pre227

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZTJkYjIzNTA5OTYxODRkMDZkMjVhZGRiODNlNTVmMjcxNjVmNGJkOQ==
4
+ ZmIxNjBiNGExMjdmODM0MGRjMmE5MWE2YWQ1ZjNhYzVhYzAwNDM3NQ==
5
5
  data.tar.gz: !binary |-
6
- ZDIzMDZmNDM2YjM2ZmE5NDc3NjdlNDk1YTFlYTczZjVmMTIzNmY5ZQ==
6
+ NWQwY2I1MmZlZjBmMGQwMGQ4OTVlNGNhMWMxY2YzMWY5MzA3YTlhOA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MzQ2M2I1MjBlMGM5ODc1MmVlNWU2MjVmMTE1MzM1ZTUxNjY0YWFmZDBlNzA4
10
- MDY3OGFiNTNjY2RjYzY2MzE4ZDZmMzRiOWNmNDkyZWY4MGE0ZWE3ZTU3MGFh
11
- ZGRiOTk0NmMzMDUxMGYzODM1OWJlYzM0MTFlZGFlN2RmZTUyYzE=
9
+ MTM1YWVhMTFjNmY2MTAxZjk5MDZkZmNhNmE4YTBhZjUwMmU4ZTIxZWU4MzYz
10
+ YWI0ODFlNDk2ZmQyN2FlMTFmMzJiZjc5ZDlkZGNiZmRlMmVlYWM5NWU2OTAy
11
+ NzUxNGUyODE3Y2U1MWUwZGUxZDRhNzQ2OGFhMDMxZDM1MmVkYTM=
12
12
  data.tar.gz: !binary |-
13
- YTIyNGViMzEzZGI5YjYxNjZlY2MzOGY5N2U1MzE5ZTc0YjlmZDNkNjJkYzI3
14
- ODkzZmE5ODU1ZWE3MWMyN2JmMjQyMmIyNjRlMDJhYjgzYjEwMmYxNjAyOWQy
15
- MWZhZDk3NDY4ZjU3NjA4MDg0MTQ2NmE4OGU1YmUyMWU0OGRkMjk=
13
+ NGVhYzA2MDM4MTU1M2YxZjgxZGVhMGRhZjJhNGJmNmE4YzY1YTM1MmRlOWIx
14
+ YjM0NTlmZDUyMzcyMjg4ZWZhOWVmM2RkMTNhNmMyMTliY2FkYjM0MDA0Njg4
15
+ MmFlNjBkNjM2Yzc0ZjUzNzgzMDIxMjc2MmJiNDhlYzczZjc2ZjE=
@@ -1,6 +1,6 @@
1
1
  module StackerBee
2
2
  class Builder
3
- attr_accessor :middlewares
3
+ attr_writer :middlewares
4
4
 
5
5
  def middlewares
6
6
  @middlewares ||= []
@@ -28,15 +28,6 @@ module StackerBee
28
28
  File.dirname(__FILE__), '../../config/4.2.json'
29
29
  )
30
30
 
31
- extend Forwardable
32
- def_delegators :configuration,
33
- :url,
34
- :url=,
35
- :api_key,
36
- :api_key=,
37
- :secret_key,
38
- :secret_key=
39
-
40
31
  # rubocop:disable MethodLength
41
32
  def middlewares
42
33
  # request
@@ -72,18 +63,16 @@ module StackerBee
72
63
 
73
64
  class << self
74
65
  def reset!
75
- @api, @api_path, @default_config = nil
66
+ self.api, self.api_path, self.configuration = nil
76
67
  end
77
68
 
78
- def default_config
79
- @default_config ||= {
80
- faraday_middlewares: proc {},
81
- middlewares: proc {}
82
- }
69
+ def configuration
70
+ self.configuration = nil unless @configuration
71
+ @configuration
83
72
  end
84
73
 
85
- def configuration=(config_hash)
86
- default_config.merge!(config_hash)
74
+ def configuration=(config_hash = {})
75
+ @configuration = Configuration.new(config_hash)
87
76
  end
88
77
 
89
78
  def api_path
@@ -96,6 +85,7 @@ module StackerBee
96
85
  @api_path = new_api_path
97
86
  end
98
87
 
88
+ attr_writer :api
99
89
  def api
100
90
  @api ||= API.new(api_path: api_path)
101
91
  end
@@ -106,17 +96,18 @@ module StackerBee
106
96
  end
107
97
 
108
98
  def configuration=(config)
109
- @configuration = configuration_with_defaults(config)
99
+ @configuration = self.class.configuration.merge(config)
110
100
  end
111
101
 
112
102
  def configuration
113
- @configuration ||= configuration_with_defaults
103
+ self.configuration = {} unless @configuration
104
+ @configuration
114
105
  end
115
106
 
116
107
  def request(endpoint_name, params = {})
117
108
  env = Middleware::Environment.new(
118
109
  endpoint_name: endpoint_name,
119
- api_key: api_key,
110
+ api_key: configuration.api_key,
120
111
  params: params
121
112
  )
122
113
 
@@ -160,10 +151,5 @@ module StackerBee
160
151
  def connection
161
152
  @connection ||= Connection.new(configuration)
162
153
  end
163
-
164
- def configuration_with_defaults(config = {})
165
- config_hash = self.class.default_config.merge(config)
166
- Configuration.new(config_hash)
167
- end
168
154
  end
169
155
  end
@@ -1,11 +1,63 @@
1
- require "ostruct"
2
-
3
1
  module StackerBee
4
- class Configuration < OpenStruct
2
+ class Configuration
3
+ class NoAttributeError < StandardError
4
+ end
5
+
6
+ ATTRIBUTES = [
7
+ :ssl_verify,
8
+ :url,
9
+ :secret_key,
10
+ :api_key,
11
+ :middlewares,
12
+ :faraday_middlewares
13
+ ]
14
+
15
+ def initialize(attrs = nil)
16
+ @attributes = attrs || {}
17
+
18
+ @attributes.each_pair do |key, value|
19
+ unless ATTRIBUTES.include?(key)
20
+ fail NoAttributeError, "No attribute defined: '#{key}'"
21
+ end
22
+ end
23
+ end
24
+
5
25
  def ssl_verify?
6
- # rubocop:disable NonNilCheck
7
- # it should default to true if it's not explicitly set
8
- !ssl_verify.nil? ? ssl_verify : true
26
+ attribute :ssl_verify, true
27
+ end
28
+
29
+ def url
30
+ attribute :url
31
+ end
32
+
33
+ def secret_key
34
+ attribute :secret_key
35
+ end
36
+
37
+ def api_key
38
+ attribute :api_key
39
+ end
40
+
41
+ def middlewares
42
+ attribute :middlewares, proc {}
43
+ end
44
+
45
+ def faraday_middlewares
46
+ attribute :faraday_middlewares, proc {}
47
+ end
48
+
49
+ def to_hash
50
+ @attributes
51
+ end
52
+
53
+ def merge(other)
54
+ self.class.new(to_hash.merge(other.to_hash))
55
+ end
56
+
57
+ private
58
+
59
+ def attribute(key, value = nil)
60
+ @attributes.fetch(key, value)
9
61
  end
10
62
  end
11
63
  end
@@ -1,3 +1,5 @@
1
+ require 'ostruct'
2
+
1
3
  module StackerBee
2
4
  module Middleware
3
5
  class Environment < OpenStruct
@@ -7,10 +7,9 @@ describe "A response to a request sent to the CloudStack API", :vcr do
7
7
  let(:url) { CONFIG["url"] }
8
8
  let(:config_hash) do
9
9
  {
10
- url: url,
11
- api_key: CONFIG["api_key"],
12
- secret_key: CONFIG["secret_key"],
13
- apis_path: File.join(File.dirname(__FILE__), '../fixtures/4.2.json'),
10
+ url: url,
11
+ api_key: CONFIG["api_key"],
12
+ secret_key: CONFIG["secret_key"],
14
13
  middlewares: middlewares
15
14
  }
16
15
  end
@@ -61,6 +61,8 @@ describe StackerBee::Client, "calling endpoint" do
61
61
  end
62
62
 
63
63
  describe StackerBee::Client, "configuration" do
64
+ before { described_class.configuration = default_config_hash }
65
+
64
66
  let(:default_url) { "default_cloud-stack.com" }
65
67
  let(:default_api_key) { "default-cloud-stack-api-key" }
66
68
  let(:default_secret_key) { "default-cloud-stack-secret-key" }
@@ -73,9 +75,7 @@ describe StackerBee::Client, "configuration" do
73
75
  middlewares: proc {}
74
76
  }
75
77
  end
76
- let!(:default_configuration) do
77
- StackerBee::Configuration.new(default_config_hash)
78
- end
78
+
79
79
  let(:instance_url) { "instance-cloud-stack.com" }
80
80
  let(:instance_api_key) { "instance-cloud-stack-api-key" }
81
81
  let(:instance_secret_key) { "instance-cloud-stack-secret-key" }
@@ -88,64 +88,44 @@ describe StackerBee::Client, "configuration" do
88
88
  middlewares: proc {}
89
89
  }
90
90
  end
91
- let!(:instance_configuration) do
92
- StackerBee::Configuration.new(instance_config_hash)
93
- end
94
- before do
95
- StackerBee::Configuration.stub(:new) do
96
- fail "Unexpected Configuration instantiation: \n#{args.inspect}"
97
- end
98
- StackerBee::Configuration.stub(:new).with(default_config_hash) do
99
- default_configuration
100
- end
101
- StackerBee::Configuration.stub(:new).with(instance_config_hash) do
102
- instance_configuration
103
- end
104
- described_class.configuration = default_config_hash
105
- end
106
91
 
107
92
  describe ".new" do
108
- subject { described_class.new }
93
+ subject { client.configuration }
109
94
 
110
95
  context "with default, class configuration" do
111
- its(:url) { should eq default_url }
112
- its(:api_key) { should eq default_api_key }
113
- its(:secret_key) { should eq default_secret_key }
96
+ let(:client) { described_class.new }
97
+
98
+ its(:url) { should eq default_url }
99
+ its(:api_key) { should eq default_api_key }
100
+ its(:secret_key) { should eq default_secret_key }
114
101
  end
115
102
 
116
103
  context "with instance-specific configuration" do
117
- subject { described_class.new(instance_config_hash) }
118
- its(:configuration) { should eq instance_configuration }
119
- its(:url) { should eq instance_url }
120
- its(:api_key) { should eq instance_api_key }
121
- its(:secret_key) { should eq instance_secret_key }
104
+ let(:client) { described_class.new(instance_config_hash) }
105
+
106
+ its(:url) { should eq instance_url }
107
+ its(:api_key) { should eq instance_api_key }
108
+ its(:secret_key) { should eq instance_secret_key }
122
109
  end
123
110
 
124
111
  context "with instance-specific configuration that's not a hash" do
125
- subject { described_class.new(config) }
112
+ let(:client) { described_class.new(config) }
126
113
  let(:config) { double(to_hash: instance_config_hash) }
127
- its(:configuration) { should eq instance_configuration }
128
- its(:url) { should eq instance_url }
129
- its(:api_key) { should eq instance_api_key }
130
- its(:secret_key) { should eq instance_secret_key }
131
- end
132
114
 
133
- describe "#url" do
134
- let(:other_url) { "other-cloud-stack.com" }
135
- before { subject.url = other_url }
136
- its(:url) { should eq other_url }
115
+ its(:url) { should eq instance_url }
116
+ its(:api_key) { should eq instance_api_key }
117
+ its(:secret_key) { should eq instance_secret_key }
137
118
  end
138
119
 
139
- describe "#api_key" do
140
- let(:other_api_key) { "other-cloud-stack-api-key" }
141
- before { subject.api_key = other_api_key }
142
- its(:api_key) { should eq other_api_key }
143
- end
120
+ context "with partial instance-specific configuration" do
121
+ let(:client) { described_class.new(partial_config_hash) }
122
+ let(:partial_config_hash) do
123
+ { url: instance_config_hash[:url] }
124
+ end
144
125
 
145
- describe "#secret_key" do
146
- let(:other_secret_key) { "other-cloud-stack-secret-key" }
147
- before { subject.secret_key = other_secret_key }
148
- its(:secret_key) { should eq other_secret_key }
126
+ its(:url) { should eq instance_url }
127
+ its(:api_key) { should eq default_api_key }
128
+ its(:secret_key) { should eq default_secret_key }
149
129
  end
150
130
  end
151
131
  end
@@ -1,25 +1,169 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe StackerBee::Configuration do
4
- its(:url) { should be_nil }
5
- its(:api_key) { should be_nil }
6
- its(:secret_key) { should be_nil }
4
+ describe "setting an attribute that doesn't exist" do
5
+ [:ssl_verify?, :url?, :other_attr].each do |attr|
6
+ it "raises an error" do
7
+ expect { described_class.new(attr => true) }
8
+ .to raise_error described_class::NoAttributeError, /#{attr}/
9
+ end
10
+ end
11
+ end
7
12
 
8
13
  describe "#ssl_verify?" do
9
14
  subject { configuration.ssl_verify? }
10
- let(:configuration) { described_class.new(ssl_verify: ssl_verify) }
11
15
 
12
- context "when nil" do
13
- let(:ssl_verify) { nil }
16
+ context "when not set" do
17
+ let(:configuration) { described_class.new }
14
18
  it { should eq true }
15
19
  end
16
- context "when false" do
17
- let(:ssl_verify) { false }
20
+
21
+ context "when set to false" do
22
+ let(:configuration) { described_class.new(ssl_verify: false) }
18
23
  it { should eq false }
19
24
  end
20
- context "when true" do
21
- let(:ssl_verify) { true }
25
+
26
+ context "when set to true" do
27
+ let(:configuration) { described_class.new(ssl_verify: true) }
22
28
  it { should eq true }
23
29
  end
24
30
  end
31
+
32
+ describe "#url" do
33
+ subject { configuration.url }
34
+
35
+ context "when not set" do
36
+ let(:configuration) { described_class.new }
37
+ it { should eq nil }
38
+ end
39
+
40
+ context "when set" do
41
+ let(:configuration) { described_class.new(url: setting) }
42
+ let(:setting) { "http://example.com" }
43
+ it { should eq setting }
44
+ end
45
+ end
46
+
47
+ describe "#secret_key" do
48
+ subject { configuration.secret_key }
49
+
50
+ context "when not set" do
51
+ let(:configuration) { described_class.new }
52
+ it { should eq nil }
53
+ end
54
+
55
+ context "when set" do
56
+ let(:configuration) { described_class.new(secret_key: setting) }
57
+ let(:setting) { "qwertyuiop" }
58
+ it { should eq setting }
59
+ end
60
+ end
61
+
62
+ describe "#api_key" do
63
+ subject { configuration.api_key }
64
+
65
+ context "when not set" do
66
+ let(:configuration) { described_class.new }
67
+ it { should eq nil }
68
+ end
69
+
70
+ context "when set" do
71
+ let(:configuration) { described_class.new(api_key: setting) }
72
+ let(:setting) { "qwertyuiop" }
73
+ it { should eq setting }
74
+ end
75
+ end
76
+
77
+ describe "#middlewares" do
78
+ subject { configuration.middlewares }
79
+
80
+ context "when not set" do
81
+ let(:configuration) { described_class.new }
82
+ it { should be_a Proc }
83
+ end
84
+
85
+ context "when set" do
86
+ let(:configuration) { described_class.new(middlewares: setting) }
87
+ let(:setting) { proc { something } }
88
+ it { should eq setting }
89
+ end
90
+ end
91
+
92
+ describe "#faraday_middlewares" do
93
+ subject { configuration.faraday_middlewares }
94
+
95
+ context "when not set" do
96
+ let(:configuration) { described_class.new }
97
+ it { should be_a Proc }
98
+ end
99
+
100
+ context "when set" do
101
+ let(:configuration) { described_class.new(faraday_middlewares: setting) }
102
+ let(:setting) { proc { something } }
103
+ it { should eq setting }
104
+ end
105
+ end
106
+
107
+ describe "#merge" do
108
+ subject { parent.merge(child) }
109
+
110
+ let(:parent) do
111
+ described_class.new(
112
+ url: :parent_url,
113
+ api_key: :parent_api_key,
114
+ secret_key: :parent_secret_key,
115
+ ssl_verify: :parent_ssl_verify,
116
+ middlewares: :parent_ssl_middlewares,
117
+ faraday_middlewares: :parent_faraday_middlewares
118
+ )
119
+ end
120
+
121
+ let(:child) do
122
+ described_class.new(
123
+ url: :child_url,
124
+ api_key: :child_api_key,
125
+ secret_key: :child_secret_key,
126
+ ssl_verify: :child_ssl_verify,
127
+ middlewares: :child_ssl_middlewares,
128
+ faraday_middlewares: :child_faraday_middlewares
129
+ )
130
+ end
131
+
132
+ context "when the child doesn't have an attribute set" do
133
+ let(:child) { described_class.new }
134
+ it "uses the attribute of the parent" do
135
+ subject.url.should eq :parent_url
136
+ subject.api_key.should eq :parent_api_key
137
+ subject.secret_key.should eq :parent_secret_key
138
+ subject.ssl_verify?.should eq :parent_ssl_verify
139
+ subject.middlewares.should eq :parent_ssl_middlewares
140
+ subject.faraday_middlewares.should eq :parent_faraday_middlewares
141
+ end
142
+ end
143
+
144
+ context "when the parent doesn't have an attribute set" do
145
+ let(:parent) { described_class.new }
146
+ it "uses the attribute of the child" do
147
+ subject.url.should eq :child_url
148
+ subject.api_key.should eq :child_api_key
149
+ subject.secret_key.should eq :child_secret_key
150
+ subject.ssl_verify?.should eq :child_ssl_verify
151
+ subject.middlewares.should eq :child_ssl_middlewares
152
+ subject.faraday_middlewares.should eq :child_faraday_middlewares
153
+ end
154
+ end
155
+
156
+ context "when the parent and child don't have an attribut set" do
157
+ let(:child) { described_class.new }
158
+ let(:parent) { described_class.new }
159
+ it "uses the defaults of the attributes of the child" do
160
+ subject.url.should eq nil
161
+ subject.api_key.should eq nil
162
+ subject.secret_key.should eq nil
163
+ subject.ssl_verify?.should eq true
164
+ subject.middlewares.should be_a Proc
165
+ subject.faraday_middlewares.should be_a Proc
166
+ end
167
+ end
168
+ end
25
169
  end
data/stacker_bee.gemspec CHANGED
@@ -19,8 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_runtime_dependency "faraday", "~> 0.8", "< 0.9"
23
- spec.add_runtime_dependency 'multi_json', "~> 1.8"
22
+ spec.add_runtime_dependency "faraday", "~> 0.8", "< 0.9"
23
+ spec.add_runtime_dependency 'multi_json', "~> 1.8"
24
24
 
25
25
  # this is a dependency for FaradayMiddleware::Graylog
26
26
  spec.add_runtime_dependency "faraday_middleware", "~> 0.9"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stacker_bee
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0.pre201
4
+ version: 2.1.0.pre227
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Sterndale
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-04-12 00:00:00.000000000 Z
12
+ date: 2014-04-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday