haipa 0.0.3 → 0.0.4

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.
data/README.md CHANGED
@@ -60,22 +60,19 @@ and a thing index resource
60
60
  Then Haipa can consume this API with
61
61
 
62
62
  api = Haipa.api(url:'http://localhost:3000/api/v1')
63
+ api.description # the root as a hash
63
64
  api.resource # the root as a Haipa::Resource
64
- api.description # alias of api.resource
65
65
  api.links # the root links as a Haipa::Links
66
66
  api.href # the uri of the root
67
67
  api.embedded # the embedded resource array Haipa::Embedded
68
68
  api.resources # alias of api.embedded
69
- api.to_hash # the api root as a hash
70
69
 
71
- links = api.links
70
+ link = api.links
72
71
  links.things # the things Haipa::Resource
73
- links.to_hash # the links as a hash
74
72
 
75
- things = links.things # things Haipa::Resource
73
+ things = links.things
76
74
  things.links # the things index Haipa::Links
77
75
  things.embedded # the things index Haipa::Embedded
78
- things.to_hash # the things resource as a hash
79
76
 
80
77
  embedded = things.embedded
81
78
  embedded.things # array of Haipa::Resource
@@ -83,7 +80,8 @@ Then Haipa can consume this API with
83
80
  embedded.things.first.name # the first embedded thing Haipa::Resource name
84
81
  embedded.things[1] # the second embedded thing Haipa::Resource
85
82
  embedded.things.first.clear.other_attribute
86
- embedded.to_hash # the embedded resources as a hash
83
+
84
+
87
85
 
88
86
  ## Contributing
89
87
 
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_runtime_dependency 'faraday', '~> 0.8'
22
22
  spec.add_runtime_dependency 'hashie', '~> 2.0.0'
23
- # spec.add_runtime_dependency 'uri_templates', '~> 0.2.0'
23
+ spec.add_runtime_dependency 'addressable', '~> 2.3.0'
24
24
  spec.add_development_dependency 'bundler', '~> 1.3'
25
25
  spec.add_development_dependency 'rake'
26
26
  spec.add_development_dependency 'rspec', '~> 2.13.0'
@@ -2,6 +2,7 @@ require 'uri'
2
2
  require 'forwardable'
3
3
  require 'hashie'
4
4
  require 'faraday'
5
+ require 'addressable/template'
5
6
 
6
7
  require 'haipa/version'
7
8
  require 'haipa/api'
@@ -3,10 +3,9 @@ module Haipa
3
3
  extend Forwardable
4
4
 
5
5
  attr_reader :conn, :resource, :uri
6
- def_delegators :@conn, :get, :post, :put, :delete
7
- def_delegators :@resource, :links, :embedded, :href, :resources, :to_hash
6
+ def_delegators :@conn, :get
7
+ def_delegators :@resource, :links, :embedded, :href, :resources
8
8
  alias :connection :conn
9
- alias :description :resource
10
9
 
11
10
  def initialize(params={})
12
11
  @uri = URI(params[:url].to_s).path
@@ -20,16 +19,19 @@ module Haipa
20
19
  {
21
20
  :headers =>
22
21
  {
23
- 'Accept' => 'application/hal+json',
24
- 'UserAgent' => 'Haipa',
25
- 'Content-Type' => 'application/hal+json'
22
+ :accept => 'application/hal+json',
23
+ :user_agent => 'Haipa'
26
24
  }
27
25
  }.extend(Hashie::Extensions::DeepMerge)
28
26
  end
29
27
 
30
28
  def clear
31
- resource.clear
29
+ @resource.clear
32
30
  self
33
31
  end
32
+
33
+ def description
34
+ resource.get
35
+ end
34
36
  end
35
37
  end
@@ -2,33 +2,33 @@ module Haipa
2
2
  class Embedded
3
3
  extend Forwardable
4
4
 
5
- attr_reader :resource
6
- def_delegators :@data, :empty?, :has_key?, :fetch
5
+ attr_reader :data, :resource
6
+ def_delegators :@data, :empty?, :has_key?
7
7
 
8
8
  def initialize(resource, data)
9
9
  @data = data
10
10
  @resource = resource
11
11
  end
12
12
 
13
+ def to_hash
14
+ @data
15
+ end
16
+
13
17
  def method_missing(name, *args, &block)
14
- if @data.has_key?(name)
15
- from_array(@data[name])
18
+ if data.has_key?(name)
19
+ from_array(data[name])
16
20
  else
17
21
  super
18
22
  end
19
23
  end
20
24
 
21
- def to_hash
22
- @data
23
- end
24
-
25
25
  private
26
26
 
27
- def from_array(array_or_hash)
28
- if array_or_hash.kind_of?(Array)
29
- array_or_hash.map{ |e| from_hash(e) }
27
+ def from_array(array)
28
+ if array.kind_of?(Array)
29
+ array.map{ |e| from_hash(e) }
30
30
  else
