class Guise::Options

@api private

Attributes

association_class[W]
association_name[R]
association_name_singular[R]
association_options[R]
attribute[R]
scopes[R]
source_class[R]
values[R]

Public Class Methods

new(source_class, *values) click to toggle source
# File lib/guise/options.rb, line 16
def initialize(source_class, *values)
  options = values.extract_options!

  if values.empty?
    raise ArgumentError, "must specify values in `has_guises`"
  end

  @source_class = source_class
  @values = values.map(&:to_s).to_set
  @association_name =
    options.delete(:association) || DEFAULT_ASSOCIATION_NAME
  @association_name_singular = @association_name.to_s.singularize
  @attribute = options.delete(:attribute) || DEFAULT_ATTRIBUTE_NAME
  @association_options = options.reverse_merge!(default_association_options)

  @scopes = values.inject(HashWithIndifferentAccess.new) do |all, value|
    all.merge!(value => {})
  end
  @scopes.freeze
end

Public Instance Methods

association_class() click to toggle source
# File lib/guise/options.rb, line 59
def association_class
  if defined?(@association_class)
    @association_class
  else
    raise "`guise_for` was not called on the association class"
  end
end
default_association_options() click to toggle source
# File lib/guise/options.rb, line 71
def default_association_options
  { foreign_key: "#{source_association_name}_id".to_sym }
end
register_scope(guise_value, scope) click to toggle source
# File lib/guise/options.rb, line 47
def register_scope(guise_value, scope)
  value_scopes = @scopes.fetch(guise_value) do
    raise InvalidGuiseValue.new(guise_value, source_class)
  end

  if value_scopes.key?(scope.type)
    raise "`#{scope.type}' scope already defined for #{source_class}"
  end

  value_scopes[scope.type] = scope
end
scope(guise_value, scope_type) click to toggle source
# File lib/guise/options.rb, line 37
def scope(guise_value, scope_type)
  value_scopes = @scopes.fetch(guise_value) do
    raise InvalidGuiseValue.new(guise_value, source_class)
  end

  value_scopes.fetch(scope_type) do
    raise ArgumentError, "`#{scope_type}' is not a valid type of scope"
  end
end
source_association_name() click to toggle source
# File lib/guise/options.rb, line 67
def source_association_name
  source_class.model_name.singular.to_sym
end