Module: Irie

Defined in:
lib/irie/config.rb,
lib/irie/version.rb,
lib/irie/class_methods.rb,
lib/irie/param_aliases.rb,
lib/irie/extensions/count.rb,
lib/irie/extensions/limit.rb,
lib/irie/extensions/order.rb,
lib/irie/extensions/offset.rb,
lib/irie/extensions/paging.rb,
lib/irie/configuration_error.rb,
lib/irie/extensions/index_query.rb,
lib/irie/extensions/query_filter.rb,
lib/irie/extensions/smart_layout.rb,
lib/irie/extensions/param_filters.rb,
lib/irie/extensions/query_includes.rb,
lib/irie/extensions/params_to_joins.rb,
lib/irie/extensions/autorender_count.rb,
lib/irie/extensions/conversion/nil_params.rb,
lib/irie/extensions/paging/autorender_page_count.rb

Defined Under Namespace

Modules: ClassMethods, Extensions, ParamAliases Classes: ConfigurationError

Constant Summary collapse

CONTROLLER_OPTIONS =
[
  :autoincludes,
  :available_actions,
  :available_extensions,
  :can_filter_by_default_using,
  :debug,
  :function_param_names,
  :id_is_primary_key_param,
  :number_of_records_in_a_page,
  :predicate_prefix,
  :update_should_return_entity,
  :extension_include_order
]
VERSION =
'1.0.2'

Class Method Summary collapse

Class Method Details

.configure(&blk) ⇒ Object



19
# File 'lib/irie/config.rb', line 19

def configure(&blk); class_eval(&blk); end

.register_extension(extension_sym, extension_class_name, options = {}) ⇒ Object

Adds to extension_include_order and extension_include_order, e.g.

::Irie.register_extension :boolean_params, '::Focal::Irie::BooleanParams'

Is equivalent to:

::Irie.available_extensions[:boolean_params] = '::Focal::Irie::BooleanParams'
::Irie.extension_include_order << extension_sym

Allowed options are ‘:include`, `:after`, and `:before`. Some examples:

::Irie.register_extension :boolean_params, '::Example::BooleanParams', include: :last  # the default, so unnecessary
::Irie.register_extension :boolean_params, '::Example::BooleanParams', include: :first # includes module after all others registered at this point
::Irie.register_extension :boolean_params, '::Example::BooleanParams', after: :nil_params # includes after :nil_params
::Irie.register_extension :boolean_params, '::Example::BooleanParams', before: :nil_params # includes after :nil_params


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/irie/config.rb', line 31

def register_extension(extension_sym, extension_class_name, options = {})
  raise ::Irie::ConfigurationError.new "Irie.register_extension must provide an extension symbol as the first argument" unless extension_sym
  raise ::Irie::ConfigurationError.new "Irie.register_extension must provide an extension class name (string) as the second argument" unless extension_sym
  raise ::Irie::ConfigurationError.new "Irie.register_extension can only provide a single option: :include, :after, or :before" if options.size > 1
  initial_opts = options.dup
  include_opt, after_opt, before_opt = *[:include, :after, :before].collect{|opt_name| options.delete(opt_name)}
  include_opt = :last unless include_opt || after_opt || before_opt
  raise ::Irie::ConfigurationError.new "Irie.register_extension unrecognized options: #{options.inspect}" if options.size > 0

  ::Irie.extension_include_order.delete(extension_sym)

  before_or_after_opt_value = before_opt || after_opt
  if include_opt == :first
    ::Irie.extension_include_order.unshift extension_sym
  elsif include_opt == :last
    ::Irie.extension_include_order << extension_sym
  elsif before_or_after_opt_value
    ind = ::Irie.extension_include_order.index(before_or_after_opt_value)
    raise ::Irie::ConfigurationError.new "Irie.register_extension cannot insert #{before_opt ? 'before' : 'after'} #{before_or_after_opt_value.inspect}, because #{before_or_after_opt_value.inspect} was not yet registered. A possible workaround for deferred registration may be to require the code that does the prerequisite registration."
    ::Irie.extension_include_order.insert(ind + (after_opt ? 1 : 0), extension_sym)
  else
    raise ::Irie::ConfigurationError.new "Irie.register_extension unsupported options: #{initial_opts.inspect}"
  end

  ::Irie.available_extensions[extension_sym] = extension_class_name
end