Class: Explicit::Type::DateTimeISO8601

Inherits:
Explicit::Type show all
Defined in:
lib/explicit/type/date_time_iso8601.rb

Constant Summary collapse

Eval =
->(expr) { expr.respond_to?(:call) ? expr.call : expr }

Instance Attribute Summary collapse

Attributes inherited from Explicit::Type

#auth_type, #default, #description, #nilable, #param_location

Instance Method Summary collapse

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: nil, max: nil) ⇒ DateTimeISO8601

Returns a new instance of DateTimeISO8601.



10
11
12
13
# File 'lib/explicit/type/date_time_iso8601.rb', line 10

def initialize(min: nil, max: nil)
  @min = min
  @max = max
end

Instance Attribute Details

#maxObject (readonly)

Returns the value of attribute max.



6
7
8
# File 'lib/explicit/type/date_time_iso8601.rb', line 6

def max
  @max
end

#minObject (readonly)

Returns the value of attribute min.



6
7
8
# File 'lib/explicit/type/date_time_iso8601.rb', line 6

def min
  @min
end

Instance Method Details

#json_schema(flavour) ⇒ Object



55
56
57
58
59
60
61
62
63
# File 'lib/explicit/type/date_time_iso8601.rb', line 55

def json_schema(flavour)
  {
    type: "string",
    format: "date-time",
    description_topics: [
      swagger_i18n("date_time_iso8601")
    ]
  }
end

#validate(value) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/explicit/type/date_time_iso8601.rb', line 15

def validate(value)
  return error_i18n("date_time_iso8601") if !value.is_a?(::String)

  datetime = Time.iso8601(value)

  if min
    min_value = Eval[min]

    if datetime.before?(min_value)
      return error_i18n("date_time_iso8601_min", min: min_value)
    end
  end

  if max
    max_value = Eval[max]

    if datetime.after?(max_value)
      return error_i18n("date_time_iso8601_max", max: max_value)
    end
  end

  [:ok, datetime]
rescue ArgumentError
  error_i18n("date_time_iso8601")
end