Class: DataKit::Dataset::Field

Inherits:
Object
  • Object
show all
Defined in:
lib/data_kit/dataset/field.rb

Constant Summary collapse

Types =
[:string, :integer, :number, :datetime, :boolean, :null].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, options = {}) ⇒ Field

Returns a new instance of Field.



11
12
13
14
15
# File 'lib/data_kit/dataset/field.rb', line 11

def initialize(name, options = {})
  @name = name
  @key = options[:key] || false
  @type = (options[:type] || :string).to_sym
end

Instance Attribute Details

#keyObject

Returns the value of attribute key.



8
9
10
# File 'lib/data_kit/dataset/field.rb', line 8

def key
  @key
end

#nameObject

Returns the value of attribute name.



7
8
9
# File 'lib/data_kit/dataset/field.rb', line 7

def name
  @name
end

#typeObject

Returns the value of attribute type.



9
10
11
# File 'lib/data_kit/dataset/field.rb', line 9

def type
  @type
end

Class Method Details

.convert(value, type) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/data_kit/dataset/field.rb', line 58

def convert(value, type)
  return nil if type == :null || value.nil?
  reformatted = Converters::Number.reformat(value)

  case type
  when :integer  then Converters::Integer.convert(reformatted)
  when :number   then Converters::Number.convert(reformatted)
  when :boolean  then Converters::Boolean.convert(value)
  when :datetime then Converters::DateTime.convert(value)
  else value.to_s
  end
end

.is_type?(value, type) ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
51
52
53
54
55
56
# File 'lib/data_kit/dataset/field.rb', line 48

def is_type?(value, type)
  case type
  when :integer  then Converters::Integer.match?(Converters::Number.reformat(value))
  when :number   then Converters::Number.match?(Converters::Number.reformat(value))
  when :boolean  then Converters::Boolean.match?(value)
  when :datetime then Converters::DateTime.match?(value)
  when :string   then false
  end
end

.type?(value, hint_type = nil) ⇒ Boolean

Returns:

  • (Boolean)


26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/data_kit/dataset/field.rb', line 26

def type?(value, hint_type = nil)
  return :null if value.nil?

  if hint_type && is_type?(value, hint_type)
    return hint_type
  end

  reformatted = Converters::Number.reformat(value)

  if Converters::Integer.match?(reformatted)
    :integer
  elsif Converters::Number.match?(reformatted)
    :number
  elsif Converters::Boolean.match?(value)
    :boolean
  elsif Converters::DateTime.match?(value)
    :datetime
  else
    :string
  end
end

Instance Method Details

#key?Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/data_kit/dataset/field.rb', line 17

def key?
  key == true
end

#to_hashObject



21
22
23
# File 'lib/data_kit/dataset/field.rb', line 21

def to_hash
  { 'name' => name, 'type' => type.to_s, 'key' => key?}
end