Class: Sinatra::Browse::ParameterType
- Inherits:
-
Object
- Object
- Sinatra::Browse::ParameterType
- Defined in:
- lib/sinatra/browse/parameter_type.rb
Instance Attribute Summary collapse
-
#default ⇒ Object
readonly
Returns the value of attribute default.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#validators ⇒ Object
readonly
Returns the value of attribute validators.
Class Method Summary collapse
Instance Method Summary collapse
- #build_error_hash(reason, value) ⇒ Object
- #coerce(value) ⇒ Object
-
#initialize(name, map) ⇒ ParameterType
constructor
A new instance of ParameterType.
- #required? ⇒ Boolean
- #to_hash(options = {}) ⇒ Object
- #transform(value) ⇒ Object
- #type ⇒ Object
- #validate(params) ⇒ Object
Constructor Details
#initialize(name, map) ⇒ ParameterType
Returns a new instance of ParameterType.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/sinatra/browse/parameter_type.rb', line 13 def initialize(name, map) @name = name @default = map.delete(:default) @transform = map.delete(:transform) @transform = @transform.to_proc if @transform @required = !! map[:required] @on_error = map.delete(:on_error) @validators = [] map.each do |key, value| if val_blk = @@validator_declarations[key] @validators << Validator.new( name: key, criteria: map[key], validation_blk: val_blk ) end end end |
Instance Attribute Details
#default ⇒ Object (readonly)
Returns the value of attribute default.
10 11 12 |
# File 'lib/sinatra/browse/parameter_type.rb', line 10 def default @default end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
9 10 11 |
# File 'lib/sinatra/browse/parameter_type.rb', line 9 def name @name end |
#validators ⇒ Object (readonly)
Returns the value of attribute validators.
11 12 13 |
# File 'lib/sinatra/browse/parameter_type.rb', line 11 def validators @validators end |
Class Method Details
.coerce(&blk) ⇒ Object
DSL
98 99 100 |
# File 'lib/sinatra/browse/parameter_type.rb', line 98 def self.coerce(&blk) define_method(:coerce) { |value| blk.call(value) } end |
.validator(name, &blk) ⇒ Object
102 103 104 105 106 |
# File 'lib/sinatra/browse/parameter_type.rb', line 102 def self.validator(name, &blk) @@validator_declarations ||= {} @@validator_declarations[name] = blk end |
Instance Method Details
#build_error_hash(reason, value) ⇒ Object
60 61 62 63 64 65 66 67 |
# File 'lib/sinatra/browse/parameter_type.rb', line 60 def build_error_hash(reason, value) { reason: reason, parameter: self.name, value: value, on_error: @on_error } end |
#coerce(value) ⇒ Object
56 57 58 |
# File 'lib/sinatra/browse/parameter_type.rb', line 56 def coerce(value) raise NotImplementedError end |
#required? ⇒ Boolean
40 41 42 |
# File 'lib/sinatra/browse/parameter_type.rb', line 40 def required? @required end |
#to_hash(options = {}) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/sinatra/browse/parameter_type.rb', line 74 def to_hash( = {}) h = { name: @name, type: type, required: required?, } if @default h[:default] = if @default.is_a?(Proc) && [:noprocs] "dynamically generated" else @default end end @validators.each { |v| h[v.name.to_sym] = v.criteria } h end |
#transform(value) ⇒ Object
52 53 54 |
# File 'lib/sinatra/browse/parameter_type.rb', line 52 def transform(value) @transform ? @transform.call(value) : value end |
#type ⇒ Object
69 70 71 72 |
# File 'lib/sinatra/browse/parameter_type.rb', line 69 def type type_string = self.class.to_s.split("::").last type_string[0, type_string.size - 4].to_sym end |
#validate(params) ⇒ Object
44 45 46 47 48 49 50 |
# File 'lib/sinatra/browse/parameter_type.rb', line 44 def validate(params) @validators.each do |v| return false, build_error_hash(v.name, v.value) unless v.validate(self.name, params) end true end |