reviewed 0.2.2 → 0.4.0

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.
Files changed (66) hide show
  1. data/lib/reviewed.rb +1 -0
  2. data/lib/reviewed/article.rb +3 -11
  3. data/lib/reviewed/attachable.rb +21 -0
  4. data/lib/reviewed/attachment.rb +1 -0
  5. data/lib/reviewed/base.rb +20 -6
  6. data/lib/reviewed/client.rb +24 -9
  7. data/lib/reviewed/collection.rb +1 -1
  8. data/lib/reviewed/embeddable.rb +4 -0
  9. data/lib/reviewed/product.rb +2 -11
  10. data/lib/reviewed/request.rb +9 -7
  11. data/lib/reviewed/version.rb +1 -1
  12. data/spec/article_spec.rb +8 -6
  13. data/spec/base_spec.rb +16 -3
  14. data/spec/client_spec.rb +22 -19
  15. data/spec/fixtures/vcr/Reviewed_Article/associations/attachments/assigns_attachments_to_the_correct_class.yml +330 -0
  16. data/spec/fixtures/vcr/Reviewed_Article/associations/attachments/does_not_has_many_attachments.yml +249 -0
  17. data/spec/fixtures/vcr/Reviewed_Article/associations/attachments/does_not_have_any_matching_attachments.yml +296 -593
  18. data/spec/fixtures/vcr/Reviewed_Article/associations/attachments/finds_attachments_by_tag.yml +307 -593
  19. data/spec/fixtures/vcr/Reviewed_Article/associations/attachments/gets_gallery_attachments.yml +327 -0
  20. data/spec/fixtures/vcr/Reviewed_Article/associations/deals/has_many_deals.yml +236 -571
  21. data/spec/fixtures/vcr/Reviewed_Article/associations/pages/has_many_pages.yml +241 -593
  22. data/spec/fixtures/vcr/Reviewed_Article/associations/products/has_many_products.yml +236 -569
  23. data/spec/fixtures/vcr/Reviewed_Article/associations/products/returns_products_of_the_correct_class.yml +241 -593
  24. data/spec/fixtures/vcr/Reviewed_Article/associations/related_articles/has_many_related_articles.yml +236 -584
  25. data/spec/fixtures/vcr/Reviewed_Article/find_page/finds_a_page_with_a_matching_slug.yml +393 -769
  26. data/spec/fixtures/vcr/Reviewed_Article/primary_product/returns_a_product_of_the_correct_class.yml +480 -1184
  27. data/spec/fixtures/vcr/Reviewed_Article/primary_product/returns_nil_if_does_not_respond_to_products.yml +480 -1184
  28. data/spec/fixtures/vcr/Reviewed_Article/primary_product/returns_the_primary_product.yml +480 -1184
  29. data/spec/fixtures/vcr/Reviewed_Client/_perform/request_params/not_set/has_nil_query_params.yml +205 -246
  30. data/spec/fixtures/vcr/Reviewed_Client/_perform/request_params/set/merges_quest_params.yml +73 -90
  31. data/spec/fixtures/vcr/Reviewed_Collection/collection_data/fetches_the_first_page_by_default.yml +115 -175
  32. data/spec/fixtures/vcr/Reviewed_Collection/collection_data/is_enumerable.yml +115 -175
  33. data/spec/fixtures/vcr/Reviewed_Collection/next_page/fetches_the_next_page_of_results.yml +202 -295
  34. data/spec/fixtures/vcr/Reviewed_Collection/page_attributes_pagination_/indicates_if_the_page_number_is_out_of_bounds.yml +115 -175
  35. data/spec/fixtures/vcr/Reviewed_Collection/page_attributes_pagination_/indicates_whether_this_is_the_first_or_last_page.yml +115 -175
  36. data/spec/fixtures/vcr/Reviewed_Collection/page_attributes_pagination_/returns_the_limit_value_max_per_page_.yml +115 -175
  37. data/spec/fixtures/vcr/Reviewed_Collection/page_attributes_pagination_/returns_the_number_of_entries_on_the_current_page.yml +115 -175
  38. data/spec/fixtures/vcr/Reviewed_Collection/page_attributes_pagination_/returns_the_offset.yml +115 -175
  39. data/spec/fixtures/vcr/Reviewed_Collection/page_attributes_pagination_/returns_the_total_item_count.yml +115 -175
  40. data/spec/fixtures/vcr/Reviewed_Collection/page_attributes_pagination_/returns_the_total_number_of_pages.yml +115 -175
  41. data/spec/fixtures/vcr/Reviewed_Collection/previous_page/fetches_the_previous_page_of_results.yml +315 -468
  42. data/spec/fixtures/vcr/Reviewed_Collection/previous_page/returns_nil_if_there_is_no_previous_page.yml +115 -175
  43. data/spec/fixtures/vcr/Reviewed_Product/associations/attachments/does_not_have_any_matching_attachments.yml +138 -108
  44. data/spec/fixtures/vcr/Reviewed_Product/associations/attachments/matches_attachments_by_tag_properly.yml +157 -0
  45. data/spec/fixtures/vcr/Reviewed_Product/associations/attachments/no_longer_has_many_attachments.yml +91 -0
  46. data/spec/fixtures/vcr/Reviewed_Product/associations/attachments/returns_attachments_by_tag.yml +157 -0
  47. data/spec/fixtures/vcr/Reviewed_Product/associations/attachments/returns_attachments_of_the_correct_class.yml +138 -111
  48. data/spec/fixtures/vcr/Reviewed_Product/manufacturer_specs/has_many_manufacturer_specs.yml +83 -108
  49. data/spec/fixtures/vcr/Reviewed_Product/manufacturer_specs/returns_attachments_of_the_correct_class.yml +83 -108
  50. data/spec/fixtures/vcr/Reviewed_Request/_where/filters_collections_using_other_supported_options.yml +69 -102
  51. data/spec/fixtures/vcr/Reviewed_Request/_where/returns_a_collection.yml +205 -246
  52. data/spec/fixtures/vcr/Reviewed_Request/_where/returns_an_empty_set_if_no_matching_data_was_found.yml +50 -75
  53. data/spec/fixtures/vcr/Reviewed_Request/_where/returns_the_appropriate_page_of_results.yml +210 -280
  54. data/spec/fixtures/vcr/Reviewed_Request/collection_from_response/returns_a_collection_object.yml +205 -246
  55. data/spec/fixtures/vcr/Reviewed_Request/collection_from_response/returns_objects_of_the_correct_class.yml +205 -246
  56. data/spec/fixtures/vcr/Reviewed_Request/object_from_response/returns_an_object_of_the_correct_class.yml +241 -593
  57. data/spec/product_spec.rb +6 -7
  58. data/spec/request_spec.rb +18 -8
  59. data/spec/spec_helper.rb +8 -2
  60. metadata +15 -14
  61. data/spec/fixtures/vcr/Reviewed_Article/associations/attachments/has_many_attachments.yml +0 -601
  62. data/spec/fixtures/vcr/Reviewed_Article/associations/attachments/returns_all_attachments.yml +0 -601
  63. data/spec/fixtures/vcr/Reviewed_Article/associations/attachments/returns_attachments_of_the_correct_class.yml +0 -601
  64. data/spec/fixtures/vcr/Reviewed_Product/associations/attachments/finds_attachments_by_tag.yml +0 -116
  65. data/spec/fixtures/vcr/Reviewed_Product/associations/attachments/has_many_attachments.yml +0 -119
  66. data/spec/fixtures/vcr/Reviewed_Product/associations/attachments/returns_all_attachments.yml +0 -116
