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.
@@ -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