class Guise::HasGuisesBuilder

@api private

Public Class Methods

new(options) click to toggle source
# File lib/guise/builders.rb, line 6
def initialize(options)
  @options = options
end

Public Instance Methods

build!() click to toggle source
# File lib/guise/builders.rb, line 10
def build!
  set_guise_options!
  define_association!
  define_scopes!

  if @options.association_options != DEFAULT_ASSOCIATION_NAME
    define_association_aliases!
  end

  define_introspection_aliases!
end

Private Instance Methods

association_name() click to toggle source
# File lib/guise/builders.rb, line 69
def association_name
  @options.association_name
end
association_name_singular() click to toggle source
# File lib/guise/builders.rb, line 73
def association_name_singular
  @options.association_name_singular
end
define_association!() click to toggle source
# File lib/guise/builders.rb, line 29
def define_association!
  source_class.has_many(@options.association_name, @options.association_options)
end
define_association_aliases!() click to toggle source
# File lib/guise/builders.rb, line 48
    def define_association_aliases!
      source_class.class_eval <<-ASSOCIATION_ALIASES
        alias_method :guises, :#{association_name}
        alias_method :guises=, :#{association_name}=
        alias_method :guise_ids, :#{association_name_singular}_ids
        alias_method :guise_ids=, :#{association_name_singular}_ids=
      ASSOCIATION_ALIASES
    end
define_introspection_aliases!() click to toggle source
# File lib/guise/builders.rb, line 57
    def define_introspection_aliases!
      source_class.class_eval <<-INTROSPECTION_ALIASES
        alias_method :has_#{association_name_singular}?, :has_guise?
        alias_method :has_#{association_name}?, :has_guises?
        alias_method :has_any_#{association_name}?, :has_any_guises?
      INTROSPECTION_ALIASES
    end
define_scopes!() click to toggle source
# File lib/guise/builders.rb, line 33
    def define_scopes!
      @options.values.each do |value|
        method_name = value.underscore
        scope_name = method_name.pluralize

        source_class.scope scope_name, HasGuisesScope.new(value, @options)

        source_class.class_eval <<-METHOD
          def #{method_name}?
            has_guise?('#{value}')
          end
        METHOD
      end
    end
set_guise_options!() click to toggle source
# File lib/guise/builders.rb, line 24
def set_guise_options!
  source_class.class_attribute :guise_options, instance_writer: false
  source_class.guise_options = @options
end
source_class() click to toggle source
# File lib/guise/builders.rb, line 65
def source_class
  @options.source_class
end