@@ -15,6 +15,7 @@ require 'reviewed/request'
15
15
  require 'reviewed/client'
16
16
  require 'reviewed/collection'
17
17
  require 'reviewed/base'
18
+ require 'reviewed/attachable'
18
19
 
19
20
  require 'reviewed/manufacturer_spec'
20
21
  require 'reviewed/award'
@@ -5,9 +5,11 @@ require 'reviewed/deal'
5
5
 
6
6
  module Reviewed
7
7
  class Article < Base
8
+
9
+ has_attachments
10
+
8
11
  has_many :pages
9
12
  has_many :products
10
- has_many :attachments
11
13
  has_many :deals
12
14
  has_many :related_articles, class_name: "Reviewed::Article"
13
15
 
@@ -21,15 +23,5 @@ module Reviewed
21
23
  end
22
24
  end
23
25
 
24
- def attachments(tag=nil)
25
- if tag.present?
26
- @attributes.attachments.select do |attachment|
27
- attachment_tags = attachment.tags || []
28
- attachment_tags.map(&:downcase).include?(tag.downcase)
29
- end
30
- else
31
- @attributes.attachments
32
- end
33
- end
34
26
  end
35
27
  end
@@ -0,0 +1,21 @@
1
+ module Reviewed
2
+ module Attachable
3
+
4
+ def attachments tag, opts={}
5
+ (@attachments ||= {})[tag] ||= fetch_attachments tag, opts
6
+ end
7
+
8
+ def gallery num=8, page=1
9
+ fetch_attachments 'gallery', :per_page => num, :page => page, :order => 'priority'
10
+ end
11
+
12
+ private
13
+
14
+ def fetch_attachments tag, opts={}
15
+ params = opts.merge :tags => tag
16
+ req = Request.new :resource => Attachment, :scope => self
17
+ req.where params
18
+ end
19
+
20
+ end
21
+ end
@@ -1,4 +1,5 @@
1
1
  module Reviewed
