restfulie 0.7.2 → 0.8.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/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
|