reviewed 0.2.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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