class Mkxms::Mssql::PropertyHandler

Public Class Methods

new(describable, attrs) click to toggle source
# File lib/mkxms/mssql/property_handler.rb, line 67
def initialize(describable, attrs)
  @describable = describable
  @name = attrs['name']
  @value_type = attrs['type'].downcase
end

Public Instance Methods

handle_text(property_value, node) click to toggle source
# File lib/mkxms/mssql/property_handler.rb, line 73
def handle_text(property_value, node)
  stored_value = property_value.dup
  
  stored_value = Base64.decode64(stored_value) if @value_type.include? 'binary'
  
  stored_value.define_singleton_method(
    :to_sql_literal,
    &(case @value_type
    when 'char', 'varchar', 'uniqueidentifier', 'smalldatetime', 'datetime'
      ->() {"'#{self}'"}
    when 'nchar', 'nvarchar'
      ->() {"N'#{self}'"}
    when 'binary', 'varbinary'
      ->() {"0x" + self.bytes.map {|b| "%02x" % b}.join}
    else
      ->() {self.to_s}
    end)
  )
  
  @describable.extended_properties[@name] = stored_value
end