jeffrafter-resource_party 0.1.2 → 0.2.0

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.
Files changed (4) hide show
  1. data/Rakefile +1 -0
  2. data/VERSION.yml +2 -2
  3. data/lib/resource_party.rb +40 -24
  4. metadata +13 -2
data/Rakefile CHANGED
@@ -12,6 +12,7 @@ begin
12
12
  s.description = "Simple wrapper for HTTParty for basic operations with a restful resource"
13
13
  s.authors = ["Jeff Rafter"]
14
14
  s.add_dependency "jnunemaker-httparty"
15
+ s.add_dependency "htmlentities"
15
16
  s.files = FileList["[A-Z]*", "{lib,test}/**/*"]
16
17
  end
17
18
  rescue LoadError
@@ -1,4 +1,4 @@
1
1
  ---
2
- :minor: 1
3
- :patch: 2
2
+ :minor: 2
3
+ :patch: 0
4
4
  :major: 0
@@ -1,4 +1,5 @@
1
1
  require 'httparty'
2
+ require 'htmlentities'
2
3
 
3
4
  module ResourceParty
4
5
  class ServerError < RuntimeError; end
@@ -19,33 +20,30 @@ module ResourceParty
19
20
  def initialize(params = {}, query = {}, no_defaults = false)
20
21
  return self if no_defaults
21
22
  response = self.class.get("/#{self.class.route}/new.xml")
22
- raise ServerError.new(response.body) if response.code != "200"
23
+ handle_errors(response)
23
24
  hash = Hash.from_xml(response.body).values.first
24
25
  hash.merge! params
25
26
  self.class.from_xml hash, self
26
27
  end
27
28
 
28
- def self.find(id, query = {})
29
- response = self.get("/#{self.route}/#{id}.xml", :query => query)
30
- raise RecordNotFound.new(response.body) if response.code == "404"
31
- raise ServerError.new(response.body) if response.code != "200"
32
- hash = Hash.from_xml(response.body).values.first
33
- self.from_xml hash
29
+ def self.find(param, query = {})
30
+ response = self.get("/#{self.route}/#{param}.xml", :query => query)
31
+ handle_not_found(response)
32
+ handle_errors(response)
33
+ handle_response(response)
34
34
  end
35
35
 
36
36
  def self.create(params = {}, query = {})
37
37
  response = self.post("/#{self.route}.xml", :body => body_for(params), :query => query)
38
- raise ServerError.new(response.body) if response.code != "200"
39
- hash = Hash.from_xml(response.body).values.first
40
- self.from_xml hash
38
+ handle_errors(response)
39
+ handle_response(response)
41
40
  end
42
41
 
43
- def self.update(id, params = {}, query = {})
44
- response = self.put("/#{self.route}/#{id}.xml", :body => body_for(params), :query => query)
45
- raise RecordNotFound.new(response.body) if response.code == "404"
46
- raise ServerError.new(response.body) if response.code != "200"
47
- hash = Hash.from_xml(response.body).values.first
48
- self.from_xml hash
42
+ def self.update(param, params = {}, query = {})
43
+ response = self.put("/#{self.route}/#{param}.xml", :body => body_for(params), :query => query)
44
+ handle_not_found(response)
45
+ handle_errors(response)
46
+ handle_response(response)
49
47
  end
50
48
 
51
49
  def update(params = {}, query = {})
@@ -53,10 +51,10 @@ module ResourceParty
53
51
  end
54
52
 
55
53
  def self.destroy(id, query = {})
56
- response = self.delete("/#{self.route}/#{id}.xml", :query => query, :format => :text)
57
- raise RecordNotFound.new(response.body) if response.code == "404"
58
- raise ServerError.new(response.body) if response.code != "200"
59
- true
54
+ response = self.delete("/#{self.route}/#{id}.xml", :query => query)
55
+ handle_not_found(response)
56
+ handle_errors(response)
57
+ handle_response(response)
60
58
  end
61
59
 
62
60
  def destroy(query = {})
@@ -65,22 +63,40 @@ module ResourceParty
65
63
 
66
64
  def self.all(query = {})
67
65
  response = self.get("/#{self.route}.xml", :query => query)
68
- raise ServerError.new(response.body) if response.code != "200"
66
+ handle_errors(response)
69
67
  items = response.values.first
70
68
  items.map{|hash| self.from_xml hash }
71
69
  end
72
70
 
73
71
  private
74
72
 
73
+ def self.handle_not_found(response)
74
+ raise RecordNotFound.new(response.body) if response.code == "404"
75
+ end
76
+
77
+ def self.handle_errors(response)
78
+ raise ServerError.new(response.body) if response.code != "200"
79
+ end
80
+
81
+ def self.handle_response(response)
82
+ # Rails will return ' ' when you render :nothing => true
83
+ return nil if response.body.blank? || response.body == ' '
84
+ hash = Hash.from_xml(response.body).values.first
85
+ self.from_xml hash
86
+ end
87
+
75
88
  def self.body_for(params)
89
+ require 'cgi' unless defined?(CGI) && defined?(CGI::escape)
76
90
  body = {}
77
91
  params.each{|n,v| body["#{self.resource}[#{n}]"] = v }
78
- body.to_query
92
+ body.map{|n,v| "#{CGI.escape(n.to_s)}=#{CGI.escape(v.to_s)}"} * "&"
79
93
  end
80
94
 
81
95
  def self.from_xml(params, obj = nil)
82
96
  obj ||= self.new({}, {}, true)
83
- obj.attributes = params
97
+ decoded_params = params.dup
98
+ params.each{|n,v| decoded_params[n] = HTMLEntities.new.decode(v) if v && v.is_a?(String) }
99
+ obj.attributes = decoded_params
84
100
  mod = Module.new do
85
101
  obj.attributes.keys.each do |k|
86
102
  define_method(k) do
@@ -88,7 +104,7 @@ module ResourceParty
88
104
  end
89
105
 
90
106
  define_method("#{k}=") do |val|
91
- self.attributes[k] = val
107
+ self.attributes[k] = HTMLEntities.new.decode(val)
92
108
  end
93
109
  end
94
110
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jeffrafter-resource_party
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Rafter
@@ -9,11 +9,22 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-10 00:00:00 -08:00
12
+ date: 2009-03-05 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: jnunemaker-httparty
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: htmlentities
27
+ type: :runtime
17
28
  version_requirement:
18
29
  version_requirements: !ruby/object:Gem::Requirement
19
30
  requirements: