Class: SetBuilder::Modifier::Base
- Inherits:
-
Object
- Object
- SetBuilder::Modifier::Base
- Defined in:
- lib/set_builder/modifier/base.rb
Instance Attribute Summary collapse
-
#operator ⇒ Object
readonly
Returns the value of attribute operator.
-
#values ⇒ Object
readonly
Returns the value of attribute values.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(hash) ⇒ Base
constructor
A new instance of Base.
- #to_s(negative = false) ⇒ Object
- #valid? ⇒ Boolean
- #valid_argument_of_type?(argument, type) ⇒ Boolean
- #valid_arguments?(values) ⇒ Boolean
- #valid_date_argument?(string) ⇒ Boolean
- #valid_number_argument?(number) ⇒ Boolean
- #valid_operator?(operator) ⇒ Boolean
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
#operator ⇒ Object (readonly)
Returns the value of attribute operator.
15 16 17 |
# File 'lib/set_builder/modifier/base.rb', line 15 def operator @operator end |
#values ⇒ Object (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_hash ⇒ Object
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_json ⇒ Object
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
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
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
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
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
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
25 26 27 |
# File 'lib/set_builder/modifier/base.rb', line 25 def valid_operator?(operator) !operator.nil? && self.class.operators.key?(operator) end |