Class: SimpleMaster::Master::Column

Inherits:
Object
  • Object
show all
Defined in:
lib/simple_master/master/column.rb,
lib/simple_master/master/column/id_column.rb,
lib/simple_master/master/column/enum_column.rb,
lib/simple_master/master/column/json_column.rb,
lib/simple_master/master/column/time_column.rb,
lib/simple_master/master/column/float_column.rb,
lib/simple_master/master/column/string_column.rb,
lib/simple_master/master/column/symbol_column.rb,
lib/simple_master/master/column/bitmask_column.rb,
lib/simple_master/master/column/boolean_column.rb,
lib/simple_master/master/column/integer_column.rb,
lib/simple_master/master/column/sti_type_column.rb,
lib/simple_master/master/column/polymorphic_type_column.rb

Defined Under Namespace

Classes: BitmaskColumn, BooleanColumn, EnumColumn, FloatColumn, IdColumn, IntegerColumn, JsonColumn, PolymorphicTypeColumn, StiTypeColumn, StringColumn, SymbolColumn, TimeColumn

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, options) ⇒ Column

Returns a new instance of Column.



37
38
39
40
41
# File 'lib/simple_master/master/column.rb', line 37

def initialize(name, options)
  @name = name
  @group_key = !!options[:group_key]
  @options = options
end

Instance Attribute Details

#group_keyObject

Returns the value of attribute group_key.



8
9
10
# File 'lib/simple_master/master/column.rb', line 8

def group_key
  @group_key
end

#nameObject (readonly)

Returns the value of attribute name.



6
7
8
# File 'lib/simple_master/master/column.rb', line 6

def name
  @name
end

#optionsObject (readonly)

Returns the value of attribute options.



7
8
9
# File 'lib/simple_master/master/column.rb', line 7

def options
  @options
end

Class Method Details

.column_typeObject



10
11
12
13
14
15
16
# File 'lib/simple_master/master/column.rb', line 10

def self.column_type
  klass_name = name.split("::").last
  type_name = klass_name.delete_suffix('Column')
  return :column if type_name.empty?

  type_name.underscore.to_sym
end

.column_typesObject



23
24
25
# File 'lib/simple_master/master/column.rb', line 23

def self.column_types
  @column_types ||= {}
end

.inherited(subclass) ⇒ Object



18
19
20
21
# File 'lib/simple_master/master/column.rb', line 18

def self.inherited(subclass)
  type = subclass.column_type
  Column.register(type, subclass)
end

.register(type, klass) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/simple_master/master/column.rb', line 27

def self.register(type, klass)
  if column_types.key?(type)
    fail "#{klass}: Column type #{type} is defined at #{column_types[type]}."
  end

  column_types[type] = klass
end

Instance Method Details

#db_column_nameObject



73
74
75
# File 'lib/simple_master/master/column.rb', line 73

def db_column_name
  options[:db_column_name] || name
end

#init(master_class, for_test = false) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/simple_master/master/column.rb', line 43

def init(master_class, for_test = false)
  master_class.simple_master_module.attr_reader name

  master_class.simple_master_module.class_eval "    def \#{name}=(value)\n      \#{code_for_conversion}\n      \#{code_for_dirty_check if for_test}\n      @\#{name} = value\n    end\n\n    def \#{name}_value_for_sql\n      value = \#{code_for_sql_value}\n      return \"NULL\" if value.nil?\n      return \"'\" + value.gsub(/'/, \"''\").gsub(\"\\\\\\\\\", '\\\\&\\\\&') + \"'\" if value.is_a?(String)\n      value\n    end\n\n    # For inspecting raw DB/CSV values when checking CSV diffs\n    def \#{name}_value_for_csv\n      \#{code_for_sql_value}\n    end\n  RUBY\n\n  globalize(master_class) if options[:globalize]\n\n  if options[:db_column_name]\n    master_class.simple_master_module.alias_method :\"\#{options[:db_column_name]}=\", :\"\#{name}=\"\n  end\nend\n", __FILE__, __LINE__ + 1