Class: SQLite::Translator

Class SQLite::Translator |
In: | lib/sqlite/translator.rb
Parent: | Object

The Translator class encapsulates the logic and callbacks necessary for converting string data to a value of some specified type. Every Database instance may have a Translator instance, in order to assist in type translation (Database#type_translation).

Further, applications may define their own custom type translation logic by registering translator blocks with the corresponding database’s translator instance (Database#translator).

Methods

- add_translator
- new
- translate

Public Class methods
new()

Create a new Translator instance. It will be preinitialized with default translators for most SQL data types.

[ show source ]

        # File lib/sqlite/translator.rb, line 49
    49:     def initialize
    50:       @translators = Hash.new( proc { |type,value| value } )
    51:       register_default_translators
    52:     end

Public Instance methods
add_translator( type ) {|type, value| ...}

Add a new translator block, which will be invoked to process type translations to the given type. The type should be an SQL datatype, and may include parentheses (i.e., "VARCHAR(30)"). However, any parenthetical information is stripped off and discarded, so type translation decisions are made solely on the "base" type name.

The translator block itself should accept two parameters, "type" and "value". In this case, the "type" is the full type name (including parentheses), so the block itself may include logic for changing how a type is translated based on the additional data. The "value" parameter is the (string) data to convert.

The block should return the translated value.

[ show source ]

        # File lib/sqlite/translator.rb, line 67
    67:     def add_translator( type, &block ) # :yields: type, value
    68:       @translators[ type_name( type ) ] = block
    69:     end

translate( type, value )

Translate the given string value to a value of the given type. In the absense of an installed translator block for the given type, the value itself is always returned. Further, `nil` values are never translated, and are always passed straight through regardless of the type parameter.

[ show source ]

        # File lib/sqlite/translator.rb, line 75
    75:     def translate( type, value )
    76:       unless value.nil?
    77:         @translators[ type_name( type ) ].call( type, value )
    78:       end
    79:     end

[Validate]