haipa 0.0.7 → 0.0.8
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 +7 -0
- data/README.md +1 -1
- data/haipa.gemspec +0 -1
- data/lib/deep_merge.rb +27 -0
- data/lib/haipa.rb +1 -1
- data/lib/haipa/api.rb +6 -2
- data/lib/haipa/embedded.rb +1 -0
- data/lib/haipa/links.rb +1 -0
- data/lib/haipa/resource.rb +3 -2
- data/lib/haipa/version.rb +1 -1
- data/spec/haipa/api_spec.rb +4 -4
- data/spec/haipa/resource_spec.rb +8 -8
- data/spec/spec_helper.rb +2 -3
- metadata +10 -43
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 419b91465f3e5fcd6884c68c42f2b006e718ad6b
|
4
|
+
data.tar.gz: 3a594040647dc5f1daa1cb01bc61b7d56e9764cc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ae209ae9b11efc824dd11a537aaf5c5b75ded34d3d30dc16cbe9f2e7923db560981c6b526c48a3ffb8320ce2b1a7d832d72b3e67307c47c13a707e5202422453
|
7
|
+
data.tar.gz: fe92b9ca91cd9a36deaa6ad87c296be82dedfbeceeb6081f623ab2895e33d05d431b1b7006cc6d12884a2920619b30caf46f38b387b5e5d5ea60693b816b9ec8
|
data/README.md
CHANGED
@@ -77,7 +77,7 @@ Then Haipa can consume this API with
|
|
77
77
|
embedded = things.embedded
|
78
78
|
embedded.things # array of Haipa::Resource
|
79
79
|
embedded.things.first # the first embedded thing Haipa::Resource
|
80
|
-
embedded.things.first.name # the first embedded thing Haipa::Resource name
|
80
|
+
embedded.things.first.fetch('name') # the first embedded thing Haipa::Resource name
|
81
81
|
embedded.things[1] # the second embedded thing Haipa::Resource
|
82
82
|
embedded.things.first.clear.other_attribute
|
83
83
|
|
data/haipa.gemspec
CHANGED
@@ -19,7 +19,6 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_runtime_dependency 'faraday', '~> 0.8'
|
22
|
-
spec.add_runtime_dependency 'hashie', '~> 2.0.0'
|
23
22
|
spec.add_runtime_dependency 'addressable', '~> 2.3.0'
|
24
23
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
25
24
|
spec.add_development_dependency 'rake'
|
data/lib/deep_merge.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
class Hash
|
2
|
+
# Returns a new hash with +self+ and +other_hash+ merged recursively.
|
3
|
+
#
|
4
|
+
# h1 = { x: { y: [4, 5, 6] }, z: [7, 8, 9] }
|
5
|
+
# h2 = { x: { y: [7, 8, 9] }, z: 'xyz' }
|
6
|
+
#
|
7
|
+
# h1.deep_merge(h2) # => {x: {y: [7, 8, 9]}, z: "xyz"}
|
8
|
+
# h2.deep_merge(h1) # => {x: {y: [4, 5, 6]}, z: [7, 8, 9]}
|
9
|
+
# h1.deep_merge(h2) { |key, old, new| Array.wrap(old) + Array.wrap(new) }
|
10
|
+
# # => {:x=>{:y=>[4, 5, 6, 7, 8, 9]}, :z=>[7, 8, 9, "xyz"]}
|
11
|
+
def deep_merge(other_hash, &block)
|
12
|
+
dup.deep_merge!(other_hash, &block)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Same as +deep_merge+, but modifies +self+.
|
16
|
+
def deep_merge!(other_hash, &block)
|
17
|
+
other_hash.each_pair do |k,v|
|
18
|
+
tv = self[k]
|
19
|
+
if tv.is_a?(Hash) && v.is_a?(Hash)
|
20
|
+
self[k] = tv.deep_merge(v, &block)
|
21
|
+
else
|
22
|
+
self[k] = block && tv ? block.call(k, tv, v) : v
|
23
|
+
end
|
24
|
+
end
|
25
|
+
self
|
26
|
+
end
|
27
|
+
end
|
data/lib/haipa.rb
CHANGED
data/lib/haipa/api.rb
CHANGED
@@ -10,7 +10,11 @@ module Haipa
|
|
10
10
|
def initialize(params={})
|
11
11
|
@uri = URI(params[:url].to_s).path
|
12
12
|
@conn = Faraday.new(defaults.deep_merge(params)) do |conn|
|
13
|
-
|
13
|
+
if block_given?
|
14
|
+
yield conn
|
15
|
+
else
|
16
|
+
conn.adapter Faraday.default_adapter
|
17
|
+
end
|
14
18
|
end
|
15
19
|
@resource = Resource.new(self, @uri)
|
16
20
|
end
|
@@ -22,7 +26,7 @@ module Haipa
|
|
22
26
|
:accept => 'application/hal+json',
|
23
27
|
:user_agent => 'Haipa'
|
24
28
|
}
|
25
|
-
}
|
29
|
+
}
|
26
30
|
end
|
27
31
|
|
28
32
|
def clear
|
data/lib/haipa/embedded.rb
CHANGED
data/lib/haipa/links.rb
CHANGED
data/lib/haipa/resource.rb
CHANGED
@@ -18,11 +18,12 @@ module Haipa
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def get
|
21
|
+
return @data if @data
|
21
22
|
return {} unless uri
|
22
23
|
response = api.get(uri)
|
23
24
|
raise FailureResponseError unless response.success?
|
24
25
|
raise EmptyResponseError if !response.body || response.body.empty?
|
25
|
-
@data
|
26
|
+
@data = JSON.parse(response.body)
|
26
27
|
end
|
27
28
|
|
28
29
|
def delete
|
@@ -53,7 +54,7 @@ module Haipa
|
|
53
54
|
end
|
54
55
|
|
55
56
|
def href
|
56
|
-
|
57
|
+
links.to_hash.fetch('self', {}).fetch('href', nil)
|
57
58
|
end
|
58
59
|
end
|
59
60
|
end
|
data/lib/haipa/version.rb
CHANGED
data/spec/haipa/api_spec.rb
CHANGED
@@ -10,8 +10,8 @@ describe Haipa::Api do
|
|
10
10
|
end
|
11
11
|
subject { Haipa.api { |builder| builder.adapter :test, stubs } }
|
12
12
|
|
13
|
-
specify { subject.description.
|
14
|
-
specify { subject.links.to_hash.
|
15
|
-
specify { subject.embedded.to_hash.
|
16
|
-
specify { subject.href.
|
13
|
+
specify { expect(subject.description).to eq(description) }
|
14
|
+
specify { expect(subject.links.to_hash).to eq(description['_links']) }
|
15
|
+
specify { expect(subject.embedded.to_hash).to eq(description['_embedded']) }
|
16
|
+
specify { expect(subject.href).to eq(description['_links']['self']['href']) }
|
17
17
|
end
|
data/spec/haipa/resource_spec.rb
CHANGED
@@ -11,7 +11,7 @@ describe Haipa::Resource do
|
|
11
11
|
its(:embedded) { should be_empty }
|
12
12
|
its(:resources) { should be_empty }
|
13
13
|
its(:links) { should_not be_empty }
|
14
|
-
specify { subject.links.self.
|
14
|
+
specify { expect(subject.links.self).to be }
|
15
15
|
end
|
16
16
|
|
17
17
|
context "with a templated find" do
|
@@ -25,8 +25,8 @@ describe Haipa::Resource do
|
|
25
25
|
}
|
26
26
|
end
|
27
27
|
it 'resolves the template' do
|
28
|
-
subject.links.find(id:1, filter1:'hello', filter2:'world').uri.
|
29
|
-
uri+'/things/1?filter1=hello&filter2=world'
|
28
|
+
expect(subject.links.find(id:1, filter1:'hello', filter2:'world').uri).
|
29
|
+
to eq(uri+'/things/1?filter1=hello&filter2=world')
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -46,10 +46,10 @@ describe Haipa::Resource do
|
|
46
46
|
'_links' => {'self' => {'href' => uri}}
|
47
47
|
}
|
48
48
|
end
|
49
|
-
specify { subject.embedded.
|
50
|
-
specify { subject.resources.thing.
|
51
|
-
specify { subject.resources.things.first.
|
52
|
-
specify { subject.resources.thing.get.name.
|
53
|
-
specify { subject.resources.things.first.get.name.
|
49
|
+
specify { expect(subject.embedded).not_to be_empty }
|
50
|
+
specify { expect(subject.resources.thing).to be_a Haipa::Resource }
|
51
|
+
specify { expect(subject.resources.things.first).to be_a Haipa::Resource }
|
52
|
+
specify { expect(subject.resources.thing.get.fetch('name')).to eq('thing') }
|
53
|
+
specify { expect(subject.resources.things.first.get.fetch('name')).to eq('thing') }
|
54
54
|
end
|
55
55
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: haipa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.8
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Jon Doveston
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-12-14 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: faraday
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,31 +20,13 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0.8'
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: hashie
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ~>
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: 2.0.0
|
38
|
-
type: :runtime
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 2.0.0
|
46
27
|
- !ruby/object:Gem::Dependency
|
47
28
|
name: addressable
|
48
29
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
30
|
requirements:
|
51
31
|
- - ~>
|
52
32
|
- !ruby/object:Gem::Version
|
@@ -54,7 +34,6 @@ dependencies:
|
|
54
34
|
type: :runtime
|
55
35
|
prerelease: false
|
56
36
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
37
|
requirements:
|
59
38
|
- - ~>
|
60
39
|
- !ruby/object:Gem::Version
|
@@ -62,7 +41,6 @@ dependencies:
|
|
62
41
|
- !ruby/object:Gem::Dependency
|
63
42
|
name: bundler
|
64
43
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
44
|
requirements:
|
67
45
|
- - ~>
|
68
46
|
- !ruby/object:Gem::Version
|
@@ -70,7 +48,6 @@ dependencies:
|
|
70
48
|
type: :development
|
71
49
|
prerelease: false
|
72
50
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
51
|
requirements:
|
75
52
|
- - ~>
|
76
53
|
- !ruby/object:Gem::Version
|
@@ -78,23 +55,20 @@ dependencies:
|
|
78
55
|
- !ruby/object:Gem::Dependency
|
79
56
|
name: rake
|
80
57
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
58
|
requirements:
|
83
|
-
- -
|
59
|
+
- - '>='
|
84
60
|
- !ruby/object:Gem::Version
|
85
61
|
version: '0'
|
86
62
|
type: :development
|
87
63
|
prerelease: false
|
88
64
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
65
|
requirements:
|
91
|
-
- -
|
66
|
+
- - '>='
|
92
67
|
- !ruby/object:Gem::Version
|
93
68
|
version: '0'
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: rspec
|
96
71
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
72
|
requirements:
|
99
73
|
- - ~>
|
100
74
|
- !ruby/object:Gem::Version
|
@@ -102,7 +76,6 @@ dependencies:
|
|
102
76
|
type: :development
|
103
77
|
prerelease: false
|
104
78
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
79
|
requirements:
|
107
80
|
- - ~>
|
108
81
|
- !ruby/object:Gem::Version
|
@@ -121,6 +94,7 @@ files:
|
|
121
94
|
- README.md
|
122
95
|
- Rakefile
|
123
96
|
- haipa.gemspec
|
97
|
+
- lib/deep_merge.rb
|
124
98
|
- lib/haipa.rb
|
125
99
|
- lib/haipa/api.rb
|
126
100
|
- lib/haipa/embedded.rb
|
@@ -134,33 +108,26 @@ files:
|
|
134
108
|
homepage: https://github.com/hatoishi/haipa
|
135
109
|
licenses:
|
136
110
|
- MIT
|
111
|
+
metadata: {}
|
137
112
|
post_install_message:
|
138
113
|
rdoc_options: []
|
139
114
|
require_paths:
|
140
115
|
- lib
|
141
116
|
required_ruby_version: !ruby/object:Gem::Requirement
|
142
|
-
none: false
|
143
117
|
requirements:
|
144
|
-
- -
|
118
|
+
- - '>='
|
145
119
|
- !ruby/object:Gem::Version
|
146
120
|
version: '0'
|
147
|
-
segments:
|
148
|
-
- 0
|
149
|
-
hash: 2472982524793577646
|
150
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
151
|
-
none: false
|
152
122
|
requirements:
|
153
|
-
- -
|
123
|
+
- - '>='
|
154
124
|
- !ruby/object:Gem::Version
|
155
125
|
version: '0'
|
156
|
-
segments:
|
157
|
-
- 0
|
158
|
-
hash: 2472982524793577646
|
159
126
|
requirements: []
|
160
127
|
rubyforge_project:
|
161
|
-
rubygems_version: 1.
|
128
|
+
rubygems_version: 2.1.11
|
162
129
|
signing_key:
|
163
|
-
specification_version:
|
130
|
+
specification_version: 4
|
164
131
|
summary: HAL hypermedia client
|
165
132
|
test_files:
|
166
133
|
- spec/haipa/api_spec.rb
|