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