Class: Hold::Sequel::PropertyMapper::Array
- Inherits:
-
Hold::Sequel::PropertyMapper
- Object
- Hold::Sequel::PropertyMapper
- Hold::Sequel::PropertyMapper::Array
- Defined in:
- lib/hold/sequel/property_mapper/array.rb
Overview
A property which is an array of primitive values. Persisted ‘all in one go’ in a separate table.
Instance Attribute Summary collapse
-
#foreign_key ⇒ Object
readonly
Returns the value of attribute foreign_key.
-
#table ⇒ Object
readonly
Returns the value of attribute table.
-
#value_column ⇒ Object
readonly
Returns the value of attribute value_column.
Attributes inherited from Hold::Sequel::PropertyMapper
#property, #property_name, #repository
Instance Method Summary collapse
-
#initialize(repo, property_name, options) ⇒ Array
constructor
A new instance of Array.
- #load_value(row = nil, id = nil, properties = nil) ⇒ Object
- #load_values(rows = nil, ids = nil, properties = nil, &block) ⇒ Object
- #post_insert(entity, rows, last_insert_id = nil) ⇒ Object
- #post_update(entity, update_entity, rows, data_from_pre_update) ⇒ Object
- #pre_delete(entity) ⇒ Object
Methods inherited from Hold::Sequel::PropertyMapper
#build_insert_row, #build_update_row, #columns_aliases_and_tables_for_select, #make_filter, #make_multi_filter, #post_delete, #pre_insert, #pre_update, setter_dependencies_for
Constructor Details
#initialize(repo, property_name, options) ⇒ Array
Returns a new instance of Array.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/hold/sequel/property_mapper/array.rb', line 6 def initialize(repo, property_name, ) super(repo, property_name) @table = [:table] || :"#{repo.main_table}_#{property_name}" @foreign_key = [:foreign_key] || :"#{repo.main_table.to_s.singularize}_id" @value_column = [:value_column] || :value @order_column = [:order_column] @dataset = @repository.db[@table] @select_v = @repository.db[@table].select(Sequel.as(@value_column,:value)) @select_v = @select_v.order(@order_column) if @order_column @select_all = @repository.db[@table].select( Sequel.as(@value_column,:value), Sequel.as(@foreign_key,:id)) @select_all = @select_all.order(@order_column) if @order_column end |
Instance Attribute Details
#foreign_key ⇒ Object (readonly)
Returns the value of attribute foreign_key.
4 5 6 |
# File 'lib/hold/sequel/property_mapper/array.rb', line 4 def foreign_key @foreign_key end |
#table ⇒ Object (readonly)
Returns the value of attribute table.
4 5 6 |
# File 'lib/hold/sequel/property_mapper/array.rb', line 4 def table @table end |
#value_column ⇒ Object (readonly)
Returns the value of attribute value_column.
4 5 6 |
# File 'lib/hold/sequel/property_mapper/array.rb', line 4 def value_column @value_column end |
Instance Method Details
#load_value(row = nil, id = nil, properties = nil) ⇒ Object
23 24 25 |
# File 'lib/hold/sequel/property_mapper/array.rb', line 23 def load_value(row=nil, id=nil, properties=nil) @select_v.filter(@foreign_key => id).map {|row| row[:value]} end |
#load_values(rows = nil, ids = nil, properties = nil, &block) ⇒ Object
27 28 29 30 31 32 33 |
# File 'lib/hold/sequel/property_mapper/array.rb', line 27 def load_values(rows=nil, ids=nil, properties=nil, &block) results = Hash.new {|h,k| h[k]=[]} @select_all.filter(@foreign_key => ids).each do |row| results[row[:id]] << row[:value] end result.values_at(*ids).each_with_index(&block) end |
#post_insert(entity, rows, last_insert_id = nil) ⇒ Object
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/hold/sequel/property_mapper/array.rb', line 39 def post_insert(entity, rows, last_insert_id=nil) array = entity[@property_name] or return insert_rows = [] array.each_with_index do |v,i| row = {@foreign_key => entity.id || last_insert_id, @value_column => v} row[@order_column] = i if @order_column insert_rows << row end @dataset.multi_insert(insert_rows) end |
#post_update(entity, update_entity, rows, data_from_pre_update) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/hold/sequel/property_mapper/array.rb', line 50 def post_update(entity, update_entity, rows, data_from_pre_update) array = update_entity[@property_name] or return @dataset.filter(@foreign_key => entity.id).delete insert_rows = [] array.each_with_index do |v,i| row = {@foreign_key => entity.id, @value_column => v} row[@order_column] = i if @order_column insert_rows << row end @dataset.multi_insert(insert_rows) end |
#pre_delete(entity) ⇒ Object
35 36 37 |
# File 'lib/hold/sequel/property_mapper/array.rb', line 35 def pre_delete(entity) @dataset.filter(@foreign_key => entity.id).delete end |