Module: Acts::AsNode::Base::ClassMethods

Defined in:
lib/acts_as_node/acts_as_node.rb

Instance Method Summary collapse

Instance Method Details

#acts_as_node(options = {}) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/acts_as_node/acts_as_node.rb', line 9

def acts_as_node(options={})
  return if instance_variable_get("@acts_as_node_loaded")
  instance_variable_set("@acts_as_node_loaded", true)
  options = {:name => 'node', :foreign_key => 'node_id'}.merge(options)
  instance_variable_set("@acts_as_node_options", options)

  belongs_to options[:name], :class_name => 'Node'

  compatible_default_scope %(where("/* SOFT_DELETE_DEFAULT_SCOPE */ `#{self.table_name}`.`#{options[:foreign_key]}` = ?", ::Node.current))

  before_save :_assign_node_id
  define_method "_assign_node_id" do |*opts|
    self.send("#{options[:foreign_key]}=", ::Node.current.id) if self.send(options[:foreign_key]).blank?
  end
end

#compatible_default_scope(scope_str) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/acts_as_node/acts_as_node.rb', line 25

def compatible_default_scope(scope_str)
  if Rails.version >= "3.1.0"
    if public_methods.include?(:default_scope)
      original_method_name = "_#{rand.object_id.abs}_#{self.name.underscore.gsub('/', '__')}_default_scope"
      class_eval "        class << self\n          alias :\#{original_method_name} :default_scope\n          def default_scope\n            \#{original_method_name}.\#{scope_str}\n          end\n        end\n      SCOPE\n    else\n      class_eval <<-SCOPE\n        def self.default_scope\n          \#{scope_str}\n        end\n      SCOPE\n    end\n  else\n    class_eval <<-SCOPE\n      default_scope \#{scope_str}\n    SCOPE\n  end\nend\n"