Class: HaveAPI::Parameters::Param
- Inherits:
-
Object
- Object
- HaveAPI::Parameters::Param
- Defined in:
- lib/haveapi/params/param.rb
Constant Summary collapse
- ATTRIBUTES =
i(label desc type db_name default fill clean)
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 = {}) ⇒ Param
constructor
A new instance of Param.
- #optional? ⇒ Boolean
- #patch(attrs) ⇒ Object
- #required? ⇒ Boolean
- #validate(v, params) ⇒ Object
Constructor Details
#initialize(name, args = {}) ⇒ Param
Returns a new instance of Param.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/haveapi/params/param.rb', line 7 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? fail "unused arguments #{myargs}" unless myargs.empty? end |
Instance Attribute Details
#default ⇒ Object (readonly)
Returns the value of attribute default.
5 6 7 |
# File 'lib/haveapi/params/param.rb', line 5 def default @default end |
#desc ⇒ Object (readonly)
Returns the value of attribute desc.
5 6 7 |
# File 'lib/haveapi/params/param.rb', line 5 def desc @desc end |
#label ⇒ Object (readonly)
Returns the value of attribute label.
5 6 7 |
# File 'lib/haveapi/params/param.rb', line 5 def label @label end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
5 6 7 |
# File 'lib/haveapi/params/param.rb', line 5 def name @name end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
5 6 7 |
# File 'lib/haveapi/params/param.rb', line 5 def type @type end |
Instance Method Details
#add_validator(k, v) ⇒ Object
52 53 54 55 |
# File 'lib/haveapi/params/param.rb', line 52 def add_validator(k, v) @validators ||= HaveAPI::ValidatorChain.new({}) @validators.add_or_replace(k, v) end |
#clean(raw) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/haveapi/params/param.rb', line 68 def clean(raw) return instance_exec(raw, &@clean) if @clean val = if raw.nil? @default elsif @type.nil? nil elsif @type == Integer raw.to_i elsif @type == Boolean Boolean.to_b(raw) elsif @type == ::Datetime begin Time.iso8601(raw) rescue ArgumentError raise HaveAPI::ValidationError.new("not in ISO 8601 format '#{raw}'") end else raw end val end |
#db_name ⇒ Object
25 26 27 |
# File 'lib/haveapi/params/param.rb', line 25 def db_name @db_name || @name end |
#describe(context) ⇒ Object
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/haveapi/params/param.rb', line 41 def describe(context) { required: required?, label: @label, description: @desc, type: @type ? @type.to_s : String.to_s, validators: @validators ? @validators.describe : {}, default: @default } end |
#format_output(v) ⇒ Object
102 103 104 105 106 107 108 109 |
# File 'lib/haveapi/params/param.rb', line 102 def format_output(v) if @type == ::Datetime && v.is_a?(Time) v.iso8601 else v end end |
#optional? ⇒ Boolean
33 34 35 |
# File 'lib/haveapi/params/param.rb', line 33 def optional? !@required end |
#patch(attrs) ⇒ Object
57 58 59 60 61 62 63 64 65 66 |
# File 'lib/haveapi/params/param.rb', line 57 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
29 30 31 |
# File 'lib/haveapi/params/param.rb', line 29 def required? @validators ? @validators.required? : false end |
#validate(v, params) ⇒ Object
98 99 100 |
# File 'lib/haveapi/params/param.rb', line 98 def validate(v, params) @validators ? @validators.validate(v, params) : true end |