Class: Mkxms::Mssql::PropertyHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/mkxms/mssql/property_handler.rb

Defined Under Namespace

Modules: ElementHandler

Instance Method Summary collapse

Constructor Details

#initialize(describable, attrs) ⇒ PropertyHandler

Returns a new instance of PropertyHandler.



67
68
69
70
71
# File 'lib/mkxms/mssql/property_handler.rb', line 67

def initialize(describable, attrs)
  @describable = describable
  @name = attrs['name']
  @value_type = attrs['type'].downcase
end

Instance Method Details

#handle_text(property_value, node) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# 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