module DynamicScaffold::ControllerUtilities
Private Instance Methods
bind_sorter_value(record)
click to toggle source
# File lib/dynamic_scaffold/controller_utilities.rb, line 121 def bind_sorter_value(record) attr = dynamic_scaffold.list.sorter_attribute value = dynamic_scaffold.model.maximum(attr) record[attr] = value ? value + 1 : 0 end
check_max_count!()
click to toggle source
# File lib/dynamic_scaffold/controller_utilities.rb, line 131 def check_max_count! return if dynamic_scaffold.max_count.nil? instance_exec(@record, &dynamic_scaffold.lock_before_count) if dynamic_scaffold.lock_before_count count_query = dynamic_scaffold.list.build_sql(scope_params) count_query = count_query.lock if dynamic_scaffold.max_count_options[:lock] count = count_query.count raise Error::InvalidOperation, 'You can not add any more.' if dynamic_scaffold.max_count?(count) end
dynamic_scaffold_path(action, options = {})
click to toggle source
# File lib/dynamic_scaffold/controller_utilities.rb, line 105 def dynamic_scaffold_path(action, options = {}) route = Rails.application.routes.routes.find do |r| route_params = r.required_defaults route_params[:controller] == params[:controller] && (route_params[:action] == action.to_s && r.name) end if route.nil? raise DynamicScaffold::Error::RouteNotFound, "Missing controller#action #{params[:controller]}##{action}" end options.merge!(scope_params) public_send("#{route.name}_path", options) end
edit_params()
click to toggle source
Get parameters for edit action. `key => value`
# File lib/dynamic_scaffold/controller_utilities.rb, line 32 def edit_params params.permit(*dynamic_scaffold.model.primary_key) end
find_record(params)
click to toggle source
# File lib/dynamic_scaffold/controller_utilities.rb, line 98 def find_record(params) rec = dynamic_scaffold.model.find_by(params.merge(scope_params)) raise ::ActiveRecord::RecordNotFound if rec.nil? rec end
handle_pagination(query)
click to toggle source
# File lib/dynamic_scaffold/controller_utilities.rb, line 141 def handle_pagination(query) return query unless dynamic_scaffold.list.pagination query .page(params[dynamic_scaffold.list.pagination.param_name]) .per(dynamic_scaffold.list.pagination.per_page) end
next_sequence!()
click to toggle source
# File lib/dynamic_scaffold/controller_utilities.rb, line 88 def next_sequence! val = @sequence if dynamic_scaffold.list.sorter_direction == :asc @sequence += 1 elsif dynamic_scaffold.list.sorter_direction == :desc @sequence -= 1 end val end
pkey_string_to_hash(pkey)
click to toggle source
Convert pkey_string value to hash.
# File lib/dynamic_scaffold/controller_utilities.rb, line 24 def pkey_string_to_hash(pkey) # https://github.com/gomo/dynamic_scaffold/pull/9/commits/ff5de0e38b3544347e82539c45ffd2efaf3410da # Stop support multiple pkey, on this commit. # Convert "key:1,code:foo" to {key: "1", code: "foo"} pkey.split(',').map {|v| v.split(':') }.each_with_object({}) {|v, res| res[v.first] = v.last } end
request_queries(*except)
click to toggle source
# File lib/dynamic_scaffold/controller_utilities.rb, line 127 def request_queries(*except) request.query_parameters.to_hash.symbolize_keys.delete_if {|k, _v| except.select(&:present?).include?(k) } end
reset_sequence(record_count)
click to toggle source
# File lib/dynamic_scaffold/controller_utilities.rb, line 80 def reset_sequence(record_count) if dynamic_scaffold.list.sorter_direction == :asc @sequence = 0 elsif dynamic_scaffold.list.sorter_direction == :desc @sequence = record_count - 1 end end
scope_params()
click to toggle source
Get the hash of the key and value specified for the scope.
# File lib/dynamic_scaffold/controller_utilities.rb, line 6 def scope_params return {} if dynamic_scaffold.scope.nil? case dynamic_scaffold.scope when Array then dynamic_scaffold.scope.each_with_object({}) do |val, res| if val.is_a? Hash val.each {|k, v| res[k] = v } else res[val] = params[val] end end when Hash then dynamic_scaffold.scope end end
sort_params()
click to toggle source
Get paramters for sort action. `pkeys[] => value`
# File lib/dynamic_scaffold/controller_utilities.rb, line 37 def sort_params params .require('pkeys') .map {|p| p.permit(*dynamic_scaffold.model.primary_key) } end
update_values()
click to toggle source
Get paramters for update record.
# File lib/dynamic_scaffold/controller_utilities.rb, line 44 def update_values # rubocop:disable Metrics/AbcSize # set the parameters of carrierwave_image at the end for validates. permitting = [] dynamic_scaffold.form.items.reject {|i| i.type?(:carrierwave_image) }.each do |item| item.extract_parameters(permitting) end permitting.concat(dynamic_scaffold.form.permit_params) dynamic_scaffold.form.items.select {|i| i.type?(:carrierwave_image) }.each do |item| item.extract_parameters(permitting) end values = params .require(dynamic_scaffold.model.name.underscore) .permit(*permitting) if dynamic_scaffold.scope && !valid_for_scope?(values) raise DynamicScaffold::Error::InvalidOperation, "You can update only to #{scope_params} on this scope" end values end
valid_for_scope?(update_params)
click to toggle source
Check if there are inconsistent scopes in update parameters
# File lib/dynamic_scaffold/controller_utilities.rb, line 67 def valid_for_scope?(update_params) return true if dynamic_scaffold.scope_options[:changeable] result = true scope_params.each do |key, value| if update_params.key?(key) && update_params[key] != value result = false break end end result end