2
2
  class Attachment < Reviewed::Base
3
+
3
4
  end
4
5
  end
@@ -30,18 +30,32 @@ module Reviewed
30
30
 
31
31
  class << self
32
32
 
33
- def path
34
- @resource_name ||= association_name
33
+ # poor man's polymorphic_url
34
+ def to_path parent_scope=nil
35
+ if parent_scope && parent_scope.respond_to?(:to_param)
36
+ [association_name(parent_scope.class), parent_scope.to_param, association_name].join('/')
37
+ else
38
+ association_name
39
+ end
35
40
  end
36
41
 
37
- def association_name
38
- self.name.demodulize.downcase.pluralize
42
+ def association_name klass=nil
43
+ klass ||= self
44
+ klass.name.demodulize.downcase.pluralize
39
45
  end
46
+
47
+ end
48
+
49
+ def to_path
50
+ [self.class.to_path, self.to_param].join('/')
51
+ end
52
+
53
+ def to_param
54
+ id
40
55
  end
41
56
 
42
57
  def respond_to?(sym, include_private=false)
43
- return true if super
44
- @attributes.has_key?(sym)
58
+ super || @attributes.has_key?(sym)
45
59
  end
46
60
 
47
61
  def method_missing(sym, *args, &block)
@@ -1,18 +1,31 @@
1
1
  module Reviewed
2
2
  class Client
3
- attr_accessor :api_key, :base_uri, :api_version, :request_params
3
+ attr_accessor :request_params
4
4
 
5
- BASE_URI = "http://localhost:3000/api/v1"
5
+ DEFAULT_BASE_URI = "http://localhost:3000/api/v1"
6
+
7
+ class << self
8
+ attr_accessor :api_key, :api_base_uri, :api_version
9
+
10
+ def configure
11
+ yield self
12
+ self
13
+ end
14
+
15
+ end
6
16
 
7
17
  def initialize(opts={})
8
- @api_key = opts[:api_key] || ENV['REVIEWED_API_KEY']
9
- @base_uri = opts[:base_uri] || BASE_URI
18
+ @base_uri = opts[:base_uri] || base_uri
19
+ @api_key = opts[:api_key]
10
20
  @request_params = opts[:request_params] || {}
11
21
  end
12
22
 
13
- def configure
14
- yield self
15
- self
23
+ def base_uri
24
+ self.class.api_base_uri || DEFAULT_BASE_URI
25
+ end
26
+
27
+ def api_key
28
+ self.class.api_key || ENV['REVIEWED_API_KEY']
16
29
  end
17
30
 
18
31
  # Perform an HTTP GET request
@@ -59,13 +72,15 @@ module Reviewed
59
72
 
60
73
  def perform(method, path, params={})
61
74
  begin
62
- self.connection.send(method.to_sym, path, params) do |request|
75
+ res = self.connection.send(method.to_sym, path, params) do |request|
63
76
  request.params.merge!(self.request_params)
64
77
  request.headers['X-Reviewed-Authorization'] ||= self.api_key
65
78
  end
79
+ raise Reviewed::ApiError.new(msg: "API connection returned redirect or error") if res.status > 204 and res.status != 404
80
+ res
66
81
  rescue Faraday::Error::ClientError => e
67
82
  message = <<-EOS.gsub(/^[ ]*/, '')
68
- API Error. method: #{method}. path: #{path}. params: #{params.to_s}. api_key: #{self.api_key}
83
+ API Error. method: #{method} url: #{base_uri} path: #{path} params: #{params.to_s} api_key: #{self.api_key}
69
84
  Original exception message:
70
85
  #{e.message}
71
86
  EOS
@@ -16,7 +16,7 @@ module Reviewed
16
16
  @klass = klass
17
17
  @params = params
18
18
  @items = []
19
- @page_attributes = body.pagination
19
+ @page_attributes = body.pagination || {}
20
20
 
21
21
  data.each do |obj|
22
22
  self.items << klass.new(obj)
@@ -50,6 +50,10 @@ module Reviewed
50
50
  module ClassMethods
51
51
  attr_accessor :_embedded_many, :_embedded_one
52
52
 
53
+ def has_attachments
54
+ include Attachable
55
+ end
56
+
53
57
  def has_many(name, opts={})
