restfulie 0.7.2 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +21 -0
- data/README.textile +10 -9
- data/Rakefile +12 -5
- data/lib/restfulie/client/base.rb +10 -6
- data/lib/restfulie/client/http/adapter.rb +48 -33
- data/lib/restfulie/client/http/atom_ext.rb +3 -68
- data/lib/restfulie/client/http/core_ext/http.rb +19 -0
- data/lib/restfulie/client/http/core_ext.rb +6 -0
- data/lib/restfulie/client/http/error.rb +3 -6
- data/lib/restfulie/client/http/marshal.rb +35 -49
- data/lib/restfulie/client/http/xml_ext.rb +7 -0
- data/lib/restfulie/client/http.rb +2 -2
- data/lib/restfulie/client/mikyung/concatenator.rb +15 -0
- data/lib/restfulie/client/mikyung/core.rb +44 -0
- data/lib/restfulie/client/mikyung/languages.rb +29 -0
- data/lib/restfulie/client/mikyung/rest_process_model.rb +114 -0
- data/lib/restfulie/client/mikyung/steady_state_walker.rb +32 -0
- data/lib/restfulie/client/mikyung/then_condition.rb +33 -0
- data/lib/restfulie/client/mikyung/when_condition.rb +53 -0
- data/lib/restfulie/client/mikyung.rb +19 -0
- data/lib/restfulie/client.rb +1 -0
- data/lib/restfulie/common/converter/atom/builder.rb +109 -0
- data/lib/restfulie/common/converter/atom/helpers.rb +9 -0
- data/lib/restfulie/common/converter/atom.rb +87 -0
- data/lib/restfulie/common/converter/values.rb +29 -0
- data/lib/restfulie/common/converter.rb +11 -0
- data/lib/restfulie/common/core_ext/proc.rb +48 -0
- data/lib/restfulie/common/core_ext.rb +5 -0
- data/lib/restfulie/common/errors.rb +6 -0
- data/lib/restfulie/common/representation/atom/atom.rng +597 -0
- data/lib/restfulie/common/representation/atom/base.rb +375 -0
- data/lib/restfulie/common/representation/atom/entry.rb +107 -0
- data/lib/restfulie/common/representation/atom/feed.rb +106 -0
- data/lib/restfulie/common/representation/atom.rb +43 -33
- data/lib/restfulie/common/representation/json.rb +1 -2
- data/lib/restfulie/common/representation/xml.rb +209 -23
- data/lib/restfulie/common/representation.rb +0 -1
- data/lib/restfulie/common.rb +2 -3
- data/lib/restfulie/server/action_controller/base.rb +21 -2
- data/lib/restfulie/server/action_controller/params_parser.rb +16 -16
- data/lib/restfulie/server/action_controller/restful_responder.rb +3 -3
- data/lib/restfulie/server/action_controller/routing/patch.rb +6 -0
- data/lib/restfulie/server/action_view/helpers.rb +8 -8
- data/lib/restfulie/server/action_view/template_handlers/tokamak.rb +3 -2
- data/lib/restfulie/server/core_ext/array.rb +13 -12
- metadata +51 -34
- data/lib/restfulie/client/http/link.rb +0 -39
- data/lib/restfulie/client/http/xml.rb +0 -4
- data/lib/restfulie/common/builder/builder_base.rb +0 -73
- data/lib/restfulie/common/builder/helpers.rb +0 -22
- data/lib/restfulie/common/builder/marshalling/atom.rb +0 -197
- data/lib/restfulie/common/builder/marshalling/base.rb +0 -12
- data/lib/restfulie/common/builder/marshalling/json.rb +0 -2
- data/lib/restfulie/common/builder/marshalling/xml.rb +0 -183
- data/lib/restfulie/common/builder/marshalling.rb +0 -16
- data/lib/restfulie/common/builder/rules/collection_rule.rb +0 -10
- data/lib/restfulie/common/builder/rules/custom_attributes.rb +0 -24
- data/lib/restfulie/common/builder/rules/link.rb +0 -20
- data/lib/restfulie/common/builder/rules/links.rb +0 -9
- data/lib/restfulie/common/builder/rules/member_rule.rb +0 -8
- data/lib/restfulie/common/builder/rules/namespace.rb +0 -35
- data/lib/restfulie/common/builder/rules/rules_base.rb +0 -77
- data/lib/restfulie/common/builder.rb +0 -17
- data/lib/vendor/atom/configuration.rb +0 -24
- data/lib/vendor/atom/pub.rb +0 -250
- data/lib/vendor/atom/xml/parser.rb +0 -373
- data/lib/vendor/atom.rb +0 -771
@@ -1,19 +1,12 @@
|
|
1
|
+
module Restfulie::Common::Converter
|
2
|
+
end
|
3
|
+
module Restfulie::Common::Converter::Xml
|
4
|
+
end
|
5
|
+
|
1
6
|
class Hash
|
2
7
|
def links(*args)
|
3
8
|
links = fetch("link", [])
|
4
|
-
links
|
5
|
-
links = [] unless links
|
6
|
-
links = links.map do |l|
|
7
|
-
Restfulie::Client::Link.new(l)
|
8
|
-
end
|
9
|
-
if args.empty?
|
10
|
-
links
|
11
|
-
else
|
12
|
-
found = links.find do |link|
|
13
|
-
link.rel == args[0].to_s
|
14
|
-
end
|
15
|
-
found
|
16
|
-
end
|
9
|
+
Restfulie::Common::Converter::Xml::Links.new(links)
|
17
10
|
end
|
18
11
|
def method_missing(sym, *args)
|
19
12
|
self[sym.to_s].nil? ? super(sym, args) : self[sym.to_s]
|
@@ -23,27 +16,220 @@ class Hash
|
|
23
16
|
end
|
24
17
|
end
|
25
18
|
|
26
|
-
|
19
|
+
class Restfulie::Common::Converter::Xml::Links
|
27
20
|
|
28
|
-
|
29
|
-
|
30
|
-
|
21
|
+
def initialize(links)
|
22
|
+
links = [links] unless links.kind_of? Array
|
23
|
+
links = [] unless links
|
24
|
+
@links = links.map do |l|
|
25
|
+
link = Restfulie::Common::Converter::Xml::Link.new(l)
|
26
|
+
link.instance_eval { self.class.send :include, ::Restfulie::Client::HTTP::LinkRequestBuilder }
|
27
|
+
link
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def method_missing(sym, *args)
|
32
|
+
@links.find do |link|
|
33
|
+
link.rel == sym.to_s
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
class Restfulie::Common::Converter::Xml::Link
|
40
|
+
|
41
|
+
def initialize(options = {})
|
42
|
+
@options = options
|
43
|
+
end
|
44
|
+
def href
|
45
|
+
@options["href"]
|
46
|
+
end
|
47
|
+
def rel
|
48
|
+
@options["rel"]
|
49
|
+
end
|
50
|
+
def content_type
|
51
|
+
@options["type"]
|
52
|
+
end
|
53
|
+
def type
|
54
|
+
content_type
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Implements the interface for marshal Xml media type requests (application/xml)
|
59
|
+
module Restfulie::Common::Converter::Xml
|
60
|
+
|
61
|
+
mattr_reader :media_type_name
|
31
62
|
@@media_type_name = 'application/xml'
|
32
63
|
|
33
|
-
|
64
|
+
mattr_reader :headers
|
34
65
|
@@headers = {
|
35
66
|
:post => { 'Content-Type' => media_type_name }
|
36
67
|
}
|
37
68
|
|
38
|
-
def
|
39
|
-
|
69
|
+
def self.marshal(entity, options = {})
|
70
|
+
to_xml(entity, options)
|
40
71
|
end
|
41
72
|
|
42
|
-
def
|
43
|
-
|
44
|
-
entity.to_xml
|
73
|
+
def self.unmarshal(string)
|
74
|
+
Hash.from_xml string
|
45
75
|
end
|
46
76
|
|
77
|
+
mattr_reader :recipes
|
78
|
+
@@recipes = {}
|
79
|
+
|
80
|
+
def self.describe_recipe(recipe_name, options={}, &block)
|
81
|
+
raise 'Undefined recipe' unless block_given?
|
82
|
+
raise 'Undefined recipe_name' unless recipe_name
|
83
|
+
@@recipes[recipe_name] = block
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.to_xml(obj, options = {}, &block)
|
87
|
+
return obj if obj.kind_of?(String)
|
88
|
+
|
89
|
+
if block_given?
|
90
|
+
recipe = block
|
91
|
+
elsif options[:recipe]
|
92
|
+
recipe = @@recipes[options[:recipe]]
|
93
|
+
else
|
94
|
+
return obj.values.first.to_xml(:root => obj.keys.first) if obj.kind_of?(Hash) && obj.size==1
|
95
|
+
return obj.to_xml
|
96
|
+
end
|
97
|
+
|
98
|
+
# Create representation and proxy
|
99
|
+
builder = Builder.new(obj)
|
100
|
+
|
101
|
+
# Check recipe arity size before calling it
|
102
|
+
recipe.call(*[builder, obj, options][0,recipe.arity])
|
103
|
+
builder.doc.to_xml
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.helper
|
107
|
+
Restfulie::Common::Converter::Xml::Helpers
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
class Restfulie::Common::Converter::Xml::Builder
|
112
|
+
attr_reader :doc
|
113
|
+
def initialize(obj, options = {})
|
114
|
+
@doc = Nokogiri::XML::Document.new
|
115
|
+
@obj = obj
|
116
|
+
if options[:root]
|
117
|
+
root = options[:root]
|
118
|
+
else
|
119
|
+
root = root_element_for(obj)
|
120
|
+
end
|
121
|
+
@parent = @doc.create_element(root)
|
122
|
+
@parent.parent = @doc
|
123
|
+
end
|
124
|
+
|
125
|
+
def values(options = nil, &block)
|
126
|
+
options.each do |key,value|
|
127
|
+
attr = key.to_s
|
128
|
+
if attr =~ /^xmlns(:\w+)?$/
|
129
|
+
ns = attr.split(":", 2)[1]
|
130
|
+
@parent.add_namespace_definition(ns, value)
|
131
|
+
end
|
132
|
+
end if options
|
133
|
+
|
134
|
+
yield Restfulie::Common::Converter::Components::Values.new(self)
|
135
|
+
end
|
136
|
+
|
137
|
+
def insert_value(name, prefix, *args, &block)
|
138
|
+
node = create_element(name.to_s, prefix, *args)
|
139
|
+
node.parent = @parent
|
140
|
+
|
141
|
+
if block_given?
|
142
|
+
@parent = node
|
143
|
+
block.call
|
144
|
+
@parent = node.parent
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def link(relationship, uri, options = {})
|
149
|
+
options["rel"] = relationship.to_s
|
150
|
+
options["href"] = uri
|
151
|
+
options["type"] ||= "application/xml"
|
152
|
+
insert_value("link", nil, options)
|
153
|
+
end
|
154
|
+
|
155
|
+
def members(a_collection = nil, &block)
|
156
|
+
collection = a_collection || @obj
|
157
|
+
raise Restfulie::Common::Error::BuilderError("Members method require a collection to execute") unless collection.respond_to?(:each)
|
158
|
+
collection.each do |member|
|
159
|
+
entry = @doc.create_element(root_element_for(member))
|
160
|
+
entry.parent = @parent
|
161
|
+
@parent = entry
|
162
|
+
block.call(self, member)
|
163
|
+
@parent = entry.parent
|
164
|
+
end
|
47
165
|
end
|
166
|
+
|
167
|
+
private
|
48
168
|
|
169
|
+
def root_element_for(obj)
|
170
|
+
if obj.kind_of?(Hash) && obj.size==1
|
171
|
+
obj.keys.first.to_s
|
172
|
+
elsif obj.kind_of?(Array) && !obj.empty?
|
173
|
+
root_element_for(obj.first).underscore.pluralize
|
174
|
+
else
|
175
|
+
obj.class.to_s.underscore
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def create_element(node, prefix, *args)
|
180
|
+
node = @doc.create_element(node) do |n|
|
181
|
+
if prefix
|
182
|
+
if namespace = prefix_valid?(prefix)
|
183
|
+
# Adding namespace prefix
|
184
|
+
n.namespace = namespace
|
185
|
+
namespace = nil
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
args.each do |arg|
|
190
|
+
case arg
|
191
|
+
# Adding XML attributes
|
192
|
+
when Hash
|
193
|
+
arg.each { |k,v|
|
194
|
+
key = k.to_s
|
195
|
+
if key =~ /^xmlns(:\w+)?$/
|
196
|
+
ns_name = key.split(":", 2)[1]
|
197
|
+
n.add_namespace_definition(ns_name, v)
|
198
|
+
next
|
199
|
+
end
|
200
|
+
n[k.to_s] = v.to_s
|
201
|
+
}
|
202
|
+
# Adding XML node content
|
203
|
+
else
|
204
|
+
arg.kind_of?(Time) || arg.kind_of?(DateTime) ? content = arg.xmlschema : content = arg
|
205
|
+
n.content = content
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
def prefix_valid?(prefix)
|
212
|
+
ns = @parent.namespace_definitions.find { |x| x.prefix == prefix.to_s }
|
213
|
+
|
214
|
+
unless ns
|
215
|
+
@parent.ancestors.each do |a|
|
216
|
+
next if a == @doc
|
217
|
+
ns = a.namespace_definitions.find { |x| x.prefix == prefix.to_s }
|
218
|
+
break if ns
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
return ns
|
223
|
+
end
|
224
|
+
|
225
|
+
end
|
226
|
+
|
227
|
+
module Restfulie::Common::Converter::Xml::Helpers
|
228
|
+
def collection(obj, *args, &block)
|
229
|
+
Restfulie::Common::Converter::Xml.to_xml(obj, {}, &block)
|
230
|
+
end
|
231
|
+
|
232
|
+
def member(obj, *args, &block)
|
233
|
+
Restfulie::Common::Converter::Xml.to_xml(obj, {}, &block)
|
234
|
+
end
|
49
235
|
end
|
data/lib/restfulie/common.rb
CHANGED
@@ -5,8 +5,6 @@ require 'rubygems'
|
|
5
5
|
require 'active_support'
|
6
6
|
require 'action_controller'
|
7
7
|
|
8
|
-
require 'vendor/atom'
|
9
|
-
|
10
8
|
module Restfulie
|
11
9
|
module Common; end
|
12
10
|
end
|
@@ -14,8 +12,9 @@ end
|
|
14
12
|
%w(
|
15
13
|
errors
|
16
14
|
logger
|
17
|
-
|
15
|
+
core_ext
|
18
16
|
representation
|
17
|
+
converter
|
19
18
|
).each do |file|
|
20
19
|
require "restfulie/common/#{file}"
|
21
20
|
end
|
@@ -8,8 +8,27 @@ module Restfulie
|
|
8
8
|
# Sets a default responder for this controller.
|
9
9
|
# Needs to require responder_legacy.rb
|
10
10
|
base.responder = Restfulie::Server::ActionController::RestfulResponder
|
11
|
+
base.extend(Restfulie::Server::ActionController::Base::ClassMethods)
|
11
12
|
# Atom representation is added by default
|
12
|
-
ParamsParser.register('application/atom+xml', Restfulie::Common::
|
13
|
+
ParamsParser.register('application/atom+xml', Restfulie::Common::Converter::Atom)
|
14
|
+
end
|
15
|
+
|
16
|
+
module ClassMethods
|
17
|
+
def call(env)
|
18
|
+
if include_restfulie? && env.has_key?("action_controller.restfulie.response")
|
19
|
+
if logger && logger.info?
|
20
|
+
information = "Status: #{env["action_controller.restfulie.response"][0]} "
|
21
|
+
information << ::ActionController::StatusCodes::STATUS_CODES[env["action_controller.restfulie.response"][0]]
|
22
|
+
logger.info(information)
|
23
|
+
end
|
24
|
+
return env["action_controller.restfulie.response"]
|
25
|
+
end
|
26
|
+
super
|
27
|
+
end
|
28
|
+
|
29
|
+
def include_restfulie?
|
30
|
+
defined?(Restfulie::Server::ActionController::Base) && controller_class_name.constantize.include?(Restfulie::Server::ActionController::Base)
|
31
|
+
end
|
13
32
|
end
|
14
33
|
|
15
34
|
protected
|
@@ -17,7 +36,7 @@ module Restfulie
|
|
17
36
|
# If your controller inherits from Restfulie::Server::Controller::Base,
|
18
37
|
# it will have an :atom option, very similar to render :xml
|
19
38
|
def render(options = {}, extra_options = {}, &block)
|
20
|
-
if atom = options[:atom]
|
39
|
+
if options && atom = options[:atom]
|
21
40
|
response.content_type ||= Mime::ATOM
|
22
41
|
render_for_text(atom.respond_to?(:to_atom) ? atom.to_atom.to_xml : atom.to_xml, options[:status])
|
23
42
|
else
|
@@ -42,21 +42,21 @@ end
|
|
42
42
|
# extensions are handled by the Rack stack
|
43
43
|
#
|
44
44
|
# TODO Change this when porting this code to Rails 3
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
#
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
45
|
+
::ActionController::ParamsParser.class_eval do
|
46
|
+
def call(env)
|
47
|
+
begin
|
48
|
+
if params = parse_formatted_parameters(env)
|
49
|
+
env["action_controller.request.request_parameters"] = params
|
50
|
+
elsif !(env["CONTENT_TYPE"] == "application/x-www-form-urlencoded") #do not override rails default behaviour for this media type, it's dangerous... (o.O)
|
51
|
+
if env["CONTENT_LENGTH"] && (env["CONTENT_LENGTH"] != "0")
|
52
|
+
env["action_controller.restfulie.response"] = [415, {'Content-Type' => 'text/html'}, ["<html><body><h1>415 Unsupported Media Type</h1></body></html>"]]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
rescue
|
56
|
+
env["action_controller.restfulie.response"] = [400, {'Content-Type' => 'text/html'}, ["<html><body><h1>400 Bad Request</h1></body></html>"]]
|
57
|
+
end
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
@app.call(env)
|
60
|
+
end
|
61
|
+
end
|
62
62
|
|
@@ -29,11 +29,11 @@ module Restfulie::Server::ActionController
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def set_public_cache_control!
|
32
|
-
cache_control = response.headers["Cache-Control"].split(",").map {|k| k.strip }
|
32
|
+
cache_control = controller.response.headers["Cache-Control"].split(",").map {|k| k.strip }
|
33
33
|
cache_control.delete("private")
|
34
34
|
cache_control.delete("no-cache")
|
35
35
|
cache_control << "public"
|
36
|
-
response.headers["Cache-Control"] = cache_control.join(', ')
|
36
|
+
controller.response.headers["Cache-Control"] = cache_control.join(', ')
|
37
37
|
end
|
38
38
|
end
|
39
|
-
end
|
39
|
+
end
|
@@ -5,7 +5,7 @@ module Restfulie::Server::ActionView::Helpers
|
|
5
5
|
#
|
6
6
|
# Passing the current context to partial in template:
|
7
7
|
#
|
8
|
-
#
|
8
|
+
# member(@album) do |member, album|
|
9
9
|
# partial('member', binding)
|
10
10
|
# end
|
11
11
|
#
|
@@ -14,12 +14,12 @@ module Restfulie::Server::ActionView::Helpers
|
|
14
14
|
# member.links << link(:rel => :artists, :href => album_artists_url(album))
|
15
15
|
#
|
16
16
|
# Or passing local variables assing
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
17
|
+
#
|
18
|
+
# collection(@albums) do |collection|
|
19
|
+
# collection.members do |member, album|
|
20
|
+
# partial("member", :locals => {:member => member, :album => album})
|
21
|
+
# end
|
22
|
+
# end
|
23
23
|
#
|
24
24
|
def partial(partial_path, caller_binding = nil)
|
25
25
|
template = _pick_partial_template(partial_path)
|
@@ -27,7 +27,7 @@ module Restfulie::Server::ActionView::Helpers
|
|
27
27
|
# Create a context to assing variables
|
28
28
|
if caller_binding.kind_of?(Hash)
|
29
29
|
Proc.new do
|
30
|
-
extend
|
30
|
+
extend @restfulie_type_helpers
|
31
31
|
context = eval("(class << self; self; end)", binding)
|
32
32
|
|
33
33
|
unless caller_binding[:locals].nil?
|
@@ -4,11 +4,12 @@ module Restfulie::Server::ActionView::TemplateHandlers
|
|
4
4
|
include ActionView::TemplateHandlers::Compilable
|
5
5
|
|
6
6
|
def compile(template)
|
7
|
-
"
|
7
|
+
"@restfulie_type_helpers = Restfulie::Client::HTTP::RequestMarshaller.content_type_for(self.response.content_type).helper; " +
|
8
|
+
"extend @restfulie_type_helpers; " +
|
8
9
|
"extend Restfulie::Server::ActionView::Helpers; " +
|
9
10
|
"code_block = lambda { #{template.source} };" +
|
10
11
|
"builder = code_block.call; " +
|
11
|
-
"builder.
|
12
|
+
"builder.to_s"
|
12
13
|
end
|
13
14
|
end
|
14
15
|
end
|
@@ -9,20 +9,21 @@ class Array
|
|
9
9
|
options[:skip_attributes] = true
|
10
10
|
end
|
11
11
|
|
12
|
-
Atom::Feed.new
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
12
|
+
feed = Restfulie::Common::Representation::Atom::Feed.new
|
13
|
+
# TODO: Define better feed attributes
|
14
|
+
# Array#to_s can return a very long string
|
15
|
+
feed.title = "Collection of #{map {|i| i.class.name }.uniq.to_sentence}"
|
16
|
+
feed.updated = updated_at
|
17
|
+
# TODO: this id does not comply with Rest standards yet
|
18
|
+
feed.id = hash
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
yield feed if block_given?
|
20
|
+
each do |element|
|
21
|
+
feed.entries << element.to_atom(options)
|
25
22
|
end
|
23
|
+
|
24
|
+
yield feed if block_given?
|
25
|
+
|
26
|
+
feed
|
26
27
|
end
|
27
28
|
|
28
29
|
# Return max update date for items in collection, for it uses the updated_at of items.
|
metadata
CHANGED
@@ -4,23 +4,37 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 8
|
8
|
+
- 0
|
9
|
+
version: 0.8.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
|
-
- Guilherme Silveira, Caue Guerra
|
12
|
+
- "Guilherme Silveira, Caue Guerra, Luis Cipriani, \xC3\x89verton Ribeiro, George Guimar\xC3\xA3es, Paulo Ahagon"
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-05-27 00:00:00 -03:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
21
|
+
name: nokogiri
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 4
|
30
|
+
- 2
|
31
|
+
version: 1.4.2
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: actionpack
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
24
38
|
requirements:
|
25
39
|
- - ">="
|
26
40
|
- !ruby/object:Gem::Version
|
@@ -30,11 +44,11 @@ dependencies:
|
|
30
44
|
- 2
|
31
45
|
version: 2.3.2
|
32
46
|
type: :runtime
|
33
|
-
version_requirements: *
|
47
|
+
version_requirements: *id002
|
34
48
|
- !ruby/object:Gem::Dependency
|
35
49
|
name: activesupport
|
36
50
|
prerelease: false
|
37
|
-
requirement: &
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
38
52
|
requirements:
|
39
53
|
- - ">="
|
40
54
|
- !ruby/object:Gem::Version
|
@@ -44,11 +58,11 @@ dependencies:
|
|
44
58
|
- 2
|
45
59
|
version: 2.3.2
|
46
60
|
type: :runtime
|
47
|
-
version_requirements: *
|
61
|
+
version_requirements: *id003
|
48
62
|
- !ruby/object:Gem::Dependency
|
49
63
|
name: responders_backport
|
50
64
|
prerelease: false
|
51
|
-
requirement: &
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
52
66
|
requirements:
|
53
67
|
- - ~>
|
54
68
|
- !ruby/object:Gem::Version
|
@@ -58,11 +72,11 @@ dependencies:
|
|
58
72
|
- 0
|
59
73
|
version: 0.1.0
|
60
74
|
type: :runtime
|
61
|
-
version_requirements: *
|
75
|
+
version_requirements: *id004
|
62
76
|
- !ruby/object:Gem::Dependency
|
63
77
|
name: json_pure
|
64
78
|
prerelease: false
|
65
|
-
requirement: &
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
66
80
|
requirements:
|
67
81
|
- - ">="
|
68
82
|
- !ruby/object:Gem::Version
|
@@ -72,7 +86,7 @@ dependencies:
|
|
72
86
|
- 4
|
73
87
|
version: 1.2.4
|
74
88
|
type: :runtime
|
75
|
-
version_requirements: *
|
89
|
+
version_requirements: *id005
|
76
90
|
description:
|
77
91
|
email: guilherme.silveira@caelum.com.br
|
78
92
|
executables: []
|
@@ -87,29 +101,33 @@ files:
|
|
87
101
|
- lib/restfulie/client/http/adapter.rb
|
88
102
|
- lib/restfulie/client/http/atom_ext.rb
|
89
103
|
- lib/restfulie/client/http/cache.rb
|
104
|
+
- lib/restfulie/client/http/core_ext/http.rb
|
105
|
+
- lib/restfulie/client/http/core_ext.rb
|
90
106
|
- lib/restfulie/client/http/error.rb
|
91
|
-
- lib/restfulie/client/http/link.rb
|
92
107
|
- lib/restfulie/client/http/marshal.rb
|
93
|
-
- lib/restfulie/client/http/
|
108
|
+
- lib/restfulie/client/http/xml_ext.rb
|
94
109
|
- lib/restfulie/client/http.rb
|
110
|
+
- lib/restfulie/client/mikyung/concatenator.rb
|
111
|
+
- lib/restfulie/client/mikyung/core.rb
|
112
|
+
- lib/restfulie/client/mikyung/languages.rb
|
113
|
+
- lib/restfulie/client/mikyung/rest_process_model.rb
|
114
|
+
- lib/restfulie/client/mikyung/steady_state_walker.rb
|
115
|
+
- lib/restfulie/client/mikyung/then_condition.rb
|
116
|
+
- lib/restfulie/client/mikyung/when_condition.rb
|
117
|
+
- lib/restfulie/client/mikyung.rb
|
95
118
|
- lib/restfulie/client.rb
|
96
|
-
- lib/restfulie/common/builder
|
97
|
-
- lib/restfulie/common/
|
98
|
-
- lib/restfulie/common/
|
99
|
-
- lib/restfulie/common/
|
100
|
-
- lib/restfulie/common/
|
101
|
-
- lib/restfulie/common/
|
102
|
-
- lib/restfulie/common/
|
103
|
-
- lib/restfulie/common/builder/rules/collection_rule.rb
|
104
|
-
- lib/restfulie/common/builder/rules/custom_attributes.rb
|
105
|
-
- lib/restfulie/common/builder/rules/link.rb
|
106
|
-
- lib/restfulie/common/builder/rules/links.rb
|
107
|
-
- lib/restfulie/common/builder/rules/member_rule.rb
|
108
|
-
- lib/restfulie/common/builder/rules/namespace.rb
|
109
|
-
- lib/restfulie/common/builder/rules/rules_base.rb
|
110
|
-
- lib/restfulie/common/builder.rb
|
119
|
+
- lib/restfulie/common/converter/atom/builder.rb
|
120
|
+
- lib/restfulie/common/converter/atom/helpers.rb
|
121
|
+
- lib/restfulie/common/converter/atom.rb
|
122
|
+
- lib/restfulie/common/converter/values.rb
|
123
|
+
- lib/restfulie/common/converter.rb
|
124
|
+
- lib/restfulie/common/core_ext/proc.rb
|
125
|
+
- lib/restfulie/common/core_ext.rb
|
111
126
|
- lib/restfulie/common/errors.rb
|
112
127
|
- lib/restfulie/common/logger.rb
|
128
|
+
- lib/restfulie/common/representation/atom/base.rb
|
129
|
+
- lib/restfulie/common/representation/atom/entry.rb
|
130
|
+
- lib/restfulie/common/representation/atom/feed.rb
|
113
131
|
- lib/restfulie/common/representation/atom.rb
|
114
132
|
- lib/restfulie/common/representation/generic.rb
|
115
133
|
- lib/restfulie/common/representation/json.rb
|
@@ -119,6 +137,7 @@ files:
|
|
119
137
|
- lib/restfulie/server/action_controller/base.rb
|
120
138
|
- lib/restfulie/server/action_controller/params_parser.rb
|
121
139
|
- lib/restfulie/server/action_controller/restful_responder.rb
|
140
|
+
- lib/restfulie/server/action_controller/routing/patch.rb
|
122
141
|
- lib/restfulie/server/action_controller/routing/restful_route.rb
|
123
142
|
- lib/restfulie/server/action_controller/routing.rb
|
124
143
|
- lib/restfulie/server/action_controller.rb
|
@@ -132,13 +151,11 @@ files:
|
|
132
151
|
- lib/restfulie/server/restfulie_controller.rb
|
133
152
|
- lib/restfulie/server.rb
|
134
153
|
- lib/restfulie.rb
|
135
|
-
-
|
136
|
-
- lib/vendor/atom/pub.rb
|
137
|
-
- lib/vendor/atom/xml/parser.rb
|
138
|
-
- lib/vendor/atom.rb
|
154
|
+
- Gemfile
|
139
155
|
- LICENSE
|
140
156
|
- Rakefile
|
141
157
|
- README.textile
|
158
|
+
- lib/restfulie/common/representation/atom/atom.rng
|
142
159
|
has_rdoc: true
|
143
160
|
homepage: http://restfulie.caelumobjects.com
|
144
161
|
licenses: []
|
@@ -1,39 +0,0 @@
|
|
1
|
-
module Restfulie::Client
|
2
|
-
|
3
|
-
# Offer easy access to link relationships, such as <tt>post.next</tt> for
|
4
|
-
# <tt><link rel="next" href="http://resource.entrypoint.com/post/12" type="application/atom+xml" /></tt> relationships.
|
5
|
-
module LinkShortcut
|
6
|
-
def method_missing(method_sym,*args)#:nodoc:
|
7
|
-
selected_links = links.select{ |l| l.rel == method_sym.to_s }
|
8
|
-
super if selected_links.empty?
|
9
|
-
link = (selected_links.size == 1) ? selected_links.first : selected_links
|
10
|
-
|
11
|
-
return link unless link.instance_variable_defined?(:@type)
|
12
|
-
link.accepts(link.type)
|
13
|
-
|
14
|
-
representation = Restfulie::Client::HTTP::RequestMarshaller.content_type_for(link.type)
|
15
|
-
return representation.prepare_link_for(link) if representation
|
16
|
-
link
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class Link
|
22
|
-
|
23
|
-
include Restfulie::Client::HTTP::LinkRequestBuilder
|
24
|
-
|
25
|
-
def initialize(options = {})
|
26
|
-
@options = options
|
27
|
-
end
|
28
|
-
def href
|
29
|
-
@options["href"]
|
30
|
-
end
|
31
|
-
def rel
|
32
|
-
@options["rel"]
|
33
|
-
end
|
34
|
-
def content_type
|
35
|
-
@options["type"]
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|