make_restful 0.0.1.pre1 → 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.
@@ -1,34 +1,48 @@
1
1
  module MakeRestful::ClassMethods
2
2
 
3
- def authorize_resource!
4
- before_filter do
5
- @resource = @resource.authorize(auth_token)
6
- @resource.params = params if resource.respond_to?(:params=)
7
- @instance = @resource.find(params[:id]) if params[:id] && @resource.respond_to?(:find)
8
- end
3
+ def resource_name
4
+ resource_class.name.gsub(/(.*::)?(.*)/,"\\2").underscore.pluralize
5
+ end
6
+
7
+ def instance_name
8
+ resource_name.singularize
9
9
  end
10
10
 
11
11
  private
12
12
 
13
13
  def resource(klass)
14
- before_filter do
15
- resource.params = params.except(:action, :controller, :id) if resource.respond_to?(:params=)
14
+
15
+ before_filter :load_resource
16
+ before_filter :load_collection, on: [:index]
17
+ before_filter :load_instance, on: [:show, :destroy, :update]
18
+
19
+ begin
16
20
  klass = klass.to_s.camelize.constantize
17
- @resource ||= klass
18
- @instance = resource.find(params[:id]) if params[:id] && @resource.respond_to?(:find)
21
+ rescue NameError
22
+ klass = false
23
+ end
24
+
25
+ if klass
26
+ self.resource_class = klass
19
27
  end
28
+
29
+ end
30
+
31
+ def find_by(key)
32
+ self.finder = key.to_sym
20
33
  end
21
34
 
22
35
  def allow_methods(*methods)
23
- self.send :define_method, :allowed_methods do
24
- methods.flatten
25
- end
36
+ self.allowed_methods = methods.flatten
26
37
  end
27
38
 
28
39
  def allow_formats(*formats)
29
- self.send :define_method, :allowed_formats do
30
- formats.flatten
31
- end
40
+ self.allowed_formats = formats.flatten
41
+ end
42
+
43
+ def paginates!(opts={})
44
+ opts.reverse_merge!({ per_page: 25 })
45
+ self.pagination = opts
32
46
  end
33
47
 
34
48
  end
@@ -0,0 +1,20 @@
1
+ module MakeRestful::ControllerAdditions::OauthResource
2
+ require 'oauth_resource'
3
+ extend ActiveSupport::Concern
4
+
5
+ included do ; end
6
+
7
+ module ClassMethods
8
+
9
+ def authorize_resource!(token, opts={})
10
+ skip_before_filter :load_instance, :load_collection
11
+ before_filter(opts) do
12
+ @resource = @resource.authorize(send(token))
13
+ load_instance if params[:action] =~ /show|destroy|update/
14
+ load_collection if params[:action] =~ /index/
15
+ end
16
+ end
17
+
18
+ end
19
+
20
+ end
@@ -0,0 +1,6 @@
1
+ module MakeRestful::ControllerAdditions
2
+ extend ActiveSupport::Autoload
3
+
4
+ autoload :OauthResource
5
+
6
+ end
@@ -1,3 +1,3 @@
1
1
  module MakeRestful
2
- VERSION = "0.0.1.pre1"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/make_restful.rb CHANGED
@@ -5,12 +5,16 @@ module MakeRestful
5
5
  extend ActiveSupport::Autoload
6
6
 
7
7
  autoload :ClassMethods
8
+ autoload :ControllerAdditions
8
9
 
9
10
  included do
10
11
 
11
- resource name.underscore.gsub(/(.*\/)?(.*)_controller/,'\2').singularize
12
+ cattr_accessor :allowed_methods, :allowed_formats, :finder, :pagination, :resource_class
13
+
14
+ resource name.underscore.gsub(/(.*)_controller/,'\1').singularize
12
15
  allow_formats :json, :jsonp, :xml
13
16
  allow_methods :index, :get, :put, :post, :delete
17
+ find_by :id
14
18
 
15
19
  ####################################
16
20
  ## RESTful Methods
@@ -20,36 +24,53 @@ module MakeRestful
20
24
 
21
25
  # GET /resources
22
26
  def index
23
- head :not_supported and return unless allow_method? :index, :list
24
- @response = resource.all
27
+ head :method_not_allowed and return unless allow_method? :index, :list
28
+ @response = { :"#{self.class.resource_name}" => @collection }
29
+ @response.merge!(
30
+ {
31
+ current_page: results.current_page,
32
+ per_page: results.per_page,
33
+ total_entries: results.total_entries,
34
+ }
35
+ ) if self.class.pagination && !params.has_key?(:all)
36
+
37
+ if @collection.empty?
38
+ @response = { error: 'no results found' }
39
+ @status = :not_found
40
+ end
41
+
25
42
  render_formats
26
43
  end
27
44
 
28
45
  # POST /resources
29
46
  def create
30
- head :not_supported and return unless allow_method? :post, :create
31
- @response = resource.create
47
+ head :method_not_allowed and return unless allow_method? :post, :create
48
+ @response = @resource.create
32
49
  render_formats
