Class: Masamune::Schema::Row

Inherits:
Object
  • Object
show all
Defined in:
lib/masamune/schema/row.rb

Constant Summary collapse

DEFAULT_ATTRIBUTES =
{
  id:       nil,
  values:   {},
  default:  false,
  strict:   true,
  parent:   nil,
  debug:    false
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Row

Returns a new instance of Row.



41
42
43
44
45
46
47
48
# File 'lib/masamune/schema/row.rb', line 41

def initialize(opts = {})
  @errors = Set.new
  opts.symbolize_keys!
  DEFAULT_ATTRIBUTES.merge(opts).each do |name, value|
    public_send("#{name}=", value)
  end
  self.id ||= :default if default
end

Instance Attribute Details

#errorsObject (readonly)

Returns the value of attribute errors.



39
40
41
# File 'lib/masamune/schema/row.rb', line 39

def errors
  @errors
end

Instance Method Details

#headersObject



95
96
97
# File 'lib/masamune/schema/row.rb', line 95

def headers
  @columns.map { |_, column| column.name }
end

#id=(id) ⇒ Object



50
51
52
# File 'lib/masamune/schema/row.rb', line 50

def id=(id)
  @id = id.to_sym if id
end

#insert_columnsObject



83
84
85
# File 'lib/masamune/schema/row.rb', line 83

def insert_columns
  values.keys
end

#insert_constraintsObject



79
80
81
# File 'lib/masamune/schema/row.rb', line 79

def insert_constraints
  values.map { |key, value| "#{key} = #{parent.columns[key].sql_value(value)}" }.compact
end

#insert_valuesObject



87
88
89
# File 'lib/masamune/schema/row.rb', line 87

def insert_values
  values.map { |key, value| parent.columns[key].sql_value(value) }
end

#invalid?Boolean

Returns:

  • (Boolean)


115
116
117
# File 'lib/masamune/schema/row.rb', line 115

def invalid?
  errors.any?
end

#name(column = nil) ⇒ Object



64
65
66
67
68
69
70
71
# File 'lib/masamune/schema/row.rb', line 64

def name(column = nil)
  return unless @id
  if column
    "#{@id}_#{parent.name}_#{column.name}()"
  else
    "#{@id}_#{parent.name}_#{parent.surrogate_key.name}()"
  end
end

#natural_keysObject



73
74
75
76
77
# File 'lib/masamune/schema/row.rb', line 73

def natural_keys
  parent.natural_keys.select do |column|
    values.keys.include?(column.name) && !column.sql_function?(values[column.name])
  end
end

#parent=(parent) ⇒ Object



58
59
60
61
62
# File 'lib/masamune/schema/row.rb', line 58

def parent=(parent)
  @parent = parent
  normalize! if @parent
  validate! if @parent
end

#serializeObject



99
100
101
102
103
104
105
# File 'lib/masamune/schema/row.rb', line 99

def serialize
  [].tap do |result|
    values.each do |key, value|
      result << @columns[key].csv_value(value)
    end
  end
end

#sql_value(column) ⇒ Object



107
108
109
# File 'lib/masamune/schema/row.rb', line 107

def sql_value(column)
  column.sql_value(values[column.name])
end

#to_hashObject



91
92
93
# File 'lib/masamune/schema/row.rb', line 91

def to_hash
  values.with_indifferent_access
end

#valid?Boolean

Returns:

  • (Boolean)


111
112
113
# File 'lib/masamune/schema/row.rb', line 111

def valid?
  errors.empty?
end

#validate!Object



119
120
121
122
# File 'lib/masamune/schema/row.rb', line 119

def validate!
  validate_required_columns!
  raise errors.first if invalid?
end

#values=(values) ⇒ Object



54
55
56
# File 'lib/masamune/schema/row.rb', line 54

def values=(values)
  @values = values.symbolize_keys
end