Class: SerialPreference::PreferenceDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/serial_preference/preference_definition.rb

Constant Summary collapse

SUPPORTED_TYPES =
[:string,:integer,:decimal,:float,:boolean]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, *args) ⇒ PreferenceDefinition

Returns a new instance of PreferenceDefinition.



8
9
10
11
12
13
14
15
16
17
# File 'lib/serial_preference/preference_definition.rb', line 8

def initialize(name,*args)
  opts = args.extract_options!
  self.name = name.to_s
  opts.assert_valid_keys(:data_type,:default,:required,:field_type)
  self.data_type = @type = opts[:data_type] || :string
  @column = ActiveRecord::ConnectionAdapters::Column.new(name.to_s, opts[:default], column_type(@type))
  self.default = opts[:default]
  self.required = !!opts[:required]
  self.field_type = opts[:field_type]
end

Instance Attribute Details

#data_typeObject

Returns the value of attribute data_type.



6
7
8
# File 'lib/serial_preference/preference_definition.rb', line 6

def data_type
  @data_type
end

#defaultObject

Returns the value of attribute default.



6
7
8
# File 'lib/serial_preference/preference_definition.rb', line 6

def default
  @default
end

#field_typeObject

Returns the value of attribute field_type.



6
7
8
# File 'lib/serial_preference/preference_definition.rb', line 6

def field_type
  @field_type
end

#nameObject

Returns the value of attribute name.



6
7
8
# File 'lib/serial_preference/preference_definition.rb', line 6

def name
  @name
end

#requiredObject

Returns the value of attribute required.



6
7
8
# File 'lib/serial_preference/preference_definition.rb', line 6

def required
  @required
end

Instance Method Details

#boolean?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/serial_preference/preference_definition.rb', line 35

def boolean?
  @column.type == :boolean
end

#column_type(type) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/serial_preference/preference_definition.rb', line 82

def column_type(type)
  if rails_42?
    case type
    when :boolean
      ActiveRecord::Type::Boolean.new
    when :integer
      ActiveRecord::Type::Integer.new
    when :float
      ActiveRecord::Type::Float.new
    when :decimal
      ActiveRecord::Type::Decimal.new
    else
      ActiveRecord::Type::String.new
    end
  else
    type.to_s
  end
end

#default_valueObject



23
24
25
# File 'lib/serial_preference/preference_definition.rb', line 23

def default_value
  @column.default
end

#numerical?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/serial_preference/preference_definition.rb', line 31

def numerical?
  @column.number?
end

#query(value) ⇒ Object



48
49
50
51
52
53
54
55
56
# File 'lib/serial_preference/preference_definition.rb', line 48

def query(value)
  if !(value = type_cast(value))
    false
  elsif numerical?
    !value.zero?
  else
    !value.blank?
  end
end

#rails_42?Boolean

Returns:

  • (Boolean)


101
102
103
# File 'lib/serial_preference/preference_definition.rb', line 101

def rails_42?
  ActiveRecord::VERSION::MAJOR >= 4 && ActiveRecord::VERSION::MINOR == 2
end

#required?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/serial_preference/preference_definition.rb', line 27

def required?
  required
end

#type_cast(value) ⇒ Object



39
40
41
42
# File 'lib/serial_preference/preference_definition.rb', line 39

def type_cast(value)
  v = @column.type_cast(value)
  v.nil? ? default_value : v
end

#value(v) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/serial_preference/preference_definition.rb', line 58

def value(v)
  v = v.nil? ? default : v
  if !v.nil?
    case data_type
    when :string, :password
      v.to_s
    when  :integer
      v.respond_to?(:to_i) ? v.to_i : nil
    when :float, :real
      v.respond_to?(:to_f) ? v.to_f : nil
    when :boolean
      return false if v == 0
      return false if v == ""
      return false if v == nil
      return false if v.to_s.downcase == "false"
      return false if v == "0"
      return false if v.to_s.downcase == "no"
      !!v
    else
      nil
    end
  end
end