Module: MercadoPublicoCl::Resources::Base
- Defined in:
- lib/mercado_publico_cl/resources/base.rb
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- ISO_DATE_REGEX =
/\A(\d{4})-(\d{2})-(\d{2})/- DMY_DATE_REGEX =
/\A(\d{2})-(\d{2})-(\d{4})\z/
Class Method Summary collapse
- .build_date(year, month, day) ⇒ Object
- .parse_date(value) ⇒ Object
- .slow_parse_date(str) ⇒ Object
- .to_bool(value, true_codes: [1], false_codes: [0]) ⇒ Object
- .to_float(value) ⇒ Object
- .to_int(value) ⇒ Object
Class Method Details
.build_date(year, month, day) ⇒ Object
69 70 71 72 73 |
# File 'lib/mercado_publico_cl/resources/base.rb', line 69 def build_date(year, month, day) Date.new(year.to_i, month.to_i, day.to_i) rescue ArgumentError nil end |
.parse_date(value) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/mercado_publico_cl/resources/base.rb', line 49 def parse_date(value) return nil if value.nil? return value if value.is_a?(Date) && !value.is_a?(DateTime) # Solo duck-typing para objetos tipo Time (TimeWithZone, etc.). # Nunca para String: ActiveSupport le agrega #to_date y lanza # Date::Error con strings malformados. return value.to_date if !value.is_a?(String) && value.respond_to?(:to_date) str = value.to_s.strip return nil if str.empty? if (m = ISO_DATE_REGEX.match(str)) build_date(m[1], m[2], m[3]) elsif (m = DMY_DATE_REGEX.match(str)) build_date(m[3], m[2], m[1]) else slow_parse_date(str) end end |
.slow_parse_date(str) ⇒ Object
75 76 77 78 79 |
# File 'lib/mercado_publico_cl/resources/base.rb', line 75 def slow_parse_date(str) Date.parse(str) rescue ArgumentError, TypeError nil end |
.to_bool(value, true_codes: [1], false_codes: [0]) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/mercado_publico_cl/resources/base.rb', line 81 def to_bool(value, true_codes: [1], false_codes: [0]) return nil if value.nil? str = value.to_s.strip return nil if str.empty? return true if str.casecmp("true").zero? return false if str.casecmp("false").zero? n = value.is_a?(Numeric) ? value.to_i : Integer(str, 10, exception: false) return true if true_codes.include?(n) return false if false_codes.include?(n) nil end |
.to_float(value) ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/mercado_publico_cl/resources/base.rb', line 109 def to_float(value) return value if value.is_a?(Float) return value.to_f if value.is_a?(Integer) return nil if value.nil? str = value.to_s.strip return nil if str.empty? Float(str) rescue ArgumentError nil end |
.to_int(value) ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/mercado_publico_cl/resources/base.rb', line 96 def to_int(value) return value if value.is_a?(Integer) return value.to_i if value.is_a?(Float) return nil if value.nil? str = value.to_s.strip return nil if str.empty? Integer(str, 10) rescue ArgumentError nil end |