Sha256: 604a230974fa7e26288837656f84b8487699e5492461572654568ec937b88a77

Contents?: true

Size: 2 KB

Versions: 2

Compression:

Stored size: 2 KB

Contents

require 'active_support/inflector'

module Alchemy
  class Resource

    attr_accessor :skip_attributes

    DEFAULT_SKIPPED_ATTRIBUTES = %W[id updated_at created_at creator_id updater_id]

    def initialize(controller_path, module_definition=nil)
      @controller_path = controller_path
      @module_definition = module_definition
      self.skip_attributes = DEFAULT_SKIPPED_ATTRIBUTES
    end

    def model_array
      model_array = controller_path_array
      model_array.delete("admin")
      model_array
    end

    def model
      @_model ||= model_array.join('/').classify.constantize
    end

    def resources_name
      @_resources_name ||= model_array.last
    end

    def model_name
      @_model_name ||= resources_name.singularize
    end

    def permission_scope
      #(resource_namespaced? ? "#{resource_namespace.underscore}_admin_#{resources_name}" : "admin_#{resources_name}").to_sym
      @_permission = @controller_path.gsub('/', '_').to_sym
    end

    def namespace_for_scope
      namespace_array = namespace_diff
      namespace_array.delete(engine_name) if in_engine?
      namespace_array
    end

    def attributes
      #@_attributes ||=
      self.model.columns.collect do |col|
        {:name => col.name, :type => col.type} unless self.skip_attributes.include?(col.name)
      end.compact
    end

    def searchable_attributes
      self.attributes.select { |a| a[:type] == :string }
    end

    def namespaced_model_name
      return @_namespaced_model_name unless @_namespaced_model_name.nil?
      model_name_array = self.model_array
      model_name_array.delete(self.engine_name) if in_engine?
      @_namespaced_model_name = model_name_array.join('_').singularize
    end

    def in_engine?
      not self.engine_name.nil?
    end

    def engine_name
      @module_definition and @module_definition['engine_name']
    end

    protected

    def controller_path_array
      @controller_path.split('/')
    end

    def namespace_diff
      controller_path_array - model_array
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
alchemy_cms-2.2.rc13 lib/alchemy/resource.rb
alchemy_cms-2.2.rc11 lib/alchemy/resource.rb