54
58
  klass = Reviewed::Embeddable.embedded_class(name.to_s, opts[:class_name])
55
59
  association = opts[:as] || name
@@ -2,20 +2,11 @@ require 'reviewed/attachment'
2
2
 
3
3
  module Reviewed
4
4
  class Product < Base
5
- has_many :attachments
5
+
6
+ has_attachments
6
7
  has_many :manufacturer_specs
7
8
  has_many :awards
8
9
  has_one :brand
9
10
 
10
- def attachments(tag=nil)
11
- if tag.present?
12
- @attributes.attachments.select do |attachment|
13
- attachment_tags = attachment.tags || []
14
- attachment_tags.map(&:downcase).include?(tag.downcase)
15
- end
16
- else
17
- @attributes.attachments
18
- end
19
- end
20
11
  end
21
12
  end
@@ -1,17 +1,19 @@
1
1
  module Reviewed
2
2
  class Request
3
3
  attr_accessor :client, :resource
4
- attr_reader :path
5
4
 
6
5
  def initialize(opts={})
7
- if opts[:resource].kind_of?(Class)
8
- @resource = opts[:resource]
9
- @path = @resource.path
6
+ @resource = opts[:resource]
7
+ @scope = opts[:scope]
8
+ @client = opts[:client] || Reviewed::Client.new
9
+ end
10
+
11
+ def path
12
+ if @resource.respond_to? :to_path
13
+ @resource.to_path(@scope)
10
14
  else
11
- @path = opts[:resource].to_s
15
+ @resource.to_s
12
16
  end
13
-
14
- @client = opts[:client] || Reviewed::Client.new
15
17
  end
16
18
 
17
19
  # Get request on resource#show
@@ -1,4 +1,4 @@
1
1
  module Reviewed
2
- VERSION = "0.2.2"
2
+ VERSION = "0.4.0"
3
3
  API_VERSION = 'v1'
4
4
  end
@@ -47,16 +47,17 @@ describe Reviewed::Article, vcr: true do
47
47
 
48
48
  describe 'attachments' do
49
49
 
50
- it 'has_many :attachments' do
51
- Reviewed::Article._embedded_many.should include({"attachments"=>Reviewed::Attachment})
50
+ it 'does not has_many :attachments' do
51
+ Reviewed::Article._embedded_many.should_not include({"attachments"=>Reviewed::Attachment})
52
52
  end
53
53
 
54
- it 'returns all attachments' do
55
- @article.attachments.length.should >= 1
54
+ it 'gets gallery attachments' do
55
+ attachments = @article.gallery(7)
56
+ attachments.length.should == 7
56
57
  end
57
58
 
58
- it 'returns attachments of the correct class' do
59
- @article.attachments.each do |attachment|
59
+ it 'assigns attachments to the correct class' do
60
+ @article.attachments(:gallery).each do |attachment|
60
61
  attachment.should be_an_instance_of(Reviewed::Attachment)
61
62
  end
62
63
  end
@@ -73,6 +74,7 @@ describe Reviewed::Article, vcr: true do
73
74
  attachments = @article.attachments('doesnotcompute')
74
75
  attachments.length.should == 0
75
76
  end
77
+
76
78
  end
77
79
  end
78
80
 
@@ -26,11 +26,24 @@ describe Reviewed::Base do
26
26
  end
27
27
  end
28
28
 
29
- describe 'path' do
29
+ describe 'to_path' do
30
30
 
31
- it 'should the demodulized resource name' do
32
- Reviewed::Article.path.should eql("articles")
31
+ it 'results in class demodulized resource name' do
32
+ Reviewed::Article.to_path.should eql("articles")
33
33
  end
34
+
35
+ it 'scoped within to_param of parent_scope' do
36
+ example = Example.new({})
37
+ example.stub :to_param => 'hoopy-frood'
38
+ Reviewed::Attachment.to_path(example).should eql("examples/hoopy-frood/attachments")
39
+ end
40
+
41
+ it 'builds instance url from an instance' do
42
+ example = Example.new({})
43
+ example.stub :to_param => 'hoopy-frood'
44
+ example.to_path.should == 'examples/hoopy-frood'
45
+ end
46
+
34
47
  end
35
48
 
36
49
  describe 'association_name' do
@@ -2,33 +2,36 @@ require 'spec_helper.rb'
2
2
 
3
3
  describe Reviewed::Client do
4
4
 
5
- let(:client) do
6
- Reviewed::Client.new(api_key: TEST_KEY, base_uri: TEST_URL)
7
- end
5
+ let(:client) { Reviewed::Client.new }
8
6
 
9
- describe 'accessors' do
7
+ describe 'config' do
10
8
 
