haipa 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- 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
|