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 nullable].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
- #nullable? ⇒ Boolean
- #optional? ⇒ Boolean
- #patch(attrs) ⇒ Object
- #required? ⇒ Boolean
- #validate(v, params) ⇒ Object
Constructor Details
#initialize(name, args = {}) ⇒ Typed
Returns a new instance of Typed.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/haveapi/parameters/typed.rb', line 10 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.
8 9 10 |
# File 'lib/haveapi/parameters/typed.rb', line 8 def default @default end |
#desc ⇒ Object (readonly)
Returns the value of attribute desc.
8 9 10 |
# File 'lib/haveapi/parameters/typed.rb', line 8 def desc @desc end |
#label ⇒ Object (readonly)
Returns the value of attribute label.
8 9 10 |
# File 'lib/haveapi/parameters/typed.rb', line 8 def label @label end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
8 9 10 |
# File 'lib/haveapi/parameters/typed.rb', line 8 def name @name end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
8 9 10 |
# File 'lib/haveapi/parameters/typed.rb', line 8 def type @type end |
Instance Method Details
#add_validator(k, v) ⇒ Object
65 66 67 68 |
# File 'lib/haveapi/parameters/typed.rb', line 65 def add_validator(k, v) @validators ||= HaveAPI::ValidatorChain.new({}) @validators.add_or_replace(k, v) end |
#clean(raw) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/haveapi/parameters/typed.rb', line 81 def clean(raw) return validate_cleaned_value(instance_exec(raw, &@clean)) if @clean if raw.nil? return nil if nullable? raise HaveAPI::ValidationError, 'cannot be null' end if raw.is_a?(String) stripped = strip_string(raw) return nil if stripped.empty? && nullable? end if @type.nil? nil elsif @type == Integer coerce_integer(raw) elsif @type == Float coerce_float(raw) elsif @type == Boolean coerce_boolean(raw) elsif @type == ::Datetime coerce_datetime(raw) elsif @type == String || @type == Text coerce_string(raw) else raw end end |
#db_name ⇒ Object
28 29 30 |
# File 'lib/haveapi/parameters/typed.rb', line 28 def db_name @db_name || @name end |
#describe(context) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/haveapi/parameters/typed.rb', line 52 def describe(context) { required: required?, nullable: nullable?, 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
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/haveapi/parameters/typed.rb', line 122 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 || @type == Text v.to_s else v end end |
#load_validators? ⇒ Boolean
48 49 50 |
# File 'lib/haveapi/parameters/typed.rb', line 48 def load_validators? @load_validators.nil? || @load_validators end |
#nullable? ⇒ Boolean
40 41 42 |
# File 'lib/haveapi/parameters/typed.rb', line 40 def nullable? @nullable == true && optional? end |
#optional? ⇒ Boolean
36 37 38 |
# File 'lib/haveapi/parameters/typed.rb', line 36 def optional? !required? end |
#patch(attrs) ⇒ Object
70 71 72 73 74 75 76 77 78 79 |
# File 'lib/haveapi/parameters/typed.rb', line 70 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
32 33 34 |
# File 'lib/haveapi/parameters/typed.rb', line 32 def required? @validators ? @validators.required? : false end |
#validate(v, params) ⇒ Object
118 119 120 |
# File 'lib/haveapi/parameters/typed.rb', line 118 def validate(v, params) @validators ? @validators.validate(v, params) : true end |