31
- from_hash(array_or_hash)
31
+ from_hash(array)
32
32
  end
33
33
  end
34
34
 
@@ -2,7 +2,7 @@ module Haipa
2
2
  class Links
3
3
  extend Forwardable
4
4
 
5
- attr_reader :resource
5
+ attr_reader :data, :resource
6
6
  def_delegators :@data, :empty?, :has_key?
7
7
 
8
8
  def initialize(resource, data)
@@ -16,7 +16,13 @@ module Haipa
16
16
 
17
17
  def method_missing(name, *args, &block)
18
18
  if @data.has_key?(name)
19
- Resource.new(resource.api, @data[name]['href'])
19
+ href = @data[name]['href']
20
+ if @data[name]['template'] == true
21
+ template = Addressable::Template.new(href)
22
+ options = args.last.is_a?(::Hash) ? args.pop : {}
23
+ href = template.expand(options).to_s
24
+ end
25
+ Resource.new(resource.api, href)
20
26
  else
21
27
  super
22
28
  end
@@ -5,11 +5,7 @@ module Haipa
5
5
  def initialize(api, uri, data=nil)
6
6
  @api = api
7
7
  @uri = uri
8
- @data = ::Hashie::Mash.new(data) if data
9
- end
10
-
11
- def to_hash
12
- get
8
+ @data = data
13
9
  end
14
10
 
15
11
  def clear
@@ -22,31 +18,13 @@ module Haipa
22
18
  @data ||= ::Hashie::Mash.new(JSON.parse(api.get(uri).body))
23
19
  end
24
20
 
25
- def post(params={})
26
- api.post(uri, params) do |req|
27
- yield req if block_given?
28
- end
29
- end
30
-
31
- def put(params={})
32
- api.put(uri, params) do |req|
33
- yield req if block_given?
34
- end
35
- end
36
-
37
- def delete(params={})
38
- api.delete(uri, params) do |req|
39
- yield req if block_given?
40
- end
41
- end
42
-
43
21
  def embedded
44
- @embedded ||= Embedded.new(self, get.fetch('_embedded', {}))
22
+ Embedded.new(self, get.fetch('_embedded', {}))
45
23
  end
46
24
  alias :resources :embedded
47
25
 
48
26
  def links
49
- @links ||= Links.new(self, get.fetch('_links', {}))
27
+ Links.new(self, get.fetch('_links', {}))
50
28
  end
51
29
 
52
30
  def href
@@ -1,3 +1,3 @@
1
1
  module Haipa
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
@@ -8,9 +8,9 @@ describe Haipa::Api do
8
8
  stub.get('/') { [200, {}, description.to_json] }
9
9
  end
10
10
  end
11
- subject { Haipa.api { |conn| conn.adapter :test, stubs } }
11
+ subject { Haipa.api { |builder| builder.adapter :test, stubs } }
12
12
 
13
- specify { subject.description.to_hash.should == description }
13
+ specify { subject.description.should == description }
14
14
  specify { subject.links.to_hash.should == description['_links'] }
15
15
  specify { subject.embedded.to_hash.should == description['_embedded'] }
16
16
  specify { subject.href.should == description['_links']['self']['href'] }
@@ -14,6 +14,11 @@ describe Haipa::Resource do
14
14
  specify { subject.links.self.should be }
15
15
  end
16
16
 
17
+ it 'works' do
18
+ # template = Addressable::Template.new('/api{?q1,q2}')
19
+ # ap template.expand({'q1' => 'hello', 'q2' => 'bye'}).to_s
20
+ end
21
+
17
22
  context "with embedded resources" do
18
23
  let(:body) do
19
24
  {
@@ -10,5 +10,5 @@ describe Haipa do
10
10
  end
11
11
  subject { Haipa.api { |builder| builder.adapter :test, stubs } }
12
12
 
13
- its(:description) { should eq(description) }
13
+ specify { subject.description.to_hash.should eq(description) }
14
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haipa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-26 00:00:00.000000000 Z
12
+ date: 2013-03-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: 2.0.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: addressable
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 2.3.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.3.0
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: bundler
48
64
  requirement: !ruby/object:Gem::Requirement
@@ -130,7 +146,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
130
146
  version: '0'
131
147
  segments:
132
148
  - 0
133
- hash: -2840839347400538447
149
+ hash: -2216550637168734427
134
150
  required_rubygems_version: !ruby/object:Gem::Requirement
135
151
  none: false
136
152
  requirements:
@@ -139,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
155
  version: '0'
140
156
  segments:
141
157
  - 0
142
- hash: -2840839347400538447
158
+ hash: -2216550637168734427
143
159
  requirements: []
144
160
  rubyforge_project:
145
161
  rubygems_version: 1.8.23