lhs 7.3.0 → 7.4.0

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: af216b090a45a83dea5acd0a3af1492932999f59
4
- data.tar.gz: a46a8f31fe3f31f577fcb97585c13f23739128da
3
+ metadata.gz: 4587fc1585c5d53dcbe9470a65cb49af38c965da
4
+ data.tar.gz: 97345090e54f551ea4361c97f03b566c160c72ca
5
5
  SHA512:
6
- metadata.gz: ca258fd031bec87565cc8db528d7aeb6887719cba1bc96eb62b6a9ed09b3c70d0b3c9d99c92750bd187cf26ea70e1d381c7be641ee8c27e1fe772ef5eead1fcd
7
- data.tar.gz: 863c29e31f101e9b8acb69d274998e48503d71176ac26bcd3001e18d6f05fce49daf0c85462fec705e12482b1589aedfaee8bc626056c62afea7f99e8caa21fd
6
+ metadata.gz: cb6d9e6fa5ee7585bb7af456ee60f521b322cc484dba2a4714896a1ffc1ef9ed40a1d1ed914446335dc487a486d042f596e9c08d30fad301b685dde75b51f254
7
+ data.tar.gz: 7915323a720894ffd38e4810ae3f0bce107692f3db2df801b8d092918b7698d33b2ec4879788c15bcf0711371d1daadabae2893443714ea18e1d9011ad6a5300
@@ -37,13 +37,18 @@ class LHS::Collection < LHS::Proxy
37
37
  protected
38
38
 
39
39
  def method_missing(name, *args, &block)
40
- value = _collection.send(name, *args, &block)
41
- return enclose_in_data(value) if value.is_a? Hash
42
- value
40
+ if _collection.respond_to?(name)
41
+ value = _collection.send(name, *args, &block)
42
+ return enclose_in_data(value) if value.is_a? Hash
43
+ value
44
+ elsif _data._raw.is_a?(Hash)
45
+ get(name, *args)
46
+ end
43
47
  end
44
48
 
45
- def respond_to_missing?(name, include_all = false)
46
- _collection.respond_to?(name, include_all)
49
+ def respond_to_missing?(name, _include_all = false)
50
+ # We accept every message that does not belong to set of keywords and is not a setter
51
+ BLACKLISTED_KEYWORDS.exclude?(name.to_s) && !name.to_s[/=$/]
47
52
  end
48
53
 
49
54
  private
@@ -0,0 +1,74 @@
1
+ require 'active_support'
2
+
3
+ class LHS::Proxy
4
+ module Accessors
5
+ extend ActiveSupport::Concern
6
+
7
+ # Keywords that would not be forwarded via method missing
8
+ # FIXME: Extend the set of keywords
9
+ BLACKLISTED_KEYWORDS = %w(new proxy_association)
10
+
11
+ private
12
+
13
+ def set(name, value)
14
+ key = name.to_s.gsub(/=$/, '')
15
+ _data._raw[key.to_sym] = value
16
+ end
17
+
18
+ def get(name, *args)
19
+ name = args.first if name == :[]
20
+ value = _data._raw[name.to_s]
21
+ if value.nil? && _data._raw.present?
22
+ value = _data._raw[name.to_sym]
23
+ value = _data._raw[name.to_s.classify.to_sym] if value.nil?
24
+ end
25
+
26
+ return access_item(value) if value.is_a?(Hash)
27
+ return access_collection(value) if value.is_a?(Array)
28
+ convert(value)
29
+ end
30
+
31
+ def convert(value)
32
+ return value unless value.is_a?(String)
33
+ if date_time?(value)
34
+ Time.zone.parse(value)
35
+ elsif date?(value)
36
+ Date.parse(value)
37
+ else
38
+ value
39
+ end
40
+ end
41
+
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
50
+ end
51
+
52
+ def access_collection(value)
53
+ data = LHS::Data.new(value, _data)
54
+ collection = LHS::Collection.new(data)
55
+ LHS::Data.new(collection, _data)
56
+ end
57
+
58
+ def date?(value)
59
+ value[date_time_regex, :date].presence
60
+ end
61
+
62
+ def time?(value)
63
+ value[date_time_regex, :time].presence
64
+ end
65
+
66
+ def date_time?(value)
67
+ date?(value) && time?(value)
68
+ end
69
+
70
+ def date_time_regex
71
+ /(?<date>\d{4}-\d{2}-\d{2})?(?<time>T\d{2}:\d{2}:\d{2}(\.\d*.\d{2}:\d{2})*)?/
72
+ end
73
+ end
74
+ end
@@ -34,72 +34,11 @@ class LHS::Item < LHS::Proxy
34
34
 
35
35
  def method_missing(name, *args, &_block)
36
36
  return set(name, args.try(&:first)) if name.to_s[/=$/]
