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  | 
| 4 | 
            -
                 | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
                 | 
| 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 | 
            -
             | 
| 15 | 
            -
             | 
| 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 | 
            -
             | 
| 18 | 
            -
                   | 
| 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. | 
| 24 | 
            -
                  methods.flatten
         | 
| 25 | 
            -
                end
         | 
| 36 | 
            +
                self.allowed_methods = methods.flatten
         | 
| 26 37 | 
             
              end
         | 
| 27 38 |  | 
| 28 39 | 
             
              def allow_formats(*formats)
         | 
| 29 | 
            -
                self. | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 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
         | 
    
        data/lib/make_restful/version.rb
    CHANGED
    
    
    
        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 | 
            -
                 | 
| 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 : | 
| 24 | 
            -
                @response =  | 
| 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 : | 
| 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 : | 
| 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 : | 
| 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 : | 
| 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 | 
            -
               | 
| 90 | 
            -
             | 
| 91 | 
            -
                @ | 
| 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
    
    
    
        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. | 
| 5 | 
            -
              prerelease:  | 
| 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- | 
| 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:  | 
| 81 | 
            +
                  version: '0'
         | 
| 64 82 | 
             
            requirements: []
         | 
| 65 83 | 
             
            rubyforge_project: 
         | 
| 66 84 | 
             
            rubygems_version: 1.8.23
         |