module Mobility::Backend::ClassMethods

Defines setup hooks for backend to customize model class.

Public Instance Methods

build_subclass(model_class, options) click to toggle source

Build a subclass of this backend class for a given set of options @note This method also freezes the options hash to prevent it from

being changed.

@param [Class] model_class Class @param [Hash] options @return [Class] backend subclass

# File lib/mobility/backend.rb, line 169
def build_subclass(model_class, options)
  Class.new(self) do
    @model_class = model_class
    configure(options) if respond_to?(:configure)
    @options = options.freeze
  end
end
inherited(subclass) click to toggle source
# File lib/mobility/backend.rb, line 148
def inherited(subclass)
  subclass.instance_variable_set(:@setup_block, @setup_block)
  subclass.instance_variable_set(:@options, @options)
  subclass.instance_variable_set(:@model_class, @model_class)
end
inspect() click to toggle source

Show useful information about this backend class, if it has no name. @return [String]

Calls superclass method
# File lib/mobility/backend.rb, line 193
def inspect
  name ? super : "#<#{superclass.name}>"
end
option_reader(name) click to toggle source

Create instance and class methods to access value on options hash @param [Symbol] name Name of option reader

# File lib/mobility/backend.rb, line 179
      def option_reader(name)
        module_eval <<-EOM, __FILE__, __LINE__ + 1
        def self.#{name}
          options[:#{name}]
        end

        def #{name}
          self.class.options[:#{name}]
        end
        EOM
      end
setup(&block) click to toggle source

Assign block to be called on model class. @yield [attribute_names, options] @note When called multiple times, setup blocks will be appended

so that they are run together consecutively on class.
# File lib/mobility/backend.rb, line 136
def setup &block
  if @setup_block
    setup_block = @setup_block
    @setup_block = lambda do |*args|
      class_exec(*args, &setup_block)
      class_exec(*args, &block)
    end
  else
    @setup_block = block
  end
end
setup_model(model_class, attribute_names) click to toggle source

Call setup block on a class with attributes and options. @param model_class Class to be setup-ed @param [Array<String>] attribute_names @param [Hash] options

# File lib/mobility/backend.rb, line 158
def setup_model(model_class, attribute_names)
  return unless setup_block = @setup_block
  model_class.class_exec(attribute_names, options, &setup_block)
end
valid_keys() click to toggle source

Returns valid option keys for this backend. This is overriden in backends to define which keys are valid for each backend class. @return [Array]

# File lib/mobility/backend.rb, line 128
def valid_keys
  []
end