1
0

Replaced Quantity 'primary' attr with ColumnView model

This commit is contained in:
cryptogopher
2019-12-14 23:56:36 +01:00
parent ccf26d1830
commit 0c0ca1d286
19 changed files with 91 additions and 65 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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