11
- [:api_key, :base_uri, :request_params].each do |var|
12
- describe "#{var}" do
9
+ it 'should have api_key set' do
10
+ Reviewed::Client.api_key.should == TEST_KEY
11
+ end
13
12
 
14
- it 'exists' do
15
- client.instance_variables.should include(:"@#{var}")
13
+ it 'should have api_base_uri set' do
14
+ Reviewed::Client.api_base_uri.should == TEST_URL
15
+ end
16
+
17
+ # redundant
18
+ [:api_key, :api_base_uri, :api_version].each do |var|
19
+ describe "#{var}" do
20
+ it 'is readable' do
21
+ lambda { client.send(var) }.should_not raise_error
16
22
  end
17
23
  end
18
24
  end
19
- end
20
-
21
- describe '#configure' do
22
25
 
23
- it 'returns self' do
24
- client.configure{}.should be_an_instance_of(Reviewed::Client)
25
- end
26
+ end
26
27
 
27
- it 'yields self' do
28
- client.configure do |config|
29
- config.api_key = 'test_key'
28
+ describe "accessor vars" do
29
+ [:request_params].each do |var|
30
+ describe var do
31
+ it 'exists' do
32
+ client.instance_variables.should include(:"@#{var}")
33
+ end
30
34
  end
31
- client.api_key.should eql('test_key')
32
35
  end
33
36
  end
34
37
 
@@ -123,7 +126,7 @@ describe Reviewed::Client do
123
126
  end
124
127
 
125
128
  it 'sets the url' do
126
- conn.url_prefix.to_s.should match('https://')
129
+ conn.url_prefix.to_s.should match('https?://')
127
130
  end
128
131
  end
129
132
 
