hyperresource 0.1.9.3 → 0.1.9.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9eb3362f2f929049439543e8aa9cd140f808b9b
4
- data.tar.gz: 6ae500a90b57bb69715db82268d8c8e56d5af4cd
3
+ metadata.gz: dbbf6ab86efd5ba75dc1c7831f92336b7cfbee64
4
+ data.tar.gz: 72b1877082068c781f3730fc95977cd3b09f60bc
5
5
  SHA512:
6
- metadata.gz: b0b44a45fba55b7bf5b7e4522a46fb04705a3d3d9aa877a516e1582819513b9f622428a847d153f9f920a37644404929ecd7dc3ce4772711bc7298916e1cf313
7
- data.tar.gz: c6143d7034ea27cc735706edf8b4aead7bb5717f745f866721a2c8e340cd88cc5bbfb2d2d0ef3e24fc0f65353d620bfeda177d18940b2de2d3abfccfff0fe6ce
6
+ metadata.gz: 1750d932e5ee8499dd146e52a31090d02809a68b1141d5aed3aaaede921366a33f4a81634b98d960ce083cddf7c28331c873b6386eb64f3681e6b5b4c1c217b6
7
+ data.tar.gz: 5399981c4f2c35b440f4029168392753371244580c4804ba84a044edee22b878a072f38448d0c0b6c6d49436a74bb9cb558f906e05af312cc4eb68fdda1621c7
@@ -1,6 +1,10 @@
1
- this_dir = File.dirname(File.absolute_path(__FILE__))
1
+ this_dir = File.dirname(__FILE__)
2
2
  Dir.glob(this_dir + '/hyper_resource/**/*.rb') {|f| require f}
3
3
 
4
+ if RUBY_VERSION[0..2] == '1.8'
5
+ require 'rubygems'
6
+ end
7
+
4
8
  require 'pp'
5
9
 
6
10
  class HyperResource
@@ -149,7 +153,7 @@ public
149
153
  self.get unless self.loaded
150
154
 
151
155
  method = method.to_s
152
- if method[-1] == '='
156
+ if method[-1,1] == '='
153
157
  return attributes[method[0..-2]] = args.first if attributes[method[0..-2]]
154
158
  else
155
159
  return attributes[method] if attributes && attributes[method]
@@ -249,8 +253,8 @@ public
249
253
  def self._get_response_data_type(response) # :nodoc:
250
254
  return nil unless response
251
255
  return nil unless content_type = response['content-type']
252
- return nil unless m=content_type.match(/;\s* type=(?<type> [0-9A-Za-z:]+)/x)
253
- m[:type][0].upcase + m[:type][1..-1]
256
+ return nil unless m=content_type.match(/;\s* type=([0-9A-Za-z:]+)/x)
257
+ m[1][0,1].upcase + m[1][1..-1]
254
258
  end
255
259
 
256
260
  def _get_response_data_type # :nodoc:
@@ -1,3 +1,4 @@
1
+ require 'rubygems' if RUBY_VERSION[0..2] == '1.8'
1
2
  require 'json'
2
3
 
3
4
  class HyperResource
@@ -40,12 +41,12 @@ class HyperResource
40
41
 
41
42
  resp['_embedded'].each do |name, collection|
42
43
  if collection.is_a? Hash
43
- r = rc.new
44
+ r = rc.new(:root => rsrc.root, :namespace => rsrc.namespace)
44
45
  r.response_object = collection
45
46
  objs[name] = apply(collection, r)
46
47
  else
47
48
  objs[name] = collection.map do |obj|
48
- r = rc.new
49
+ r = rc.new(:root => rsrc.root, :namespace => rsrc.namespace)
49
50
  r.response_object = obj
50
51
  apply(obj, r)
51
52
  end
@@ -52,6 +52,12 @@ class HyperResource
52
52
  return @_hr_changed.keys.count > 0
53
53
  end
54
54
 
55
+ ## Returns a hash of the attributes and values which have been changed
56
+ ## since creation time.
57
+ def changed_attributes
58
+ @_hr_changed.select{|k,v| v}.keys.inject({}) {|h,k| h[k]=self[k]; h}
59
+ end
60
+
55
61
  def []=(attr, value) # :nodoc:
56
62
  _hr_mark_changed(attr)
57
63
  super(attr.to_s, value)
@@ -1,11 +1,23 @@
1
1
  class HyperResource
2
2
  class Exception < ::Exception
3
- attr_accessor :response # response object which led to this exception
4
- attr_accessor :cause # internal exception which led to this exception
3
+ attr_accessor :response # Response body which led to this
4
+ attr_accessor :response_object # Response object which led to this
5
+ attr_accessor :cause # Internal exception which led to this
5
6
 
6
7
  def initialize(message, opts={})
7
8
  self.response = opts[:response]
9
+ self.response_object = opts[:response_object]
8
10
  self.cause = opts[:cause]
11
+
12
+ ## Try to help out with the message
13
+ if self.response_object
14
+ if error = self.response_object['error']
15
+ message = "#{message} (#{error})"
16
+ end
17
+ elsif self.response
18
+ message = "#{message} (\"#{self.response.inspect}\")"
19
+ end
20
+
9
21
  super(message)
10
22
  end
11
23
  end
@@ -2,8 +2,8 @@ require 'faraday'
2
2
  require 'uri'
3
3
  require 'json'
4
4
 
