hal-interpretation 1.8.1 → 1.9.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: 969e94cd36e156d8a8dacc0c6cf90489d3360e35
4
- data.tar.gz: 26ec24e354607d6cbe2f59a0f4c2641afcb718d1
3
+ metadata.gz: 5d0bb8bd69d4f918747724f90a4fa6099a8902a5
4
+ data.tar.gz: a7b3dba7c022043f163e222f124867805f28d20d
5
5
  SHA512:
6
- metadata.gz: 2f1065997cfd989a531013c6051cbe3f2cf8df53f3160c8b102aea3ceb21bb26432f27cece18b603ac171e1e1909a05427dcf532d2686d6ace4e2d1adfadd3fe
7
- data.tar.gz: bcfd8283a0e51b661f214e937dd7633e4d85ce375e8ca48d7d39cca48ff18c22c9292fb0e6a27ea809ca8636d130b67143299e06ec776a7e6207a859e2d8a723
6
+ metadata.gz: 58cc7ed92a124e87edc19a071e109ff35de963a905849b11774c6e3772ba7a799131dbfd1a2872c2d9cc2d0b940e2a0bc5fbb2680f9a020596cf8c41c5b4ca50
7
+ data.tar.gz: 0ac2e4aff92dd46c3eea872a36210938e33a7900d4f3be90e9d2a56689d4002c9ccd099d1e83306cfd8e1ba91bbab7ea4dd043033080a2e803ec61c578b65057
@@ -66,9 +66,16 @@ module HalInterpretation
66
66
  # opts
67
67
  # :location - The json path of `a_representation` in the
68
68
  # complete document
69
+ #
70
+ # optionally implement `#handle_initialization_opts` for custom option parsing
69
71
  def initialize(a_representation, opts)
70
72
  @repr = a_representation
71
73
  @location = opts.fetch(:location) { raise ArgumentError, "location is required" }
74
+ handle_initialization_opts(opts)
75
+ end
76
+
77
+ # allows custom setting of options on initialization
78
+ def handle_initialization_opts(opts)
72
79
  end
73
80
 
74
81
  attr_reader :repr, :location
@@ -104,9 +111,9 @@ module HalInterpretation
104
111
  #
105
112
  # Raises HalInterpretation::InvalidRepresentationError if the
106
113
  # provided JSON document is not parseable
107
- def new_from_json(json)
108
- self.new HalClient::Representation.new(parsed_json: MultiJson.load(json)),
109
- location: "/"
114
+ def new_from_json(json, opts = {})
115
+ repr = HalClient::Representation.new(parsed_json: MultiJson.load(json))
116
+ self.new repr, opts.merge(location: "/")
110
117
 
111
118
  rescue MultiJson::ParseError => err
112
119
  fail InvalidRepresentationError, "Parse error: " + err.message
@@ -134,14 +134,14 @@ module HalInterpretation
134
134
  #
135
135
  # Examples
136
136
  #
137
- # extract_repr :author,
137
+ # extract_related :author,
138
138
  # rel: "http://xmlns.com/foaf/0.1/Person"
139
139
  #
140
140
  # extracts the targets of the `.../Person` link and stores the
141
141
  # corresponding HAL representation object in the `author`
142
142
  # attribute of the model.
143
143
  #
144
- # extract_repr :author, rel: "http://xmlns.com/foaf/0.1/Person",
144
+ # extract_related :author, rel: "http://xmlns.com/foaf/0.1/Person",
145
145
  # coercion: ->(person_repr) {
146
146
  # MyInterpretation.new(person_repr)
147
147
  # }
@@ -168,14 +168,14 @@ module HalInterpretation
168
168
  #
169
169
  # Examples
170
170
  #
171
- # extract_reprs :authors,
171
+ # extract_relateds :authors,
172
172
  # rel: "http://exampe.com/authors"
173
173
  #
174
174
  # extracts the targets of the `.../authors` link and stores the
