haipa 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,4 +1,14 @@
1
+ require 'uri'
2
+ require 'forwardable'
3
+ require 'hashie'
4
+
1
5
  require 'haipa/version'
6
+ require 'haipa/api'
7
+ require 'haipa/resource'
8
+ require 'haipa/links'
2
9
 
3
10
  module Haipa
11
+ def self.api(params={})
12
+ Api.new(params, &Proc.new)
13
+ end
4
14
  end
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Haipa
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
@@ -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:{self:{href:'http://example.com/'}}} }
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
- let(:client) { Faraday.new { |builder| builder.adapter :test, stubs } }
11
+ subject { Haipa.api { |builder| builder.adapter :test, stubs } }
12
12
 
13
- specify { p client.get('/') }
13
+ its(:description) { should eq(description) }
14
14
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  require 'json'
2
2
  require 'faraday'
3
+ require 'awesome_print'
4
+ require 'hashie'
5
+ require 'haipa'
3
6
 
4
7
  RSpec.configure do |config|
5
8
  config.filter_run :wip => true
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.1
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-18 00:00:00.000000000 Z
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: '0'
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: '1.3'
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: '0'
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: '0'
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.24
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