Module: SetBuilder::Modifier

Defined in:
lib/set_builder/modifier.rb,
lib/set_builder/modifier/base.rb,
lib/set_builder/modifier/verb.rb,
lib/set_builder/modifier/adverb.rb

Defined Under Namespace

Classes: Adverb, Base, Verb

Class Method Summary collapse

Class Method Details

.[](klass_or_symbol) ⇒ Object



36
37
38
# 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) ⇒ Object



29
30
31
32
# 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) ⇒ Object



20
21
22
23
24
25
# 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) ⇒ Object

Usage

register(type, modifier)
register([type, modifier], [type, modifier])
register(type, modifier, type, modifier)


48
49
50
51
52
53
54
55
56
# 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) ⇒ Boolean

Returns:

  • (Boolean)


14
15
16
# File 'lib/set_builder/modifier.rb', line 14

def self.registered?(klass)
  @registered_modifiers.values.member?(klass)
end

.valid_modifier!(klass) ⇒ Object

Raises:

  • (ArgumentError)


60
61
62
63
64
65
# 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