175
175
  # corresponding HAL representation set object in the `authors`
176
176
  # attribute of the model.
177
177
  #
178
- # extract_reprs :authors, rel: "http://example.com/authors",
178
+ # extract_relateds :authors, rel: "http://example.com/authors",
179
179
  # coercion: ->(person_repr_set) {
180
180
  # person_repr_set.map {|repr| MyInterpretation.new(repr)}
181
181
  # }
@@ -1,3 +1,3 @@
1
1
  module HalInterpretation
2
- VERSION = "1.8.1"
2
+ VERSION = "1.9.0"
3
3
  end
@@ -14,10 +14,11 @@ describe HalInterpretation do
14
14
  extract :latitude, from: "/geo/latitude"
15
15
  extract :bday, coercion: ->(val){ Time.parse(val) }
16
16
  extract :seq, with: ->(_) { next_seq_num }
17
- extract_link :up
17
+ extract_link :up, rel: "up", coercion: ->(url) { @override_up || url }
18
18
  extract_links :friend_ids, rel: "http://xmlns.com/foaf/0.1/knows",
19
19
  coercion: ->(urls) { urls.map{|u| u.split("/").last } }
20
20
  extract_link :archives_url_tmpl, rel: "archives"
21
+
21
22
  extract_related :profile, rel: "http://xmlns.com/foaf/0.1/Person"
22
23
  extract_relateds :cohorts, rel: "http://xmlns.com/foaf/0.1/knows"
23
24
 
@@ -29,6 +30,10 @@ describe HalInterpretation do
29
30
  def next_seq_num
30
31
  @cur_seq_num += 1
31
32
  end
33
+
34
+ def handle_initialization_opts(opts)
35
+ @override_up = opts.fetch(:override_up, nil)
36
+ end
32
37
  end
33
38
  }
34
39
 
@@ -116,6 +121,36 @@ describe HalInterpretation do
116
121
  end
117
122
  end
118
123
 
124
+ context "with initialization options" do
125
+ let(:json_doc_with_links) { <<-JSON }
126
+ { "name": "foo"
127
+ ,"bday": "2013-12-11T10:09:08Z"
128
+ ,"geo": {
129
+ "latitude": 39.1
130
+ }
131
+ ,"_links": {
132
+ "up": { "href": "/foo" }
133
+ }
134
+ }
135
+ JSON
136
+
137
+ let(:json_doc_without_links) { <<-JSON }
138
+ { "name": "foo"
139
+ ,"bday": "2013-12-11T10:09:08Z"
140
+ ,"geo": {
141
+ "latitude": 39.1
142
+ }
143
+ }
144
+ JSON
145
+
146
+ let(:opts) { { override_up: "/new_parent"} }
147
+ let(:interpreter_with_links) { interpreter_class.new_from_json(json_doc_with_links, opts) }
148
+ let(:interpreter_without_links) { interpreter_class.new_from_json(json_doc_without_links, opts) }
149
+
150
+ specify { expect(interpreter_with_links.item.up).to eq("/new_parent") }
151
+ specify { expect(interpreter_without_links.item.up).to eq("/new_parent") }
152
+ end
153
+
119
154
  context "valid collection" do
120
155
  let(:json_doc) { <<-JSON }
121
156
  { "_embedded": {
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.8.1
4
+ version: 1.9.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: 2015-04-14 00:00:00.000000000 Z
11
+ date: 2016-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hal-client
@@ -180,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
180
  version: '0'
181
181
  requirements: []
182
182
  rubyforge_project:
183
- rubygems_version: 2.2.2
183
+ rubygems_version: 2.2.5
184
184
  signing_key:
185
185
  specification_version: 4
186
186
  summary: Build models from HAL documents.
@@ -188,4 +188,3 @@ test_files:
188
188
  - spec/hal_interpretation/extractor_spec.rb
189
189
  - spec/hal_interpretation_spec.rb
190
190
  - spec/spec_helper.rb
191
- has_rdoc: