Sha256: 8b2f78073a9b20bc455be8a3984aba2edf1580d59878449772930ef3745716b5

Contents?: true

Size: 1.46 KB

Versions: 2

Compression:

Stored size: 1.46 KB

Contents

module ContextExposer::ResourceController
  extend ActiveSupport::Concern
  include ContextExposer::BaseController

  included do
    expose_resources
  end

  protected

  module ClassMethods
    def expose_resources *types
      types = types.flatten
      types = types.empty? ? [:all] : types

      unless expose_resource_method? :one, types
        _exposing(normalized_resource_name.singularize)  { find_single_resource    }
      end

      unless expose_resource_method? :many, types
        _exposing(normalized_resource_name.pluralize)    { find_all_resources      }
      end

      unless expose_resource_method? :list, types
        _exposing(normalized_resource_list)              { find_all_resources.to_a }
      end
    end    

    def expose_resource_method? type, types
      ([type, :all] & types).empty?
    end
  end  


  def resource_id
    params[:id]
  end

  def find_single_resource
    self.class._the_resource.find resource_id
  end

  def find_all_resources
    self.class._the_resource.all
  end

  module ClassMethods
    # for use in ResourceController
    def _exposing name, options = {}, &block
      exposed name, options, &block
    end
    
    def _the_resource
      clazz_name = self.to_s.sub(/Controller$/, '').singularize
      clazz_name.constantize
    rescue NameError => e
      raise "Resource #{clazz_name} is not defined. #{e}"
    end

    def normalized_resource_list
      normalized_resource_name.singularize + '_list'
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
context_exposer-0.4.1 lib/context_exposer/resource_controller.rb
context_exposer-0.4.0 lib/context_exposer/resource_controller.rb