ixtlan-remote 0.1.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 +2 -0
- data/README.md +64 -0
- data/agpl-3.0.txt +661 -0
- data/lib/ixtlan-remote.rb +23 -0
- data/lib/ixtlan/passwords.rb +52 -0
- data/lib/ixtlan/passwords.rb~ +47 -0
- data/lib/ixtlan/railtie.rb~ +17 -0
- data/lib/ixtlan/remote.rb +23 -0
- data/lib/ixtlan/remote/access_controller.rb +62 -0
- data/lib/ixtlan/remote/access_controller.rb~ +25 -0
- data/lib/ixtlan/remote/constant_time_compare.rb +39 -0
- data/lib/ixtlan/remote/constant_time_compare.rb~ +19 -0
- data/lib/ixtlan/remote/heartbeat.rb~ +80 -0
- data/lib/ixtlan/remote/model_conversion.rb~ +245 -0
- data/lib/ixtlan/remote/model_helpers.rb +73 -0
- data/lib/ixtlan/remote/model_helpers.rb~ +53 -0
- data/lib/ixtlan/remote/permission.rb +40 -0
- data/lib/ixtlan/remote/permission.rb~ +19 -0
- data/lib/ixtlan/remote/railtie.rb +30 -0
- data/lib/ixtlan/remote/railtie.rb~ +9 -0
- data/lib/ixtlan/remote/remote_access_controller.rb~ +25 -0
- data/lib/ixtlan/remote/remote_permisson.rb~ +9 -0
- data/lib/ixtlan/remote/resource.rb +145 -0
- data/lib/ixtlan/remote/resource.rb-~ +165 -0
- data/lib/ixtlan/remote/resource.rb~ +152 -0
- data/lib/ixtlan/remote/rest.rb +108 -0
- data/lib/ixtlan/remote/rest.rb~ +83 -0
- data/lib/ixtlan/remote/rest_resource.rb~ +140 -0
- data/lib/ixtlan/remote/rest_resource_config.rb~ +63 -0
- data/lib/ixtlan/remote/rest_resource_factory.rb~ +259 -0
- data/lib/ixtlan/remote/rest_resource_old.rb-~ +259 -0
- data/lib/ixtlan/remote/server.rb +119 -0
- data/lib/ixtlan/remote/server.rb~ +82 -0
- data/lib/ixtlan/remote/summary.rb +46 -0
- data/lib/ixtlan/remote/summary.rb~ +23 -0
- data/lib/ixtlan/remote/sync.rb +104 -0
- data/lib/ixtlan/remote/sync.rb~ +78 -0
- data/lib/ixtlan/remote/sync_summary.rb~ +23 -0
- data/lib/ixtlan/remote/tranlation_key.rb~ +7 -0
- data/lib/ixtlan/remote/translation.rake~ +194 -0
- data/lib/ixtlan/remote/translation_models.rb~ +11 -0
- data/lib/ixtlan/remote/updater.rb~ +71 -0
- data/lib/ixtlan/user_management/application_model.rb +30 -0
- data/lib/ixtlan/user_management/application_model.rb~ +21 -0
- data/lib/ixtlan/user_management/application_resource.rb +48 -0
- data/lib/ixtlan/user_management/application_resource.rb~ +21 -0
- data/lib/ixtlan/user_management/authentcator.rb~ +31 -0
- data/lib/ixtlan/user_management/authentication_model.rb +31 -0
- data/lib/ixtlan/user_management/authentication_model.rb~ +21 -0
- data/lib/ixtlan/user_management/authenticator.rb +55 -0
- data/lib/ixtlan/user_management/authenticator.rb~ +20 -0
- data/lib/ixtlan/user_management/domain_resource.rb +48 -0
- data/lib/ixtlan/user_management/domain_resource.rb~ +21 -0
- data/lib/ixtlan/user_management/dummy_authentication.rb +50 -0
- data/lib/ixtlan/user_management/dummy_authentication.rb~ +49 -0
- data/lib/ixtlan/user_management/group.rb~ +39 -0
- data/lib/ixtlan/user_management/group_model.rb +31 -0
- data/lib/ixtlan/user_management/group_model.rb~ +21 -0
- data/lib/ixtlan/user_management/models.rb~ +39 -0
- data/lib/ixtlan/user_management/session-serializer.rb~ +18 -0
- data/lib/ixtlan/user_management/session_cuba.rb +47 -0
- data/lib/ixtlan/user_management/session_cuba.rb~ +44 -0
- data/lib/ixtlan/user_management/session_manager.rb +38 -0
- data/lib/ixtlan/user_management/session_model.rb +36 -0
- data/lib/ixtlan/user_management/session_model.rb~ +10 -0
- data/lib/ixtlan/user_management/session_plugin.rb +32 -0
- data/lib/ixtlan/user_management/session_serializer.rb +21 -0
- data/lib/ixtlan/user_management/session_serializer.rb~ +21 -0
- data/lib/ixtlan/user_management/user.rb~ +16 -0
- data/lib/ixtlan/user_management/user_model.rb +36 -0
- data/lib/ixtlan/user_management/user_model.rb~ +33 -0
- data/lib/ixtlan/user_management/user_resource.rb +55 -0
- data/lib/ixtlan/user_management/user_resource.rb~ +24 -0
- data/lib/ixtlan/user_management/user_serializer.rb +15 -0
- data/lib/ixtlan/user_management/user_serializer.rb~ +23 -0
- data/spec/access_controller_spec.rb +65 -0
- data/spec/access_controller_spec.rb~ +65 -0
- data/spec/model_helpers_spec.rb +40 -0
- data/spec/model_helpers_spec.rb~ +36 -0
- data/spec/remote_access_controller_spec.rb~ +36 -0
- data/spec/resource_spec.rb +181 -0
- data/spec/resource_spec.rb~ +173 -0
- data/spec/rest_resource_spec.rb~ +173 -0
- data/spec/rest_spec.rb +94 -0
- data/spec/rest_spec.rb~ +99 -0
- data/spec/rest_with_attribute_name_like_model_name_spec.rb +82 -0
- data/spec/sync_spec.rb +83 -0
- data/spec/sync_spec.rb~ +81 -0
- metadata +313 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
require 'ixtlan/remote/model_helpers'
|
|
2
|
+
module Ixtlan
|
|
3
|
+
module Remote
|
|
4
|
+
class Resource
|
|
5
|
+
|
|
6
|
+
include ModelHelpers
|
|
7
|
+
|
|
8
|
+
def initialize(resource, model_map = {})
|
|
9
|
+
@base = resource
|
|
10
|
+
@map = model_map
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def send_it(&block)
|
|
14
|
+
raise "no method given - call any CRUD method first" unless @method
|
|
15
|
+
headers = {:content_type => :json, :accept => :json}
|
|
16
|
+
headers[:params] = @params if @params
|
|
17
|
+
result =
|
|
18
|
+
if @payload
|
|
19
|
+
@resource.send @method, @payload.to_json, headers, &block
|
|
20
|
+
else
|
|
21
|
+
@resource.send @method, headers, &block
|
|
22
|
+
end
|
|
23
|
+
unless result.blank?
|
|
24
|
+
result = JSON.load(result)
|
|
25
|
+
if @model
|
|
26
|
+
root = @map[ @model ].singular || @model_key
|
|
27
|
+
if result.is_a? Array
|
|
28
|
+
if result.empty?
|
|
29
|
+
[]
|
|
30
|
+
else
|
|
31
|
+
root =
|
|
32
|
+
if result[ 1 ].is_a?( Hash ) && result[ 1 ].size == 1
|
|
33
|
+
root
|
|
34
|
+
end
|
|
35
|
+
result.collect do |r|
|
|
36
|
+
new_instance( @model, r[root] || r )
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
else
|
|
40
|
+
attr = if result.is_a?( Hash ) && result.size == 1
|
|
41
|
+
result[root]
|
|
42
|
+
else
|
|
43
|
+
result
|
|
44
|
+
end
|
|
45
|
+
new_instance(@model, attr)
|
|
46
|
+
end
|
|
47
|
+
else
|
|
48
|
+
result
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def query_params(params)
|
|
54
|
+
@params = params
|
|
55
|
+
self
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# retrieve(Locale) => GET /locales
|
|
59
|
+
# retrieve(Locale, 1) => GET /locales/1
|
|
60
|
+
# retrieve(:locales) => GET /locales
|
|
61
|
+
# retrieve(:locales, 1) => GET /locales/1
|
|
62
|
+
def retrieve(*args)
|
|
63
|
+
@method = :get
|
|
64
|
+
@params = nil
|
|
65
|
+
@resource = @base[path(*args)]
|
|
66
|
+
@payload = nil
|
|
67
|
+
self
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# create(locale) => POST /locales
|
|
71
|
+
# create(:locale => {:code => 'en'}) => POST /locales
|
|
72
|
+
def create(*obj_or_hash)
|
|
73
|
+
@method = :post
|
|
74
|
+
@payload = nil#obj_or_hash.is_a?(Class)? nil : obj_or_hash
|
|
75
|
+
@params = nil
|
|
76
|
+
@resource = @base[path(*obj_or_hash)]
|
|
77
|
+
self
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def update(*obj_or_hash)
|
|
81
|
+
@method = :put
|
|
82
|
+
@payload = nil#obj_or_hash.is_a?(Class)? nil : obj_or_hash
|
|
83
|
+
@params = nil
|
|
84
|
+
@resource = @base[path(*obj_or_hash)]
|
|
85
|
+
self
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def delete(*obj_or_hash)
|
|
89
|
+
@method = :delete
|
|
90
|
+
@payload = nil #obj_or_hash.is_a?(Class)? nil : obj_or_hash
|
|
91
|
+
@params = nil
|
|
92
|
+
@resource = @base[path(*obj_or_hash)]
|
|
93
|
+
self
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def model
|
|
97
|
+
@model
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
private
|
|
101
|
+
|
|
102
|
+
def new_instance( clazz, attributes )
|
|
103
|
+
@map[ clazz ].new( attributes )
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def path(*parts)
|
|
107
|
+
parts.collect { |p| path_part( p ) }.delete_if { |p| p.nil? } * '/'
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def model_set(model)
|
|
111
|
+
m = model.singularize.camelize.constantize rescue nil
|
|
112
|
+
if m
|
|
113
|
+
@model = m
|
|
114
|
+
@model_key = model.singularize.underscore
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def path_part(data)
|
|
119
|
+
model = to_model_underscore(data)
|
|
120
|
+
case data
|
|
121
|
+
when Hash
|
|
122
|
+
@payload = data
|
|
123
|
+
if model_set(model)
|
|
124
|
+
model = model.pluralize
|
|
125
|
+
else
|
|
126
|
+
model = nil
|
|
127
|
+
end
|
|
128
|
+
when Array
|
|
129
|
+
@payload = data
|
|
130
|
+
if model_set model
|
|
131
|
+
model = model.pluralize
|
|
132
|
+
end
|
|
133
|
+
when String
|
|
134
|
+
model_set model
|
|
135
|
+
when Fixnum
|
|
136
|
+
model = data.to_s
|
|
137
|
+
when Symbol
|
|
138
|
+
model_set model
|
|
139
|
+
when Class
|
|
140
|
+
model_set model
|
|
141
|
+
model = @map.member?( model ) ? @map[ model ].path : model.pluralize
|
|
142
|
+
else
|
|
143
|
+
@payload = data
|
|
144
|
+
model_set model
|
|
145
|
+
model = model.pluralize
|
|
146
|
+
end
|
|
147
|
+
model.underscore if model
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#
|
|
2
|
+
# ixtlan-remote - helper sync data between miniapps or communicate wth realtime
|
|
3
|
+
# rest-services
|
|
4
|
+
# Copyright (C) 2012 Christian Meier
|
|
5
|
+
#
|
|
6
|
+
# This file is part of ixtlan-remote.
|
|
7
|
+
#
|
|
8
|
+
# ixtlan-remote is free software: you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU Affero General Public License as
|
|
10
|
+
# published by the Free Software Foundation, either version 3 of the
|
|
11
|
+
# License, or (at your option) any later version.
|
|
12
|
+
#
|
|
13
|
+
# ixtlan-remote is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU Affero General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU Affero General Public License
|
|
19
|
+
# along with ixtlan-remote. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
#
|
|
21
|
+
require 'ixtlan/remote/model_helpers'
|
|
22
|
+
require 'ixtlan/remote/server'
|
|
23
|
+
module Ixtlan
|
|
24
|
+
module Remote
|
|
25
|
+
class Rest
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
include ModelHelpers
|
|
30
|
+
|
|
31
|
+
def model_to_servers
|
|
32
|
+
@_models ||= {}
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def servers
|
|
36
|
+
@_servers ||= {}
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
public
|
|
40
|
+
|
|
41
|
+
def server( server_name, &block )
|
|
42
|
+
server = servers[ server_name.to_sym ] ||= Server.new( self )
|
|
43
|
+
block.call server if block
|
|
44
|
+
server
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def []=( clazz, server )
|
|
48
|
+
model_to_servers[ to_model_singular_underscore( clazz ) ] = server
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def to_server( model )
|
|
52
|
+
s = model_to_servers[ to_model_singular_underscore( model ) ]
|
|
53
|
+
raise "model #{model} unknown as rest service" unless s
|
|
54
|
+
s
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def new_resource( model )
|
|
58
|
+
begin
|
|
59
|
+
m = to_model_singular_underscore( model ).camelize.constantize
|
|
60
|
+
to_server( model ).new_rest_resource( m )
|
|
61
|
+
rescue
|
|
62
|
+
raise "unknown model #{model}"
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def create( model, *args, &block )
|
|
67
|
+
if model.respond_to?( :attributes )
|
|
68
|
+
args << model.attributes
|
|
69
|
+
model = model.class
|
|
70
|
+
end
|
|
71
|
+
new_resource( model ).create( *args ).send_it( &block )
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def retrieve( model, *args )
|
|
75
|
+
resource = new_resource( model )
|
|
76
|
+
if args.last.is_a? Hash
|
|
77
|
+
params = args.delete_at( args.size - 1 )
|
|
78
|
+
resource.retrieve( *args ).query_params( params )
|
|
79
|
+
else
|
|
80
|
+
resource.retrieve( *args )
|
|
81
|
+
end
|
|
82
|
+
resource.send_it
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def update_or_delete( method, model, *args )
|
|
86
|
+
if model.respond_to?( :attributes )
|
|
87
|
+
if args.size == 0
|
|
88
|
+
args += model.key
|
|
89
|
+
args << model.attributes
|
|
90
|
+
else
|
|
91
|
+
args << model.attributes
|
|
92
|
+
end
|
|
93
|
+
model = model.class
|
|
94
|
+
end
|
|
95
|
+
new_resource( model ).send( method, *args ).send_it
|
|
96
|
+
end
|
|
97
|
+
private :update_or_delete
|
|
98
|
+
|
|
99
|
+
def update( model, *args )
|
|
100
|
+
update_or_delete( :update, model, *args )
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def delete( model, *args )
|
|
104
|
+
update_or_delete( :delete, model, *args )
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
require 'ixtlan/remote/model_helpers'
|
|
2
|
+
module Ixtlan
|
|
3
|
+
module Remote
|
|
4
|
+
class Rest
|
|
5
|
+
|
|
6
|
+
private
|
|
7
|
+
|
|
8
|
+
include ModelHelpers
|
|
9
|
+
|
|
10
|
+
def model_to_servers
|
|
11
|
+
@_models ||= {}
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def servers
|
|
15
|
+
@_servers ||= {}
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
public
|
|
19
|
+
|
|
20
|
+
def server( server_name, &block )
|
|
21
|
+
server = servers[ server_name.to_sym ] ||= Server.new( self )
|
|
22
|
+
block.call server if block
|
|
23
|
+
server
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def []=( clazz, server )
|
|
27
|
+
model_to_servers[ to_model_singular_underscore( clazz ) ] = server
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def to_server( model )
|
|
31
|
+
model_to_servers[ to_model_singular_underscore( model ) ]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def new_resource( model )
|
|
35
|
+
to_server( model ).new_rest_resource
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def create(model, *args)
|
|
39
|
+
if args.size == 0 && model.respond_to?(:attributes)
|
|
40
|
+
clazz = model.class
|
|
41
|
+
new_resource(clazz).create(clazz, model.attributes).send_it
|
|
42
|
+
else
|
|
43
|
+
new_resource(model).create(model, *args).send_it
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def retrieve(model, *args)
|
|
48
|
+
resource = new_resource(model)
|
|
49
|
+
if args.last.is_a? Hash
|
|
50
|
+
params = args.delete_at(args.size - 1)
|
|
51
|
+
resource.retrieve(model, *args).query_params(params)
|
|
52
|
+
else
|
|
53
|
+
resource.retrieve(model, *args)
|
|
54
|
+
end
|
|
55
|
+
resource.send_it
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def update(model, *args)
|
|
59
|
+
if args.size == 0 && model.respond_to?(:attributes)
|
|
60
|
+
clazz = model.class
|
|
61
|
+
s = to_server( clazz )
|
|
62
|
+
s.new_rest_resource.update(clazz,
|
|
63
|
+
*s.keys( model ),
|
|
64
|
+
model.attributes).send_it
|
|
65
|
+
else
|
|
66
|
+
new_resource(model).update(model, *args).send_it
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def delete(model, *args)
|
|
71
|
+
if args.size == 0 && model.respond_to?(:attributes)
|
|
72
|
+
clazz = model.class
|
|
73
|
+
s = to_server( clazz )
|
|
74
|
+
s.new_rest_resource.delete(clazz,
|
|
75
|
+
*s.keys( model ),
|
|
76
|
+
model.attributes).send_it
|
|
77
|
+
else
|
|
78
|
+
new_resource(model).delete(model, *args).send_it
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
require 'ixtlan/remote/model_helpers'
|
|
2
|
+
module Ixtlan
|
|
3
|
+
module Remote
|
|
4
|
+
class RestResource
|
|
5
|
+
|
|
6
|
+
include ModelHelpers
|
|
7
|
+
|
|
8
|
+
def initialize(resource, model_map = {})
|
|
9
|
+
@base = resource
|
|
10
|
+
@map = model_map
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def send_it(&block)
|
|
14
|
+
raise "no method given - call any CRUD method first" unless @method
|
|
15
|
+
headers = {:content_type => :json, :accept => :json}
|
|
16
|
+
headers[:params] = @params if @params
|
|
17
|
+
result =
|
|
18
|
+
if @payload
|
|
19
|
+
@resource.send @method, @payload.to_json, headers, &block
|
|
20
|
+
else
|
|
21
|
+
@resource.send @method, headers, &block
|
|
22
|
+
end
|
|
23
|
+
unless result.blank?
|
|
24
|
+
result = JSON.load(result)
|
|
25
|
+
if @model
|
|
26
|
+
root = @model_key || @model.to_s.underscore
|
|
27
|
+
if result.is_a? Array
|
|
28
|
+
result.collect do |r|
|
|
29
|
+
new_instance(@model, r[root] || r)
|
|
30
|
+
end
|
|
31
|
+
else
|
|
32
|
+
new_instance(@model, result[root] || result)
|
|
33
|
+
end
|
|
34
|
+
else
|
|
35
|
+
result
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def query_params(params)
|
|
41
|
+
@params = params
|
|
42
|
+
self
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# retrieve(Locale) => GET /locales
|
|
46
|
+
# retrieve(Locale, 1) => GET /locales/1
|
|
47
|
+
# retrieve(:locales) => GET /locales
|
|
48
|
+
# retrieve(:locales, 1) => GET /locales/1
|
|
49
|
+
def retrieve(*args)
|
|
50
|
+
@method = :get
|
|
51
|
+
@params = nil
|
|
52
|
+
@resource = @base[path(*args)]
|
|
53
|
+
@payload = nil
|
|
54
|
+
self
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# create(locale) => POST /locales
|
|
58
|
+
# create(:locale => {:code => 'en'}) => POST /locales
|
|
59
|
+
def create(*obj_or_hash)
|
|
60
|
+
@method = :post
|
|
61
|
+
@payload = nil#obj_or_hash.is_a?(Class)? nil : obj_or_hash
|
|
62
|
+
@params = nil
|
|
63
|
+
@resource = @base[path(*obj_or_hash)]
|
|
64
|
+
self
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def update(*obj_or_hash)
|
|
68
|
+
@method = :put
|
|
69
|
+
@payload = nil#obj_or_hash.is_a?(Class)? nil : obj_or_hash
|
|
70
|
+
@params = nil
|
|
71
|
+
@resource = @base[path(*obj_or_hash)]
|
|
72
|
+
self
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def delete(*obj_or_hash)
|
|
76
|
+
@method = :delete
|
|
77
|
+
@payload = nil #obj_or_hash.is_a?(Class)? nil : obj_or_hash
|
|
78
|
+
@params = nil
|
|
79
|
+
@resource = @base[path(*obj_or_hash)]
|
|
80
|
+
self
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def model
|
|
84
|
+
@model
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
private
|
|
88
|
+
|
|
89
|
+
def new_instance( clazz, attributes )
|
|
90
|
+
@map[ clazz ].new_method.call attributes
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def path(*parts)
|
|
94
|
+
parts.collect { |p| path_part( p ) }.delete_if { |p| p.nil? } * '/'
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def model_set(model)
|
|
98
|
+
m = model.singularize.camelize.constantize rescue nil
|
|
99
|
+
if m
|
|
100
|
+
@model = m
|
|
101
|
+
@model_key = model.singularize.underscore
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def path_part(data)
|
|
106
|
+
model = to_model_underscore(data)
|
|
107
|
+
case data
|
|
108
|
+
when Hash
|
|
109
|
+
@payload = data
|
|
110
|
+
if model_set(model)
|
|
111
|
+
model = model.pluralize
|
|
112
|
+
else
|
|
113
|
+
model = nil
|
|
114
|
+
end
|
|
115
|
+
when Array
|
|
116
|
+
p data
|
|
117
|
+
@payload = data
|
|
118
|
+
if model_set model
|
|
119
|
+
model = model.pluralize
|
|
120
|
+
end
|
|
121
|
+
when String
|
|
122
|
+
model_set model
|
|
123
|
+
when Fixnum
|
|
124
|
+
model = data.to_s
|
|
125
|
+
when Symbol
|
|
126
|
+
model_set model
|
|
127
|
+
when Class
|
|
128
|
+
model_set model
|
|
129
|
+
model = @map.member?( model ) ? @map[ model ].path : model.pluralize
|
|
130
|
+
else
|
|
131
|
+
@payload = data
|
|
132
|
+
model_set model
|
|
133
|
+
model = model.pluralize
|
|
134
|
+
end
|
|
135
|
+
model.underscore if model
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|