halibut 0.4.0 → 0.4.1
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 +9 -9
- data/.travis.yml +14 -6
- data/README.md +0 -1
- data/halibut.gemspec +0 -2
- data/lib/halibut.rb +9 -10
- data/lib/halibut/adapter/json.rb +41 -3
- data/lib/halibut/builder.rb +0 -1
- data/lib/halibut/core.rb +4 -3
- data/lib/halibut/core/link.rb +0 -1
- data/lib/halibut/core/resource.rb +1 -0
- data/lib/halibut/link_relation.rb +1 -3
- data/lib/halibut/version.rb +1 -1
- data/spec/adapter/json_spec.rb +3 -3
- metadata +3 -18
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MWYxOTQ4OTZiYzU2ZWQyZjk1OTE3NzVmMTA3OTVkMzBhMTQ5NmIyYQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
7
|
-
|
6
|
+
NDYzNzNhZjdkZWYxOTg1NjQzOWEzYWQwM2UzZTk0N2FmOWNhYTc1Zg==
|
7
|
+
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OTdjNmE0Mzg3MDlmZmJlMzc2ZGI1YzE3ZTc4OGZiMjdmNDc2ZDhhMzUwOTM4
|
10
|
+
ODA4NDhkNGQ1MjlkMjhjNzY3N2MyMzM4YWVmMjdiM2Q1YmY2NGM0MmM3OGYy
|
11
|
+
Y2U1NDNkMjNmOGNkYjBjYmUzYjQxNTI2ZGU2ZWM0MWU4Y2MzY2I=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZDAxZTlhYjRjNzEyOTM4ODg3ZmJmYzczMGU1YTVhMDBlNmZmNzcwNWYyNzhk
|
14
|
+
NmU4MTJmNWVjYTQzNWE5OTEzMDUzYjNkYzcxODk5ZjM4ZjQ5YTNjMzQyYTZk
|
15
|
+
YzYwOGU2ZjMxOGIzMWJhZWFkZDY5YWVmMGM1NTYwZTk0NmE1OGE=
|
data/.travis.yml
CHANGED
@@ -1,9 +1,17 @@
|
|
1
1
|
language: ruby
|
2
2
|
bundler_args: --without testing
|
3
3
|
rvm:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
- 1.9.3
|
5
|
+
- 2.0.0
|
6
|
+
- ruby-head
|
7
|
+
- jruby-19mode
|
8
|
+
- jruby-head
|
9
|
+
- rbx-2.1.1
|
10
|
+
deploy:
|
11
|
+
provider: rubygems
|
12
|
+
api_key:
|
13
|
+
secure: cMM9SSWMkq6G10Sxs2CXDacurZOkJiaHPHgfffE/6SadZ2nYxPiR637VVq1CspT0rs5La9qUQD7ZwRQ046WfPw84rx5iu8J+sBf7bTrI0OcQLJHcbCGUaFpH01JVD6Nhch5ZrOcts3Xzm7hbOxgEHqATMbCgGb2q9vBORhatnj4=
|
14
|
+
gem: halibut
|
15
|
+
on:
|
16
|
+
tags: true
|
17
|
+
repo: locks/halibut
|
data/README.md
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# Halibut [](http://coderwall.com/locks) [](http://waffle.io/locks/halibut)
|
2
2
|
|
3
|
-
|
4
3
|
[](http://badge.fury.io/rb/halibut)
|
5
4
|
[](https://travis-ci.org/locks/halibut)
|
6
5
|
[](https://coveralls.io/r/locks/halibut)
|
data/halibut.gemspec
CHANGED
@@ -18,11 +18,9 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.required_ruby_version = '>= 1.9.3'
|
19
19
|
|
20
20
|
gem.add_dependency "multi_json"
|
21
|
-
gem.add_dependency "addressable"
|
22
21
|
|
23
22
|
# this version of minitest adds parallelization
|
24
23
|
gem.add_development_dependency "rake"
|
25
24
|
gem.add_development_dependency "minitest", ">= 4.2"
|
26
25
|
gem.add_development_dependency "hash-differ"
|
27
|
-
|
28
26
|
end
|
data/lib/halibut.rb
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
require "halibut/version"
|
2
2
|
|
3
3
|
# Halibut is the main namespace
|
4
|
-
module Halibut
|
5
|
-
|
6
|
-
|
7
|
-
end
|
4
|
+
module Halibut; end
|
5
|
+
|
6
|
+
require 'halibut/builder'
|
8
7
|
|
9
8
|
# The Adapter namespace contains classes that aid in the
|
10
9
|
# mapping of HAL Resources into a specific format.
|
11
|
-
module Halibut::Adapter
|
12
|
-
|
13
|
-
|
10
|
+
module Halibut::Adapter; end
|
11
|
+
|
12
|
+
require 'halibut/adapter/json'
|
14
13
|
|
15
14
|
# Halibut::Core contains the domain objects that reflect the HAL specs.
|
16
|
-
module Halibut::Core
|
17
|
-
|
18
|
-
|
15
|
+
module Halibut::Core; end
|
16
|
+
|
17
|
+
require 'halibut/core/resource'
|
data/lib/halibut/adapter/json.rb
CHANGED
@@ -1,30 +1,67 @@
|
|
1
1
|
require 'multi_json'
|
2
|
-
|
3
2
|
require 'halibut/core'
|
4
3
|
|
5
4
|
module Halibut::Adapter
|
6
5
|
|
6
|
+
# This adapter converts Halibut::HAL::Resources to JSON encoded strings and back.
|
7
|
+
#
|
8
|
+
# resource = Halibut::Builder.new('http://example.com') do
|
9
|
+
# link "posts", '/posts'
|
10
|
+
# link "author", 'http://locks.io'
|
11
|
+
#
|
12
|
+
# property "title", 'Entry point'
|
13
|
+
# end.resource
|
14
|
+
#
|
15
|
+
# dumped = Halibut::Adapter::JSON.dump resource
|
16
|
+
# # => "{\"title\":\"Entry point\",\"_links\":{\"self\":{\"href\":\"http://example.com\"},\"posts\":{\"href\":\"/posts\"},\"author\":{\"href\":\"http://locks.io\"}}}"
|
17
|
+
#
|
18
|
+
# loaded = Halibut::Adapter::JSON.load dumped
|
19
|
+
# resource == loaded
|
20
|
+
# # => true
|
21
|
+
#
|
7
22
|
module JSON
|
8
|
-
|
23
|
+
|
24
|
+
# Returns an Halibut::HAL::Resource from a JSON string
|
25
|
+
def self.parse(json)
|
9
26
|
ResourceExtractor.new(json).resource
|
10
27
|
end
|
11
28
|
|
29
|
+
# Returns a JSON string representation of an Halibut::HAL::Resource
|
12
30
|
def self.dump(resource)
|
13
31
|
MultiJson.dump resource.to_hash
|
14
32
|
end
|
15
33
|
|
16
34
|
private
|
35
|
+
|
36
|
+
# @deprecated Please use Halibut::Adapter::JSON.dump instead.
|
17
37
|
def self.extended(base)
|
18
38
|
base.extend InstanceMethods
|
19
39
|
end
|
20
40
|
|
21
41
|
module InstanceMethods
|
42
|
+
# @deprecated This might go.
|
22
43
|
def to_json
|
44
|
+
warn "[Deprecation] Don't depend on this, as it might disappear soon."
|
23
45
|
MultiJson.dump self.to_hash
|
24
46
|
end
|
25
47
|
end
|
26
48
|
|
49
|
+
# ResourceExtractor is responsible for deserializing an HAL resource
|
50
|
+
# from the JSON representation.
|
51
|
+
#
|
52
|
+
# extractor = ResourceExtractor.new({})
|
53
|
+
# # => #<Halibut::Adapter::JSON::ResourceExtractor:0x007f8adb92f2a8
|
54
|
+
# extractor.resource
|
55
|
+
# # => #<Halibut::HAL::Resource:0x007f8add058fb0
|
56
|
+
#
|
27
57
|
class ResourceExtractor
|
58
|
+
|
59
|
+
# Straight-forward, just pass in the JSON string you want to extract the
|
60
|
+
# resource from.
|
61
|
+
#
|
62
|
+
# json = '{"_links":{"self":{"href":"http://example.com"}}}'
|
63
|
+
# ResourceExtractor.new('{}')
|
64
|
+
#
|
28
65
|
def initialize(json)
|
29
66
|
@halibut = Halibut::Core::Resource.new
|
30
67
|
@json = MultiJson.load(json)
|
@@ -34,6 +71,7 @@ module Halibut::Adapter
|
|
34
71
|
extract_embedded_resources
|
35
72
|
end
|
36
73
|
|
74
|
+
# This method should be called when the the resource extracted is needed
|
37
75
|
def resource
|
38
76
|
@halibut
|
39
77
|
end
|
@@ -68,7 +106,7 @@ module Halibut::Adapter
|
|
68
106
|
embeds = ([] << values).flatten
|
69
107
|
|
70
108
|
embeds.map {|embed| MultiJson.dump embed }
|
71
|
-
.map {|embed| Halibut::Adapter::JSON.
|
109
|
+
.map {|embed| Halibut::Adapter::JSON.parse embed }
|
72
110
|
.each {|embed| @halibut.embed_resource(relation, embed) }
|
73
111
|
end
|
74
112
|
end
|
data/lib/halibut/builder.rb
CHANGED
data/lib/halibut/core.rb
CHANGED
data/lib/halibut/core/link.rb
CHANGED
data/lib/halibut/version.rb
CHANGED
data/spec/adapter/json_spec.rb
CHANGED
@@ -17,7 +17,7 @@ describe Halibut::Adapter::JSON do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "deserializes from JSON" do
|
20
|
-
subject = Halibut::Adapter::JSON.
|
20
|
+
subject = Halibut::Adapter::JSON.parse(load_json "serialize")
|
21
21
|
|
22
22
|
order = Halibut::Core::Resource.new "/orders/123"
|
23
23
|
order.set_property "total", 30.00
|
@@ -36,7 +36,7 @@ describe Halibut::Adapter::JSON do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it "provides to_json helper" do
|
39
|
-
json = Halibut::Adapter::JSON.
|
39
|
+
json = Halibut::Adapter::JSON.parse(load_json "serialize")
|
40
40
|
json = Halibut::Adapter::JSON.dump(json)
|
41
41
|
|
42
42
|
order = Halibut::Core::Resource.new "/orders/123"
|
@@ -61,7 +61,7 @@ describe Halibut::Adapter::JSON do
|
|
61
61
|
files = read_files[]
|
62
62
|
|
63
63
|
refilled = files.map {|f| MultiJson.load f }
|
64
|
-
resources = files.map {|f| Halibut::Adapter::JSON.
|
64
|
+
resources = files.map {|f| Halibut::Adapter::JSON.parse f }.map &:to_hash
|
65
65
|
|
66
66
|
zipped = refilled.zip resources
|
67
67
|
zipped.each do |json, hal|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: halibut
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ricardo Mendes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: addressable
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ! '>='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ! '>='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: rake
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
123
|
version: '0'
|
138
124
|
requirements: []
|
139
125
|
rubyforge_project:
|
140
|
-
rubygems_version: 2.
|
126
|
+
rubygems_version: 2.1.11
|
141
127
|
signing_key:
|
142
128
|
specification_version: 4
|
143
129
|
summary: A HAL parser and builder for use in Hypermedia APIs
|
@@ -154,4 +140,3 @@ test_files:
|
|
154
140
|
- spec/fixtures/simple.json
|
155
141
|
- spec/link_relation_spec.rb
|
156
142
|
- spec/spec_helper.rb
|
157
|
-
has_rdoc:
|