haipa 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
 
@@ -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'
@@ -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
@@ -1,8 +1,8 @@
1
1
  require 'uri'
2
2
  require 'forwardable'
3
- require 'hashie'
4
3
  require 'faraday'
5
4
  require 'addressable/template'
5
+ require 'deep_merge'
6
6
 
7
7
  require 'haipa/version'
8
8
  require 'haipa/api'
@@ -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
- yield conn if block_given?
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
- }.extend(Hashie::Extensions::DeepMerge)
29
+ }
26
30
  end
27
31
 
28
32
  def clear
@@ -12,6 +12,7 @@ module Haipa
12
12
  end
13
13
 
14
14
  def method_missing(name, *args, &block)
15
+ name = name.to_s
15
16
  if data.has_key?(name)
16
17
  from_array(data[name])
17
18
  else
@@ -12,6 +12,7 @@ module Haipa
12
12
  end
13
13
 
14
14
  def method_missing(name, *args, &block)
15
+ name = name.to_s
15
16
  if @data.has_key?(name)
16
17
  href = @data[name]['href']
17
18
  if @data[name]['templated'] == true
@@ -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 ||= ::Hashie::Mash.new(JSON.parse(response.body))
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
- (links.to_hash.self || {}).fetch('href', nil)
57
+ links.to_hash.fetch('self', {}).fetch('href', nil)
57
58
  end
58
59
  end
59
60
  end
@@ -1,3 +1,3 @@
1
1
  module Haipa
2
- VERSION = '0.0.7'
2
+ VERSION = '0.0.8'
3
3
  end
@@ -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.should == description }
14
- specify { subject.links.to_hash.should == description['_links'] }
15
- specify { subject.embedded.to_hash.should == description['_embedded'] }
16
- specify { subject.href.should == description['_links']['self']['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
@@ -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.should be }
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.should be ==
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.should_not be_empty }
50
- specify { subject.resources.thing.should be_a Haipa::Resource }
51
- specify { subject.resources.things.first.should be_a Haipa::Resource }
52
- specify { subject.resources.thing.get.name.should be == 'thing' }
53
- specify { subject.resources.things.first.get.name.should be == 'thing' }
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
@@ -1,10 +1,9 @@
1
1
  require 'json'
2
- require 'faraday'
3
2
  require 'awesome_print'
4
- require 'hashie'
3
+
5
4
  require 'haipa'
6
5
 
7
6
  RSpec.configure do |config|
8
- config.filter_run :wip => true
7
+ config.filter_run wip: true
9
8
  config.run_all_when_everything_filtered = true
10
9
  end
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.7
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-06-11 00:00:00.000000000 Z
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.8.23
128
+ rubygems_version: 2.1.11
162
129
  signing_key:
163
- specification_version: 3
130
+ specification_version: 4
164
131
  summary: HAL hypermedia client
165
132
  test_files:
166
133
  - spec/haipa/api_spec.rb