Class: Sinatra::Browse::ParameterType

Inherits:
Object
  • Object
show all
Defined in:
lib/sinatra/browse/parameter_type.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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

#defaultObject (readonly)

Returns the value of attribute default.



10
11
12
# File 'lib/sinatra/browse/parameter_type.rb', line 10

def default
  @default
end

#nameObject (readonly)

Returns the value of attribute name.



9
10
11
# File 'lib/sinatra/browse/parameter_type.rb', line 9

def name
  @name
end

#validatorsObject (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

Raises:

  • (NotImplementedError)


56
57
58
# File 'lib/sinatra/browse/parameter_type.rb', line 56

def coerce(value)
  raise NotImplementedError
end

#required?Boolean

Returns:

  • (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(options = {})
  h = {
    name: @name,
    type: type,
    required: required?,
  }

  if @default
    h[:default] = if @default.is_a?(Proc) && options[: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

#typeObject



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