@@ -0,0 +1,330 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://localhost:3000/api/v1/articles/big-green-egg-medium-charcoal-grill-review?with_attachments=true
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ""
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.8.6
12
+ X-Reviewed-Authorization:
13
+ - 5bbeff36f992bbb2f6dcaf37f3e630d8
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Access-Control-Allow-Origin:
24
+ - "*"
25
+ Access-Control-Allow-Methods:
26
+ - OPTIONS, GET, POST, PUT, DELETE
27
+ Access-Control-Max-Age:
28
+ - "1000"
29
+ Access-Control-Allow-Credentials:
30
+ - "true"
31
+ Access-Control-Allow-Headers:
32
+ - x-pagination, x-requested-with, x-requested-by, x-reviewed-authorization, x-skip-cache, Content-Type
33
+ Cache-Control:
34
+ - no-cache, no-store
35
+ Content-Type:
36
+ - application/json; charset=utf-8
37
+ Vary:
38
+ - Accept-Encoding
39
+ Content-Encoding:
40
+ - gzip
41
+ X-Ua-Compatible:
42
+ - IE=Edge
43
+ X-Request-Id:
44
+ - 50af52f498231611dc93224a5e7b6a71
45
+ X-Runtime:
46
+ - "0.817392"
47
+ Connection:
48
+ - close
49
+ Server:
50
+ - thin 1.5.1 codename Straight Razor
51
+ body:
52
+ encoding: ASCII-8BIT
53
+ string: !binary |
54
+ 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
187
+ qJKH2NVbs9398n402WztRfI2z91ks4VF8jifuclGE1lQ1dcMVhfqTMZVDTTd
188
+ ybjGmHpG+Zmaa3zDp45NnFA1AtPUTKLpRhjYgWoFWmiohmt5mqr7Qdlc04p2
189
+ ZFNNfwxlU007inHNNP1RlM007SjGNdH0R1E20exAcXDzzEAUmt6BYlzTzBDe
190
+ 5E0z7SjGNcv0R1E2y3SjOLxJZhgKuxPFuOaY/ijK5phuFIc3xQxDYXTKyLhm
191
+ mGEosBmmFcXIJpjeKFoWP1PzyxiI9aYX3dK9j7zppdUjOazppWWqHU0vbTXU
192
+ lqYXc6oZ+BC9asw0p0fTi7XtCU2aNfXJkMaX6p7DW18otVTDIZZPA83VLc+m
193
+ DjU14mkRcSLPth3iEWJb7ofd+tJG8eGtL9uzfLStL3Tgat3zbLW+tH41vbX1
194
+ RdNvNXdmWTOtu0Tb/g6S+pvB+LfdK1lte+/TZMjrRja/bVphbNPDB7Vae2He
195
+ m9eGyEd6lteGeLVRuoajymaWDVE6e1k6yHR5ScifvKvl9C8J4Sd2aWq5NLVc
196
+ mlouTS0tTS1uLY1rhnubWmoOxbFbW5poera21DCdGNKZG1way9NzN7g013+u
197
+ BpcmjmdpcGmCOHeDS3P9HQ0usmP+YbW4NA/hfW9xaeKVWlx2dWVoztiy6BGw
198
+ Sv0u3bVlpnlHnuvOEm4TldTX8id5PcLWFqR2l7NXbptYpGaWk1du90CRmlV+
199
+ FCl25RVG4hUckV8Y03Wx9y0N5XM51MEnPx2vMyzaFIc1e38BmY8R2/sBPJWz
200
+ l41poAYkihzboI4a6qpNLcPU4DfVdlzN0SNq+aHulmVjCePYYnHvlctisbz2
201
+ yBJx77XLErG89sjCcO+1y8Lw1tqHl4OHra3ptbVHFoEHcBovAstrjyz99l67
202
+ LP021x5R8B20tt1Ye2SZt/faZZm3ufaI4u6gtQ1re+0RJd1Ba2NJV1p7bCG3
203
+ 79qbJc9Vvh0MrFa01U1XMz7yom2rF3Dgmwq2p9pRtG2rFXRWhZyZas20Hqn3
204
+ 2psKmgmTtnLQZEgBt3nn4WXcwNB9X9XDwFNd2/UNx9At2yaq7pgBsQwrCCwv
205
+ MG3zwy7jtvHA8DLu9iwfbRk3Grha9zzbZdzGGwzYR3w7BdabGXr3q0XkMq4r
206
+ Caz8Rb5KXuUv5U3GlW1d3bv2vON+JOJkdVs4Q+156raYcSvrthtqdNZtG/S5
207
+ 1Gsv9drLRx0uBdtLwfZSsD1SwdbSpRJpe8GWuQ6nLdRaeqMq2lWoZVhOC8XY
208
+ rpCesSZoGdrW8ucs0FpGV2H0vAVayzA6cJyVGFKB9BkKtBCtTj76Aq1lyG8z
209
+ f/8LtJYhFT13FWh19xme7m5ilUqhWx9MgIjOOf8b/7cgSqXOxvPduvYMXyTY
210
+ wieVP5vPd78X+KSa6J4vJihf0YwsRj+wPKAWbxnS0/t/zlq8ZUgtb89ci7cM
211
+ yZt73lq8ZUguXVctvkwanbQYLx4M0EPHwdy52/ah1kahvTvkbYyRs2vP9Sw3
212
+ gbBJ1Ynn2U7k+Zbtqxo41Jpl6aZvU0PTggCOYfOhhBasY4vzvRGUxfk2DCOL
213
+ 9L0xlEX6Ngwji/W9MZTF+k4Mhxfth2HQ9FYMI4v3AziSF+/bMIws4vfGUBbx
214
+ uzCMKOYPwmB3YBhZ1O+NoSzqd2EYUdwfhMHokIuRRf5BGLDI34JhbLG/L4at
215
+ pc9V9D8YYK34D+Nd52Mv/rd5HQcW/7enGlD8b8uXy8V/c2Z5A4v/ZRJOLiJO
216
+ hhT7yzsOL/LrRmT7oW/otuOqlg5xrOqrbhj4gRcEKtFh+1ZoqMHHVeTvm47f
217
+ N8vHWuTX1YGrdc/DJZSsi3maNUISk3qmVNj2Tf6ixfaQRL3V1ZnqzEy3Q0h1
218
+ 8eoFzRBNAWX0FwdzIKDygtyvE4oZuyIuErzydRgXLPbPAVtx58fp9nAlzhWi
219
+ sCgsVFCRZzHEzmmmQKwMQbHyWsgpiqQSkUWcPClppLAaxTWTbKxEn2JmoXQy
220
+ PuvU32wvT4MYTfPbCV2QOOFxZEQC6qfpG/634jEuCgwgJzKblEpKEOtme2ry
221
+ ANY146HaAnMuG/Z4fHy8vs/4dW5N2R9vQlML3SD03EhVfV0Fkruq6nkuDSLX
222
+ 1B361/wL0/0k/GKB+VjxPPYxJtX0zazLNFuQY0Bl8z2TyRby09N0itG7TbWg
223
+ 8g5JHLBW9zRCAXTkJXydOlq9u8XvLMWDFdaNmeHO9J2leHmMUAIsVzj1dc+x
224
+ bAcIHVmubpm2p/nEJ5atE2qDmTQDXwuMSL0O8oeuzMVRMxY98ZQZi4N2MTan
225
+ 0RtjmdM4DOXIrEdvlGXW4zCUI/MivVGWeZERKA/PnAxDqekHohyZWxkgOzy3
226
+ chjKkdmX3ijL7MvhKEfkZwahtA9GOTKD0xtlmcE5HOWIHM8glMbBMj4yCzQI
227
+ JWaBDkI5Nk/UF+UB4PpnkhrpGxxyw7c3Lsd0ws01slD6h55n6vIiD8gztU9V
228
+ b1VvGRN0FtPGOq0ksM3QdVSqUuo6nhGGkekQ0zc86rvU191QMyl1nHM5rX3x
229
+ 1J3WgbsY+53y3hjrTutQlCO/X94bZd1pHYpy5HfNe6OsO60HoTz8e+fDUG6c
230
+ 1qEoR34HfYDsyE7rUJQjv4/eG2XdaT0E5Yjvpg9CaR+McuT31HujrDuth6Ac
231
+ 8Z31QSiNg2V85PfXB6GsnNaBKMd+l70vygPAPbvTesrNXZxW7kUex2kN/B5O
232
+ a3A6p1UjGjGdyDR1x3YNjZqRhh9Op3aoGWYUWIbjq5Scz2nth6fptA7axWin
233
+ tS/GptM6DOVYp7UvyqbTOgzlWKe1L8qm03oAyhFO6yCUktM6DOVYp7W/7NSd
234
+ 1mEoxzqtfVE2ndbhKMc4rUNQ2gejHOu09kXZdFqHoxzjtA5BaRws42Od1iEo
235
+ Zad1EMrRTmtPlAeAew+c1tNtrv6yH8s2P0avNTie1xq0eK16fUyo7vdau18i
236
+ 2BhzSbVeUq2XVOsl1XpJtV5SrZdU6yXVekm1fqhOa5sXeaDTuj3VfqdVO53T
237
+ ekm1XlKtl1TrJdV6SbVeUq2XVOsl1XpJtX64Xqt2PK9V6+G17nr57SXVekm1
238
+ XlKtl1TrJdV6SbVeUq2XVOsl1XpJtXZ7kUdyWq0eTqt9SbVeUq2XVOsl1XpJ
239
+ tV5SrZdU6yXVekm1XlKtw71W+3heq93itZr1MbTje06yR9r16rutMcJrffHt
240
+ 11P+TrXpI8QlO1/InSbhdE6z9Kiv5LYNyzUCzSeUGJ7mm4YTWmbkU9x9YFi6
241
+ YdLAiCK9dFDbAY/0QPuDKD3QDhjjXMz+MEoXswPGOB+yP4zSh9wF42AncSAM
242
+ cBI7YIzzAocwKPcCO2CMc/P6wyjdvB0wDvfjhsGwu2GMc9T6wygdtR0wDvfE
243
+ hsEwuiVlnKs1DAa6Wu0wRvpSvWG0rX6m13aPwljzeVzNMc2P+c3dXR7KgQ7R
244
+ 9lT8taCXz3NePs95+Tznx/d5zufQnfx73L2ZsRy+mwXFqJvOD3UPW617Hji3
245
+ /xcAAAD//wMARqfi2oAbAQA=
246
+
247
+ http_version:
248
+ recorded_at: Tue, 16 Apr 2013 20:44:32 GMT
249
+ - request:
250
+ method: get
251
+ uri: http://localhost:3000/api/v1/articles/50fb2e6fbd0286d5550135a2/attachments?tags=gallery
252
+ body:
253
+ encoding: US-ASCII
254
+ string: ""
255
+ headers:
256
+ User-Agent:
257
+ - Faraday v0.8.6
258
+ X-Reviewed-Authorization:
259
+ - 5bbeff36f992bbb2f6dcaf37f3e630d8
260
+ Accept-Encoding:
261
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
262
+ Accept:
263
+ - "*/*"
264
+ response:
265
+ status:
266
+ code: 200
267
+ message: OK
268
+ headers:
269
+ Access-Control-Allow-Origin:
270
+ - "*"
271
+ Access-Control-Allow-Methods:
272
+ - OPTIONS, GET, POST, PUT, DELETE
273
+ Access-Control-Max-Age:
274
+ - "1000"
275
+ Access-Control-Allow-Credentials:
276
+ - "true"
277
+ Access-Control-Allow-Headers:
278
+ - x-pagination, x-requested-with, x-requested-by, x-reviewed-authorization, x-skip-cache, Content-Type
279
+ Cache-Control:
280
+ - no-cache, no-store
281
+ Content-Type:
282
+ - application/json; charset=utf-8
283
+ Vary:
284
+ - Accept-Encoding
285
+ Content-Encoding:
286
+ - gzip
287
+ X-Ua-Compatible:
288
+ - IE=Edge
289
+ X-Request-Id:
290
+ - c9e61241e8c1791b4a0075ae403ea398
291
+ X-Runtime:
292
+ - "0.090181"
293
+ Connection:
294
+ - close
295
+ Server:
296
+ - thin 1.5.1 codename Straight Razor
297
+ body:
298
+ encoding: ASCII-8BIT
299
+ string: !binary |
300
+ H4sIADC4bVEAA+yY2ZLiNhSG38XXgK3NNlymKpUXyFVSU5Q2N54YTNmme2a6
301
+ ePeIBnraDIsWcFIz59JI1vmkRn0+/tdI8Y5Hs79fo1JFs4glhcA6o0IlOE8V
302
+ YyxBhGkajSLZaN5pNeedmYfNx+MEjdH0T0xmJJ/h/C8zZ7NWN+es+FKb0d/+
303
+ +H281KrcLMcvWuDJ5/WTGey+rneDRVnp3RN/ag1bVFdqvNBNHX0aRc+6act6
304
+ ZT5/jVqWfGGJmb/ouvUsjhv9XOoXrcatebNcPU1aMuFL/q1e8Zd2IutlzLuO
305
+ y8VSr7o4JSwnEgmuOZkiQUmmGC2E3u1eEoYJ1ZIUBY73VebngVtkRtEAEIc6
306
+ lzCwGcYDYBzqXMIgyTCncahzFQPhYTAQvoTBkt03Z4gv6FudSxipGaYDYBzq
307
+ XMNIB8JIL2NM6TCncahzDYMMcFMOda5hIDQMhqlzAaNuSlOLV4/GOFd9a1ob
308
+ X3emp0Sz1aaqRhGvunmnv3TH532LfI02zTnAdVOrjdy9/zjG0VtHnLflN9Md
309
+ c5RRaqDrVWcWnh9aZrnkTzr+vNZvO1rrZlm2743StG7T3btmo499PJoVvGr1
310
+ sWW/Pyrddk399fBsVuLrcl6Vq3/e1pF1VWm5P6vdqrvziM2M+Bl92GtreBeN
311
+ Lr4fVlVLXi3qtpuZ/5jJuTdMpUa39aaR+urS8RVDcax5eantdjvqCxHuz1Hp
312
+ bSFKLYQo/SBEHReVHnOJOOI0KyjFWZoTpGmBlBS5ThUitJCMZCLRfCLb50u+
313
+ dE9LsuU5WpLXLgIlyp7xKFF+lGGOZU95dCw/yjAFs6c8KlgApbehOVIaQ/Oj
314
+ DBM4l7uzFzg/yjC/s6c8+p0/pb/+uVGm3pRhdmhPebRDf0p/eXSjJN53PMwt
315
+ 3Sh3bulFGaie1pQecPZmeuKCuynxfntBzvrIzfWUFrOU/grWek4jPa31x6Vu
316
+ Wyt7nLWmVOVZohOt82xKlCpoxqkgU23++gLnClHzSycbzlrteE6t1WkXwdZq
317
+ y3hqrW6UodZqS3lqrW6UodZqS3lqrR6UAdbqRPnBWt0oQ63V/u70rdWNMtRa
318
+ bSlPrdWdMsRaXShTb8pQa7WlPLVWd8oQa3WhJN53PNRaXSg/WqsTZbC1WlJ6
319
+ wP0PrPVxm+tZK2L4V5RWdj9pZRbSiiBqhagVolaIWiFqhagVolaIWiFqhajV
320
+ 3VrR/awVWVhrAlErRK0QtULUClErRK0QtULUClErRK3O0prcT1qTM9KK+nOk
321
+ vC2tzEJaGUStELVC1ApRK0StELVC1ApRK0StP7W1ntNIT2v9canb1ioeZ60Q
322
+ tULUClErRK0QtULUClErRK0Qtf600iruJ63itrQK8ihpFXiasTRTFBUsx4ym
323
+ UyS44CzFXKdMESoFkqRIhpJWW56+tDruIlBa7Rn70upKGSat9pR9aXWlDJNW
324
+ e8q+tHpRekurI+W7tLpShkmry935KK2ulGHSak/Zl1YfSn9pdaNMvSnDpNWe
325
+ si+tPpT+0upGSbzveJi0ulF+l1ZHykBptab0gPvPpfWRmwNp3VvkfaTVLGWk
326
+ 9dP2XwEAAAD//wMAgUEV5hFUAAA=
327
+
328
+ http_version:
329
+ recorded_at: Tue, 16 Apr 2013 20:44:32 GMT
330
+ recorded_with: VCR 2.4.0