haipa 0.0.3 → 0.0.4

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