Class: Caoutsearch::Search::Value
- Inherits:
-
Object
- Object
- Caoutsearch::Search::Value
- Defined in:
- lib/caoutsearch/search/value.rb
Constant Summary collapse
- INTEGER_TYPE_LIMITS =
{ "long" => bytes_size_to_integer_range(64), "integer" => bytes_size_to_integer_range(32), "short" => bytes_size_to_integer_range(16), "byte" => bytes_size_to_integer_range(8) }.freeze
Instance Attribute Summary collapse
-
#null_values ⇒ Object
readonly
Returns the value of attribute null_values.
-
#original_value ⇒ Object
readonly
Returns the value of attribute original_value.
-
#overflow_strategy ⇒ Object
readonly
Returns the value of attribute overflow_strategy.
-
#transform_proc ⇒ Object
readonly
Returns the value of attribute transform_proc.
-
#type ⇒ Object
readonly
Returns the value of attribute type.
Class Method Summary collapse
Instance Method Summary collapse
- #cast_value(value) ⇒ Object
- #check_value_overflow(value) ⇒ Object
-
#initialize(original_value, type, null_values: nil, transform: nil, sanitize: false) ⇒ Value
constructor
A new instance of Value.
- #reduce_value(value) ⇒ Object
- #replace_null_values(value) ⇒ Object
- #sanitize_value(value) ⇒ Object
- #sanitize_value? ⇒ Boolean
- #strip_value(value) ⇒ Object
- #transform_value(value) ⇒ Object
- #value ⇒ Object
Constructor Details
#initialize(original_value, type, null_values: nil, transform: nil, sanitize: false) ⇒ Value
Returns a new instance of Value.
8 9 10 11 12 13 14 15 |
# File 'lib/caoutsearch/search/value.rb', line 8 def initialize(original_value, type, null_values: nil, transform: nil, sanitize: false) @original_value = original_value @type = type @null_values = Array.wrap(null_values) @sanitize_value = sanitize @transform_proc = transform @transform_proc = transform.to_proc if transform.is_a?(Symbol) end |
Instance Attribute Details
#null_values ⇒ Object (readonly)
Returns the value of attribute null_values.
6 7 8 |
# File 'lib/caoutsearch/search/value.rb', line 6 def null_values @null_values end |
#original_value ⇒ Object (readonly)
Returns the value of attribute original_value.
6 7 8 |
# File 'lib/caoutsearch/search/value.rb', line 6 def original_value @original_value end |
#overflow_strategy ⇒ Object (readonly)
Returns the value of attribute overflow_strategy.
6 7 8 |
# File 'lib/caoutsearch/search/value.rb', line 6 def overflow_strategy @overflow_strategy end |
#transform_proc ⇒ Object (readonly)
Returns the value of attribute transform_proc.
6 7 8 |
# File 'lib/caoutsearch/search/value.rb', line 6 def transform_proc @transform_proc end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
6 7 8 |
# File 'lib/caoutsearch/search/value.rb', line 6 def type @type end |
Class Method Details
.bytes_size_to_integer_range(bytes_size) ⇒ Object
60 61 62 63 |
# File 'lib/caoutsearch/search/value.rb', line 60 def self.bytes_size_to_integer_range(bytes_size) limit = 2**(bytes_size - 1) -limit..(limit - 1) end |
Instance Method Details
#cast_value(value) ⇒ Object
31 32 33 |
# File 'lib/caoutsearch/search/value.rb', line 31 def cast_value(value) Caoutsearch::Search::TypeCast.cast(type, value) end |
#check_value_overflow(value) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/caoutsearch/search/value.rb', line 43 def check_value_overflow(value) if value.is_a?(Array) value.map { |v| check_value_overflow(v) } elsif value.nil? value else range = INTEGER_TYPE_LIMITS[type.to_s] if range raise Caoutsearch::Search::ValueOverflow.new(:lower, value, range.first) if value < range.first raise Caoutsearch::Search::ValueOverflow.new(:upper, value, range.last) if range && value > range.last end value end end |
#reduce_value(value) ⇒ Object
101 102 103 104 105 106 107 108 |
# File 'lib/caoutsearch/search/value.rb', line 101 def reduce_value(value) if value.is_a?(Array) && value.size == 1 value[0] else value end end |
#replace_null_values(value) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/caoutsearch/search/value.rb', line 89 def replace_null_values(value) if value.is_a?(Array) value.map { |v| replace_null_values(v) } elsif null_values.include?(value) nil else value end end |
#sanitize_value(value) ⇒ Object
35 36 37 |
# File 'lib/caoutsearch/search/value.rb', line 35 def sanitize_value(value) Caoutsearch::Search::Sanitizer.sanitize(value) end |
#sanitize_value? ⇒ Boolean
39 40 41 |
# File 'lib/caoutsearch/search/value.rb', line 39 def sanitize_value? !!@sanitize_value end |
#strip_value(value) ⇒ Object
84 85 86 87 |
# File 'lib/caoutsearch/search/value.rb', line 84 def strip_value(value) value = value.strip if value.is_a?(String) value end |
#transform_value(value) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/caoutsearch/search/value.rb', line 72 def transform_value(value) if value.is_a?(Array) value.flat_map { |v| transform_value(v) } elsif transform_proc.respond_to?(:call) transform_proc.call(value) else value end end |
#value ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/caoutsearch/search/value.rb', line 17 def value unless defined?(@value) @value = transform_value(original_value) @value = cast_value(@value) @value = check_value_overflow(@value) @value = strip_value(@value) @value = sanitize_value(@value) if sanitize_value? @value = replace_null_values(@value) @value = reduce_value(@value) end @value end |