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
- #add_accessor(name, type: :accessor, subclass: nil) ⇒ Object
- #add_class_method(name, context: nil, private: false, subclass: nil, &blk) ⇒ Object
- #add_delegator(name, accessor, method = name, subclass: nil) ⇒ Object
- #add_initialize_param(name, opts = {}, &default) ⇒ Object
- #add_instance_class_proxy(type, name, subclass: nil) ⇒ Object
- #add_method(name, context: nil, private: false, subclass: nil, &blk) ⇒ Object
- #add_module(mod, subclass: nil) ⇒ Object
- #class_builder(subclass = nil) ⇒ Object
- #create_as_module(subclass: nil) ⇒ Object
- #set_super_class(klass, subclass: nil) ⇒ Object
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 |