module SetBuilder::Modifier
Public Class Methods
[](klass_or_symbol)
click to toggle source
# File lib/set_builder/modifier.rb, line 36 def self.[](klass_or_symbol) klass_or_symbol.is_a?(Class) ? SetBuilder::Modifier.valid_modifier!(klass_or_symbol) : SetBuilder::Modifier.for(klass_or_symbol) end
for(type)
click to toggle source
# File lib/set_builder/modifier.rb, line 29 def self.for(type) type = get_type(type) @registered_modifiers[type] || raise(ArgumentError, "A modifier has not been registered for #{type}") end
name(klass)
click to toggle source
# File lib/set_builder/modifier.rb, line 20 def self.name(klass) @registered_modifiers.each do |key, value| return key if (value == klass) end klass.name end
register(*args)
click to toggle source
Usage
register(type, modifier) register([type, modifier], [type, modifier]) register(type, modifier, type, modifier)
# File lib/set_builder/modifier.rb, line 48 def self.register(*args) args, i = args.flatten, 0 while args[i+1] type, modifier_klass = get_type(args[i]), args[i+1] valid_modifier!(modifier_klass) # || raise(ArgumentError, "#{modifier_klass} is not a valid modifier") @registered_modifiers[type] = modifier_klass i += 2 end end
registered?(klass)
click to toggle source
# File lib/set_builder/modifier.rb, line 14 def self.registered?(klass) @registered_modifiers.values.member?(klass) end
valid_modifier!(klass)
click to toggle source
# File lib/set_builder/modifier.rb, line 60 def self.valid_modifier!(klass) raise(ArgumentError, "#{klass} must inherit from either `SetBuilder::Modifier::Verb` or `SetBuilder::Modifier::Adverb`") unless (is_subclass_of?(klass, SetBuilder::Modifier::Adverb) or is_subclass_of?(klass, SetBuilder::Modifier::Verb)) raise(ArgumentError, "#{klass} must respond to `operators`") unless klass.respond_to?(:operators) raise(ArgumentError, "#{klass}.operators must not be empty") if klass.operators.empty? klass end
Private Class Methods
get_type(type)
click to toggle source
# File lib/set_builder/modifier.rb, line 73 def self.get_type(type) if type.is_a?(Symbol) type else type.to_s.downcase.to_sym end end
is_subclass_of?(klass, superklass)
click to toggle source
# File lib/set_builder/modifier.rb, line 83 def self.is_subclass_of?(klass, superklass) sc = klass while (sc = sc.superclass) return true if (sc == superklass) end false end