Module: Alki::Dsl::ClassHelpers

Included in:
Alki::Dsls::Class, Alki::Dsls::Dsl::Helpers
Defined in:
lib/alki/dsl/class_helpers.rb

Instance Method Summary collapse

Instance Method Details

#add_accessor(name, type: :accessor, subclass: nil) ⇒ Object



64
65
66
# File 'lib/alki/dsl/class_helpers.rb', line 64

def add_accessor(name,type: :accessor,subclass: nil)
  (class_builder(subclass)["attr_#{type}s".to_sym]||=[]) << name
end

#add_class_method(name, context: nil, private: false, subclass: nil, &blk) ⇒ Object



41
42
43
44
45
46
47
48
# File 'lib/alki/dsl/class_helpers.rb', line 41

def add_class_method (name,context: nil,private: false,subclass: nil,&blk)
  class_builder(subclass)[:class_methods] ||= {}
  class_builder(subclass)[:class_methods][name.to_sym] = {
    body: blk,
    context: context,
    private: private
  }
end

#add_delegator(name, accessor, method = name, subclass: nil) ⇒ Object



68
69
70
71
72
73
# File 'lib/alki/dsl/class_helpers.rb', line 68

def add_delegator(name,accessor,method=name,subclass: nil)
  (class_builder(subclass)[:delegators]||={})[name] = {
    accessor: accessor,
    method: method
  }
end

#add_initialize_param(name, opts = {}, &default) ⇒ Object



50
51
52
53
54
# File 'lib/alki/dsl/class_helpers.rb', line 50

def add_initialize_param(name,opts={},&default)
  name = name.to_sym
  param = default ? [name,default] : name
  (class_builder(opts[:subclass])[:initialize_params]||=[]) << param
end

#add_instance_class_proxy(type, name, subclass: nil) ⇒ Object



56
57
58
# File 'lib/alki/dsl/class_helpers.rb', line 56

def add_instance_class_proxy(type, name,subclass: nil)
  (class_builder(subclass)[:instance_class]||={})[name.to_sym] = {type: type}
end

#add_method(name, context: nil, private: false, subclass: nil, &blk) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/alki/dsl/class_helpers.rb', line 32

def add_method(name,context:nil,private: false,subclass: nil, &blk)
  class_builder(subclass)[:instance_methods] ||= {}
  class_builder(subclass)[:instance_methods][name.to_sym] = {
    body: blk,
    context: context,
    private: private
  }
end

#add_module(mod, subclass: nil) ⇒ Object



60
61
62
# File 'lib/alki/dsl/class_helpers.rb', line 60

def add_module(mod,subclass: nil)
  (class_builder(subclass)[:modules]||=[]) << mod
end

#class_builder(subclass = nil) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/alki/dsl/class_helpers.rb', line 4

def class_builder(subclass = nil)
  unless @ctx[:class_builder]
    @ctx[:class_builder] = {}
    %i(module name prefix).each do |attr|
      @ctx[:class_builder][attr] = @ctx[attr] if @ctx[attr]
    end
  end
  if subclass
    scs = @ctx[:class_builder][:secondary_classes] ||= []
    cb = scs.find { |sc| sc[:subclass] == subclass }
    unless cb
      cb = { subclass: subclass }
      scs << cb
    end
    cb
  else
    @ctx[:class_builder]
  end
end

#create_as_module(subclass: nil) ⇒ Object



24
25
26
# File 'lib/alki/dsl/class_helpers.rb', line 24

def create_as_module(subclass: nil)
  class_builder(subclass)[:type] = :module
end

#set_super_class(klass, subclass: nil) ⇒ Object



28
29
30
# File 'lib/alki/dsl/class_helpers.rb', line 28

def set_super_class(klass,subclass: nil)
  class_builder(subclass)[:super_class] = klass
end