Class: SetBuilder::Modifier::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/set_builder/modifier/base.rb

Direct Known Subclasses

Adverb, Verb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(hash) ⇒ Base

Returns a new instance of Base.



7
8
9
10
11
# File 'lib/set_builder/modifier/base.rb', line 7

def initialize(hash)
  @operator, @values = (hash.is_a?(Hash) ? [hash.first[0].to_sym, hash.first[1]] : [nil, nil])
  @values ||= []
  @values = [@values] unless @values.is_a?(Array)
end

Instance Attribute Details

#operatorObject (readonly)

Returns the value of attribute operator.



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

def operator
  @operator
end

#valuesObject (readonly)

Returns the value of attribute values.



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

def values
  @values
end

Class Method Details

.negate(operator) ⇒ Object



81
82
83
# File 'lib/set_builder/modifier/base.rb', line 81

def self.negate(operator)
  operator
end

.to_hashObject



87
88
89
90
91
92
93
# File 'lib/set_builder/modifier/base.rb', line 87

def self.to_hash
  hash = {}
  operators.each do |operator, array|
    hash[operator.to_s] = array.map {|type| type.to_s }
  end
  hash
end

.to_jsonObject



97
98
99
# File 'lib/set_builder/modifier/base.rb', line 97

def self.to_json
  to_hash.to_json
end

Instance Method Details

#to_s(negative = false) ⇒ Object



69
70
71
72
73
74
75
76
77
# File 'lib/set_builder/modifier/base.rb', line 69

def to_s(negative=false)
  words = negative ? [self.class.negate(operator).to_s.gsub(/_/, " ")] : [operator.to_s.gsub(/_/, " ")]
  arguments = self.class.operators[operator] || []
  (0...arguments.length).each do |i|
    # p "ValueMap.to_s(#{arguments[i]} (#{arguments[i].class}), #{values[i]} (#{values[i].class})): #{ValueMap.to_s(arguments[i], values[i])}"
    words << ValueMap.to_s(arguments[i], values[i])
  end
  words.join(" ")
end

#valid?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/set_builder/modifier/base.rb', line 19

def valid?
  valid_operator?(self.operator) && valid_arguments?(self.values)
end

#valid_argument_of_type?(argument, type) ⇒ Boolean

Returns:

  • (Boolean)


42
43
44
45
46
47
48
49
# File 'lib/set_builder/modifier/base.rb', line 42

def valid_argument_of_type?(argument, type)
  validator = "valid_#{type}_argument?"
  if respond_to?(validator)
    send(validator, argument)
  else
    true
  end
end

#valid_arguments?(values) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
34
35
36
37
38
# File 'lib/set_builder/modifier/base.rb', line 31

def valid_arguments?(values)
  argument_types = self.class.operators[operator] || []
  return false unless (values.length == argument_types.length)
  values.each_with_index do |value, i|
    return false unless valid_argument_of_type?(value, argument_types[i])
  end
  true
end

#valid_date_argument?(string) ⇒ Boolean

Returns:

  • (Boolean)


53
54
55
56
57
58
59
60
# File 'lib/set_builder/modifier/base.rb', line 53

def valid_date_argument?(string)
  begin
    Date.parse(string)
    true
  rescue
    false
  end
end

#valid_number_argument?(number) ⇒ Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/set_builder/modifier/base.rb', line 63

def valid_number_argument?(number)
  !(number.to_s =~ /\A\d+\Z/).nil?
end

#valid_operator?(operator) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
# File 'lib/set_builder/modifier/base.rb', line 25

def valid_operator?(operator)
  !operator.nil? && self.class.operators.key?(operator)
end