37
- name = args.first if name == :[]
38
- value = _data._raw[name.to_s]
39
- if value.nil? && _data._raw.present?
40
- value = _data._raw[name.to_sym]
41
- value = _data._raw[name.to_s.classify.to_sym] if value.nil?
42
- end
43
- if value.is_a?(Hash)
44
- handle_hash(value)
45
- elsif value.is_a?(Array)
46
- data = LHS::Data.new(value, _data)
47
- collection = LHS::Collection.new(data)
48
- LHS::Data.new(collection, _data)
49
- else
50
- convert(value)
51
- end
37
+ get(name, *args)
52
38
  end
53
39
 
54
40
  def respond_to_missing?(name, _include_all = false)
55
41
  # We accept every message that does not belong to set of keywords
56
42
  BLACKLISTED_KEYWORDS.exclude?(name.to_s)
57
43
  end
58
-
59
- private
60
-
61
- # FIXME: Extend the set of keywords
62
- BLACKLISTED_KEYWORDS = %w(new proxy_association)
63
-
64
- def convert(value)
65
- return value unless value.is_a?(String)
66
- if date_time?(value)
67
- Time.zone.parse(value)
68
- elsif date?(value)
69
- Date.parse(value)
70
- else
71
- value
72
- end
73
- end
74
-
75
- def handle_hash(value)
76
- record = LHS::Record.for_url(value[:href]) if value[:href]
77
- data = LHS::Data.new(value, _data)
78
- if record
79
- record.new(data)
80
- else
81
- data
82
- end
83
- end
84
-
85
- def set(name, value)
86
- key = name.to_s.gsub(/=$/, '')
87
- _data._raw[key.to_sym] = value
88
- end
89
-
90
- def date?(value)
91
- value[date_time_regex, :date].presence
92
- end
93
-
94
- def time?(value)
95
- value[date_time_regex, :time].presence
96
- end
97
-
98
- def date_time?(value)
99
- date?(value) && time?(value)
100
- end
101
-
102
- def date_time_regex
103
- /(?<date>\d{4}-\d{2}-\d{2})?(?<time>T\d{2}:\d{2}:\d{2}(\.\d*.\d{2}:\d{2})*)?/
104
- end
105
44
  end
@@ -4,6 +4,7 @@ Dir[File.dirname(__FILE__) + '/concerns/proxy/*.rb'].each { |file| require file
4
4
  # If href is present it also alows loading/reloading
5
5
  class LHS::Proxy
6
6
 
7
+ include Accessors
7
8
  include Create
8
9
  include Link
9
10
 
@@ -1,3 +1,3 @@
1
1
  module LHS
2
- VERSION = "7.3.0"
2
+ VERSION = "7.4.0"
3
3
  end
@@ -0,0 +1,29 @@
1
+ require 'rails_helper'
2
+
3
+ describe LHS::Collection do
4
+ let(:items) { [{ name: 'Steve' }] }
5
+ let(:extra) { 'extra' }
6
+ let(:collection) { Record.where }
7
+
8
+ context 'accessors' do
9
+ let(:response_data) do
10
+ {
11
+ items: items,
12
+ extra: extra,
13
+ total: 1
14
+ }
15
+ end
16
+
17
+ before(:each) do
18
+ class Record < LHS::Record
19
+ endpoint 'http://datastore/records`'
20
+ end
21
+ stub_request(:get, %r{http://datastore/records})
22
+ .to_return(body: response_data.to_json)
23
+ end
24
+
25
+ it 'allows access to extra data passed with collection' do
26
+ expect(collection.extra).to eq(extra)
27
+ end
28
+ end
29
+ 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: 7.3.0
4
+ version: 7.4.0
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-01-27 00:00:00.000000000 Z
11
+ date: 2017-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lhc
@@ -202,6 +202,7 @@ files:
202
202
  - lib/lhs/concerns/item/save.rb
203
203
  - lib/lhs/concerns/item/update.rb
204
204
  - lib/lhs/concerns/item/validation.rb
205
+ - lib/lhs/concerns/proxy/accessors.rb
205
206
  - lib/lhs/concerns/proxy/create.rb
206
207
  - lib/lhs/concerns/proxy/link.rb
207
208
  - lib/lhs/concerns/record/all.rb
@@ -230,6 +231,7 @@ files:
230
231
  - lib/lhs/version.rb
231
232
  - script/ci/build.sh
232
233
  - spec/.DS_Store
234
+ - spec/collection/accessors_spec.rb
233
235
  - spec/collection/collection_items_spec.rb
234
236
  - spec/collection/configurable_spec.rb
235
237
  - spec/collection/delegate_spec.rb
@@ -378,11 +380,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
378
380
  requirements:
379
381
  - Ruby >= 2.0.0
380
382
  rubyforge_project:
381
- rubygems_version: 2.6.8
383
+ rubygems_version: 2.5.2
382
384
  signing_key:
383
385
  specification_version: 4
384
386
  summary: Rails gem providing an easy, active-record-like interface for http json services
385
387
  test_files:
388
+ - spec/collection/accessors_spec.rb
386
389
  - spec/collection/collection_items_spec.rb
387
390
  - spec/collection/configurable_spec.rb
388
391
  - spec/collection/delegate_spec.rb