frenetic 0.0.6 → 0.0.7

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/README.md CHANGED
@@ -95,31 +95,6 @@ will not trigger another API request.
95
95
 
96
96
 
97
97
 
98
- ### API Resources
99
-
100
- While HAL+JSON is awesome, not all implementations are perfect. Frenetic
101
- assumes a HAL+JSON response as built by [Roar], which may not be in 100%
102
- compliance.
103
-
104
- Example:
105
-
106
- ```js
107
- {
108
- "id":1,
109
- "first_name":"Foo",
110
- "last_name":"Bar",
111
- "_links":{
112
- "self":{"href":"/order/1"},
113
- "next":{"href":"/order/2"}
114
- }
115
- }
116
- ```
117
-
118
- The problem here is that the entire response really should be wrapped in
119
- `"_embedded"` and `"order"` keys.
120
-
121
- So until that is fixed, Frenetic will continue to be pig headed and continue
122
- to do the "wrong" thing.
123
98
 
124
99
  ## Installation
125
100
 
@@ -157,6 +132,33 @@ MyAPI = Frenetic.new(
157
132
  )
158
133
  ```
159
134
 
135
+ Symbol- or string-based keys work equally well.
136
+
137
+ #### Sending API Keys
138
+
139
+ If the API you are consuming requires an API Key, you can provide that in the
140
+ config hash:
141
+
142
+ ```ruby
143
+ Frenetic.new( url:'https://example.org', api_key:'abcde12345' )
144
+ ```
145
+
146
+ The value will be sent as the `:username` portion of the HTTP
147
+ Basic Authentication header.
148
+
149
+ #### Sending API Keys with an App ID
150
+
151
+ If the API requires both an App ID or access token in addition to an API Key,
152
+ you can provide that in the config hash as well:
153
+
154
+ ```ruby
155
+ Frenetic.new( url:'https://example.org', app_id:'abcde12345', api_key:'mysecret' )
156
+ ```
157
+
158
+ The App ID will be sent as the `:username` and the API Key will be sent as the
159
+ password portion of the HTTP Basic Authentication header.
160
+
161
+
160
162
 
161
163
  ### Response Caching
162
164
 
@@ -180,6 +182,20 @@ supports can be added to the Hash.
180
182
 
181
183
 
182
184
 
185
+ # Middlware
186
+
187
+ Frenetic supports anything that Faraday does. You may specify additional
188
+ middleware with the `use` method:
189
+
190
+ ```ruby
191
+ Frenetic.new( url:'http://example.org' ) do |config|
192
+ config.use :instrumentation
193
+ config.use MyMiddleware, { foo:123 }
194
+ end
195
+ ```
196
+
197
+
198
+
183
199
  ### Making Requests
184
200
 
185
201
  Once you have created a client instance, you are free to use it however you'd
@@ -17,13 +17,12 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_dependency 'faraday', '~> 0.8.1'
19
19
  gem.add_dependency 'faraday_middleware', '~> 0.9.0'
20
+ gem.add_dependency 'activesupport', '>= 2'
20
21
  gem.add_dependency 'rack-cache', '~> 1.1'
21
- gem.add_dependency 'addressable', '~> 2.3.0'
22
+ gem.add_dependency 'addressable', '~> 2.2'
22
23
  gem.add_dependency 'patron', '~> 0.4.18'
23
24
 
24
- gem.add_development_dependency 'guard-spork', '~> 1.2.0'
25
- gem.add_development_dependency 'guard-rspec', '~> 1.2.1'
26
- gem.add_development_dependency 'rspec', '~> 2.11.0'
27
- gem.add_development_dependency 'webmock', '~> 1.8.10'
28
- gem.add_development_dependency 'vcr', '~> 2.2.5'
25
+ gem.add_development_dependency 'rspec', '~> 2.12.0'
26
+ gem.add_development_dependency 'webmock', '~> 1.9.0'
27
+ gem.add_development_dependency 'vcr', '~> 2.4.0'
29
28
  end
@@ -10,9 +10,10 @@ require "frenetic/resource"
10
10
  require "frenetic/version"
11
11
 
12
12
  class Frenetic
13
-
14
- class MissingAPIReference < StandardError; end
15
- class InvalidAPIDescription < StandardError; end
13
+ Error = Class.new(StandardError)
14
+ ConfigurationError = Class.new(Error)
15
+ MissingAPIReference = Class.new(Error)
16
+ InvalidAPIDescription = Class.new(Error)
16
17
 
17
18
  extend Forwardable
18
19
  def_delegators :@connection, :get, :put, :post, :delete
@@ -25,17 +26,20 @@ class Frenetic
25
26
 
26
27
  yield config if block_given?
27
28
 
28
- api_url = Addressable::URI.parse( config[:url] )
29
+ api_url = Addressable::URI.parse( config.url )
29
30
  @root_url = api_url.path
30
31
 
31
- @connection = Faraday.new( config ) do |builder|
32
+ @connection = Faraday.new( config.to_hash ) do |builder|
32
33
  builder.use HalJson
33
- builder.request :basic_auth, config[:username], config[:password]
34
34
 
35
- builder.response :logger if config[:response][:use_logger]
35
+ config.middleware.each { |mw| builder.use(*mw) }
36
+
37
+ builder.request :basic_auth, config.username, config.password
38
+
39
+ builder.response :logger if config.response[:use_logger]
36
40
 
37
- if config[:cache]
38
- builder.use FaradayMiddleware::RackCompatible, Rack::Cache::Context, config[:cache]
41
+ if config.cache.present?
42
+ builder.use FaradayMiddleware::RackCompatible, Rack::Cache::Context, config.cache
39
43
  end
40
44
 
41
45
  builder.adapter :patron
@@ -1,98 +1,100 @@
1
1
  require 'socket'
2
+ require 'active_support/core_ext/object/blank'
3
+ require 'active_support/core_ext/hash/keys'
4
+ require 'active_support/core_ext/hash/deep_merge'
2
5
 
3
6
  class Frenetic
4
- class Configuration < Hash
7
+ class Configuration
8
+
9
+ @@defaults = {
10
+ cache: nil,
11
+ url: nil,
12
+ username: nil,
13
+ password: nil,
14
+ headers: {
15
+ accept: 'application/hal+json'
16
+ },
17
+ request: {},
18
+ response: {}
19
+ }
20
+
21
+ attr_accessor :cache, :url, :username, :password
22
+ attr_accessor :headers, :request, :response, :middleware
23
+
24
+ def initialize( config = {} )
25
+ config = @@defaults.deep_merge( config.symbolize_keys )
26
+
27
+ map_api_key_to_username config
28
+ append_user_agent config
29
+ filter_cache_headers config
30
+
31
+ config.each do |k, v|
32
+ v.symbolize_keys! if v.is_a? Hash
33
+
34
+ instance_variable_set "@#{k}", v
35
+ end
36
+ end
5
37
 
6
- class ConfigurationError < StandardError; end
38
+ def attributes
39
+ validate!
7
40
 
8
- # TODO: This is in desperate need of .with_indifferent_access...
9
- # TODO: "content-type" should probably be within a "headers" key
10
- def initialize( custom_config = {} )
11
- config = config_file.merge custom_config
12
- config = symbolize_keys config
41
+ (instance_variables - [:@middleware]).each_with_object({}) do |k, attrs|
42
+ key = k.to_s.gsub( '@', '' )
13
43
 
14
- config[:username] = config[:api_key] if config[:api_key]
15
- config[:headers] ||= {}
16
- config[:request] ||= {}
17
- config[:response] ||= {}
44
+ value = instance_variable_get( k )
18
45
 
19
- config[:headers][:accept] ||= "application/hal+json"
46
+ attrs[key.to_sym] = value
47
+ end
48
+ end
49
+ alias_method :to_hash, :attributes
20
50
 
21
- # Copy the config into this Configuration instance.
22
- config.each { |k, v| self[k] = v }
51
+ def validate!
52
+ raise(Frenetic::ConfigurationError, 'No API URL defined!') unless @url.present?
23
53
 
24
- super()
54
+ if @cache
55
+ raise( ConfigurationError, 'No cache :metastore defined!' ) unless @cache[:metastore].present?
56
+ raise( ConfigurationError, "No cache :entitystore defined!" ) unless @cache[:entitystore].present?
57
+ end
58
+ end
25
59
 
26
- configure_user_agent
27
- configure_cache
60
+ def middleware
61
+ @middleware ||= []
62
+ end
28
63
 
29
- validate
64
+ def use( *args )
65
+ middleware << args
30
66
  end
31
67
 
32
68
  private
33
69
 
34
- def configure_user_agent
35
- frenetic_ua = "Frenetic v#{Frenetic::VERSION}; #{Socket.gethostname}"
36
-
37
- if self[:headers][:user_agent]
38
- self[:headers][:user_agent] << " (#{frenetic_ua})"
39
- else
40
- self[:headers][:user_agent] = frenetic_ua
41
- end
70
+ def user_agent
71
+ "Frenetic v#{Frenetic::VERSION}; #{Socket.gethostname}"
42
72
  end
43
73
 
44
- def configure_cache
45
- if self[:cache]
46
- ignore_headers = self[:cache][:ignore_headers] || []
47
-
48
- self[:cache][:ignore_headers] = (ignore_headers + %w[Set-Cookie X-Content-Digest]).uniq
74
+ def map_api_key_to_username( config )
75
+ if config[:api_key]
76
+ if config[:app_id]
77
+ config[:username] = config.delete :app_id
78
+ config[:password] = config.delete :api_key
79
+ else
80
+ config[:username] = config.delete :api_key
81
+ end
49
82
  end
50
83
  end
51
84
 
52
- def validate
53
- unless self[:url]
54
- raise ConfigurationError, "No API URL defined!"
55
- end
56
- if self[:cache]
57
- raise( ConfigurationError, "No cache :metastore defined!" ) if self[:cache][:metastore].to_s == ""
58
- raise( ConfigurationError, "No cache :entitystore defined!" ) if self[:cache][:entitystore].to_s == ""
59
- raise( ConfigurationError, "Required cache header filters are missing!" ) if missing_required_headers?
85
+ def append_user_agent( config )
86
+ if config[:headers][:user_agent]
87
+ config[:headers][:user_agent] << " (#{user_agent})"
88
+ else
89
+ config[:headers][:user_agent] = user_agent
60
90
  end
61
91
  end
62
92
 
63
- def missing_required_headers?
64
- return true if self[:cache][:ignore_headers].empty?
65
-
66
- header_set = self[:cache][:ignore_headers]
67
- custom_headers = header_set - %w[Set-Cookie X-Content-Digest]
68
-
69
- header_set == custom_headers
70
- end
71
-
72
- # TODO: Is this even being used?
73
- def config_file
74
- path = File.join 'config/frenetic.yml'
75
- config = YAML.load_file( path )
76
- env = ENV['RAILS_ENV'] || ENV['RACK_ENV']
93
+ def filter_cache_headers( config )
94
+ if config[:cache]
95
+ ignore_headers = config[:cache][:ignore_headers] || []
77
96
 
78
- config[env] || {}
79
- rescue Errno::ENOENT, NoMethodError
80
- {}
81
- end
82
-
83
- def symbolize_keys( arg )
84
- case arg
85
- when Array
86
- arg.map { |elem| symbolize_keys elem }
87
- when Hash
88
- Hash[
89
- arg.map { |key, value|
90
- k = key.is_a?(String) ? key.to_sym : key
91
- v = symbolize_keys value
92
- [k,v]
93
- }]
94
- else
95
- arg
97
+ config[:cache][:ignore_headers] = (ignore_headers + %w[Set-Cookie X-Content-Digest]).uniq
96
98
  end
97
99
  end
98
100
 
@@ -1,3 +1,3 @@
1
1
  class Frenetic
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
@@ -1,120 +1,187 @@
1
1
  describe Frenetic::Configuration do
2
- let(:content_type) { 'application/vnd.frenetic-v1-hal+json' }
3
- let(:yaml_config) {
4
- { 'test' => {
5
- 'url' => 'http://example.org',
6
- 'api_key' => '1234567890',
7
- 'headers' => {
8
- 'accept' => content_type,
9
- },
10
- 'response' => {
11
- 'use_logger' => true
12
- },
13
- 'request' => {
14
- 'timeout' => 10000
15
- }
16
- }
2
+ let(:config) { { url:'http://example.org' } }
3
+
4
+ let(:cache_cfg) do
5
+ {
6
+ metastore: 'foo',
7
+ entitystore: 'bar'
17
8
  }
18
- }
19
- let(:config) { Frenetic::Configuration.new( unknown: :option ) }
9
+ end
20
10
 
21
- subject { config }
11
+ let(:instance) { described_class.new( config ) }
22
12
 
23
- describe ".configuration" do
24
- include FakeFS::SpecHelpers
13
+ subject { instance }
25
14
 
26
- context "with a proper config YAML" do
27
- before do
28
- FileUtils.mkdir_p("config")
29
- File.open( 'config/frenetic.yml', 'w') do |f|
30
- f.write( YAML::dump(yaml_config) )
31
- end
32
- end
15
+ it { should respond_to(:cache) }
16
+ it { should respond_to(:url) }
17
+ it { should respond_to(:username) }
18
+ it { should respond_to(:password) }
19
+ it { should respond_to(:headers) }
20
+ it { should respond_to(:request) }
21
+ it { should respond_to(:response) }
22
+ it { should respond_to(:middleware) }
23
+
24
+ describe '#attributes' do
25
+ before { instance.use 'MyMiddleware' }
26
+
27
+ subject { instance.attributes }
28
+
29
+ it { should include(:cache) }
30
+ it { should include(:url) }
31
+ it { should include(:username) }
32
+ it { should include(:password) }
33
+ it { should include(:headers) }
34
+ it { should include(:request) }
35
+ it { should include(:response) }
36
+ it { should_not include(:middleware) }
37
+
38
+ it 'should validate the configuration' do
39
+ instance.should_receive :validate!
33
40
 
34
- it { should include(:username) }
35
- it { should include(:url) }
41
+ subject
42
+ end
36
43
 
37
- it { should_not include(:unknown => 'option')}
44
+ context 'with string keys' do
45
+ let(:config) { {'url' => 'https://example.org'} }
38
46
 
39
- it "should set default response options" do
40
- subject[:response][:use_logger].should == true
47
+ it 'should symbolize the keys' do
48
+ subject[:url].should == 'https://example.org'
41
49
  end
50
+ end
51
+ end
52
+
53
+ describe '#headers' do
54
+ let(:attrs) { instance.headers }
42
55
 
43
- it "should set default request options" do
44
- subject[:request][:timeout].should == 10000
56
+ context 'Accepts' do
57
+ subject { attrs[:accept] }
58
+
59
+ it { should == 'application/hal+json' }
60
+
61
+ context 'with other specific headers' do
62
+ before { config.merge!(headers:{foo:123} )}
63
+
64
+ it { should == 'application/hal+json' }
45
65
  end
46
66
 
47
- it "should set a User Agent request header" do
48
- subject[:headers][:user_agent].should =~ %r{Frenetic v.+; \S+$}
67
+ context 'with a custom Accepts header' do
68
+ before { config.merge!(headers:{'accept' => 'application/vnd.yoursite-v1.hal+json'} )}
69
+
70
+ it { should == 'application/vnd.yoursite-v1.hal+json' }
49
71
  end
72
+ end
50
73
 
51
- context "with a specified Accept header" do
52
- it "should set an Accept request header" do
53
- subject[:headers].should include(:accept => 'application/vnd.frenetic-v1-hal+json')
54
- end
74
+ context 'User-Agent' do
75
+ subject { attrs[:user_agent] }
76
+
77
+ it { should match %r{Frenetic v\d+\.\d+\.\d+; .+\Z} }
78
+
79
+ context 'with a custom value' do
80
+ before { config.merge!( headers:{user_agent:'MyApp'}) }
81
+
82
+ it { should match %r{\AMyApp \(Frenetic v\d+\.\d+\.\d+; .+\)\Z} }
55
83
  end
56
- context "without a specified Accept header" do
57
- let(:content_type) { nil }
84
+ end
85
+ end
58
86
 
59
- it "should set an Accept request header" do
60
- subject[:headers].should include(:accept => 'application/hal+json')
61
- end
87
+ describe '#cache' do
88
+ before { config.merge!(cache:cache_cfg) }
89
+
90
+ subject { instance.cache }
91
+
92
+ it { should include(metastore:'foo') }
93
+ it { should include(entitystore:'bar') }
94
+ it { should include(ignore_headers:%w[Set-Cookie X-Content-Digest]) }
95
+
96
+ context 'with custom ignore headers' do
97
+ before { cache_cfg.merge!(ignore_headers:%w{Set-Cookie X-My-Header}) }
98
+
99
+ it { should include(ignore_headers:%w[Set-Cookie X-My-Header X-Content-Digest]) }
100
+ end
101
+ end
102
+
103
+ describe '#username' do
104
+ subject { instance.username }
105
+
106
+ before { config.merge!(api_key:'api_key') }
107
+
108
+ it { should == 'api_key' }
109
+
110
+ context 'and an App ID' do
111
+ before { config.merge!(app_id:'app_id') }
112
+
113
+ it { should == 'app_id' }
114
+ end
115
+ end
116
+
117
+ describe '#password' do
118
+ subject { instance.password }
119
+
120
+ before { config.merge!(api_key:'api_key') }
121
+
122
+ it { should be_nil }
123
+
124
+ context 'and an App ID' do
125
+ before { config.merge!(app_id:'app_id') }
126
+
127
+ it { should == 'api_key' }
128
+ end
129
+ end
130
+
131
+ describe '#initialize' do
132
+ subject { instance.attributes }
133
+
134
+ it { should be_a Hash }
135
+ it { should_not be_empty }
136
+ end
137
+
138
+ describe '#validate!' do
139
+ subject { instance.validate! }
140
+
141
+ shared_examples_for 'a misconfigured instance' do
142
+ it 'by raising an error when empty' do
143
+ expect{ subject }.to raise_error Frenetic::ConfigurationError
62
144
  end
63
145
  end
64
146
 
65
- context "with no config YAML" do
66
- context "and no passed options" do
67
- it "should raise a configuration error" do
68
- expect { Frenetic::Configuration.new }.to raise_error( Frenetic::Configuration::ConfigurationError )
69
- end
147
+ context ':url' do
148
+ before { config.delete :url }
149
+
150
+ it_should_behave_like 'a misconfigured instance'
151
+ end
152
+
153
+ context ':cache' do
154
+ context 'with a missing :metastore' do
155
+ before { config.merge!(cache:{}) }
156
+
157
+ it_should_behave_like 'a misconfigured instance'
70
158
  end
71
- context "and passed options" do
72
- let(:config) { Frenetic::Configuration.new( 'url' => 'http://example.org' ) }
73
159
 
74
- it { should be_a( Hash ) }
75
- it { should_not be_empty }
76
- it "should set an Accepts request header" do
77
- subject[:headers].should include(:accept => 'application/hal+json')
78
- end
79
- it "should set a User Agent request header" do
80
- subject[:headers][:user_agent].should =~ %r{Frenetic v.+; \S+$}
81
- end
160
+ context 'with a missing :entitystore' do
161
+ before { config.merge!(cache:{metastore:'store'}) }
82
162
 
83
- context "which includes incorrect cache settings" do
84
- before { Frenetic::Configuration.any_instance.stub(:configure_cache).and_return nil }
85
-
86
- it "should raise a configuration error for a missing :metastore" do
87
- expect {
88
- Frenetic::Configuration.new('url' => 'http://example.org', 'cache' => {} )
89
- }.to raise_error(
90
- Frenetic::Configuration::ConfigurationError, "No cache :metastore defined!"
91
- )
92
- end
93
-
94
- it "should raise a configuration error for a missing :entitystore" do
95
- expect {
96
- Frenetic::Configuration.new('url' => 'http://example.org', 'cache' => { 'metastore' => 'foo' } )
97
- }.to raise_error(
98
- Frenetic::Configuration::ConfigurationError, "No cache :entitystore defined!"
99
- )
100
- end
101
-
102
- it "should raise a configuration error for missing required header filters" do
103
- cache_cfg = {
104
- 'metastore' => 'foo',
105
- 'entitystore' => 'bar',
106
- 'ignore_headers' => ['baz'] # `configure_cache` method is skipped to create a bad state
107
- }
108
-
109
- expect {
110
- Frenetic::Configuration.new('url' => 'http://example.org', 'cache' => cache_cfg )
111
- }.to raise_error(
112
- Frenetic::Configuration::ConfigurationError, "Required cache header filters are missing!"
113
- )
114
- end
163
+ it_should_behave_like 'a misconfigured instance'
164
+ end
165
+
166
+ context 'with no missing properties' do
167
+ before { config.merge!(cache:{metastore:'mstore',entitystore:'estore'}) }
168
+
169
+ it 'should not raise an error' do
170
+ expect{ subject }.to_not raise_error
115
171
  end
116
172
  end
117
173
  end
118
174
  end
119
175
 
176
+ describe '#use' do
177
+ before do
178
+ stub_const 'MyMiddleware', Class.new
179
+
180
+ instance.use MyMiddleware, foo:123
181
+ end
182
+
183
+ it 'should use the middleware' do
184
+ subject.middleware.should include [ MyMiddleware, {foo:123} ]
185
+ end
186
+ end
120
187
  end
@@ -31,8 +31,8 @@ describe Frenetic::HalJson do
31
31
  context "with a successful response" do
32
32
  let(:env) do
33
33
  {
34
- :status => 200,
35
- :body => JSON.generate({
34
+ status:200,
35
+ body: JSON.generate({
36
36
  '_links' => {}
37
37
  })
38
38
  }
@@ -50,17 +50,17 @@ describe Frenetic::HalJson do
50
50
  subject { hal_json.success?( env ) }
51
51
 
52
52
  context "with a 200 OK response" do
53
- let(:env) { {:status => 200 } }
53
+ let(:env) { { status:200 } }
54
54
 
55
55
  it { should be_true }
56
56
  end
57
57
  context "with a 201 Created response" do
58
- let(:env) { {:status => 201 } }
58
+ let(:env) { { status:201 } }
59
59
 
60
60
  it { should be_true }
61
61
  end
62
62
  context "with a 204 No Content" do
63
- let(:env) { {:status => 204 } }
63
+ let(:env) { { status:204 } }
64
64
 
65
65
  it { should be_false }
66
66
  end
@@ -1,6 +1,6 @@
1
1
  describe Frenetic::Resource do
2
2
 
3
- let(:client) { Frenetic.new('url' => 'http://example.org') }
3
+ let(:client) { Frenetic.new(url:'http://example.org') }
4
4
 
5
5
  let(:resource) { described_class.new }
6
6
 
@@ -1,14 +1,14 @@
1
1
  describe Frenetic do
2
- let(:client) { described_class.new }
3
-
4
- let(:config) { {
5
- url: 'http://example.org:5447/api',
6
- api_key: '1234567890',
7
- version: 'v1',
8
- response: {}
9
- } }
2
+ let(:config) do
3
+ {
4
+ url: 'http://example.org:5447/api',
5
+ api_key: '1234567890',
6
+ version: 'v1',
7
+ response: {}
8
+ }
9
+ end
10
10
 
11
- before { Frenetic::Configuration.stub(:new).and_return config }
11
+ let(:client) { described_class.new(config) }
12
12
 
13
13
  subject { client }
14
14
 
@@ -24,7 +24,7 @@ describe Frenetic do
24
24
 
25
25
  it 'should accept a configuration block' do
26
26
  described_class.new( config ) do |cfg|
27
- cfg.should == config
27
+ cfg.should be_a described_class::Configuration
28
28
  end
29
29
  end
30
30
 
@@ -50,6 +50,22 @@ describe Frenetic do
50
50
 
51
51
  it { should include 'Faraday::Response::Logger' }
52
52
  end
53
+
54
+ describe 'middleware initialization' do
55
+ before { stub_const 'MyMiddleware', Class.new }
56
+
57
+ let(:client) do
58
+ described_class.new(config) do |cfg|
59
+ cfg.use MyMiddleware, foo:123
60
+ end
61
+ end
62
+
63
+ subject { connection.builder.handlers }
64
+
65
+ it 'should add the middleware to the connection' do
66
+ subject.should include MyMiddleware
67
+ end
68
+ end
53
69
  end
54
70
 
55
71
  describe "#description" do
@@ -1,29 +1,17 @@
1
- require 'spork'
2
1
  ENV['RAILS_ENV'] ||= 'test'
3
2
 
4
- Spork.prefork do
5
- # Loading more in this block will cause your tests to run faster. However,
6
- # if you change any configuration or code from libraries loaded here, you'll
7
- # need to restart spork for it take effect.
3
+ require 'rspec'
4
+ require 'awesome_print'
5
+ require 'vcr'
6
+ require 'frenetic'
8
7
 
9
- require 'rspec'
10
- require 'fakefs/spec_helpers'
11
- require 'awesome_print'
12
- require 'vcr'
13
-
14
- RSpec.configure do |config|
15
- config.filter_run focus:true
16
- config.run_all_when_everything_filtered = true
17
- config.treat_symbols_as_metadata_keys_with_true_values = true
18
- end
19
-
20
- VCR.configure do |c|
21
- c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
22
- c.hook_into :webmock
23
- end
8
+ RSpec.configure do |config|
9
+ config.filter_run focus:true
10
+ config.run_all_when_everything_filtered = true
11
+ config.treat_symbols_as_metadata_keys_with_true_values = true
24
12
  end
25
13
 
26
- Spork.each_run do
27
- # This code will be run each time you run your specs.
28
- require 'frenetic'
29
- end
14
+ VCR.configure do |c|
15
+ c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
16
+ c.hook_into :webmock
17
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: frenetic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-06 00:00:00.000000000 Z
12
+ date: 2013-01-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -44,29 +44,29 @@ dependencies:
44
44
  - !ruby/object:Gem::Version
45
45
  version: 0.9.0
46
46
  - !ruby/object:Gem::Dependency
47
- name: rack-cache
47
+ name: activesupport
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements:
51
- - - ~>
51
+ - - ! '>='
52
52
  - !ruby/object:Gem::Version
53
- version: '1.1'
53
+ version: '2'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  none: false
58
58
  requirements:
59
- - - ~>
59
+ - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
- version: '1.1'
61
+ version: '2'
62
62
  - !ruby/object:Gem::Dependency
63
- name: addressable
63
+ name: rack-cache
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
67
67
  - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 2.3.0
69
+ version: '1.1'
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,15 +74,15 @@ dependencies:
74
74
  requirements:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: 2.3.0
77
+ version: '1.1'
78
78
  - !ruby/object:Gem::Dependency
79
- name: patron
79
+ name: addressable
80
80
  requirement: !ruby/object:Gem::Requirement
81
81
  none: false
82
82
  requirements:
83
83
  - - ~>
84
84
  - !ruby/object:Gem::Version
85
- version: 0.4.18
85
+ version: '2.2'
86
86
  type: :runtime
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,39 +90,23 @@ dependencies:
90
90
  requirements:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
- version: 0.4.18
93
+ version: '2.2'
94
94
  - !ruby/object:Gem::Dependency
95
- name: guard-spork
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ~>
100
- - !ruby/object:Gem::Version
101
- version: 1.2.0
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ~>
108
- - !ruby/object:Gem::Version
109
- version: 1.2.0
110
- - !ruby/object:Gem::Dependency
111
- name: guard-rspec
95
+ name: patron
112
96
  requirement: !ruby/object:Gem::Requirement
113
97
  none: false
114
98
  requirements:
115
99
  - - ~>
116
100
  - !ruby/object:Gem::Version
117
- version: 1.2.1
118
- type: :development
101
+ version: 0.4.18
102
+ type: :runtime
119
103
  prerelease: false
120
104
  version_requirements: !ruby/object:Gem::Requirement
121
105
  none: false
122
106
  requirements:
123
107
  - - ~>
124
108
  - !ruby/object:Gem::Version
125
- version: 1.2.1
109
+ version: 0.4.18
126
110
  - !ruby/object:Gem::Dependency
127
111
  name: rspec
128
112
  requirement: !ruby/object:Gem::Requirement
@@ -130,7 +114,7 @@ dependencies:
130
114
  requirements:
131
115
  - - ~>
132
116
  - !ruby/object:Gem::Version
133
- version: 2.11.0
117
+ version: 2.12.0
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
@@ -138,7 +122,7 @@ dependencies:
138
122
  requirements:
139
123
  - - ~>
140
124
  - !ruby/object:Gem::Version
141
- version: 2.11.0
125
+ version: 2.12.0
142
126
  - !ruby/object:Gem::Dependency
143
127
  name: webmock
144
128
  requirement: !ruby/object:Gem::Requirement
@@ -146,7 +130,7 @@ dependencies:
146
130
  requirements:
147
131
  - - ~>
148
132
  - !ruby/object:Gem::Version
149
- version: 1.8.10
133
+ version: 1.9.0
150
134
  type: :development
151
135
  prerelease: false
152
136
  version_requirements: !ruby/object:Gem::Requirement
@@ -154,7 +138,7 @@ dependencies:
154
138
  requirements:
155
139
  - - ~>
156
140
  - !ruby/object:Gem::Version
157
- version: 1.8.10
141
+ version: 1.9.0
158
142
  - !ruby/object:Gem::Dependency
159
143
  name: vcr
160
144
  requirement: !ruby/object:Gem::Requirement
@@ -162,7 +146,7 @@ dependencies:
162
146
  requirements:
163
147
  - - ~>
164
148
  - !ruby/object:Gem::Version
165
- version: 2.2.5
149
+ version: 2.4.0
166
150
  type: :development
167
151
  prerelease: false
168
152
  version_requirements: !ruby/object:Gem::Requirement
@@ -170,7 +154,7 @@ dependencies:
170
154
  requirements:
171
155
  - - ~>
172
156
  - !ruby/object:Gem::Version
173
- version: 2.2.5
157
+ version: 2.4.0
174
158
  description: An opinionated Ruby-based Hypermedia API client.
175
159
  email:
176
160
  - dlindahl@customink.com
@@ -182,7 +166,6 @@ files:
182
166
  - .rvmrc
183
167
  - .travis.yml
184
168
  - Gemfile
185
- - Guardfile
186
169
  - LICENSE
187
170
  - README.md
188
171
  - Rakefile
data/Guardfile DELETED
@@ -1,15 +0,0 @@
1
- # More info at https://github.com/guard/guard#readme
2
-
3
- guard 'rspec', :notification => false do
4
- watch(%r{^spec/.+_spec\.rb$})
5
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
6
- watch('spec/spec_helper.rb') { "spec" }
7
- watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
8
- end
9
-
10
- guard 'spork', :rspec_env => { 'RAILS_ENV' => 'test' } do
11
- watch('config/environment.rb')
12
- watch('Gemfile')
13
- watch('Gemfile.lock')
14
- watch('spec/spec_helper.rb') { :rspec }
15
- end