Class: Explicit::Type::DateTimeISO8601Range
- Inherits:
-
Explicit::Type
- Object
- Explicit::Type
- Explicit::Type::DateTimeISO8601Range
- Defined in:
- lib/explicit/type/date_time_iso8601_range.rb
Constant Summary collapse
- Parse =
->(str) do Time.iso8601(str) rescue ArgumentError nil end
- Eval =
->(value) do value.respond_to?(:call) ? value.call : value end
Instance Attribute Summary collapse
-
#max_date_time ⇒ Object
readonly
Returns the value of attribute max_date_time.
-
#max_range ⇒ Object
readonly
Returns the value of attribute max_range.
-
#min_date_time ⇒ Object
readonly
Returns the value of attribute min_date_time.
-
#min_range ⇒ Object
readonly
Returns the value of attribute min_range.
Attributes inherited from Explicit::Type
#auth_type, #default, #description, #nilable, #param_location
Instance Method Summary collapse
-
#initialize(min_range: nil, max_range: nil, min_date_time: nil, max_date_time: nil) ⇒ DateTimeISO8601Range
constructor
A new instance of DateTimeISO8601Range.
- #json_schema(flavour) ⇒ Object
- #validate(value) ⇒ Object
Methods inherited from Explicit::Type
#auth_basic?, #auth_bearer?, build, #error_i18n, #mcp_schema, #merge_base_json_schema, #param_location_body?, #param_location_path?, #param_location_query?, #required?, #swagger_i18n, #swagger_schema
Constructor Details
#initialize(min_range: nil, max_range: nil, min_date_time: nil, max_date_time: nil) ⇒ DateTimeISO8601Range
Returns a new instance of DateTimeISO8601Range.
6 7 8 9 10 11 |
# File 'lib/explicit/type/date_time_iso8601_range.rb', line 6 def initialize(min_range: nil, max_range: nil, min_date_time: nil, max_date_time: nil) @min_range = min_range @max_range = max_range @min_date_time = min_date_time @max_date_time = max_date_time end |
Instance Attribute Details
#max_date_time ⇒ Object (readonly)
Returns the value of attribute max_date_time.
4 5 6 |
# File 'lib/explicit/type/date_time_iso8601_range.rb', line 4 def max_date_time @max_date_time end |
#max_range ⇒ Object (readonly)
Returns the value of attribute max_range.
4 5 6 |
# File 'lib/explicit/type/date_time_iso8601_range.rb', line 4 def max_range @max_range end |
#min_date_time ⇒ Object (readonly)
Returns the value of attribute min_date_time.
4 5 6 |
# File 'lib/explicit/type/date_time_iso8601_range.rb', line 4 def min_date_time @min_date_time end |
#min_range ⇒ Object (readonly)
Returns the value of attribute min_range.
4 5 6 |
# File 'lib/explicit/type/date_time_iso8601_range.rb', line 4 def min_range @min_range end |
Instance Method Details
#json_schema(flavour) ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/explicit/type/date_time_iso8601_range.rb', line 95 def json_schema(flavour) { type: "string", format: "date time range", description_topics: [ swagger_i18n("date_time_iso8601_range"), min_range&.then { swagger_i18n("date_time_iso8601_range_min_range", min_range: _1.inspect) }, max_range&.then { swagger_i18n("date_time_iso8601_range_max_range", max_range: _1.inspect) }, ] } end |
#validate(value) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/explicit/type/date_time_iso8601_range.rb', line 23 def validate(value) return error_i18n("string") if !value.is_a?(::String) parts = value.split("..") if parts.size != 2 return error_i18n("date_time_iso8601_range_format") end date_time_1, date_time_2 = parts.map(&Parse) if date_time_1.nil? || date_time_2.nil? return error_i18n("date_time_iso8601_range_format") end if date_time_1.after?(date_time_2) return error_i18n("date_time_iso8601_range_inverted") end if min_date_time min_date_time_value = Eval[min_date_time] if date_time_1 < min_date_time_value return error_i18n("date_time_iso8601_range_min_date_time", min_date_time: min_date_time_value) end end if max_date_time max_date_time_value = Eval[max_date_time] if date_time_2 > max_date_time_value return error_i18n("date_time_iso8601_range_max_date_time", max_date_time: max_date_time_value) end end if min_range min_range_value = Eval[min_range] diff_in_seconds = date_time_2 - date_time_1 if diff_in_seconds < min_range_value.in_seconds return error_i18n("date_time_iso8601_range_min_range", min_range: min_range_value.inspect) end end if max_range max_range_value = Eval[max_range] diff_in_seconds = date_time_2 - date_time_1 if diff_in_seconds > max_range_value.in_seconds return error_i18n("date_time_iso8601_range_max_range", max_range: max_range_value.inspect) end end [:ok, Range.new(date_time_1, date_time_2)] end |