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