hal-interpretation 1.1.1 → 1.2.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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52c231b40d2b58c3c0b1a5c3256b1b3b4a9d2588
|
4
|
+
data.tar.gz: ae6b29f0cb4de045685d0934d37e84c555314ab7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d8c1cf2fc169bc09f4847b41ef4a25101cbe0ded25b5f0a7d3f25d06503508ced8a4cda4b21a0db80f9f15a5fe5a6e3d8acaacfe7937b7c9f4beff7e4311e71
|
7
|
+
data.tar.gz: 44f5146b86da19be5961c16c5ec4aed8ffc7ae0de5a95c576951e6805285a12b91bccdf95058fe8ac96d992efb98f432caf3618ceea8a6a9a60d38283f8629d4
|
data/README.md
CHANGED
@@ -19,6 +19,18 @@ class UserHalInterpreter
|
|
19
19
|
|
20
20
|
extract :name
|
21
21
|
extract :address_line, from: "address/line1"
|
22
|
+
extract :seq, with: ->(_hal_repr) { next_seq_num }
|
23
|
+
extract :birthday, coercion: ->(date_str) { Date.iso8601(date_str) }
|
24
|
+
|
25
|
+
def initialize
|
26
|
+
@cur_seq_num = 0
|
27
|
+
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
|
31
|
+
def next_seq_num
|
32
|
+
@cur_seq_num += 1
|
33
|
+
end
|
22
34
|
end
|
23
35
|
```
|
24
36
|
|
@@ -24,14 +24,22 @@ module HalInterpretation
|
|
24
24
|
|
25
25
|
# opts - named args
|
26
26
|
# :from - The HalRepresentation from which to extract attribute.
|
27
|
+
#
|
27
28
|
# :to - The model that we are extracting
|
28
29
|
#
|
30
|
+
# :context - The context(usually a HalInterpreter) in which to
|
31
|
+
# execute the extraction
|
32
|
+
#
|
29
33
|
# Returns any problems encountered.
|
30
34
|
def extract(opts)
|
31
35
|
from = opts.fetch(:from) { fail ArgumentError, "from is required" }
|
32
36
|
to = opts.fetch(:to) { fail ArgumentError, "to is required" }
|
37
|
+
context = opts.fetch(:context, self)
|
38
|
+
|
39
|
+
raw_val = context.instance_exec from, &fetcher
|
40
|
+
val = context.instance_exec raw_val, &value_coercion
|
33
41
|
|
34
|
-
to.
|
42
|
+
to.public_send "#{attr}=", val
|
35
43
|
|
36
44
|
[]
|
37
45
|
rescue => err
|
@@ -40,7 +40,7 @@ module HalInterpretation
|
|
40
40
|
new_item = item_class.new do |it|
|
41
41
|
e = extractors
|
42
42
|
e.each do |an_extractor|
|
43
|
-
@problems += an_extractor.extract(from: repr, to: it)
|
43
|
+
@problems += an_extractor.extract(from: repr, to: it, context: interpreter)
|
44
44
|
.map {|msg| "#{json_path_for an_extractor.attr} #{msg}" }
|
45
45
|
end
|
46
46
|
end
|
@@ -37,6 +37,25 @@ describe HalInterpretation::Extractor do
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
context "context dependent lambda based" do
|
41
|
+
subject(:extractor) { described_class
|
42
|
+
.new(attr: "seq", location: "/seq", extraction_proc:
|
43
|
+
->(hal_repr) { self.count_so_far }) }
|
44
|
+
|
45
|
+
specify { expect{
|
46
|
+
extractor.extract(from: source, to: target, context: interpreter)
|
47
|
+
}.not_to raise_error }
|
48
|
+
|
49
|
+
|
50
|
+
context "after extraction" do
|
51
|
+
before do extractor.extract(from: source, to: target, context: interpreter) end
|
52
|
+
|
53
|
+
specify { expect(target.seq).to eq 42 }
|
54
|
+
end
|
55
|
+
|
56
|
+
let(:interpreter) { double(:interpreter, count_so_far: 42) }
|
57
|
+
end
|
58
|
+
|
40
59
|
context "coercion" do
|
41
60
|
subject(:extractor) { described_class.new(attr: "bday",
|
42
61
|
coercion: ->(val){ Time.parse(val) } ) }
|
@@ -46,7 +65,7 @@ describe HalInterpretation::Extractor do
|
|
46
65
|
end
|
47
66
|
|
48
67
|
|
49
|
-
let(:target) { Struct.new(:first_name, :bday, :parent).new }
|
68
|
+
let(:target) { Struct.new(:first_name, :bday, :parent, :seq).new }
|
50
69
|
let(:source) { HalClient::Representation.new(parsed_json: {
|
51
70
|
"firstName" => "Alice",
|
52
71
|
"bday" => "2013-10-10T12:13:14Z",
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hal-interpretation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hal-client
|