Module: ActsInRelation::Core::ClassMethods

Defined in:
lib/acts_in_relation/core.rb

Instance Method Summary collapse

Instance Method Details

#acts_in_relation(**args) ⇒ Object

DSL called to a subclass of ActiveRecord::Base

Examples:

Define self relation

class User < ActiveRecord::Base
  acts_in_relation role: :self, action: [:follow, :block]
end

class Follow < ActiveRecord::Base
  acts_in_relation role: :action, self: :user
end

class Block < ActiveRecord::Base
  acts_in_relation role: :action, self: :user
end

Define relation of each models

class User < ActiveRecord::Base
  acts_in_relation role: :source, target: :post, action: :like
end

class Post < ActiveRecord::Base
  acts_in_relation role: :target, source: :user, action: :like
end

class Like < ActiveRecord::Base
  acts_in_relation role: :action, source: :user, target: :post
end

Parameters:

  • args (Hash)

    Define relation with :role, :action, :source, :target or :self.



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/acts_in_relation/core.rb', line 39

def acts_in_relation(**args)
  @args = args

  case @args[:role]
  when nil
    raise ActsInRelation::MissingRoleError
  when :source
    define_source
  when :target
    define_target
  when :action
    define_action
  when :self
    define_source
    define_target
  else
    raise ActsInRelation::UnknownRoleError, @args[:role]
  end
end