Class: HaveAPI::Parameters::Typed
- Inherits:
-
Object
- Object
- HaveAPI::Parameters::Typed
- Defined in:
- lib/haveapi/parameters/typed.rb
Constant Summary collapse
- ATTRIBUTES =
%i[label desc type db_name default fill clean protected load_validators].freeze
Instance Attribute Summary collapse
-
#default ⇒ Object
readonly
Returns the value of attribute default.
-
#desc ⇒ Object
readonly
Returns the value of attribute desc.
-
#label ⇒ Object
readonly
Returns the value of attribute label.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#type ⇒ Object
readonly
Returns the value of attribute type.
Instance Method Summary collapse
- #add_validator(k, v) ⇒ Object
- #clean(raw) ⇒ Object
- #db_name ⇒ Object
- #describe(context) ⇒ Object
- #fill? ⇒ Boolean
- #format_output(v) ⇒ Object
-
#initialize(name, args = {}) ⇒ Typed
constructor
A new instance of Typed.
- #load_validators? ⇒ Boolean
- #optional? ⇒ Boolean
- #patch(attrs) ⇒ Object
- #required? ⇒ Boolean
- #validate(v, params) ⇒ Object
Constructor Details
#initialize(name, args = {}) ⇒ Typed
Returns a new instance of Typed.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/haveapi/parameters/typed.rb', line 9 def initialize(name, args = {}) # The hash values are deleted and it shouldn't affect the received hash myargs = args.clone @name = name @label = myargs.delete(:label) || name.to_s.capitalize @layout = :custom (ATTRIBUTES - %i[label]).each do |attr| instance_variable_set("@#{attr}", myargs.delete(attr)) end @type ||= String @validators = HaveAPI::ValidatorChain.new(myargs) unless myargs.empty? raise "unused arguments #{myargs}" unless myargs.empty? end |
Instance Attribute Details
#default ⇒ Object (readonly)
Returns the value of attribute default.
7 8 9 |
# File 'lib/haveapi/parameters/typed.rb', line 7 def default @default end |
#desc ⇒ Object (readonly)
Returns the value of attribute desc.
7 8 9 |
# File 'lib/haveapi/parameters/typed.rb', line 7 def desc @desc end |
#label ⇒ Object (readonly)
Returns the value of attribute label.
7 8 9 |
# File 'lib/haveapi/parameters/typed.rb', line 7 def label @label end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
7 8 9 |
# File 'lib/haveapi/parameters/typed.rb', line 7 def name @name end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
7 8 9 |
# File 'lib/haveapi/parameters/typed.rb', line 7 def type @type end |
Instance Method Details
#add_validator(k, v) ⇒ Object
59 60 61 62 |
# File 'lib/haveapi/parameters/typed.rb', line 59 def add_validator(k, v) @validators ||= HaveAPI::ValidatorChain.new({}) @validators.add_or_replace(k, v) end |
#clean(raw) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/haveapi/parameters/typed.rb', line 75 def clean(raw) return instance_exec(raw, &@clean) if @clean if raw.nil? @default elsif @type.nil? nil elsif @type == Integer raw.to_i elsif @type == Float raw.to_f elsif @type == Boolean Boolean.to_b(raw) elsif @type == ::Datetime begin DateTime.iso8601(raw).to_time rescue ArgumentError raise HaveAPI::ValidationError, "not in ISO 8601 format '#{raw}'" end else raw end end |
#db_name ⇒ Object
27 28 29 |
# File 'lib/haveapi/parameters/typed.rb', line 27 def db_name @db_name || @name end |
#describe(context) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/haveapi/parameters/typed.rb', line 47 def describe(context) { required: required?, label: @label, description: @desc, type: @type ? @type.to_s : String.to_s, validators: @validators ? @validators.describe : {}, default: @default, protected: @protected || false } end |
#format_output(v) ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/haveapi/parameters/typed.rb', line 109 def format_output(v) if v.nil? nil elsif @type == ::Datetime && v.is_a?(Time) v.iso8601 elsif @type == Boolean v ? true : false elsif @type == Integer v.to_i elsif @type == Float v.to_f elsif @type == String v.to_s else v end end |
#load_validators? ⇒ Boolean
43 44 45 |
# File 'lib/haveapi/parameters/typed.rb', line 43 def load_validators? @load_validators.nil? || @load_validators end |
#optional? ⇒ Boolean
35 36 37 |
# File 'lib/haveapi/parameters/typed.rb', line 35 def optional? !@required end |
#patch(attrs) ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/haveapi/parameters/typed.rb', line 64 def patch(attrs) attrs.each do |k, v| if ATTRIBUTES.include?(k) instance_variable_set("@#{k}", v) else add_validator(k, v) end end end |
#required? ⇒ Boolean
31 32 33 |
# File 'lib/haveapi/parameters/typed.rb', line 31 def required? @validators ? @validators.required? : false end |
#validate(v, params) ⇒ Object
105 106 107 |
# File 'lib/haveapi/parameters/typed.rb', line 105 def validate(v, params) @validators ? @validators.validate(v, params) : true end |