make_restful 0.1.2 → 0.1.3
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/lib/make_restful.rb +5 -3
- data/lib/make_restful/callbacks.rb +15 -0
- data/lib/make_restful/loaders.rb +8 -18
- data/lib/make_restful/rendering.rb +6 -3
- data/lib/make_restful/sugar.rb +20 -0
- data/lib/make_restful/version.rb +1 -1
- metadata +4 -4
- data/lib/make_restful/specification.rb +0 -25
- data/lib/make_restful/specification/builder.rb +0 -75
data/lib/make_restful.rb
CHANGED
@@ -8,12 +8,14 @@ module MakeRestful
|
|
8
8
|
autoload :Loaders
|
9
9
|
autoload :RestMethods
|
10
10
|
autoload :Rendering
|
11
|
-
autoload :
|
11
|
+
autoload :Callbacks
|
12
|
+
autoload :Sugar
|
12
13
|
|
14
|
+
extend Callbacks
|
13
15
|
include Loaders
|
14
16
|
include RestMethods
|
15
17
|
include Rendering
|
16
|
-
include
|
18
|
+
include Sugar
|
17
19
|
|
18
20
|
delegate :allow_method?, :allow_format?, to: :klass
|
19
21
|
|
@@ -24,7 +26,7 @@ module MakeRestful
|
|
24
26
|
|
25
27
|
resource name.underscore.gsub(/(.*)_controller/,'\1').singularize
|
26
28
|
self.allowed_formats = [:json, :jsonp, :xml]
|
27
|
-
self.allowed_methods = [:index, :
|
29
|
+
self.allowed_methods = [:index, :show, :update, :destroy, :create, :spec]
|
28
30
|
self.finder = :id
|
29
31
|
|
30
32
|
end
|
data/lib/make_restful/loaders.rb
CHANGED
@@ -4,7 +4,6 @@ module MakeRestful::Loaders
|
|
4
4
|
|
5
5
|
def load_resource
|
6
6
|
@resource = self.class.resource_class
|
7
|
-
@resource.params = params.except(:action, :controller, :id) if @resource.respond_to?(:params=)
|
8
7
|
end
|
9
8
|
|
10
9
|
def load_collection
|
@@ -25,6 +24,7 @@ module MakeRestful::Loaders
|
|
25
24
|
if @collection.empty?
|
26
25
|
@response = { error: 'no results found' }
|
27
26
|
@status = :not_found
|
27
|
+
render(load_template: false) and return
|
28
28
|
end
|
29
29
|
|
30
30
|
eval("@#{self.class.resource_name} = @collection")
|
@@ -35,15 +35,17 @@ module MakeRestful::Loaders
|
|
35
35
|
finder = opts[:finder] || self.class.finder
|
36
36
|
finder_value = params[finder]
|
37
37
|
|
38
|
-
if finder && @resource.respond_to?(:
|
39
|
-
|
40
|
-
|
38
|
+
@instance = if finder && @resource.respond_to?(:where)
|
39
|
+
@resource.where(finder.to_sym => finder_value).first
|
40
|
+
else
|
41
|
+
@resource.find(finder_value)
|
41
42
|
end
|
43
|
+
eval "@#{self.class.instance_name} = @instance"
|
42
44
|
|
43
45
|
unless @instance
|
44
46
|
@response = { error: "Could not find record with #{finder}: #{finder_value}" }
|
45
47
|
@status = :not_found
|
46
|
-
|
48
|
+
render(load_template: false) and return
|
47
49
|
end
|
48
50
|
|
49
51
|
end
|
@@ -52,21 +54,9 @@ module MakeRestful::Loaders
|
|
52
54
|
return if allow_method? params[:action]
|
53
55
|
@response = { error: "Method not allowed"}
|
54
56
|
@status = :method_not_allowed
|
55
|
-
render
|
57
|
+
render(load_template: false)
|
56
58
|
end
|
57
59
|
|
58
60
|
alias :verify_action! :verify_method!
|
59
61
|
|
60
|
-
def method_missing(m, *args, &block)
|
61
|
-
if /load_instance_by_(?<finder>[a-z_]+)/ =~ m.to_s
|
62
|
-
load_instance(finder: finder.to_sym)
|
63
|
-
else
|
64
|
-
super
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def respond_to_missing?(method_name, include_private = false)
|
69
|
-
true if /load_instance_by_(?<finder>[a-z_]+)/ =~ method_name.to_s
|
70
|
-
end
|
71
|
-
|
72
62
|
end
|
@@ -3,9 +3,12 @@ module MakeRestful::Rendering
|
|
3
3
|
private
|
4
4
|
|
5
5
|
## Rendering
|
6
|
-
def render(
|
7
|
-
|
8
|
-
|
6
|
+
def render(*args, &block)
|
7
|
+
options = args.last.is_a?(Hash) && args.last.extractable_options? ? args.last : {}
|
8
|
+
template_present = template_exists?([params[:controller], params[:action]].join('/'))
|
9
|
+
options[:load_template] ||= true
|
10
|
+
cleaned_options = options.delete_if{ |k,v| [:load_template, :status].include?(k) }
|
11
|
+
super and return if (( template_present && options[:load_template]) || cleaned_options.present? ) && allow_format?(formats)
|
9
12
|
|
10
13
|
# Set the response from the chain
|
11
14
|
response = @response || @instance || @collection
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module MakeRestful::Sugar
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
def method_missing(m, *args, &block)
|
5
|
+
if /load_instance_by_(?<finder>[a-z_]+)/ =~ m.to_s
|
6
|
+
load_instance(finder: finder.to_sym)
|
7
|
+
else
|
8
|
+
super
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def respond_to_missing?(method_name, include_private = false)
|
13
|
+
if /load_instance_by_(?<finder>[a-z_]+)/ =~ method_name.to_s
|
14
|
+
true
|
15
|
+
else
|
16
|
+
false
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
data/lib/make_restful/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: make_restful
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -72,12 +72,12 @@ files:
|
|
72
72
|
- README.md
|
73
73
|
- Rakefile
|
74
74
|
- lib/make_restful.rb
|
75
|
+
- lib/make_restful/callbacks.rb
|
75
76
|
- lib/make_restful/class_methods.rb
|
76
77
|
- lib/make_restful/loaders.rb
|
77
78
|
- lib/make_restful/rendering.rb
|
78
79
|
- lib/make_restful/rest_methods.rb
|
79
|
-
- lib/make_restful/
|
80
|
-
- lib/make_restful/specification/builder.rb
|
80
|
+
- lib/make_restful/sugar.rb
|
81
81
|
- lib/make_restful/version.rb
|
82
82
|
- make_restful.gemspec
|
83
83
|
homepage: http://github.com/jwaldrip/make_restful
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module MakeRestful::Specification
|
2
|
-
extend ActiveSupport::Concern
|
3
|
-
extend ActiveSupport::Autoload
|
4
|
-
|
5
|
-
autoload :Builder
|
6
|
-
# autoload :MethodBuilder
|
7
|
-
|
8
|
-
def specification
|
9
|
-
nil
|
10
|
-
end
|
11
|
-
|
12
|
-
module ClassMethods
|
13
|
-
|
14
|
-
def specification(&block)
|
15
|
-
|
16
|
-
spec_result = MakeRestful::Specification::Builder.new(self, &block).freeze
|
17
|
-
|
18
|
-
define_method :specification do
|
19
|
-
spec_result.render
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
class MakeRestful::Specification::Builder
|
2
|
-
|
3
|
-
attr_reader :_controller_, :_methods_, :_description_, :_formats_, :_attributes_, :_resource_, :_default_methods_, :_default_attributes_, :_default_formats_
|
4
|
-
|
5
|
-
private
|
6
|
-
|
7
|
-
def initialize(controller, &block)
|
8
|
-
@_controller_ = controller
|
9
|
-
@_methods_ = []
|
10
|
-
@_default_methods_ = default_supported_methods
|
11
|
-
@_methods_ = []
|
12
|
-
@_attributes_ = []
|
13
|
-
@_default_attributes_ = controller.resource_class.new.attributes.keys
|
14
|
-
@_default_formats_ = controller.allowed_formats
|
15
|
-
@_formats_ = []
|
16
|
-
@_description_ = "Api for #{controller.resource_name.titleize}"
|
17
|
-
@_resource_ = controller.instance_name
|
18
|
-
instance_eval(&block) if block_given?
|
19
|
-
end
|
20
|
-
|
21
|
-
def method(method, options={})
|
22
|
-
method = {
|
23
|
-
method: method,
|
24
|
-
path: options[:path],
|
25
|
-
returns: options[:returns]
|
26
|
-
}
|
27
|
-
@_methods_ << method
|
28
|
-
method
|
29
|
-
end
|
30
|
-
|
31
|
-
def description(string)
|
32
|
-
@_description_ = string
|
33
|
-
end
|
34
|
-
|
35
|
-
def resource(string)
|
36
|
-
@_resource_ = string
|
37
|
-
end
|
38
|
-
|
39
|
-
def attribute(attr)
|
40
|
-
@_attributes_ << attr
|
41
|
-
attr
|
42
|
-
end
|
43
|
-
|
44
|
-
def attributes(*args)
|
45
|
-
@_attributes_ += args.flatten
|
46
|
-
end
|
47
|
-
|
48
|
-
def format(attr)
|
49
|
-
@_formats_ << attr
|
50
|
-
attr
|
51
|
-
end
|
52
|
-
|
53
|
-
def formats(*args)
|
54
|
-
@_formats_ += args
|
55
|
-
end
|
56
|
-
|
57
|
-
def default_supported_methods
|
58
|
-
method :get, path: "/", returns: "collection" if _controller_.allow_method?(:list) || _controller_.allow_method?(:index)
|
59
|
-
method :post, path: "/", returns: "resource" if _controller_.allow_method?(:create) || _controller_.allow_method?(:post)
|
60
|
-
method :get, path: "/:id", returns: "resource" if _controller_.allow_method?(:show) || _controller_.allow_method?(:get)
|
61
|
-
method :put, path: "/:id", returns: "resource" if _controller_.allow_method?(:update) || _controller_.allow_method?(:put)
|
62
|
-
method :delete, path: "/:id", returns: "success" if _controller_.allow_method?(:destroy) || _controller_.allow_method?(:delete)
|
63
|
-
end
|
64
|
-
|
65
|
-
def render
|
66
|
-
{
|
67
|
-
resource: _resource_,
|
68
|
-
formats: _formats_.present? ? _formats_ : _default_formats_,
|
69
|
-
description: _description_,
|
70
|
-
attributes: _attributes_.present? ? _attributes_ : _default_attributes_,
|
71
|
-
methods: _methods_.present? ? _methods_ : _default_methods_
|
72
|
-
}
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|