Module: Jackcess::TypeConverter

Defined in:
lib/jackcess/type_converter.rb

Class Method Summary collapse

Class Method Details

.data_type_to_ruby_type(data_type) ⇒ Object

Map Jackcess DataType to Ruby type symbol



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/jackcess/type_converter.rb', line 98

def data_type_to_ruby_type(data_type)
  case data_type.to_s
  when "TEXT"
    :text
  when "MEMO"
    :memo
  when "BYTE"
    :byte
  when "INT"
    :int
  when "LONG"
    :long
  when "FLOAT"
    :float
  when "DOUBLE"
    :double
  when "MONEY"
    :currency
  when "SHORT_DATE_TIME"
    :date_time
  when "BOOLEAN"
    :boolean
  when "BINARY", "OLE"
    :binary
  when "GUID"
    :guid
  else
    :unknown
  end
end

.from_java(value) ⇒ Object

Convert Java types to Ruby types



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/jackcess/type_converter.rb', line 10

def from_java(value)
  return nil if value.nil?

  case value
  when Java::JavaLang::String
    value.to_s
  when Java::JavaLang::Integer, Java::JavaLang::Short, Java::JavaLang::Byte
    value.to_i
  when Java::JavaLang::Long
    value.to_i
  when Java::JavaLang::Float, Java::JavaLang::Double
    value.to_f
  when Java::JavaLang::Boolean
    value.boolean_value
  when Java::JavaUtil::Date
    Time.at(value.time / 1000.0)
  when Java::JavaMath::BigDecimal
    BigDecimal(value.to_s)
  when Java::byte[]
    String.from_java_bytes(value)
  else
    value
  end
end

.ruby_type_to_data_type(type_sym) ⇒ Object

Map Ruby type symbols to Jackcess DataType enums



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/jackcess/type_converter.rb', line 66

def ruby_type_to_data_type(type_sym)
  case type_sym
  when :text
    DataType::TEXT
  when :memo
    DataType::MEMO
  when :byte
    DataType::BYTE
  when :int
    DataType::INT
  when :long
    DataType::LONG
  when :float
    DataType::FLOAT
  when :double
    DataType::DOUBLE
  when :currency
    DataType::MONEY
  when :date_time
    DataType::SHORT_DATE_TIME
  when :boolean
    DataType::BOOLEAN
  when :binary
    DataType::BINARY
  when :guid
    DataType::GUID
  else
    raise InvalidTypeError, "Unknown type: #{type_sym}"
  end
end

.to_java(value) ⇒ Object

Convert Ruby types to Java types



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/jackcess/type_converter.rb', line 36

def to_java(value)
  return nil if value.nil?

  case value
  when String
    value.to_java
  when Integer
    # Use appropriate Java type based on value range
    if value >= -2_147_483_648 && value <= 2_147_483_647
      java.lang.Integer.new(value)
    else
      java.lang.Long.new(value)
    end
  when Float
    java.lang.Double.new(value)
  when TrueClass, FalseClass
    java.lang.Boolean.new(value)
  when Time
    java.util.Date.new((value.to_f * 1000).to_i)
  when Date
    # Convert Ruby Date to Time first, then to Java Date
    java.util.Date.new((value.to_time.to_f * 1000).to_i)
  when BigDecimal
    java.math.BigDecimal.new(value.to_s)
  else
    value
  end
end