Module: RailsAdmin::Config::Configurable::ClassMethods

Defined in:
lib/rails_admin/config/configurable.rb

Instance Method Summary collapse

Instance Method Details

#register_class_option(option_name, &default) ⇒ Object

Register a class option. Class option is a configuration option that stores it's value within a class object's instance variable and is accessed by a class method. Both go by the name of the option.


98
99
100
101
# File 'lib/rails_admin/config/configurable.rb', line 98

def register_class_option(option_name, &default)
  scope = class << self; self; end
  register_instance_option(option_name, scope, &default)
end

#register_deprecated_instance_option(option_name, replacement_option_name = nil, scope = self) ⇒ Object


82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/rails_admin/config/configurable.rb', line 82

def register_deprecated_instance_option(option_name, replacement_option_name = nil, scope = self)
  scope.send(:define_method, option_name) do |*args, &block|
    if replacement_option_name
      ActiveSupport::Deprecation.warn("The #{option_name} configuration option is deprecated, please use #{replacement_option_name}.")
      send(replacement_option_name, *args, &block)
    elsif block_given?
      yield
    else
      raise("The #{option_name} configuration option is removed without replacement.")
    end
  end
end

#register_instance_option(option_name, scope = self, &default) ⇒ Object

Register an instance option. Instance option is a configuration option that stores its value within an instance variable and is accessed by an instance method. Both go by the name of the option.


49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/rails_admin/config/configurable.rb', line 49

def register_instance_option(option_name, scope = self, &default)
  options = scope.instance_variable_get('@config_options') ||
            scope.instance_variable_set('@config_options', {})

  option_name = option_name.to_s
  options[option_name] = nil

  # If it's a boolean create an alias for it and remove question mark
  if option_name.end_with?('?')
    scope.send(:define_method, "#{option_name.chop!}?") do
      send(option_name)
    end
  end

  # Define getter/setter by the option name
  scope.send(:define_method, option_name) do |*args, &block|
    if !args[0].nil? || block
      # Invocation with args --> This is the declaration of the option, i.e. setter
      instance_variable_set("@#{option_name}_registered", args[0].nil? ? block : args[0])
    else
      # Invocation without args nor block --> It's the use of the option, i.e. getter
      value = instance_variable_get("@#{option_name}_registered")
      case value
      when Proc
        value = with_recurring(option_name, value, default)
      when nil
        value = instance_eval(&default)
      end
      value
    end
  end
end