lhs 11.0.1 → 11.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0b33b5484ee3a16c6d834c1520bb907c5c84cc3e
4
- data.tar.gz: 4f179bf4a46b0e109bcd079353186e61ec08c5d4
3
+ metadata.gz: 43edcbb95ff9fac3487269d82e907074ebd34c77
4
+ data.tar.gz: 4c0b1606d84502bcbf2868cf0bacef57d6d189d3
5
5
  SHA512:
6
- metadata.gz: 56558afe98484a87c27bd99d379172f6166ba9d27c32662f35e0d88cb1d010223858a60fac2ae3714d6860ee24f03c665f0388a53878193874d4120939d66b70
7
- data.tar.gz: ce2b1ba748bd7feb39858457d36dd8e3a8f6c3dcc9db11d156279e599f83e082315e8a008127e8b7285ea393c0e8a1029271e917e77f295cae85cdc56d539fb9
6
+ metadata.gz: c2a9cd34ef7a3cb2967590b19e950e9925c71d1d9f9208d72a9a032bc2cdca061ce787ca2ab8447bfe5f3ea31fc971eed87f91fa24e1880b486b0016e897a57e
7
+ data.tar.gz: c1b547a13121304b67706163dbb5124cee91d9e4107e16e1dd1bf57abe55fc05c1a35e243b8fd0c9c401d3d92ae34f5baeb57c01e0a3bfac10676a1637ff1c3b
data/lhs.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.requirements << 'Ruby >= 2.0.0'
21
21
  s.required_ruby_version = '>= 2.0.0'
22
22
 
23
- s.add_dependency 'lhc', '>= 5.0.2'
23
+ s.add_dependency 'lhc', '>= 5.0.3'
24
24
  s.add_dependency 'activesupport', '> 4.2'
25
25
 
26
26
  s.add_development_dependency 'rspec-rails', '>= 3.0.0'
@@ -23,9 +23,24 @@ class LHS::Proxy
23
23
  value = _data._raw[name.to_s.classify.to_sym] if value.nil?
24
24
  end
25
25
 
26
- return access_item(value) if value.is_a?(Hash)
27
- return access_collection(value) if value.is_a?(Array)
28
- convert(value)
26
+ record = LHS::Record.for_url(value[:href]) if value.is_a?(Hash) && value[:href]
27
+
28
+ access_item(value, record) ||
29
+ access_collection(value, record) ||
30
+ convert(value)
31
+ end
32
+
33
+ def accessing_item?(value, record)
34
+ return false unless value.is_a?(Hash)
35
+ return false if record && value[record.items_key].present?
36
+ return false if !record && value[LHS::Record::Configuration::DEFAULT_ITEMS_KEY].present?
37
+ true
38
+ end
39
+
40
+ def accessing_collection?(value, record)
41
+ return true if value.is_a?(Array)
42
+ return true if value.is_a?(Hash) && record && value[record.items_key].present?
43
+ return true if value.is_a?(Hash) && !record && value[LHS::Record::Configuration::DEFAULT_ITEMS_KEY].present?
29
44
  end
30
45
 
31
46
  def convert(value)
@@ -39,20 +54,22 @@ class LHS::Proxy
39
54
  end
40
55
  end
41
56
 
42
- def access_item(value)
43
- record = LHS::Record.for_url(value[:href]) if value[:href]
44
- data = LHS::Data.new(value, _data)
45
- if record
46
- record.new(data)
47
- else
48
- data
49
- end
57
+ def access_item(value, record)
58
+ return unless accessing_item?(value, record)
59
+ wrap_return(value, record)
60
+ end
61
+
62
+ def access_collection(value, record)
63
+ return unless accessing_collection?(value, record)
64
+ collection_data = LHS::Data.new(value, _data)
65
+ collection = LHS::Collection.new(collection_data)
66
+ wrap_return(collection, record)
50
67
  end
51
68
 
52
- def access_collection(value)
69
+ def wrap_return(value, record)
53
70
  data = LHS::Data.new(value, _data)
54
- collection = LHS::Collection.new(data)
55
- LHS::Data.new(collection, _data)
71
+ return record.new(data) if record
72
+ data
56
73
  end
57
74
 
58
75
  def date?(value)
@@ -7,6 +7,8 @@ class LHS::Record
7
7
  module Configuration
