Module: SafeType

Extended by:
SafeType
Included in:
SafeType
Defined in:
lib/safe_type.rb

Defined Under Namespace

Modules: Boolean, Default, HashHelper, Required Classes: CoercionError, Converter, Rule

Instance Method Summary collapse

Instance Method Details

#coerce(input, params) ⇒ Object

Raises:

  • (ArgumentError)


198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
# File 'lib/safe_type.rb', line 198

def coerce(input, params)
  return params.apply(input) if params.class == Rule
  if params.class == ::Hash
    result = {}
    params.each do |key, val|
      result[key] = coerce(input[key], val)
    end
    return result
  end
  if params.class == ::Array
    return [] if input.nil?
    result = Array.new(input.length)
    i = 0
    while i < input.length
      result[i] = coerce(input[i], params[i % params.length])
      i += 1
    end
    return result
  end
  raise ArgumentError, "invalid coercion rule"
end

#coerce!(input, params) ⇒ Object

Raises:

  • (ArgumentError)


220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
# File 'lib/safe_type.rb', line 220

def coerce!(input, params)
  if params.class == ::Hash
    params.each do |key, val|
      if val.class == ::Hash
        coerce!(input[key], val)
      else
        input[key] = coerce(input[key], val)
      end
    end
    return nil
  end
  if params.class == ::Array
    i = 0
    while i < input.length
      input[i] = coerce(input[i], params[i % params.length])
      i += 1
    end
    return nil
  end
  raise ArgumentError, "invalid coercion rule"
end