class Synchronisable::DSL::Association

Association builder. Subclasses must implement macro method.

Constants

KIND_KEY_SUFFIX_MAP

Attributes

valid_options[RW]
force_sync[R]
key[R]
kind[R]
model[R]
name[R]
required[R]

Public Class Methods

create(synchronizer, kind, name, options) click to toggle source
# File lib/synchronisable/dsl/association.rb, line 19
def create(synchronizer, kind, name, options)
  new(synchronizer, kind, name).create(options)
end
new(synchronizer, kind, name) click to toggle source
# File lib/synchronisable/dsl/association.rb, line 29
def initialize(synchronizer, kind, name)
  @synchronizer, @kind, @name = synchronizer, kind, name.to_sym
  @key_suffix = KIND_KEY_SUFFIX_MAP[kind]
end

Public Instance Methods

create(options) click to toggle source
# File lib/synchronisable/dsl/association.rb, line 34
def create(options)
  validate_options(options)

  @key = options[:key]
  @required = options[:required]
  @force_sync = options[:force_sync]

  if options[:class_name].present?
    @model = options[:class_name].constantize
  end

  set_defaults

  @synchronizer.associations[@key] = self
end
model_name() click to toggle source
# File lib/synchronisable/dsl/association.rb, line 50
def model_name
  @model.to_s.demodulize.underscore.to_sym
end

Protected Instance Methods

set_defaults() click to toggle source
# File lib/synchronisable/dsl/association.rb, line 56
def set_defaults
  @required ||= false
  @force_sync ||= false

  singular_name = @name.to_s.singularize

  @model ||= singular_name.classify.constantize
  @key = "#{singular_name}_#{@key_suffix}" unless @key.present?
end

Private Instance Methods

validate_options(options) click to toggle source
# File lib/synchronisable/dsl/association.rb, line 68
def validate_options(options)
  options.assert_valid_keys(Association.valid_options)
end