haipa 0.0.1 → 0.0.2
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/Gemfile +15 -0
- data/Guardfile +10 -0
- data/haipa.gemspec +3 -2
- data/lib/haipa.rb +10 -0
- data/lib/haipa/api.rb +36 -0
- data/lib/haipa/links.rb +21 -0
- data/lib/haipa/resource.rb +31 -0
- data/lib/haipa/version.rb +1 -1
- data/spec/haipa/api_spec.rb +17 -0
- data/spec/haipa/resource_spec.rb +15 -0
- data/spec/haipa_spec.rb +3 -3
- data/spec/spec_helper.rb +3 -0
- metadata +44 -20
data/Gemfile
CHANGED
@@ -2,3 +2,18 @@ source 'https://rubygems.org'
|
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in haipa.gemspec
|
4
4
|
gemspec
|
5
|
+
|
6
|
+
gem 'guard'
|
7
|
+
gem 'guard-ctags-bundler'
|
8
|
+
gem 'guard-rspec'
|
9
|
+
gem 'fuubar'
|
10
|
+
gem 'awesome_print'
|
11
|
+
gem 'pry-remote'
|
12
|
+
|
13
|
+
group :darwin do
|
14
|
+
gem 'rb-fsevent'
|
15
|
+
end
|
16
|
+
|
17
|
+
group :linux do
|
18
|
+
gem 'rb-inotify'
|
19
|
+
end
|
data/Guardfile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# guard 'ctags-bundler', :src_path => ['app', 'lib', 'spec/support'] do
|
2
|
+
# watch(/^(lib|spec\/support)\/.*\.rb$/)
|
3
|
+
# watch('Gemfile.lock')
|
4
|
+
# end
|
5
|
+
|
6
|
+
guard 'rspec', :all_after_pass => false, :all_on_start => false do
|
7
|
+
watch(%r{^spec/.+_spec\.rb$})
|
8
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
9
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
10
|
+
end
|
data/haipa.gemspec
CHANGED
@@ -18,8 +18,9 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_runtime_dependency 'faraday'
|
21
|
+
spec.add_runtime_dependency 'faraday', '~> 0.8'
|
22
|
+
spec.add_runtime_dependency 'hashie', '~> 2.0.0'
|
22
23
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
23
24
|
spec.add_development_dependency 'rake'
|
24
|
-
spec.add_development_dependency 'rspec'
|
25
|
+
spec.add_development_dependency 'rspec', '~> 2.13.0'
|
25
26
|
end
|
data/lib/haipa.rb
CHANGED
data/lib/haipa/api.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
module Haipa
|
2
|
+
class Api
|
3
|
+
extend Forwardable
|
4
|
+
|
5
|
+
attr_reader :conn, :resource, :uri
|
6
|
+
def_delegators :@conn, :get
|
7
|
+
def_delegators :@resource, :links, :embedded, :href
|
8
|
+
alias :connection :conn
|
9
|
+
|
10
|
+
def initialize(params={})
|
11
|
+
@uri = URI(params[:url].to_s).path
|
12
|
+
@conn = Faraday.new(defaults.merge(params)) do |conn|
|
13
|
+
yield conn if block_given?
|
14
|
+
end
|
15
|
+
@resource = Resource.new(self,'')
|
16
|
+
end
|
17
|
+
|
18
|
+
def defaults
|
19
|
+
{
|
20
|
+
:headers =>
|
21
|
+
{
|
22
|
+
:accept => 'application/hal+json',
|
23
|
+
:user_agent => 'Haipa'
|
24
|
+
}
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
def clear
|
29
|
+
@resource = nil
|
30
|
+
end
|
31
|
+
|
32
|
+
def description
|
33
|
+
resource.get
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/haipa/links.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Haipa
|
2
|
+
class Links
|
3
|
+
extend Forwardable
|
4
|
+
|
5
|
+
attr_reader :links, :parent
|
6
|
+
def_delegators :@links, :empty?
|
7
|
+
|
8
|
+
def initialize(parent, links)
|
9
|
+
@links = links
|
10
|
+
@parent = parent
|
11
|
+
end
|
12
|
+
|
13
|
+
def method_missing(name, *args, &block)
|
14
|
+
if links.has_key?(name)
|
15
|
+
Resource.new(parent.api, links[name][:href])
|
16
|
+
else
|
17
|
+
super
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Haipa
|
2
|
+
class Resource
|
3
|
+
attr_reader :api, :uri
|
4
|
+
|
5
|
+
def initialize(api, uri)
|
6
|
+
@api = api
|
7
|
+
@uri = uri
|
8
|
+
clear
|
9
|
+
end
|
10
|
+
|
11
|
+
def clear
|
12
|
+
@get = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
def get
|
16
|
+
@get ||= ::Hashie::Mash.new(JSON.parse(api.get(uri).body))
|
17
|
+
end
|
18
|
+
|
19
|
+
def embedded
|
20
|
+
get.fetch('_embedded', {})
|
21
|
+
end
|
22
|
+
|
23
|
+
def links
|
24
|
+
Links.new(self, get.fetch('_links', {}))
|
25
|
+
end
|
26
|
+
|
27
|
+
def href
|
28
|
+
(links.self || {}).fetch('href', nil)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/haipa/version.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe Haipa::Api do
|
4
|
+
let(:description) { {'_embedded' => {}, '_links' => {'self' => {'href' => '/'}}} }
|
5
|
+
|
6
|
+
let(:stubs) do
|
7
|
+
Faraday::Adapter::Test::Stubs.new do |stub|
|
8
|
+
stub.get('/') { [200, {}, description.to_json] }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
subject { Haipa.api { |builder| builder.adapter :test, stubs } }
|
12
|
+
|
13
|
+
its(:description) { should eq(description) }
|
14
|
+
its(:links) { should eq(description['_links']) }
|
15
|
+
its(:embedded) { should eq(description['_embedded']) }
|
16
|
+
its(:href) { should eq(description['_links']['self']['href']) }
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe Haipa::Resource do
|
4
|
+
let(:uri) { '/api/v1' }
|
5
|
+
let(:response) { double('response', body:body.to_json) }
|
6
|
+
let(:api) { double('api', relative_get:response) }
|
7
|
+
subject { Haipa::Resource.new(api, uri) }
|
8
|
+
|
9
|
+
context "with minimum response" do
|
10
|
+
let(:body) { {'_embedded' => {}, '_links' => {'self' => {'href' => uri}}} }
|
11
|
+
its(:embedded) { should be_empty }
|
12
|
+
its(:links) { should_not be_empty }
|
13
|
+
specify { subject.links.self.should be }
|
14
|
+
end
|
15
|
+
end
|
data/spec/haipa_spec.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
require_relative 'spec_helper'
|
2
2
|
|
3
3
|
describe Haipa do
|
4
|
-
let(:description) { {_links
|
4
|
+
let(:description) { {'_links' => {'self' => {'href' => '/'}}} }
|
5
5
|
|
6
6
|
let(:stubs) do
|
7
7
|
Faraday::Adapter::Test::Stubs.new do |stub|
|
8
8
|
stub.get('/') { [200, {}, description.to_json] }
|
9
9
|
end
|
10
10
|
end
|
11
|
-
|
11
|
+
subject { Haipa.api { |builder| builder.adapter :test, stubs } }
|
12
12
|
|
13
|
-
|
13
|
+
its(:description) { should eq(description) }
|
14
14
|
end
|
data/spec/spec_helper.rb
CHANGED
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.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,32 +9,42 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0.8'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
16
24
|
version_requirements: !ruby/object:Gem::Requirement
|
17
25
|
none: false
|
18
26
|
requirements:
|
19
|
-
- -
|
27
|
+
- - ~>
|
20
28
|
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
29
|
+
version: '0.8'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: hashie
|
22
32
|
requirement: !ruby/object:Gem::Requirement
|
23
33
|
none: false
|
24
34
|
requirements:
|
25
|
-
- -
|
35
|
+
- - ~>
|
26
36
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
37
|
+
version: 2.0.0
|
28
38
|
type: :runtime
|
29
39
|
prerelease: false
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: bundler
|
32
40
|
version_requirements: !ruby/object:Gem::Requirement
|
33
41
|
none: false
|
34
42
|
requirements:
|
35
43
|
- - ~>
|
36
44
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
45
|
+
version: 2.0.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: bundler
|
38
48
|
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
@@ -43,14 +53,14 @@ dependencies:
|
|
43
53
|
version: '1.3'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: rake
|
48
56
|
version_requirements: !ruby/object:Gem::Requirement
|
49
57
|
none: false
|
50
58
|
requirements:
|
51
|
-
- -
|
59
|
+
- - ~>
|
52
60
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
61
|
+
version: '1.3'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rake
|
54
64
|
requirement: !ruby/object:Gem::Requirement
|
55
65
|
none: false
|
56
66
|
requirements:
|
@@ -59,22 +69,28 @@ dependencies:
|
|
59
69
|
version: '0'
|
60
70
|
type: :development
|
61
71
|
prerelease: false
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: rspec
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
65
73
|
none: false
|
66
74
|
requirements:
|
67
75
|
- - ! '>='
|
68
76
|
- !ruby/object:Gem::Version
|
69
77
|
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rspec
|
70
80
|
requirement: !ruby/object:Gem::Requirement
|
71
81
|
none: false
|
72
82
|
requirements:
|
73
|
-
- -
|
83
|
+
- - ~>
|
74
84
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
85
|
+
version: 2.13.0
|
76
86
|
type: :development
|
77
87
|
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 2.13.0
|
78
94
|
description: HAL hypermedia client
|
79
95
|
email:
|
80
96
|
- jon@doveston.me.uk
|
@@ -84,12 +100,18 @@ extra_rdoc_files: []
|
|
84
100
|
files:
|
85
101
|
- .gitignore
|
86
102
|
- Gemfile
|
103
|
+
- Guardfile
|
87
104
|
- LICENSE.txt
|
88
105
|
- README.md
|
89
106
|
- Rakefile
|
90
107
|
- haipa.gemspec
|
91
108
|
- lib/haipa.rb
|
109
|
+
- lib/haipa/api.rb
|
110
|
+
- lib/haipa/links.rb
|
111
|
+
- lib/haipa/resource.rb
|
92
112
|
- lib/haipa/version.rb
|
113
|
+
- spec/haipa/api_spec.rb
|
114
|
+
- spec/haipa/resource_spec.rb
|
93
115
|
- spec/haipa_spec.rb
|
94
116
|
- spec/spec_helper.rb
|
95
117
|
homepage: https://github.com/hatoishi/haipa
|
@@ -105,24 +127,26 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
105
127
|
- - ! '>='
|
106
128
|
- !ruby/object:Gem::Version
|
107
129
|
version: '0'
|
108
|
-
hash: -782571411657189938
|
109
130
|
segments:
|
110
131
|
- 0
|
132
|
+
hash: -2396805276847003605
|
111
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
134
|
none: false
|
113
135
|
requirements:
|
114
136
|
- - ! '>='
|
115
137
|
- !ruby/object:Gem::Version
|
116
138
|
version: '0'
|
117
|
-
hash: -782571411657189938
|
118
139
|
segments:
|
119
140
|
- 0
|
141
|
+
hash: -2396805276847003605
|
120
142
|
requirements: []
|
121
143
|
rubyforge_project:
|
122
|
-
rubygems_version: 1.8.
|
144
|
+
rubygems_version: 1.8.23
|
123
145
|
signing_key:
|
124
146
|
specification_version: 3
|
125
147
|
summary: HAL hypermedia client
|
126
148
|
test_files:
|
149
|
+
- spec/haipa/api_spec.rb
|
150
|
+
- spec/haipa/resource_spec.rb
|
127
151
|
- spec/haipa_spec.rb
|
128
152
|
- spec/spec_helper.rb
|