restfulie 0.8.0 → 0.8.1
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 +10 -5
- data/Rakefile +5 -2
- data/lib/restfulie.rb +10 -5
- data/lib/restfulie/client.rb +13 -9
- data/lib/restfulie/client/base.rb +24 -65
- data/lib/restfulie/client/configuration.rb +62 -64
- data/lib/restfulie/client/entry_point.rb +36 -0
- data/lib/restfulie/client/ext/atom_ext.rb +12 -0
- data/lib/restfulie/client/ext/http_ext.rb +22 -0
- data/lib/restfulie/client/ext/json_ext.rb +12 -0
- data/lib/restfulie/client/ext/xml_ext.rb +4 -0
- data/lib/restfulie/client/http.rb +25 -13
- data/lib/restfulie/client/http/cache.rb +22 -22
- data/lib/restfulie/client/http/error.rb +70 -70
- data/lib/restfulie/client/http/link_request_builder.rb +15 -0
- data/lib/restfulie/client/http/request_adapter.rb +209 -0
- data/lib/restfulie/client/http/request_builder.rb +107 -0
- data/lib/restfulie/client/http/request_builder_executor.rb +24 -0
- data/lib/restfulie/client/http/request_executor.rb +17 -0
- data/lib/restfulie/client/http/request_follow.rb +42 -0
- data/lib/restfulie/client/http/request_follow_executor.rb +10 -0
- data/lib/restfulie/client/http/request_history.rb +69 -0
- data/lib/restfulie/client/http/request_history_executor.rb +10 -0
- data/lib/restfulie/client/http/request_marshaller.rb +127 -0
- data/lib/restfulie/client/http/request_marshaller_executor.rb +10 -0
- data/lib/restfulie/client/http/response.rb +23 -0
- data/lib/restfulie/client/http/response_handler.rb +67 -0
- data/lib/restfulie/client/http/response_holder.rb +9 -0
- data/lib/restfulie/client/mikyung.rb +17 -14
- data/lib/restfulie/client/mikyung/concatenator.rb +15 -12
- data/lib/restfulie/client/mikyung/core.rb +65 -39
- data/lib/restfulie/client/mikyung/languages.rb +8 -26
- data/lib/restfulie/client/mikyung/languages/german.rb +24 -0
- data/lib/restfulie/client/mikyung/languages/portuguese.rb +23 -0
- data/lib/restfulie/client/mikyung/rest_process_model.rb +184 -107
- data/lib/restfulie/client/mikyung/steady_state_walker.rb +34 -28
- data/lib/restfulie/client/mikyung/then_condition.rb +33 -27
- data/lib/restfulie/client/mikyung/when_condition.rb +53 -49
- data/lib/restfulie/common.rb +7 -12
- data/lib/restfulie/common/converter.rb +20 -9
- data/lib/restfulie/common/converter/atom.rb +8 -83
- data/lib/restfulie/common/converter/atom/base.rb +89 -0
- data/lib/restfulie/common/converter/atom/builder.rb +101 -99
- data/lib/restfulie/common/converter/atom/helpers.rb +16 -8
- data/lib/restfulie/common/converter/json.rb +12 -0
- data/lib/restfulie/common/converter/json/base.rb +84 -0
- data/lib/restfulie/common/converter/json/builder.rb +102 -0
- data/lib/restfulie/common/converter/json/helpers.rb +17 -0
- data/lib/restfulie/common/converter/values.rb +30 -26
- data/lib/restfulie/common/converter/xml.rb +14 -0
- data/lib/restfulie/common/converter/xml/base.rb +61 -0
- data/lib/restfulie/common/converter/xml/builder.rb +112 -0
- data/lib/restfulie/common/converter/xml/helpers.rb +17 -0
- data/lib/restfulie/common/converter/xml/link.rb +25 -0
- data/lib/restfulie/common/converter/xml/links.rb +25 -0
- data/lib/restfulie/common/core_ext.rb +1 -5
- data/lib/restfulie/common/core_ext/hash.rb +12 -0
- data/lib/restfulie/common/error.rb +19 -0
- data/lib/restfulie/common/logger.rb +17 -9
- data/lib/restfulie/common/representation.rb +9 -10
- data/lib/restfulie/common/representation/atom.rb +15 -47
- data/lib/restfulie/common/representation/atom/base.rb +122 -365
- data/lib/restfulie/common/representation/atom/category.rb +41 -0
- data/lib/restfulie/common/representation/atom/entry.rb +52 -100
- data/lib/restfulie/common/representation/atom/factory.rb +43 -0
- data/lib/restfulie/common/representation/atom/feed.rb +103 -99
- data/lib/restfulie/common/representation/atom/link.rb +68 -0
- data/lib/restfulie/common/representation/atom/person.rb +48 -0
- data/lib/restfulie/common/representation/atom/source.rb +59 -0
- data/lib/restfulie/common/representation/atom/tag_collection.rb +38 -0
- data/lib/restfulie/common/representation/atom/xml.rb +95 -0
- data/lib/restfulie/common/representation/generic.rb +30 -29
- data/lib/restfulie/common/representation/json.rb +10 -22
- data/lib/restfulie/common/representation/json/base.rb +27 -0
- data/lib/restfulie/common/representation/json/keys_as_methods.rb +72 -0
- data/lib/restfulie/common/representation/json/link.rb +29 -0
- data/lib/restfulie/common/representation/json/link_collection.rb +23 -0
- data/lib/restfulie/common/representation/xml.rb +18 -227
- data/lib/restfulie/server.rb +9 -10
- data/lib/restfulie/server/action_controller.rb +10 -12
- data/lib/restfulie/server/action_controller/base.rb +18 -15
- data/lib/restfulie/server/action_controller/{routing/patch.rb → patch.rb} +0 -0
- data/lib/restfulie/server/action_controller/restful_responder.rb +43 -35
- data/lib/restfulie/server/action_view.rb +8 -6
- data/lib/restfulie/server/action_view/helpers.rb +47 -41
- data/lib/restfulie/server/action_view/template_handlers.rb +24 -12
- data/lib/restfulie/server/action_view/template_handlers/tokamak.rb +17 -12
- data/lib/restfulie/server/configuration.rb +22 -19
- data/lib/restfulie/server/{restfulie_controller.rb → controller.rb} +1 -10
- data/lib/restfulie/server/core_ext.rb +1 -1
- data/lib/restfulie/version.rb +14 -0
- metadata +52 -16
- data/lib/restfulie/client/http/adapter.rb +0 -502
- data/lib/restfulie/client/http/atom_ext.rb +0 -4
- data/lib/restfulie/client/http/core_ext.rb +0 -6
- data/lib/restfulie/client/http/core_ext/http.rb +0 -19
- data/lib/restfulie/client/http/marshal.rb +0 -145
- data/lib/restfulie/client/http/xml_ext.rb +0 -7
- data/lib/restfulie/common/core_ext/proc.rb +0 -48
- data/lib/restfulie/common/errors.rb +0 -15
- data/lib/restfulie/server/action_controller/routing.rb +0 -12
- data/lib/restfulie/server/action_controller/routing/restful_route.rb +0 -14
@@ -1,19 +0,0 @@
|
|
1
|
-
class Net::HTTP::Patch < Net::HTTP::Get
|
2
|
-
METHOD = "PATCH"
|
3
|
-
end
|
4
|
-
|
5
|
-
# Definition of a patch method in the same way that post works
|
6
|
-
class Net::HTTP
|
7
|
-
def patch(path, data, initheader = nil, dest = nil, &block) # :yield: +body_segment+
|
8
|
-
res = nil
|
9
|
-
request(Patch.new(path, initheader), data) {|r|
|
10
|
-
r.read_body dest, &block
|
11
|
-
res = r
|
12
|
-
}
|
13
|
-
unless @newimpl
|
14
|
-
res.value
|
15
|
-
return res, res.body
|
16
|
-
end
|
17
|
-
res
|
18
|
-
end
|
19
|
-
end
|
@@ -1,145 +0,0 @@
|
|
1
|
-
#Request builder for marshalled data that unmarshalls content after receiving it.
|
2
|
-
module Restfulie::Client::HTTP
|
3
|
-
|
4
|
-
module ResponseHolder
|
5
|
-
attr_accessor :response
|
6
|
-
end
|
7
|
-
|
8
|
-
module RequestMarshaller
|
9
|
-
include ::Restfulie::Client::HTTP::RequestHistory
|
10
|
-
|
11
|
-
@@representations = {
|
12
|
-
'application/atom+xml' => ::Restfulie::Common::Converter::Atom
|
13
|
-
}
|
14
|
-
def self.register_representation(media_type,representation)
|
15
|
-
@@representations[media_type] = representation
|
16
|
-
end
|
17
|
-
|
18
|
-
RequestMarshaller.register_representation('application/xml', ::Restfulie::Common::Converter::Xml)
|
19
|
-
RequestMarshaller.register_representation('text/xml', ::Restfulie::Common::Converter::Xml)
|
20
|
-
RequestMarshaller.register_representation('application/json', ::Restfulie::Common::Representation::Json)
|
21
|
-
|
22
|
-
def self.content_type_for(media_type)
|
23
|
-
return nil unless media_type
|
24
|
-
content_type = media_type.split(';')[0] # [/(.*?);/, 1]
|
25
|
-
@@representations[content_type]
|
26
|
-
end
|
27
|
-
|
28
|
-
def accepts(media_types)
|
29
|
-
@default_representation = @@representations[media_types]
|
30
|
-
super
|
31
|
-
end
|
32
|
-
|
33
|
-
def raw
|
34
|
-
@raw = true
|
35
|
-
self
|
36
|
-
end
|
37
|
-
|
38
|
-
def post(payload, options = { :recipe => nil })
|
39
|
-
request(:post, path, payload, options.merge(headers))
|
40
|
-
end
|
41
|
-
|
42
|
-
def post!(payload, options = { :recipe => nil })
|
43
|
-
request!(:post, path, payload, options.merge(headers))
|
44
|
-
end
|
45
|
-
|
46
|
-
#Executes super if its a raw request, returning the content itself.
|
47
|
-
#otherwise tries to parse the content with a mediatype handler or returns the response itself.
|
48
|
-
def request!(method, path, *args)
|
49
|
-
if has_payload?(method, path, *args)
|
50
|
-
recipe = get_recipe(*args)
|
51
|
-
|
52
|
-
payload = get_payload(method, path, *args)
|
53
|
-
rel = self.respond_to?(:rel) ? self.rel : ""
|
54
|
-
type = headers['Content-Type']
|
55
|
-
raise Restfulie::Common::Error::RestfulieError, "Missing content type related to the data to be submitted" unless type
|
56
|
-
marshaller = RequestMarshaller.content_type_for(type)
|
57
|
-
payload = marshaller.marshal(payload, { :rel => rel, :recipe => recipe })
|
58
|
-
args = set_marshalled_payload(method, path, payload, *args)
|
59
|
-
args = add_representation_headers(method, path, marshaller, *args)
|
60
|
-
end
|
61
|
-
|
62
|
-
if @acceptable_mediatypes
|
63
|
-
unmarshaller = RequestMarshaller.content_type_for(@acceptable_mediatypes)
|
64
|
-
args = add_representation_headers(method, path, unmarshaller, *args)
|
65
|
-
end
|
66
|
-
|
67
|
-
response = super(method, path, *args)
|
68
|
-
parse_response(response)
|
69
|
-
end
|
70
|
-
|
71
|
-
private
|
72
|
-
|
73
|
-
# parses the http response.
|
74
|
-
# first checks if its a 201, redirecting to the resource location.
|
75
|
-
# otherwise check if its a raw request, returning the content itself.
|
76
|
-
# finally, tries to parse the content with a mediatype handler or returns the response itself.
|
77
|
-
def parse_response(response)
|
78
|
-
if response.code == 201
|
79
|
-
request = Restfulie.at(response.headers['location'])
|
80
|
-
request.accepts(@acceptable_mediatypes) if @acceptable_mediatypes
|
81
|
-
request.get!
|
82
|
-
elsif @raw
|
83
|
-
response
|
84
|
-
elsif !response.body.empty?
|
85
|
-
representation = RequestMarshaller.content_type_for(response.headers['content-type']) || Restfulie::Common::Representation::Generic.new
|
86
|
-
unmarshalled = representation.unmarshal(response.body)
|
87
|
-
unmarshalled.extend(ResponseHolder)
|
88
|
-
unmarshalled.response = response
|
89
|
-
unmarshalled
|
90
|
-
else
|
91
|
-
response.extend(ResponseHolder)
|
92
|
-
response.response = response
|
93
|
-
response
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def get_recipe(*args)
|
98
|
-
headers_and_recipe = args.extract_options!
|
99
|
-
recipe = headers_and_recipe.delete(:recipe)
|
100
|
-
args << headers_and_recipe
|
101
|
-
recipe
|
102
|
-
end
|
103
|
-
|
104
|
-
def has_payload?(method, path, *args)
|
105
|
-
[:put,:post,:patch].include?(method)
|
106
|
-
end
|
107
|
-
|
108
|
-
def get_payload(method, path, *args)
|
109
|
-
args.extract_options! #remove header
|
110
|
-
args.shift #payload
|
111
|
-
end
|
112
|
-
|
113
|
-
def set_marshalled_payload(method, path, payload, *args)
|
114
|
-
headers = args.extract_options!
|
115
|
-
args.shift #old payload
|
116
|
-
args << payload << headers
|
117
|
-
args
|
118
|
-
end
|
119
|
-
|
120
|
-
def add_representation_headers(method, path, representation, *args)
|
121
|
-
headers = args.extract_options!
|
122
|
-
headers = headers.merge(representation.headers[method] || {})
|
123
|
-
args << headers
|
124
|
-
args
|
125
|
-
end
|
126
|
-
|
127
|
-
end
|
128
|
-
|
129
|
-
# NOTE: When including this module remember to override the type method to return
|
130
|
-
# a valid content type as a string.
|
131
|
-
module LinkRequestBuilder
|
132
|
-
include RequestMarshaller
|
133
|
-
def path#:nodoc:
|
134
|
-
at(href)
|
135
|
-
as(type) if type
|
136
|
-
super
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
#=This class includes RequestBuilder module.
|
141
|
-
class RequestMarshallerExecutor < RequestHistoryExecutor
|
142
|
-
include RequestMarshaller
|
143
|
-
end
|
144
|
-
|
145
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
class Proc
|
2
|
-
attr_accessor :helpers
|
3
|
-
alias_method :old_call, :call
|
4
|
-
|
5
|
-
def call(*args)
|
6
|
-
@helpers.nil? ? old_call(*args): call_include_helpers(@helpers, *args)
|
7
|
-
end
|
8
|
-
|
9
|
-
def call_include_helpers(helpers, *args)
|
10
|
-
helpers = [helpers] unless helpers.kind_of?(Array)
|
11
|
-
helpers = helpers.map { |helper| Object.new.send(:extend, helper) }
|
12
|
-
block_caller = eval("self", self.binding)
|
13
|
-
|
14
|
-
m = extensible_module(block_caller)
|
15
|
-
m.send(:define_method, :method_missing) do |symbol, *args, &block|
|
16
|
-
mod = helpers.find { |h| h.respond_to?(symbol) }
|
17
|
-
mod.nil? ? super : mod.send(symbol, *args, &block)
|
18
|
-
end
|
19
|
-
|
20
|
-
block_caller.extend(m)
|
21
|
-
result = old_call(*args)
|
22
|
-
m.send(:remove_method, :method_missing)
|
23
|
-
|
24
|
-
result
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
# Search for extending the module in ancestors
|
30
|
-
def extensible_module(object)
|
31
|
-
ancestors = object.instance_eval { (class << self; self; end) }.ancestors
|
32
|
-
|
33
|
-
extend_mod = ancestors.find { |ancestor|
|
34
|
-
!ancestor.instance_methods.include?("method_missing") && ancestor.instance_eval { (class << self; self; end) }.ancestors.include?(ProcIncludedHelpers)
|
35
|
-
}
|
36
|
-
|
37
|
-
if extend_mod.nil?
|
38
|
-
extend_mod = Module.new
|
39
|
-
extend_mod.extend(ProcIncludedHelpers)
|
40
|
-
end
|
41
|
-
|
42
|
-
extend_mod
|
43
|
-
end
|
44
|
-
|
45
|
-
module ProcIncludedHelpers; end
|
46
|
-
|
47
|
-
end
|
48
|
-
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module Restfulie::Common::Error
|
2
|
-
class RestfulieError < StandardError; end
|
3
|
-
class MarshallingError < RestfulieError; end
|
4
|
-
class UndefinedMarshallingError < MarshallingError; end
|
5
|
-
|
6
|
-
# Atom marshallinh error
|
7
|
-
class AtomMarshallingError < MarshallingError; end
|
8
|
-
class NameSpaceError < AtomMarshallingError; end
|
9
|
-
|
10
|
-
# Converter
|
11
|
-
class ConverterError < RestfulieError; end
|
12
|
-
|
13
|
-
# builder
|
14
|
-
class BuilderError < RestfulieError; end
|
15
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
module Restfulie::Server::ActionController::Routing#:nodoc:
|
2
|
-
end
|
3
|
-
|
4
|
-
require 'restfulie/server/action_controller/routing/restful_route'
|
5
|
-
|
6
|
-
ActionController::Routing::RouteSet.send :include,
|
7
|
-
Restfulie::Server::ActionController::Routing::Route
|
8
|
-
|
9
|
-
ActionController::Routing::Route.send :include,
|
10
|
-
Restfulie::Server::ActionController::Routing::Route
|
11
|
-
|
12
|
-
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module Restfulie::Server::ActionController::Routing::Route
|
2
|
-
|
3
|
-
def self.included(base)
|
4
|
-
#base.alias_method_chain :extract_request_environment, :host
|
5
|
-
end
|
6
|
-
|
7
|
-
#def extract_request_environment_with_host(request)
|
8
|
-
#env = extract_request_environment_without_host(request)
|
9
|
-
#env.merge :host => request.host,
|
10
|
-
#:domain => request.domain, :subdomain => request.subdomains.first
|
11
|
-
#end
|
12
|
-
|
13
|
-
end
|
14
|
-
|