8
8
  extend ActiveSupport::Concern
9
9
 
10
+ DEFAULT_ITEMS_KEY = :items
11
+
10
12
  mattr_accessor :configuration
11
13
 
12
14
  module ClassMethods
@@ -15,7 +17,7 @@ class LHS::Record
15
17
  end
16
18
 
17
19
  def items_key
18
- (@configuration.try(:[], :items_key) || :items).to_sym
20
+ (@configuration.try(:[], :items_key) || DEFAULT_ITEMS_KEY).to_sym
19
21
  end
20
22
 
21
23
  def limit_key
@@ -49,11 +49,22 @@ class LHS::Record
49
49
  endpoint = LHS::Endpoint.for_url(url)
50
50
  return unless endpoint
51
51
  template = endpoint.url
52
- new_options = options.deep_merge(params: LHC::Endpoint.values_as_params(template, url))
52
+ new_options = options.deep_merge(
53
+ params: LHC::Endpoint.values_as_params(template, url).merge(values_from_get_params(url))
54
+ )
53
55
  new_options[:url] = template
54
56
  new_options
55
57
  end
56
58
 
59
+ # Extracts values from url's get parameters
60
+ # and return them as a ruby hash
61
+ def values_from_get_params(url)
62
+ uri = URI.parse(url)
63
+ return {} unless uri.query.present?
64
+ params = Rack::Utils.parse_nested_query(uri.query)
65
+ params
66
+ end
67
+
57
68
  # Extends existing raw data with additionaly fetched data
58
69
  def extend_raw_data!(data, addition, key)
59
70
  if data.collection?
data/lib/lhs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module LHS
2
- VERSION = "11.0.1"
2
+ VERSION = "11.0.2"
3
3
  end
@@ -0,0 +1,33 @@
1
+ require 'rails_helper'
2
+
3
+ describe LHS::Proxy do
4
+ before(:each) do
5
+ class Search < LHS::Record
6
+ endpoint 'http://search/results', items_key: :docs
7
+ end
8
+
9
+ class Feedback < LHS::Record
10
+ endpoint 'http://datastore/places/:place_id/feedbacks'
11
+ end
12
+ end
13
+
14
+ context 'identifying records' do
15
+ it 'identifies records correctly even if parent record has another configuration set' do
16
+ stub_request(:get, "http://search/results?what=Blumen")
17
+ .to_return(body: {
18
+ place: { href: 'http://datastore/places/1' }
19
+ }.to_json)
20
+ stub_request(:get, "http://datastore/places/1")
21
+ .to_return(body: {
22
+ feedbacks: { href: 'http://datastore/places/1/feedbacks?limit=10&offset=0' }
23
+ }.to_json)
24
+ stub_request(:get, "http://datastore/places/1/feedbacks?limit=10&offset=0")
25
+ .to_return(body: {
26
+ items: [{ review: 'Nice restaurant' }]
27
+ }.to_json)
28
+ result = Search.where(what: 'Blumen').includes(place: :feedbacks)
29
+ expect(result.place.feedbacks).to be_kind_of Feedback
30
+ expect(result.place.feedbacks.first.review).to eq 'Nice restaurant'
31
+ end
32
+ end
33
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lhs
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.0.1
4
+ version: 11.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - https://github.com/local-ch/lhs/graphs/contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-08 00:00:00.000000000 Z
11
+ date: 2017-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lhc
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 5.0.2
19
+ version: 5.0.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 5.0.2
26
+ version: 5.0.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -308,6 +308,7 @@ files:
308
308
  - spec/pagination/pages_left_spec.rb
309
309
  - spec/proxy/create_sub_resource_spec.rb
310
310
  - spec/proxy/load_spec.rb
311
+ - spec/proxy/record_identification_spec.rb
311
312
  - spec/rails_helper.rb
312
313
  - spec/record/all_spec.rb
313
314
  - spec/record/build_spec.rb
@@ -469,6 +470,7 @@ test_files:
469
470
  - spec/pagination/pages_left_spec.rb
470
471
  - spec/proxy/create_sub_resource_spec.rb
471
472
  - spec/proxy/load_spec.rb
473
+ - spec/proxy/record_identification_spec.rb
472
474
  - spec/rails_helper.rb
473
475
  - spec/record/all_spec.rb
474
476
  - spec/record/build_spec.rb