reviewed 0.1.4 → 0.1.21
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/lib/faraday/api_key.rb +2 -4
- data/lib/reviewed/article.rb +1 -3
- data/lib/reviewed/base.rb +2 -19
- data/lib/reviewed/client.rb +7 -44
- data/lib/reviewed/product.rb +0 -2
- data/lib/reviewed/request.rb +35 -7
- data/lib/reviewed/version.rb +1 -1
- data/lib/reviewed.rb +2 -14
- data/reviewed.gemspec +0 -1
- data/spec/article_spec.rb +13 -12
- data/spec/base_spec.rb +2 -28
- data/spec/client_spec.rb +5 -72
- data/spec/collection_spec.rb +2 -1
- data/spec/faraday/api_key_spec.rb +21 -26
- data/spec/fixtures/vcr/article/find_page.yml +179 -0
- data/spec/fixtures/vcr/article/grill.yml +500 -0
- data/spec/fixtures/vcr/article/products.yml +500 -0
- data/spec/fixtures/vcr/collection/products.yml +525 -0
- data/spec/fixtures/vcr/product/attachments.yml +98 -0
- data/spec/fixtures/vcr/product/manufacturer_specs.yml +98 -0
- data/spec/fixtures/vcr/request/collection.yml +290 -0
- data/spec/fixtures/vcr/request/object.yml +7135 -0
- data/spec/fixtures/vcr/request/perform/no_params.yml +290 -0
- data/spec/fixtures/vcr/request/perform/params.yml +112 -0
- data/spec/fixtures/vcr/request/where/collection.yml +754 -0
- data/spec/product_spec.rb +4 -2
- data/spec/request_spec.rb +64 -9
- data/spec/reviewed_spec.rb +0 -9
- data/spec/spec_helper.rb +5 -6
- data/spec/website_spec.rb +2 -1
- metadata +25 -105
- data/lib/faraday/errors.rb +0 -14
- data/lib/reviewed/award.rb +0 -4
- data/spec/award_spec.rb +0 -4
- data/spec/faraday/errors_spec.rb +0 -73
- data/spec/fixtures/vcr/Reviewed_Article/associations/attachments/does_not_have_any_matching_attachments.yml +0 -601
- data/spec/fixtures/vcr/Reviewed_Article/associations/attachments/finds_attachments_by_tag.yml +0 -601
- data/spec/fixtures/vcr/Reviewed_Article/associations/attachments/has_many_attachments.yml +0 -601
- data/spec/fixtures/vcr/Reviewed_Article/associations/attachments/returns_all_attachments.yml +0 -601
- data/spec/fixtures/vcr/Reviewed_Article/associations/attachments/returns_attachments_of_the_correct_class.yml +0 -601
- data/spec/fixtures/vcr/Reviewed_Article/associations/pages/has_many_pages.yml +0 -601
- data/spec/fixtures/vcr/Reviewed_Article/associations/products/has_many_products.yml +0 -582
- data/spec/fixtures/vcr/Reviewed_Article/associations/products/returns_products_of_the_correct_class.yml +0 -601
- data/spec/fixtures/vcr/Reviewed_Article/find_page/finds_a_page_with_a_matching_slug.yml +0 -784
- data/spec/fixtures/vcr/Reviewed_Article/primary_product/returns_a_product_of_the_correct_class.yml +0 -1199
- data/spec/fixtures/vcr/Reviewed_Article/primary_product/returns_nil_if_does_not_respond_to_products.yml +0 -1199
- data/spec/fixtures/vcr/Reviewed_Article/primary_product/returns_the_primary_product.yml +0 -1199
- data/spec/fixtures/vcr/Reviewed_Client/_perform/request_params/not_set/has_nil_query_params.yml +0 -254
- data/spec/fixtures/vcr/Reviewed_Client/_perform/request_params/set/merges_quest_params.yml +0 -98
- data/spec/fixtures/vcr/Reviewed_Collection/collection_data/fetches_the_first_page_by_default.yml +0 -183
- data/spec/fixtures/vcr/Reviewed_Collection/collection_data/is_enumerable.yml +0 -183
- data/spec/fixtures/vcr/Reviewed_Collection/next_page/fetches_the_next_page_of_results.yml +0 -310
- data/spec/fixtures/vcr/Reviewed_Collection/page_attributes_pagination_/indicates_if_the_page_number_is_out_of_bounds.yml +0 -183
- data/spec/fixtures/vcr/Reviewed_Collection/page_attributes_pagination_/indicates_whether_this_is_the_first_or_last_page.yml +0 -183
- data/spec/fixtures/vcr/Reviewed_Collection/page_attributes_pagination_/returns_the_limit_value_max_per_page_.yml +0 -183
- data/spec/fixtures/vcr/Reviewed_Collection/page_attributes_pagination_/returns_the_number_of_entries_on_the_current_page.yml +0 -183
- data/spec/fixtures/vcr/Reviewed_Collection/page_attributes_pagination_/returns_the_offset.yml +0 -183
- data/spec/fixtures/vcr/Reviewed_Collection/page_attributes_pagination_/returns_the_total_item_count.yml +0 -183
- data/spec/fixtures/vcr/Reviewed_Collection/page_attributes_pagination_/returns_the_total_number_of_pages.yml +0 -183
- data/spec/fixtures/vcr/Reviewed_Collection/previous_page/fetches_the_previous_page_of_results.yml +0 -490
- data/spec/fixtures/vcr/Reviewed_Collection/previous_page/returns_nil_if_there_is_no_previous_page.yml +0 -183
- data/spec/fixtures/vcr/Reviewed_Product/associations/attachments/does_not_have_any_matching_attachments.yml +0 -116
- data/spec/fixtures/vcr/Reviewed_Product/associations/attachments/finds_attachments_by_tag.yml +0 -116
- data/spec/fixtures/vcr/Reviewed_Product/associations/attachments/has_many_attachments.yml +0 -119
- data/spec/fixtures/vcr/Reviewed_Product/associations/attachments/returns_all_attachments.yml +0 -116
- data/spec/fixtures/vcr/Reviewed_Product/associations/attachments/returns_attachments_of_the_correct_class.yml +0 -119
- data/spec/fixtures/vcr/Reviewed_Product/manufacturer_specs/has_many_manufacturer_specs.yml +0 -116
- data/spec/fixtures/vcr/Reviewed_Product/manufacturer_specs/returns_attachments_of_the_correct_class.yml +0 -116
- data/spec/fixtures/vcr/Reviewed_Request/_where/filters_collections_using_other_supported_options.yml +0 -110
- data/spec/fixtures/vcr/Reviewed_Request/_where/returns_a_collection.yml +0 -254
- data/spec/fixtures/vcr/Reviewed_Request/_where/returns_an_empty_set_if_no_matching_data_was_found.yml +0 -86
- data/spec/fixtures/vcr/Reviewed_Request/_where/returns_the_appropriate_page_of_results.yml +0 -288
- data/spec/fixtures/vcr/Reviewed_Request/collection_from_response/returns_a_collection_object.yml +0 -254
- data/spec/fixtures/vcr/Reviewed_Request/collection_from_response/returns_objects_of_the_correct_class.yml +0 -254
- data/spec/fixtures/vcr/Reviewed_Request/object_from_response/returns_an_object_of_the_correct_class.yml +0 -601
data/lib/faraday/api_key.rb
CHANGED
@@ -2,11 +2,9 @@ module Faraday
|
|
2
2
|
class ApiKey < Faraday::Middleware
|
3
3
|
|
4
4
|
def call(env)
|
5
|
-
unless env[
|
6
|
-
raise ::Reviewed::ConfigurationError.new(
|
5
|
+
unless env.request.headers['X-Reviewed-Authorization']
|
6
|
+
raise ::Reviewed::ConfigurationError.new("Please set the API key for your Reviewed::Client instance before making a request")
|
7
7
|
end
|
8
|
-
|
9
|
-
@app.call(env)
|
10
8
|
end
|
11
9
|
end
|
12
10
|
end
|
data/lib/reviewed/article.rb
CHANGED
data/lib/reviewed/base.rb
CHANGED
@@ -12,22 +12,6 @@ module Reviewed
|
|
12
12
|
self.attributes = objectify(data)
|
13
13
|
end
|
14
14
|
|
15
|
-
def created_at
|
16
|
-
if @attributes.has_key?(:created_at)
|
17
|
-
Time.parse(@attributes[:created_at])
|
18
|
-
else
|
19
|
-
nil
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def updated_at
|
24
|
-
if @attributes.has_key?(:updated_at)
|
25
|
-
Time.parse(@attributes[:updated_at])
|
26
|
-
else
|
27
|
-
nil
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
15
|
class << self
|
32
16
|
|
33
17
|
def path
|
@@ -39,9 +23,8 @@ module Reviewed
|
|
39
23
|
end
|
40
24
|
end
|
41
25
|
|
42
|
-
def
|
43
|
-
|
44
|
-
@attributes.has_key?(sym)
|
26
|
+
def initialize(data)
|
27
|
+
self.attributes = objectify(data)
|
45
28
|
end
|
46
29
|
|
47
30
|
def method_missing(sym, *args, &block)
|
data/lib/reviewed/client.rb
CHANGED
@@ -15,29 +15,14 @@ module Reviewed
|
|
15
15
|
self
|
16
16
|
end
|
17
17
|
|
18
|
-
# Perform an HTTP GET request
|
19
|
-
def get(path, params={})
|
20
|
-
perform(:get, path, params)
|
21
|
-
end
|
22
|
-
|
23
|
-
# Perform an HTTP PUT request
|
24
|
-
def put(path, params={})
|
25
|
-
perform(:put, path, params)
|
26
|
-
end
|
27
|
-
|
28
|
-
# Perform an HTTP DELETE request
|
29
|
-
def post(path, params={})
|
30
|
-
perform(:post, path, params)
|
31
|
-
end
|
32
|
-
|
33
|
-
# Perform an HTTP DELETE request
|
34
|
-
def delete(path, params={})
|
35
|
-
perform(:delete, path, params)
|
36
|
-
end
|
37
|
-
|
38
18
|
def resource(name)
|
39
19
|
klass_string = "Reviewed::#{name.to_s.singularize.classify}"
|
40
|
-
|
20
|
+
|
21
|
+
begin
|
22
|
+
klass = klass_string.constantize
|
23
|
+
rescue
|
24
|
+
raise "Resource: #{klass_string} not found"
|
25
|
+
end
|
41
26
|
end
|
42
27
|
|
43
28
|
def method_missing(method, *args, &block)
|
@@ -45,34 +30,12 @@ module Reviewed
|
|
45
30
|
end
|
46
31
|
|
47
32
|
def connection
|
48
|
-
@connection ||= ::Faraday.new(url:
|
33
|
+
@connection ||= ::Faraday.new(url: BASE_URI) do |faraday|
|
49
34
|
faraday.response :mashify
|
50
|
-
faraday.response :errors
|
51
35
|
faraday.response :json
|
52
|
-
faraday.request :api_key
|
53
36
|
faraday.request :url_encoded
|
54
37
|
faraday.adapter Faraday.default_adapter
|
55
38
|
end
|
56
39
|
end
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
def perform(method, path, params={})
|
61
|
-
begin
|
62
|
-
self.connection.send(method.to_sym, path, params) do |request|
|
63
|
-
request.params.merge!(self.request_params)
|
64
|
-
request.headers['X-Reviewed-Authorization'] ||= self.api_key
|
65
|
-
end
|
66
|
-
rescue Faraday::Error::ClientError => e
|
67
|
-
message = <<-EOS.gsub(/^[ ]*/, '')
|
68
|
-
API Error. method: #{method}. path: #{path}. params: #{params.to_s}. api_key: #{self.api_key}
|
69
|
-
Original exception message:
|
70
|
-
#{e.message}
|
71
|
-
EOS
|
72
|
-
new_exception = Reviewed::ApiError.new(msg: message)
|
73
|
-
new_exception.set_backtrace(e.backtrace) # TODO not seeing in Airbrake
|
74
|
-
raise new_exception
|
75
|
-
end
|
76
|
-
end
|
77
40
|
end
|
78
41
|
end
|
data/lib/reviewed/product.rb
CHANGED
data/lib/reviewed/request.rb
CHANGED
@@ -4,20 +4,39 @@ module Reviewed
|
|
4
4
|
attr_reader :path
|
5
5
|
|
6
6
|
def initialize(opts={})
|
7
|
-
if opts[:resource].kind_of?(
|
7
|
+
if opts[:resource].kind_of?(String)
|
8
|
+
@path = opts[:resource]
|
9
|
+
else
|
8
10
|
@resource = opts[:resource]
|
9
11
|
@path = @resource.path
|
10
|
-
else
|
11
|
-
@path = opts[:resource].to_s
|
12
12
|
end
|
13
13
|
|
14
14
|
@client = opts[:client] || Reviewed::Client.new
|
15
15
|
end
|
16
16
|
|
17
|
+
# Perform an HTTP GET request
|
18
|
+
def get(path, params={})
|
19
|
+
perform(:get, path, params)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Perform an HTTP PUT request
|
23
|
+
def put(path, params={})
|
24
|
+
perform(:put, path, params)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Perform an HTTP DELETE request
|
28
|
+
def post(path, params={})
|
29
|
+
perform(:post, path, params)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Perform an HTTP DELETE request
|
33
|
+
def delete(path, params={})
|
34
|
+
perform(:delete, path, params)
|
35
|
+
end
|
36
|
+
|
17
37
|
# Get request on resource#show
|
18
38
|
def find(id, params={})
|
19
|
-
|
20
|
-
object_from_response(:get, url_path.join('/'), params)
|
39
|
+
object_from_response(:get, "#{path}/#{id}", params)
|
21
40
|
end
|
22
41
|
|
23
42
|
# Get request on resource#index with query params
|
@@ -31,13 +50,22 @@ module Reviewed
|
|
31
50
|
end
|
32
51
|
|
33
52
|
def object_from_response(method, url, params={})
|
34
|
-
response =
|
53
|
+
response = self.send(method, url, params)
|
35
54
|
resource.new(response.body)
|
36
55
|
end
|
37
56
|
|
38
57
|
def collection_from_response(method, url, params={})
|
39
|
-
response =
|
58
|
+
response = self.send(method, url, params)
|
40
59
|
Reviewed::Collection.new(client, resource, response, params)
|
41
60
|
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def perform(method, path, params={})
|
65
|
+
client.connection.send(method.to_sym, path, params) do |request|
|
66
|
+
request.params.merge!(client.request_params)
|
67
|
+
request.headers['X-Reviewed-Authorization'] ||= client.api_key
|
68
|
+
end
|
69
|
+
end
|
42
70
|
end
|
43
71
|
end
|
data/lib/reviewed/version.rb
CHANGED
data/lib/reviewed.rb
CHANGED
@@ -3,7 +3,6 @@ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
|
|
3
3
|
require 'faraday'
|
4
4
|
require 'faraday_middleware'
|
5
5
|
require 'faraday/api_key'
|
6
|
-
require 'faraday/errors'
|
7
6
|
require 'active_support/inflector'
|
8
7
|
require 'active_support/core_ext'
|
9
8
|
require 'active_model'
|
@@ -17,26 +16,15 @@ require 'reviewed/collection'
|
|
17
16
|
require 'reviewed/base'
|
18
17
|
|
19
18
|
require 'reviewed/manufacturer_spec'
|
20
|
-
require 'reviewed/award'
|
21
|
-
require 'reviewed/brand'
|
22
19
|
require 'reviewed/product'
|
23
20
|
require 'reviewed/article'
|
24
21
|
require 'reviewed/author'
|
22
|
+
require 'reviewed/brand'
|
25
23
|
require 'reviewed/page'
|
26
24
|
require 'reviewed/website'
|
27
25
|
|
28
26
|
|
29
27
|
module Reviewed
|
30
|
-
class
|
31
|
-
attr_accessor :url
|
32
|
-
|
33
|
-
def initialize(opts={})
|
34
|
-
@url = opts[:url]
|
35
|
-
super(opts[:msg])
|
36
|
-
end
|
37
|
-
end
|
38
|
-
class ConfigurationError < Reviewed::BaseError; end
|
39
|
-
class ResourceNotFound < Reviewed::BaseError; end
|
40
|
-
class ApiError < Reviewed::BaseError; end
|
28
|
+
class ConfigurationError < StandardError; end
|
41
29
|
end
|
42
30
|
|
data/reviewed.gemspec
CHANGED
@@ -22,7 +22,6 @@ Gem::Specification.new do |gem|
|
|
22
22
|
gem.add_dependency 'hashie', '~> 1.2'
|
23
23
|
gem.add_dependency 'rack'
|
24
24
|
|
25
|
-
gem.add_development_dependency 'rake'
|
26
25
|
gem.add_development_dependency 'rspec', '>= 2.10'
|
27
26
|
gem.add_development_dependency 'webmock', '>= 1.8'
|
28
27
|
gem.add_development_dependency 'vcr', '>= 2.1'
|
data/spec/article_spec.rb
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Reviewed::Article
|
3
|
+
describe Reviewed::Article do
|
4
|
+
use_vcr_cassette 'article/grill'
|
4
5
|
|
5
6
|
let(:client) do
|
6
7
|
Reviewed::Client.new(api_key: TEST_KEY, base_uri: TEST_URL)
|
7
8
|
end
|
8
9
|
|
9
10
|
before(:each) do
|
10
|
-
@article = client.articles.find('big-green-egg-medium-charcoal-grill-review'
|
11
|
+
@article = client.articles.find('big-green-egg-medium-charcoal-grill-review')
|
11
12
|
end
|
12
13
|
|
13
|
-
describe 'associations'
|
14
|
+
describe 'associations' do
|
14
15
|
|
15
16
|
describe 'pages' do
|
17
|
+
use_vcr_cassette 'article/pages'
|
16
18
|
|
17
19
|
it 'has_many :pages' do
|
18
20
|
Reviewed::Article._embedded_many.should include({"pages"=>Reviewed::Page})
|
@@ -20,6 +22,7 @@ describe Reviewed::Article, vcr: true do
|
|
20
22
|
end
|
21
23
|
|
22
24
|
describe 'products' do
|
25
|
+
use_vcr_cassette 'article/products'
|
23
26
|
|
24
27
|
it 'has_many :products' do
|
25
28
|
Reviewed::Article._embedded_many.should include({"products"=>Reviewed::Product})
|
@@ -33,6 +36,7 @@ describe Reviewed::Article, vcr: true do
|
|
33
36
|
end
|
34
37
|
|
35
38
|
describe 'attachments' do
|
39
|
+
use_vcr_cassette 'article/attachments'
|
36
40
|
|
37
41
|
it 'has_many :attachments' do
|
38
42
|
Reviewed::Article._embedded_many.should include({"attachments"=>Reviewed::Attachment})
|
@@ -49,7 +53,7 @@ describe Reviewed::Article, vcr: true do
|
|
49
53
|
end
|
50
54
|
|
51
55
|
it 'finds attachments by tag' do
|
52
|
-
attachments = @article.attachments('
|
56
|
+
attachments = @article.attachments('hero')
|
53
57
|
attachments.length.should == 1
|
54
58
|
attachments.each do |attachment|
|
55
59
|
attachment.tags.join(',').should match(/hero/i)
|
@@ -63,11 +67,12 @@ describe Reviewed::Article, vcr: true do
|
|
63
67
|
end
|
64
68
|
end
|
65
69
|
|
66
|
-
describe 'find_page'
|
70
|
+
describe 'find_page' do
|
71
|
+
use_vcr_cassette 'article/find_page'
|
67
72
|
|
68
73
|
it 'finds a page with a matching slug' do
|
69
74
|
article = client.articles.find('minden-master-ii-grill-review')
|
70
|
-
article.pages.length.should ==
|
75
|
+
article.pages.length.should == 9
|
71
76
|
page = article.find_page('performance')
|
72
77
|
page.should == article.pages[2]
|
73
78
|
page.name.should == 'Performance'
|
@@ -75,7 +80,8 @@ describe Reviewed::Article, vcr: true do
|
|
75
80
|
end
|
76
81
|
|
77
82
|
|
78
|
-
describe 'primary_product'
|
83
|
+
describe 'primary_product' do
|
84
|
+
use_vcr_cassette 'article/products'
|
79
85
|
|
80
86
|
before(:each) do
|
81
87
|
@article = client.articles.find('big-green-egg-medium-charcoal-grill-review')
|
@@ -89,10 +95,5 @@ describe Reviewed::Article, vcr: true do
|
|
89
95
|
it "returns a product of the correct class" do
|
90
96
|
@product.class.should == Reviewed::Product
|
91
97
|
end
|
92
|
-
|
93
|
-
it 'returns nil if does not respond to products' do
|
94
|
-
@article.attributes.delete(:products)
|
95
|
-
@article.primary_product.should be_nil
|
96
|
-
end
|
97
98
|
end
|
98
99
|
end
|
data/spec/base_spec.rb
CHANGED
@@ -41,35 +41,9 @@ describe Reviewed::Base do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
describe 'attributes' do
|
44
|
-
before(:each) do
|
45
|
-
@timestamp = Time.parse("01/01/2013 10:00:00 GMT")
|
46
|
-
@model = Example.new(id: 'id', super_awesome: 'true', created_at: @timestamp.to_s, updated_at: @timestamp.to_s)
|
47
|
-
end
|
48
|
-
|
49
44
|
it 'returns the named attribute (via method missing)' do
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
it 'has a created at timestamp' do
|
54
|
-
@model.created_at.should == @timestamp
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'has an updated at timestamp' do
|
58
|
-
@model.updated_at.should == @timestamp
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe 'respond_to?' do
|
63
|
-
before(:each) do
|
64
|
-
@model = Example.new(id: 'id', super_awesome: 'true')
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'takes attributes into consideration' do
|
68
|
-
@model.respond_to?(:super_awesome).should be_true
|
69
|
-
end
|
70
|
-
|
71
|
-
it 'preserves the original behavior' do
|
72
|
-
@model.respond_to?(:fafafa).should be_false
|
45
|
+
model = Example.new(:id => 'id', :super_awesome => 'true')
|
46
|
+
model.super_awesome.should == 'true'
|
73
47
|
end
|
74
48
|
end
|
75
49
|
end
|
data/spec/client_spec.rb
CHANGED
@@ -43,8 +43,10 @@ describe Reviewed::Client do
|
|
43
43
|
|
44
44
|
context 'constant does not exist' do
|
45
45
|
|
46
|
-
it '
|
47
|
-
|
46
|
+
it 'raises an error' do
|
47
|
+
expect {
|
48
|
+
client.resource("tester")
|
49
|
+
}.to raise_error
|
48
50
|
end
|
49
51
|
end
|
50
52
|
end
|
@@ -65,39 +67,6 @@ describe Reviewed::Client do
|
|
65
67
|
end
|
66
68
|
end
|
67
69
|
|
68
|
-
describe '#get' do
|
69
|
-
|
70
|
-
it 'delegates to perform' do
|
71
|
-
client.should_receive(:perform).with(:get, "path", kind_of(Hash))
|
72
|
-
client.get("path", {})
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
describe '#put' do
|
77
|
-
|
78
|
-
it 'delegates to client' do
|
79
|
-
client.should_receive(:perform).with(:put, "path", kind_of(Hash))
|
80
|
-
client.put("path", {})
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
describe '#post' do
|
85
|
-
|
86
|
-
it 'delegates to client' do
|
87
|
-
client.should_receive(:perform).with(:post, "path", kind_of(Hash))
|
88
|
-
client.post("path", {})
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
describe '#delete' do
|
93
|
-
|
94
|
-
it 'delegates to request' do
|
95
|
-
client.should_receive(:perform).with(:delete, "path", kind_of(Hash))
|
96
|
-
client.delete("path", {})
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
|
101
70
|
describe '#connnection' do
|
102
71
|
|
103
72
|
let(:conn) { client.send(:connection) }
|
@@ -123,43 +92,7 @@ describe Reviewed::Client do
|
|
123
92
|
end
|
124
93
|
|
125
94
|
it 'sets the url' do
|
126
|
-
conn.url_prefix.to_s.should
|
95
|
+
conn.url_prefix.to_s.should eql('http://localhost:3000/api/v1')
|
127
96
|
end
|
128
97
|
end
|
129
|
-
|
130
|
-
describe '#perform' do
|
131
|
-
|
132
|
-
describe 'request_params', vcr: true do
|
133
|
-
|
134
|
-
context 'set' do
|
135
|
-
|
136
|
-
it 'merges quest params' do
|
137
|
-
client.request_params = { per_page: 1 }
|
138
|
-
collection = client.articles.where({})
|
139
|
-
collection.count.should eql(1)
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
context 'not set' do
|
144
|
-
|
145
|
-
it 'has nil query params' do
|
146
|
-
collection = client.articles.where({})
|
147
|
-
collection.count.should eql(20)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
context 'with error' do
|
156
|
-
|
157
|
-
context 'bad response' do
|
158
|
-
it 'should raise a Reviewed::ApiError' do
|
159
|
-
client.connection.stub(:send).and_raise Faraday::Error::ClientError.new(true)
|
160
|
-
lambda { client.get('something that times out') }.should raise_error(Reviewed::ApiError)
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
end
|
165
98
|
end
|
data/spec/collection_spec.rb
CHANGED
@@ -1,42 +1,37 @@
|
|
1
1
|
require 'spec_helper.rb'
|
2
|
+
require 'ostruct'
|
2
3
|
|
3
4
|
describe Faraday::ApiKey do
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
stub.get('/products/123') {[ 200, {foo: 'hi'}, '']}
|
6
|
+
class FauxApp
|
7
|
+
def call(env)
|
8
|
+
return env
|
9
9
|
end
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
builder.adapter :test, stubs
|
14
|
-
end
|
12
|
+
let(:faraday) { Faraday::ApiKey.new(FauxApp.new) }
|
13
|
+
let(:env) { {} }
|
15
14
|
|
16
|
-
|
17
|
-
expect {
|
18
|
-
test.get('/products/123')
|
19
|
-
}.to raise_error(Reviewed::ConfigurationError)
|
20
|
-
end
|
21
|
-
end
|
15
|
+
describe 'call' do
|
22
16
|
|
23
|
-
|
17
|
+
context 'no auth token' do
|
24
18
|
|
25
|
-
|
26
|
-
|
19
|
+
it 'raises Reviewed::ConfigurationError' do
|
20
|
+
expect {
|
21
|
+
faraday.call(env)
|
22
|
+
}.to raise_error
|
23
|
+
end
|
27
24
|
end
|
28
25
|
|
29
|
-
|
30
|
-
builder.request :api_key
|
31
|
-
builder.adapter :test, stubs
|
32
|
-
end
|
26
|
+
context 'auth token' do
|
33
27
|
|
34
|
-
|
28
|
+
let(:env) { OpenStruct.new(request: OpenStruct.new({ headers: {'X-Reviewed-Authorization' => '123'} })) }
|
35
29
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
30
|
+
it 'does not error' do
|
31
|
+
expect {
|
32
|
+
faraday.call(env)
|
33
|
+
}.to_not raise_error
|
34
|
+
end
|
40
35
|
end
|
41
36
|
end
|
42
37
|
end
|