Replaced Quantity 'primary' attr with ColumnView model
This commit is contained in:
@@ -1,2 +1,17 @@
|
||||
class ColumnView < ActiveRecord::Base
|
||||
enum domain: Quantity.domains
|
||||
|
||||
belongs_to :project, required: true
|
||||
has_and_belongs_to_many :quantities
|
||||
|
||||
validates :name, presence: true, uniqueness: {scope: :domain}
|
||||
validates :domain, inclusion: {in: domains.keys}
|
||||
|
||||
# TODO: enforce column_view - quantity 'domain' identity
|
||||
def toggle_column!(q)
|
||||
column = self.quantities.find(q.id)
|
||||
self.quantites.destroy(column)
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
self.quantities.create!(quantity: q)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -28,6 +28,33 @@ class Measurement < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
|
||||
# Copy/rename ColumnView on Measurement rename
|
||||
after_save do
|
||||
old_column_view = self.project.column_views
|
||||
.find_by(name: self.name_was, domain: :measurement)
|
||||
return unless old_column_view
|
||||
|
||||
if self.project.measurements.exists?(name: self.name_was)
|
||||
return unless old_column_view.quantities.exist?
|
||||
self.column_view.quantities.create(old_column_view.quantities)
|
||||
self.column_view.save!
|
||||
else
|
||||
old_column_view.name = self.name
|
||||
old_column_view.save!
|
||||
end
|
||||
end, if: :name_changed?
|
||||
|
||||
# Destroy ColumnView after last Measurement destruction
|
||||
after_destroy do
|
||||
unless self.project.measurements.exists?(name: self.name)
|
||||
self.column_view.destroy!
|
||||
end
|
||||
end
|
||||
|
||||
def column_view
|
||||
self.project.column_views.find_or_create_by(name: self.name, domain: :measurement)
|
||||
end
|
||||
|
||||
def toggle_hidden!
|
||||
self.toggle!(:hidden)
|
||||
end
|
||||
|
||||
@@ -15,6 +15,7 @@ class Quantity < ActiveRecord::Base
|
||||
|
||||
acts_as_nested_set dependent: :destroy, scope: :project
|
||||
belongs_to :project, required: false
|
||||
has_and_belongs_to_many :column_views
|
||||
|
||||
validates :name, presence: true, uniqueness: {scope: :project_id}
|
||||
validates :domain, inclusion: {in: domains.keys}
|
||||
@@ -26,7 +27,6 @@ class Quantity < ActiveRecord::Base
|
||||
after_initialize do
|
||||
if new_record?
|
||||
self.domain ||= :diet
|
||||
self.primary = false if self.primary.nil?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -46,10 +46,6 @@ class Quantity < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
|
||||
def toggle_primary!
|
||||
self.toggle!(:primary)
|
||||
end
|
||||
|
||||
def formula_quantities
|
||||
Formula.new(self.project, self.formula).get_quantities
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user