lib/efo_nelfo/property.rb in efo_nelfo-1.5.3 vs lib/efo_nelfo/property.rb in efo_nelfo-1.5.4
- old
+ new
@@ -41,21 +41,11 @@
# (date) value = '20120101' # => Date.new(2012,1,1)
# (integer) value = '2' # => 2
# (string) value = 'foo' # => 'foo'
def value=(new_value)
return nil if readonly?
-
- @value = case
- when boolean?
- new_value.nil? || new_value == true || new_value == 'J' || new_value == 'j' || new_value == '' ? true : false
- when date?
- new_value.is_a?(Date) ? new_value : Date.parse(new_value) rescue nil
- when integer?
- new_value.nil? && !required? ? nil : new_value.to_i
- else
- new_value
- end
+ @value = send("sanitize_#{options[:type]}", new_value)
end
# returns formatted value suitable for csv output
def to_csv
value.to_csv
@@ -87,9 +77,37 @@
def integer?; type == :integer; end
def string?; type == :string; end
def method_missing(*args)
options.has_key?(args.first) ? options[args.first] : super
+ end
+
+ private
+
+ def sanitize_integer(value)
+ value.nil? && !required? ? nil : value.to_i
+ end
+
+ def sanitize_boolean(value)
+ value.nil? || value == true || value == 'J' || value == 'j' || value == '' ? true : false
+ end
+
+ def sanitize_date(value)
+ value.is_a?(Date) ? value : Date.parse(value) rescue nil
+ end
+
+ def sanitize_string(value)
+ return nil if value.nil?
+ return value unless value.is_a?(String)
+
+ string = value.to_s
+
+ if EfoNelfo.strict_mode? && (options[:limit] && string.length > options[:limit])
+ raise ArgumentError.new("Value exceeds limit")
+ else
+ string.slice(0, options[:limit])
+ end
+
end
end
end