33
50
  end
34
51
 
35
52
  # PUT /resources/:id
36
53
  def show
37
- head :not_supported and return unless allow_method? :get, :show
38
- @response = instance
54
+ head :method_not_allowed and return unless allow_method? :get, :show
55
+ @response = @instance
56
+ unless @response
57
+ @response = { error: 'record_not_found' }
58
+ @status = :not_found
59
+ end
39
60
  render_formats
40
61
  end
41
62
 
42
63
  # PUT /resources/:id
43
64
  def update
44
- head :not_supported and return unless allow_method? :put, :patch, :update
45
- @response = instance.update_attributes(params[resource.to_s.underscore])
65
+ head :method_not_allowed and return unless allow_method? :put, :patch, :update
66
+ @response = @instance.update_attributes(params[@resource.to_s.underscore])
46
67
  render_formats
47
68
  end
48
69
 
49
70
  # DELETE /resources/:id
50
71
  def destroy
51
- head :not_supported and return unless allow_method? :delete, :destroy
52
- @response = instance.destroy
72
+ head :method_not_allowed and return unless allow_method? :delete, :destroy
73
+ @response = @instance.destroy
53
74
  render_formats
54
75
  end
55
76
 
@@ -57,7 +78,7 @@ module MakeRestful
57
78
  def spec
58
79
  @response = {
59
80
  supports: self.class.supported_methods,
60
- specification: ( resource.specification if resource.respond_to?(:specification) ) || "No Specification"
81
+ specification: ( @resource.specification if @resource.respond_to?(:specification) ) || "No Specification"
61
82
  }
62
83
  render_formats
63
84
  end
@@ -68,9 +89,9 @@ module MakeRestful
68
89
 
69
90
  def render_formats
70
91
  respond_to do |format|
71
- format.json { render json: @response, callback: ( params[:callback] if allow_format? :jsonp )} if allow_format? :json, :jsonp
72
- format.xml { render xml: @response } if allow_format? :xml
73
- format.html
92
+ format.json { render json: @response, status: @status, callback: ( params[:callback] if allow_format? :jsonp )} if allow_format? :json, :jsonp
93
+ format.xml { render xml: @response, status: @status } if allow_format? :xml
94
+ format.html { render status: @status } if allow_format? :html
74
95
  end
75
96
  end
76
97
 
@@ -86,13 +107,34 @@ module MakeRestful
86
107
  true if methods.map(&:to_sym).select { |i| allowed_methods.map(&:to_sym).include? i }.present?
87
108
  end
88
109
 
89
- # The Instance
90
- def instance
91
- @instance
110
+ def load_resource
111
+ @resource = self.class.resource_class
112
+ @resource.params = params.except(:action, :controller, :id) if @resource.respond_to?(:params=)
113
+ end
114
+
115
+ def load_collection
116
+ @collection = if self.class.pagination && !params.has_key?(:all)
117
+ @resource.paginate page: params[:page], per_page: (params[:per_page] || self.class.pagination[:per_page] || 25)
118
+ else
119
+ @resource.all
120
+ end
121
+ eval("@#{self.class.resource_name} = @collection")
122
+ end
123
+
124
+ def load_instance
125
+ @instance = eval "@#{self.class.instance_name} = #{@resource.send(:"find_by_#{self.class.finder}", params[:id])}" if params[:id] && @resource.respond_to?(:find)
92
126
  end
93
127
 
94
128
  def resource
95
129
  @resource
96
130
  end
97
131
 
132
+ def instance
133
+ @instance
134
+ end
135
+
136
+ def collection
137
+ @collection
138
+ end
139
+
98
140
  end
data/make_restful.gemspec CHANGED
@@ -17,4 +17,6 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
19
  gem.add_dependency "activesupport"
20
+ gem.add_dependency "will_paginate"
21
+
20
22
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: make_restful
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.pre1
5
- prerelease: 6
4
+ version: 0.1.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jason Waldrip
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-30 00:00:00.000000000 Z
12
+ date: 2012-09-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -27,6 +27,22 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: will_paginate
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
30
46
  description: ! ' Enables rest on a resource '
31
47
  email:
32
48
  - jason@waldrip.net
@@ -41,6 +57,8 @@ files:
41
57
  - Rakefile
42
58
  - lib/make_restful.rb
43
59
  - lib/make_restful/class_methods.rb
60
+ - lib/make_restful/controller_additions.rb
61
+ - lib/make_restful/controller_additions/oauth_resource.rb
44
62
  - lib/make_restful/version.rb
45
63
  - make_restful.gemspec
46
64
  homepage: http://github.com/jwaldrip/make_restful
@@ -58,9 +76,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
58
76
  required_rubygems_version: !ruby/object:Gem::Requirement
59
77
  none: false
60
78
  requirements:
61
- - - ! '>'
79
+ - - ! '>='
62
80
  - !ruby/object:Gem::Version
63
- version: 1.3.1
81
+ version: '0'
64
82
  requirements: []
65
83
  rubyforge_project:
66
84
  rubygems_version: 1.8.23