5
- module HyperResource::Modules
6
- module HTTP
5
+ class HyperResource
6
+ module Modules; module HTTP
7
7
 
8
8
  ## Loads and returns the resource pointed to by +href+. The returned
9
9
  ## resource will be blessed into its "proper" class, if
@@ -13,9 +13,33 @@ module HyperResource::Modules
13
13
  finish_up
14
14
  end
15
15
 
16
- ## Returns a per-thread Faraday connection for this object.
16
+ def create(*args); post(*args) end
17
+ def post(params=nil)
18
+ params ||= self.attributes
19
+ self.response = faraday_connection.post do |req|
20
+ req.body = adapter.serialize(params)
21
+ end
22
+ finish_up
23
+ end
24
+
25
+ def update(*args); put(*args) end
26
+ def put(params=nil)
27
+ params ||= self.attributes.changed_attributes
28
+ self.response = faraday_connection.put do |req|
29
+ req.body = adapter.serialize(params)
30
+ end
31
+ finish_up
32
+ end
33
+
34
+ def delete
35
+ self.response = faraday_connection.delete
36
+ finish_up
37
+ end
38
+
39
+ ## Returns a raw Faraday connection to this resource's URL, with proper
40
+ ## headers (including auth).
17
41
  def faraday_connection(url=nil)
18
- url ||= self.root
42
+ url ||= URI.join(self.root, self.href)
19
43
  key = "faraday_connection_#{url}"
20
44
  return Thread.current[key] if Thread.current[key]
21
45
 
@@ -33,7 +57,7 @@ module HyperResource::Modules
33
57
  def finish_up
34
58
  begin
35
59
  self.response_object = self.adapter.deserialize(self.response.body)
36
- rescue Exception => e
60
+ rescue StandardError => e
37
61
  raise HyperResource::ResponseError.new(
38
62
  "Error when deserializing response body",
39
63
  :response => self.response,
@@ -51,16 +75,21 @@ module HyperResource::Modules
51
75
  ## TODO redirect logic?
52
76
  elsif status / 100 == 4
53
77
  raise HyperResource::ClientError.new(status.to_s,
54
- :response => self.response)
78
+ :response => self.response,
79
+ :response_object => self.response_object)
55
80
  elsif status / 100 == 5
56
81
  raise HyperResource::ServerError.new(status.to_s,
57
- :response => self.response)
82
+ :response => self.response,
83
+ :response_object => self.response_object)
84
+
58
85
  else ## 1xx? really?
59
86
  raise HyperResource::ResponseError.new("Got status #{status}, wtf?",
60
- :response => self.response)
87
+ :response => self.response,
88
+ :response_object => self.response_object)
89
+
61
90
  end
62
91
  end
63
92
 
64
- end
93
+ end end
65
94
  end
66
95
 
@@ -32,12 +32,12 @@ class HyperResource
32
32
  ## Returns the first item in the first collection in +self+.
33
33
  alias_method :first_orig, :first
34
34
  def first
35
- self.first_orig[1][0] rescue caller
35
+ self.first_orig[1][0]
36
36
  end
37
37
 
38
38
  ## Returns the ith item in the first collection in +self+.
39
39
  def ith(i)
40
- self.first_orig[1][i] rescue caller
40
+ self.first_orig[1][i]
41
41
  end
42
42
 
43
43
  def []=(attr, value) # :nodoc:
@@ -1,4 +1,4 @@
1
1
  class HyperResource
2
- VERSION = '0.1.9.3'
3
- VERSION_DATE = '2013-10-02'
2
+ VERSION = '0.1.9.4'
3
+ VERSION_DATE = '2013-10-07'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyperresource
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9.3
4
+ version: 0.1.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pete Gamache
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-02 00:00:00.000000000 Z
11
+ date: 2013-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: uri_template
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.8.6
41
+ - !ruby/object:Gem::Dependency
42
+ name: json
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -104,17 +118,17 @@ executables: []
104
118
  extensions: []
105
119
  extra_rdoc_files: []
106
120
  files:
107
- - lib/hyper_resource/adapter/hal_json.rb
108
- - lib/hyper_resource/adapter.rb
109
- - lib/hyper_resource/attributes.rb
110
- - lib/hyper_resource/exceptions.rb
111
- - lib/hyper_resource/link.rb
112
121
  - lib/hyper_resource/links.rb
122
+ - lib/hyper_resource/adapter.rb
113
123
  - lib/hyper_resource/modules/http.rb
114
124
  - lib/hyper_resource/modules/utils.rb
115
125
  - lib/hyper_resource/objects.rb
116
126
  - lib/hyper_resource/response.rb
127
+ - lib/hyper_resource/adapter/hal_json.rb
117
128
  - lib/hyper_resource/version.rb
129
+ - lib/hyper_resource/link.rb
130
+ - lib/hyper_resource/exceptions.rb
131
+ - lib/hyper_resource/attributes.rb
118
132
  - lib/hyper_resource.rb
119
133
  - lib/hyperresource.rb
120
134
  homepage: https://github.com/gamache/hyperresource
@@ -137,9 +151,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
151
  version: '0'
138
152
  requirements: []
139
153
  rubyforge_project:
140
- rubygems_version: 2.0.3
154
+ rubygems_version: 2.0.0.rc.2
141
155
  signing_key:
142
156
  specification_version: 4
143
157
  summary: Extensible hypermedia client for Ruby
144
158
  test_files: []
145
- has_rdoc: true