halibut 0.1.0 → 0.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.
- data/.gitignore +4 -1
- data/.gitmodules +3 -0
- data/.travis.yml +4 -4
- data/Gemfile +2 -2
- data/Gemfile.travis +11 -0
- data/README.md +83 -34
- data/Rakefile +2 -2
- data/TODO +2 -0
- data/halibut.gemspec +16 -11
- data/lib/halibut.rb +15 -3
- data/lib/halibut/adapter/json.rb +72 -0
- data/lib/halibut/adapter/xml.rb +88 -0
- data/lib/halibut/builder.rb +75 -0
- data/lib/halibut/hal/link.rb +81 -0
- data/lib/halibut/hal/resource.rb +74 -0
- data/lib/halibut/link_relation.rb +29 -0
- data/lib/halibut/relation_map.rb +24 -23
- data/lib/halibut/version.rb +1 -2
- data/spec/adapter/json_spec.rb +72 -0
- data/spec/adapter/xml_spec.rb +50 -0
- data/spec/builder_spec.rb +185 -0
- data/spec/fixtures/serialize.json +1 -1
- data/spec/link_relation_spec.rb +43 -0
- data/spec/link_spec.rb +13 -11
- data/spec/relation_map_spec.rb +7 -6
- data/spec/resource_spec.rb +23 -53
- data/spec/spec_helper.rb +4 -2
- metadata +78 -15
- data/lib/halibut/link.rb +0 -56
- data/lib/halibut/resource.rb +0 -94
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
require 'halibut/link_relation'
|
4
|
+
|
5
|
+
describe Halibut::LinkRelation do
|
6
|
+
|
7
|
+
describe "String" do
|
8
|
+
it "has a name" do
|
9
|
+
relation = Halibut::LinkRelation.new 'default'
|
10
|
+
|
11
|
+
assert relation.name
|
12
|
+
relation.name.must_equal 'default'
|
13
|
+
end
|
14
|
+
|
15
|
+
it "has a curie and a name" do
|
16
|
+
relation = Halibut::LinkRelation.new 'mighty:max'
|
17
|
+
|
18
|
+
relation.curie.wont_be_nil
|
19
|
+
relation.curie.must_equal 'mighty'
|
20
|
+
relation.name
|
21
|
+
relation.name.must_equal 'max'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "Symbol" do
|
26
|
+
it "has a name" do
|
27
|
+
relation = Halibut::LinkRelation.new :default
|
28
|
+
|
29
|
+
assert relation.name
|
30
|
+
relation.name.must_equal 'default'
|
31
|
+
end
|
32
|
+
|
33
|
+
it "has a curie and a name" do
|
34
|
+
relation = Halibut::LinkRelation.new :'mighty:max'
|
35
|
+
|
36
|
+
relation.curie.wont_be_nil
|
37
|
+
relation.curie.must_equal 'mighty'
|
38
|
+
relation.name
|
39
|
+
relation.name.must_equal 'max'
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
data/spec/link_spec.rb
CHANGED
@@ -1,53 +1,55 @@
|
|
1
1
|
require_relative 'spec_helper'
|
2
2
|
|
3
|
-
describe Halibut::Link do
|
3
|
+
describe Halibut::HAL::Link do
|
4
4
|
let(:normal_uri) { 'http://example.com' }
|
5
5
|
let(:tmpl_uri) { 'http://example.com/{id}' }
|
6
6
|
|
7
7
|
describe "href" do
|
8
8
|
it "accepts non-templated uri" do
|
9
|
-
link = Halibut::Link.new normal_uri
|
10
|
-
|
9
|
+
link = Halibut::HAL::Link.new normal_uri
|
10
|
+
|
11
11
|
link.templated?.must_equal false
|
12
12
|
link.href.must_equal normal_uri
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
it "accepts templated uri" do
|
16
|
-
link = Halibut::Link.new tmpl_uri, true
|
17
|
-
|
16
|
+
link = Halibut::HAL::Link.new tmpl_uri, templated: true
|
17
|
+
|
18
18
|
link.templated?.must_equal true
|
19
19
|
link.href.must_equal tmpl_uri
|
20
20
|
end
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
describe "optionals" do
|
24
24
|
it "are set correctly" do
|
25
|
-
link1 = Halibut::Link.new normal_uri,
|
25
|
+
link1 = Halibut::HAL::Link.new normal_uri, {
|
26
26
|
:type => 'type',
|
27
27
|
:name => 'name',
|
28
28
|
:profile => 'profile',
|
29
29
|
:title => 'title',
|
30
30
|
:hreflang => 'hreflang'
|
31
31
|
}
|
32
|
-
link2 = Halibut::Link.new normal_uri,
|
32
|
+
link2 = Halibut::HAL::Link.new normal_uri, {
|
33
33
|
:type => 'type',
|
34
34
|
:name => 'name',
|
35
35
|
:profile => 'profile',
|
36
36
|
:title => 'title',
|
37
37
|
:hreflang => 'hreflang'
|
38
38
|
}
|
39
|
-
|
39
|
+
|
40
40
|
link1.type.must_equal "type"
|
41
41
|
link1.name.must_equal "name"
|
42
42
|
link1.profile.must_equal "profile"
|
43
43
|
link1.title.must_equal "title"
|
44
44
|
link1.hreflang.must_equal "hreflang"
|
45
|
-
|
45
|
+
|
46
46
|
link2.type.must_equal "type"
|
47
47
|
link2.name.must_equal "name"
|
48
48
|
link2.profile.must_equal "profile"
|
49
49
|
link2.title.must_equal "title"
|
50
50
|
link2.hreflang.must_equal "hreflang"
|
51
|
+
|
52
|
+
link1.must_equal link2
|
51
53
|
end
|
52
54
|
end
|
53
55
|
end
|
data/spec/relation_map_spec.rb
CHANGED
@@ -2,23 +2,24 @@ require_relative 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Halibut::RelationMap do
|
4
4
|
subject { Halibut::RelationMap.new }
|
5
|
-
|
5
|
+
|
6
6
|
it "is empty" do
|
7
7
|
subject.must_be_empty
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
it "has a single item per relation" do
|
11
11
|
subject.add 'first' , 'first'
|
12
12
|
subject.add 'second', 'second'
|
13
|
-
|
13
|
+
|
14
14
|
subject['first'].first.must_equal 'first'
|
15
|
-
subject['second'].
|
15
|
+
subject['second'].last.must_equal 'second'
|
16
|
+
|
16
17
|
end
|
17
|
-
|
18
|
+
|
18
19
|
it "has various items per relation" do
|
19
20
|
subject.add 'first', 'first'
|
20
21
|
subject.add 'first', 'second'
|
21
|
-
|
22
|
+
|
22
23
|
subject['first'].length.must_equal 2
|
23
24
|
subject['first'].first.must_equal 'first'
|
24
25
|
subject['first'].last.must_equal 'second'
|
data/spec/resource_spec.rb
CHANGED
@@ -1,89 +1,59 @@
|
|
1
1
|
require_relative 'spec_helper'
|
2
2
|
|
3
|
-
describe Halibut::Resource do
|
3
|
+
describe Halibut::HAL::Resource do
|
4
4
|
let(:templated_uri) { "http://example.com/{path}{?query}" }
|
5
5
|
let(:normal_uri) { "http://example.com" }
|
6
|
-
|
6
|
+
|
7
7
|
describe "Properties" do
|
8
|
-
subject { Halibut::Resource.new }
|
9
|
-
|
8
|
+
subject { Halibut::HAL::Resource.new }
|
9
|
+
|
10
10
|
it "set property" do
|
11
11
|
subject.set_property "property", "value"
|
12
|
-
|
12
|
+
|
13
13
|
subject.properties['property'].must_equal "value"
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
it "read property" do
|
17
17
|
subject.set_property "property", "value"
|
18
|
-
|
18
|
+
|
19
19
|
subject.get_property('property').must_equal "value"
|
20
20
|
end
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
describe "Links" do
|
24
|
-
|
24
|
+
|
25
25
|
describe "self link" do
|
26
26
|
it "no default" do
|
27
|
-
resource = Halibut::Resource.new
|
27
|
+
resource = Halibut::HAL::Resource.new
|
28
28
|
resource.links.must_be_empty
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
it "default" do
|
32
|
-
resource = Halibut::Resource.new normal_uri
|
33
|
-
|
32
|
+
resource = Halibut::HAL::Resource.new normal_uri
|
33
|
+
|
34
34
|
resource.links.wont_be_empty
|
35
35
|
resource.links['self'].first.href.must_equal normal_uri
|
36
36
|
end
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
describe "Embedded resources" do
|
42
|
-
subject
|
43
|
-
let(:res1) { Halibut::Resource.new "http://first-resource.com" }
|
44
|
-
let(:res2) { Halibut::Resource.new "http://secnd-resource.com" }
|
45
|
-
|
42
|
+
subject { Halibut::HAL::Resource.new }
|
43
|
+
let(:res1) { Halibut::HAL::Resource.new "http://first-resource.com" }
|
44
|
+
let(:res2) { Halibut::HAL::Resource.new "http://secnd-resource.com" }
|
45
|
+
|
46
46
|
it "no embedded resource" do
|
47
|
-
subject.embedded.must_be_empty
|
47
|
+
subject.embedded.must_be_empty
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
it "has embedded resource" do
|
51
51
|
subject.embed_resource 'users', res1
|
52
52
|
subject.embed_resource 'users', res2
|
53
|
-
|
53
|
+
|
54
54
|
subject.embedded['users'].first.must_equal res1
|
55
55
|
subject.embedded['users'].last.must_equal res2
|
56
56
|
end
|
57
57
|
end
|
58
|
-
|
59
|
-
describe "Serialize" do
|
60
|
-
subject { Halibut::Resource.new("http://example.com").to_json }
|
61
|
-
|
62
|
-
it "serializes to JSON" do
|
63
|
-
json = load_json "simple"
|
64
|
-
|
65
|
-
JSON.load(subject).must_equal JSON.load(json)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe "Deserialize" do
|
70
|
-
subject { Halibut::Resource.from_json(load_json "serialize") }
|
71
|
-
|
72
|
-
it "deserializes from JSON" do
|
73
|
-
order = Halibut::Resource.new "/orders/123"
|
74
|
-
order.set_property "total", 30.00
|
75
|
-
order.set_property "currency", "USD"
|
76
|
-
order.set_property "status", "shipped"
|
77
|
-
|
78
|
-
resource = Halibut::Resource.new "/orders"
|
79
|
-
resource.add_link "find", "/orders{?id}", true
|
80
|
-
resource.add_link "next", "/orders/1"
|
81
|
-
resource.add_link "next", "/orders/9"
|
82
|
-
resource.set_property "currentlyProcessing", 14
|
83
|
-
resource.set_property "shippedToday", 20
|
84
|
-
resource.embed_resource "orders", order
|
85
|
-
|
86
|
-
subject.must_equal resource
|
87
|
-
end
|
88
|
-
end
|
58
|
+
|
89
59
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'bundler/setup'
|
2
|
-
Bundler.setup
|
3
2
|
|
4
3
|
require 'minitest/autorun'
|
5
|
-
require 'pry'
|
6
4
|
|
7
5
|
require 'halibut'
|
8
6
|
|
@@ -14,4 +12,8 @@ end
|
|
14
12
|
# Testing Helper to load XML files. Returns a string containing XML.
|
15
13
|
def load_xml(filename)
|
16
14
|
File.read(File.dirname(__FILE__)+"/fixtures/xml/#{filename}.xml")
|
15
|
+
end
|
16
|
+
|
17
|
+
def load_resource(filename)
|
18
|
+
File.read(File.dirname(__FILE__)+"/test-resources/src/main/resources/#{filename}")
|
17
19
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: halibut
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|
@@ -44,7 +44,7 @@ dependencies:
|
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: addressable
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
@@ -60,13 +60,13 @@ dependencies:
|
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: minitest
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
67
67
|
- - ! '>='
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
69
|
+
version: '4.1'
|
70
70
|
type: :development
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -74,7 +74,7 @@ dependencies:
|
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: '
|
77
|
+
version: '4.1'
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
79
|
name: pry
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,7 +82,7 @@ dependencies:
|
|
82
82
|
requirements:
|
83
83
|
- - ! '>='
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
version:
|
85
|
+
version: 0.9.10
|
86
86
|
type: :development
|
87
87
|
prerelease: false
|
88
88
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -90,9 +90,9 @@ dependencies:
|
|
90
90
|
requirements:
|
91
91
|
- - ! '>='
|
92
92
|
- !ruby/object:Gem::Version
|
93
|
-
version:
|
93
|
+
version: 0.9.10
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
|
-
name: pry-
|
95
|
+
name: pry-doc
|
96
96
|
requirement: !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
98
98
|
requirements:
|
@@ -108,7 +108,7 @@ dependencies:
|
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
110
|
- !ruby/object:Gem::Dependency
|
111
|
-
name: pry-
|
111
|
+
name: pry-stack_explorer
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
113
113
|
none: false
|
114
114
|
requirements:
|
@@ -124,7 +124,39 @@ dependencies:
|
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
|
-
name:
|
127
|
+
name: pry-coolline
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - '='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: 0.1.5
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - '='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 0.1.5
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: pry-rescue
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - '='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0.13'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - '='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0.13'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: hash-differ
|
128
160
|
requirement: !ruby/object:Gem::Requirement
|
129
161
|
none: false
|
130
162
|
requirements:
|
@@ -187,6 +219,22 @@ dependencies:
|
|
187
219
|
- - ! '>='
|
188
220
|
- !ruby/object:Gem::Version
|
189
221
|
version: '0'
|
222
|
+
- !ruby/object:Gem::Dependency
|
223
|
+
name: rb-fsevent
|
224
|
+
requirement: !ruby/object:Gem::Requirement
|
225
|
+
none: false
|
226
|
+
requirements:
|
227
|
+
- - ! '>='
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
none: false
|
234
|
+
requirements:
|
235
|
+
- - ! '>='
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
version: '0'
|
190
238
|
- !ruby/object:Gem::Dependency
|
191
239
|
name: terminal-notifier-guard
|
192
240
|
requirement: !ruby/object:Gem::Requirement
|
@@ -211,24 +259,35 @@ extensions: []
|
|
211
259
|
extra_rdoc_files: []
|
212
260
|
files:
|
213
261
|
- .gitignore
|
262
|
+
- .gitmodules
|
214
263
|
- .rvmrc
|
215
264
|
- .travis.yml
|
216
265
|
- Gemfile
|
266
|
+
- Gemfile.travis
|
217
267
|
- Guardfile
|
218
268
|
- LICENSE
|
219
269
|
- README.md
|
220
270
|
- Rakefile
|
271
|
+
- TODO
|
221
272
|
- halibut.gemspec
|
222
273
|
- lib/halibut.rb
|
223
|
-
- lib/halibut/
|
274
|
+
- lib/halibut/adapter/json.rb
|
275
|
+
- lib/halibut/adapter/xml.rb
|
276
|
+
- lib/halibut/builder.rb
|
277
|
+
- lib/halibut/hal/link.rb
|
278
|
+
- lib/halibut/hal/resource.rb
|
279
|
+
- lib/halibut/link_relation.rb
|
224
280
|
- lib/halibut/relation_map.rb
|
225
|
-
- lib/halibut/resource.rb
|
226
281
|
- lib/halibut/version.rb
|
282
|
+
- spec/adapter/json_spec.rb
|
283
|
+
- spec/adapter/xml_spec.rb
|
284
|
+
- spec/builder_spec.rb
|
227
285
|
- spec/fixtures/example.json
|
228
286
|
- spec/fixtures/example.xml
|
229
287
|
- spec/fixtures/minimal.json
|
230
288
|
- spec/fixtures/serialize.json
|
231
289
|
- spec/fixtures/simple.json
|
290
|
+
- spec/link_relation_spec.rb
|
232
291
|
- spec/link_spec.rb
|
233
292
|
- spec/relation_map_spec.rb
|
234
293
|
- spec/resource_spec.rb
|
@@ -242,9 +301,9 @@ require_paths:
|
|
242
301
|
required_ruby_version: !ruby/object:Gem::Requirement
|
243
302
|
none: false
|
244
303
|
requirements:
|
245
|
-
- -
|
304
|
+
- - ~>
|
246
305
|
- !ruby/object:Gem::Version
|
247
|
-
version:
|
306
|
+
version: 1.9.3
|
248
307
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
249
308
|
none: false
|
250
309
|
requirements:
|
@@ -258,11 +317,15 @@ signing_key:
|
|
258
317
|
specification_version: 3
|
259
318
|
summary: A HAL parser and builder for use in Hypermedia APIs
|
260
319
|
test_files:
|
320
|
+
- spec/adapter/json_spec.rb
|
321
|
+
- spec/adapter/xml_spec.rb
|
322
|
+
- spec/builder_spec.rb
|
261
323
|
- spec/fixtures/example.json
|
262
324
|
- spec/fixtures/example.xml
|
263
325
|
- spec/fixtures/minimal.json
|
264
326
|
- spec/fixtures/serialize.json
|
265
327
|
- spec/fixtures/simple.json
|
328
|
+
- spec/link_relation_spec.rb
|
266
329
|
- spec/link_spec.rb
|
267
330
|
- spec/relation_map_spec.rb
|
268
331
|
- spec/resource_spec.rb
|