diff --git a/app/controllers/foods_controller.rb b/app/controllers/foods_controller.rb index efa84c2..e8bd51d 100644 --- a/app/controllers/foods_controller.rb +++ b/app/controllers/foods_controller.rb @@ -10,7 +10,7 @@ class FoodsController < ApplicationController before_action :init_session_filters before_action :find_project_by_project_id, only: [:index, :new, :create, :nutrients, :filter, :autocomplete, :import] - before_action :find_quantity_by_quantity_id, only: [:toggle_column] + before_action :find_quantity_by_quantity_id, only: [:toggle_exposure] before_action :find_food, only: [:edit, :update, :destroy, :toggle] before_action :authorize @@ -62,7 +62,7 @@ class FoodsController < ApplicationController prepare_nutrients end - def toggle_column + def toggle_exposure @project.nutrient_exposures.toggle!(@quantity) prepare_nutrients end diff --git a/app/controllers/measurements_controller.rb b/app/controllers/measurements_controller.rb index f19cb23..6e1e9cb 100644 --- a/app/controllers/measurements_controller.rb +++ b/app/controllers/measurements_controller.rb @@ -7,9 +7,9 @@ class MeasurementsController < ApplicationController before_action :init_session_filters before_action :find_project_by_project_id, only: [:index, :new, :create, :filter] - before_action :find_quantity_by_quantity_id, only: [:toggle_column] + before_action :find_quantity_by_quantity_id, only: [:toggle_exposure] before_action :find_measurement, only: [:edit, :update, :destroy, :retake] - before_action :find_measurement_routine, only: [:readouts, :toggle_column] + before_action :find_measurement_routine, only: [:readouts, :toggle_exposure] before_action :authorize def index @@ -82,7 +82,7 @@ class MeasurementsController < ApplicationController prepare_readouts end - def toggle_column + def toggle_exposure @routine.readout_exposures.toggle!(@quantity) prepare_readouts end diff --git a/app/helpers/body_trackers_helper.rb b/app/helpers/body_trackers_helper.rb index 8518e65..31f5d79 100644 --- a/app/helpers/body_trackers_helper.rb +++ b/app/helpers/body_trackers_helper.rb @@ -15,6 +15,16 @@ module BodyTrackersHelper t.strftime("%R") if t end + def toggle_exposure_options(enabled, domain) + disabled = [] + enabled = enabled.to_a + options = nested_set_options(@project.quantities.send(domain)) do |q| + disabled << q.id if enabled.include?(q) + raw("#{' ' * q.level}#{q.name}") + end + options_for_select(options, disabled: disabled) + end + def unit_options @project.units.map do |u| [u.shortname, u.id] diff --git a/app/helpers/foods_helper.rb b/app/helpers/foods_helper.rb index 5254c53..8940039 100644 --- a/app/helpers/foods_helper.rb +++ b/app/helpers/foods_helper.rb @@ -5,16 +5,6 @@ module FoodsHelper end end - def toggle_column_options - disabled = [] - enabled_quantities = @project.nutrient_quantities.to_a - options = nested_set_options(@project.quantities.diet) do |q| - disabled << q.id if enabled_quantities.include?(q) - raw("#{' ' * q.level}#{q.name}") - end - options_for_select(options, disabled: disabled) - end - def visibility_options(selected) options = [["visible", 1], ["hidden", 0]] options_for_select(options, selected) diff --git a/app/helpers/measurements_helper.rb b/app/helpers/measurements_helper.rb index 724ccdf..ef376e2 100644 --- a/app/helpers/measurements_helper.rb +++ b/app/helpers/measurements_helper.rb @@ -5,16 +5,6 @@ module MeasurementsHelper .html_safe end - def toggle_column_options - disabled = [] - enabled_quantities = @routine.quantities.to_a - options = nested_set_options(@project.quantities.measurement) do |q| - disabled << q.id if enabled_quantities.include?(q) - raw("#{' ' * q.level}#{q.name}") - end - options_for_select(options, disabled: disabled) - end - def quantity_options nested_set_options(@project.quantities.measurement) do |q| raw("#{' ' * q.level}#{q.name}") diff --git a/app/models/measurement_routine.rb b/app/models/measurement_routine.rb index 44f05d7..4cb6a04 100644 --- a/app/models/measurement_routine.rb +++ b/app/models/measurement_routine.rb @@ -4,7 +4,7 @@ class MeasurementRoutine < ActiveRecord::Base foreign_key: 'routine_id', dependent: :restrict_with_error, extend: BodyTracking::ItemsWithQuantities has_many :readout_exposures, as: :view, dependent: :destroy, - class_name: 'Exposure', extend: BodyTracking::TogglableColumns + class_name: 'Exposure', extend: BodyTracking::TogglableExposures has_many :quantities, -> { order "lft" }, through: :readout_exposures validates :name, presence: true, uniqueness: {scope: :project_id} diff --git a/app/views/foods/_nutrients.html.erb b/app/views/foods/_nutrients.html.erb index a2c7d0b..e3b8771 100644 --- a/app/views/foods/_nutrients.html.erb +++ b/app/views/foods/_nutrients.html.erb @@ -17,7 +17,7 @@
<%= link_to '', - toggle_column_project_foods_path(@project, quantity_id: q.id), + toggle_exposure_project_foods_path(@project, quantity_id: q.id), {class: "icon icon-close", method: :post, remote: true} %>
<%= q.name %> diff --git a/app/views/foods/_options.html.erb b/app/views/foods/_options.html.erb index 387a970..7610244 100644 --- a/app/views/foods/_options.html.erb +++ b/app/views/foods/_options.html.erb @@ -1,14 +1,15 @@
<%= l(:label_options) %>
- <%= form_tag toggle_column_project_foods_path(@project), - id: 'toggle-column-form', name: 'toggle-column-form', + <%= form_tag toggle_exposure_project_foods_path(@project), + id: 'toggle-exposure-form', name: 'toggle-exposure-form', method: :post, remote: true do %> - +
<%= select_tag 'quantity_id', toggle_column_options %><%= select_tag 'quantity_id', + toggle_exposure_options(@project.nutrient_quantities, :diet) %> <%= submit_tag l(:button_add) %>
diff --git a/app/views/meals/_index.html.erb b/app/views/meals/_index.html.erb index 5a3b2de..96b6043 100644 --- a/app/views/meals/_index.html.erb +++ b/app/views/meals/_index.html.erb @@ -1,4 +1,6 @@ <% if @meals.any? { |m| m.persisted? } %> + <%= render partial: 'meals/options' %> + <% @meals.group_by { |m| m.eaten_at ? m.eaten_at.to_date : Date.current } diff --git a/app/views/meals/_options.html.erb b/app/views/meals/_options.html.erb new file mode 100644 index 0000000..c35b7af --- /dev/null +++ b/app/views/meals/_options.html.erb @@ -0,0 +1,17 @@ +
+ <%= l(:label_options) %> +
+ <%= form_tag toggle_exposure_project_meals_path(@project), + id: 'toggle-exposure-form', name: 'toggle-exposure-form', + method: :post, remote: true do %> + +
+ + + + + +
<%= select_tag 'quantity_id', toggle_column_options %><%= submit_tag l(:button_add) %>
+ <% end %> +
+
diff --git a/app/views/measurements/_options.html.erb b/app/views/measurements/_options.html.erb index 96e915f..529aae7 100644 --- a/app/views/measurements/_options.html.erb +++ b/app/views/measurements/_options.html.erb @@ -1,14 +1,15 @@
<%= l(:label_options) %>
- <%= form_tag toggle_column_measurement_routine_path(@routine), - id: 'toggle-column-form', name: 'toggle-column-form', + <%= form_tag toggle_exposure_measurement_routine_path(@routine), + id: 'toggle-exposure-form', name: 'toggle-exposure-form', method: :post, remote: true do %> - +
<%= select_tag 'quantity_id', toggle_column_options %><%= select_tag 'quantity_id', + toggle_exposure_options(@routine.quantities, :measurement) %> <%= submit_tag l(:button_add) %>
diff --git a/app/views/measurements/_readouts.html.erb b/app/views/measurements/_readouts.html.erb index 07db0c6..bd1e090 100644 --- a/app/views/measurements/_readouts.html.erb +++ b/app/views/measurements/_readouts.html.erb @@ -17,7 +17,7 @@
<%= link_to '', - toggle_column_measurement_routine_path(@routine, quantity_id: q.id), + toggle_exposure_measurement_routine_path(@routine, quantity_id: q.id), {class: "icon icon-close", method: :post, remote: true} %>
<%= q.name %> diff --git a/config/routes.rb b/config/routes.rb index e2fc41e..6642f2e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -20,7 +20,7 @@ resources :projects, shallow: true do resources :measurement_routines, only: [:show, :edit] do member do get 'readouts', to: 'measurements#readouts' - post 'toggle_column', to: 'measurements#toggle_column' + post 'toggle_exposure', to: 'measurements#toggle_exposure' end end resources :measurements, only: [:index, :new, :create, :edit, :update, :destroy] do @@ -35,7 +35,7 @@ resources :projects, shallow: true do post 'toggle', on: :member collection do get 'nutrients' - post 'toggle_column' + post 'toggle_exposure' get 'filter' get 'autocomplete' post 'import' diff --git a/init.rb b/init.rb index efd1d67..62f24ce 100644 --- a/init.rb +++ b/init.rb @@ -27,8 +27,8 @@ Redmine::Plugin.register :body_tracking do meals: [:new, :create, :edit, :update, :destroy, :edit_notes, :update_notes, :toggle_eaten], measurement_routines: [:edit], - measurements: [:new, :create, :edit, :update, :destroy, :retake, :toggle_column], - foods: [:new, :create, :edit, :update, :destroy, :toggle, :toggle_column, + measurements: [:new, :create, :edit, :update, :destroy, :retake, :toggle_exposure], + foods: [:new, :create, :edit, :update, :destroy, :toggle, :toggle_exposure, :import], sources: [:create, :destroy], quantities: [:new, :create, :edit, :update, :destroy, :move, :new_child, :create_child], diff --git a/lib/body_tracking/project_patch.rb b/lib/body_tracking/project_patch.rb index dfe9666..9943c73 100644 --- a/lib/body_tracking/project_patch.rb +++ b/lib/body_tracking/project_patch.rb @@ -13,7 +13,7 @@ module BodyTracking::ProjectPatch has_many :units, dependent: :destroy has_many :nutrient_exposures, as: :view, dependent: :destroy, - class_name: 'Exposure', extend: BodyTracking::TogglableColumns + class_name: 'Exposure', extend: BodyTracking::TogglableExposures has_many :nutrient_quantities, -> { order "lft" }, through: :nutrient_exposures, source: 'quantity' end diff --git a/lib/body_tracking/togglable_columns.rb b/lib/body_tracking/togglable_columns.rb deleted file mode 100644 index 5895755..0000000 --- a/lib/body_tracking/togglable_columns.rb +++ /dev/null @@ -1,7 +0,0 @@ -module BodyTracking::TogglableColumns - # TODO: enforce 'domain' identity between quantites and receiving collection? - def toggle!(q) - column = find_by(quantity: q) - column ? destroy(column) : create(quantity: q) - end -end diff --git a/lib/body_tracking/togglable_exposures.rb b/lib/body_tracking/togglable_exposures.rb new file mode 100644 index 0000000..6fbcb68 --- /dev/null +++ b/lib/body_tracking/togglable_exposures.rb @@ -0,0 +1,7 @@ +module BodyTracking::TogglableExposures + # TODO: enforce 'domain' identity between quantites and receiving collection? + def toggle!(q) + exposure = find_by(quantity: q) + exposure ? destroy(exposure) : create(quantity: q) + end +end diff --git a/test/unit/column_view_test.rb b/test/unit/column_view_test.rb deleted file mode 100644 index 55e7352..0000000 --- a/test/unit/column_view_test.rb +++ /dev/null @@ -1,9 +0,0 @@ -require File.expand_path('../../test_helper', __FILE__) - -class QuantityColumnTest < ActiveSupport::TestCase - - # Replace this with your real tests. - def test_truth - assert true - end -end