module Drudge::ClassDSL::ClassMethods
Public Instance Methods
__commands()
click to toggle source
# File lib/drudge/class_dsl.rb, line 55 def __commands merged_commands((@__commands || []), (superclass.__commands rescue [])) end
desc(description)
click to toggle source
When found before a method definition, it marks the Provides a short description for the next command
# File lib/drudge/class_dsl.rb, line 35 def desc(description) @__command_meta ||= {} @__command_meta[:desc] = description end
method_added(m)
click to toggle source
Calls superclass method
# File lib/drudge/class_dsl.rb, line 40 def method_added(m) if @__command_meta and @__command_meta[:desc] meth = instance_method(m) @__commands ||= [] @__commands << { name: meth.name, params: parse_command_parameters(meth.parameters), meta: { desc: @__command_meta[:desc] } } @__command_meta = {} end super end
Private Instance Methods
merged_commands(newer, older)
click to toggle source
# File lib/drudge/class_dsl.rb, line 61 def merged_commands(newer, older) # review: this method seems too complex. find a simpler implemetnation case when older.empty? then newer when newer.empty? then older else deep_merger = -> (_, old, new) do if Hash === old old.merge(new, &deep_merger) else new end end non_overriden = older.reject { |c| newer.any? { |cc| cc[:name] == c[:name] } } newer_and_overriden = newer.map do |cmd| overriden = older.find { |c| c[:name] == cmd[:name] } if overriden overriden.merge(cmd, &deep_merger) else cmd end end non_overriden + newer_and_overriden end end
parse_command_parameters(method_parameters)
click to toggle source
# File lib/drudge/class_dsl.rb, line 93 def parse_command_parameters(method_parameters) method_parameters.map do |kind, name| case kind when :req then Param.any(name) when :opt then Param.any(name, optional: true) when :rest then Param.any(name, splatt: true) else raise "Unsupported parameter type" end end end