kelredd-resourceful 0.4.9 → 0.5.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.
- data/README.rdoc +2 -1
- data/lib/resourceful/agent/base.rb +5 -5
- data/lib/resourceful/agent/mechanize.rb +10 -10
- data/lib/resourceful/agent/rest_client.rb +31 -9
- data/lib/resourceful/model/base.rb +49 -2
- data/lib/resourceful/model/json.rb +2 -2
- data/lib/resourceful/model/xml.rb +2 -2
- data/lib/resourceful/version.rb +2 -2
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -37,8 +37,9 @@ The supported formats are:
|
|
37
37
|
A suite of cucumber features are available for you to run as an acceptance test. You should look to the features
|
38
38
|
for additional documentation and usage scenarios. To run the features:
|
39
39
|
|
40
|
-
# make sure you have
|
40
|
+
# make sure you have these gems
|
41
41
|
$ sudo gem install cucumber
|
42
|
+
$ sudo gem install fakeweb
|
42
43
|
# change to the resourceful gem installed location
|
43
44
|
$ cd /opt/local/lib/ruby/gems/x.x/gems/kelredd-resourceful-xxx
|
44
45
|
$ rake features
|
@@ -17,13 +17,15 @@ module Resourceful
|
|
17
17
|
@logger.add(Log4r::StdoutOutputter.new('console'))
|
18
18
|
end
|
19
19
|
|
20
|
-
|
20
|
+
protected
|
21
|
+
|
22
|
+
def call_resource(verb, path, opts={}, &block)
|
21
23
|
path, opts = check_config(path, opts)
|
22
24
|
format = Resourceful::Resource::Format.get(opts[:format])
|
23
25
|
|
24
26
|
full_resource_path = self.class.resource_path(path, format, opts[:params])
|
25
|
-
resource_summary = summary(
|
26
|
-
cache_key = Resourceful::Resource::Cache.key(@host,
|
27
|
+
resource_summary = summary(verb.to_s, full_resource_path)
|
28
|
+
cache_key = Resourceful::Resource::Cache.key(@host, verb.to_s, full_resource_path)
|
27
29
|
|
28
30
|
if opts[:force] || (resp = cache.read(cache_key)).nil?
|
29
31
|
log "Resource call: #{resource_summary}"
|
@@ -34,8 +36,6 @@ module Resourceful
|
|
34
36
|
format.build(resp)
|
35
37
|
end
|
36
38
|
|
37
|
-
protected
|
38
|
-
|
39
39
|
def check_config(path, opts) # :nodoc:
|
40
40
|
raise Resourceful::Exceptions::ConfigurationError, "invalid agent" unless agent && agent_url && !agent_url.empty?
|
41
41
|
opts ||= {}
|
@@ -18,21 +18,21 @@ module Resourceful
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def get(path, opts={})
|
22
|
-
|
21
|
+
def get(path, opts={}, &block)
|
22
|
+
call_resource(:get, path, opts, block)
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def call_resource(verb, path, opts, block)
|
28
|
+
super(verb, path, opts) do |path|
|
23
29
|
resp = ""
|
24
|
-
@mechanize.
|
25
|
-
resp =
|
26
|
-
yield page
|
27
|
-
else
|
28
|
-
page
|
29
|
-
end
|
30
|
+
@mechanize.send(verb.to_s, "#{@host}#{path}") do |page|
|
31
|
+
resp = block ? block.call(page) : page
|
30
32
|
end
|
31
33
|
resp.body
|
32
34
|
end
|
33
35
|
end
|
34
|
-
|
35
|
-
protected
|
36
36
|
|
37
37
|
def agent
|
38
38
|
@mechanize
|
@@ -11,19 +11,41 @@ module Resourceful
|
|
11
11
|
@rest_client = ::RestClient::Resource.new(@host, :user => @user, :password => @password)
|
12
12
|
end
|
13
13
|
|
14
|
-
def get(path, opts={})
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
def get(path, opts={}, &block)
|
15
|
+
call_resource(:get, path, opts, block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def post(path, opts={}, body=nil, &block)
|
19
|
+
push_resource(:post, path, opts, body, block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def put(path, opts={}, body=nil, &block)
|
23
|
+
push_resource(:put, path, opts, body, block)
|
24
|
+
end
|
25
|
+
|
26
|
+
def delete(path, opts={}, body=nil, &block)
|
27
|
+
push_resource(:delete, path, opts, body, block)
|
23
28
|
end
|
24
29
|
|
25
30
|
protected
|
26
31
|
|
32
|
+
def push_resource(verb, path, opts, body, block)
|
33
|
+
opts[:body] = body
|
34
|
+
call_resource(verb, path, opts, block)
|
35
|
+
end
|
36
|
+
|
37
|
+
def call_resource(verb, path, opts, block)
|
38
|
+
super(verb, path, opts) do |path|
|
39
|
+
result = case verb.to_sym
|
40
|
+
when :get
|
41
|
+
@rest_client[path].get
|
42
|
+
when :post, :put, :delete
|
43
|
+
@rest_client[path].send(verb, opts[:body])
|
44
|
+
end
|
45
|
+
block ? block.call(result) : result
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
27
49
|
def agent
|
28
50
|
@rest_client
|
29
51
|
end
|
@@ -24,12 +24,42 @@ module Resourceful
|
|
24
24
|
@data
|
25
25
|
end
|
26
26
|
|
27
|
-
def
|
28
|
-
@
|
27
|
+
def new_record?
|
28
|
+
@data.nil?
|
29
|
+
end
|
30
|
+
|
31
|
+
def attributes(force=false)
|
32
|
+
if @attributes.nil? || force
|
33
|
+
@attributes = @@attributes[self.class.name].inject({}) { |hsh, key| hsh[key] = self.send(key); hsh }
|
34
|
+
end
|
35
|
+
@attributes
|
36
|
+
end
|
37
|
+
|
38
|
+
def update_attributes(attr_hash={})
|
39
|
+
attr_hash.each do |k,v|
|
40
|
+
self.send("#{key}=", v)
|
41
|
+
end
|
42
|
+
attributes(true)
|
43
|
+
end
|
44
|
+
|
45
|
+
def save
|
46
|
+
@data = yield attributes(true)
|
47
|
+
reset_attributes
|
48
|
+
end
|
49
|
+
|
50
|
+
def destroy
|
51
|
+
yield attributes(true)
|
52
|
+
@data = nil
|
29
53
|
end
|
30
54
|
|
31
55
|
protected
|
32
56
|
|
57
|
+
def push_data(verb, path, opts, data)
|
58
|
+
block = opts.delete(:on_response)
|
59
|
+
['id', :id].each { |a| data.delete(a) } if data.kind_of?(::Hash)
|
60
|
+
self.class.set_agent.send(verb.to_s, path, opts, data, &block)
|
61
|
+
end
|
62
|
+
|
33
63
|
def self.attribute(name, type, config={})
|
34
64
|
clean_name = name.to_s.gsub(/\W/,'')
|
35
65
|
add_to_attributes(name.to_s)
|
@@ -63,6 +93,9 @@ module Resourceful
|
|
63
93
|
end
|
64
94
|
)
|
65
95
|
end
|
96
|
+
define_method("#{name}=") do |value|
|
97
|
+
instance_variable_set("@#{clean_name}", value)
|
98
|
+
end
|
66
99
|
end
|
67
100
|
|
68
101
|
def self.has_one(name, config={})
|
@@ -117,6 +150,20 @@ module Resourceful
|
|
117
150
|
|
118
151
|
private
|
119
152
|
|
153
|
+
def reset_attributes
|
154
|
+
clear_attributes
|
155
|
+
attributes(true)
|
156
|
+
end
|
157
|
+
|
158
|
+
def clear_attributes
|
159
|
+
@@attributes ||= {}
|
160
|
+
klass_name = self.class.name
|
161
|
+
@@attributes[klass_name] ||= []
|
162
|
+
@@attributes[klass_name].each do |a|
|
163
|
+
instance_variable_set("@#{a.to_s.gsub(/\W/,'')}", nil)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
120
167
|
def self.add_to_attributes(name)
|
121
168
|
@@attributes ||= {}
|
122
169
|
klass_name = self.name
|
@@ -26,8 +26,8 @@ module Resourceful
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
def initialize(json)
|
30
|
-
raise Resourceful::Exceptions::ModelError, "trying to initialize a Resourceful::Model::Json model with '#{json.class.name}' data" unless json.kind_of?(::Hash)
|
29
|
+
def initialize(json=nil)
|
30
|
+
raise Resourceful::Exceptions::ModelError, "trying to initialize a Resourceful::Model::Json model with '#{json.class.name}' data" unless json.nil? || json.kind_of?(::Hash)
|
31
31
|
@data = json
|
32
32
|
end
|
33
33
|
|
@@ -26,8 +26,8 @@ module Resourceful
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
def initialize(xml)
|
30
|
-
raise Resourceful::Exceptions::ModelError, "trying to initialize a Resourceful::Model::Xml model with '#{xml.class.name}' data" unless xml.kind_of?(Nokogiri::XML::NodeSet) || xml.kind_of?(Nokogiri::XML::Element)
|
29
|
+
def initialize(xml=nil)
|
30
|
+
raise Resourceful::Exceptions::ModelError, "trying to initialize a Resourceful::Model::Xml model with '#{xml.class.name}' data" unless xml.nil? || xml.kind_of?(Nokogiri::XML::NodeSet) || xml.kind_of?(Nokogiri::XML::Element)
|
31
31
|
@data = xml
|
32
32
|
end
|
33
33
|
|
data/lib/resourceful/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kelredd-resourceful
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kelly Redding
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-08-
|
12
|
+
date: 2009-08-11 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|