module ActionSet::InstanceMethods
Public Instance Methods
export_set(set)
click to toggle source
# File lib/action_set.rb, line 46 def export_set(set) return send_file(set, export_set_options(request.format)) if set.is_a?(String) && File.file?(set) active_set = ensure_active_set(set) exported_data = active_set.export(export_instructions) send_data(exported_data, export_set_options(request.format)) end
filter_set(set)
click to toggle source
# File lib/action_set.rb, line 26 def filter_set(set) active_set = ensure_active_set(set) active_set = active_set.filter(FilterInstructions.new(filter_params, set, self).get) if filter_params.any? active_set end
paginate_set(set)
click to toggle source
TODO: should we move the default value setting to this layer, and have ActiveSet
require instructions for pagination?
# File lib/action_set.rb, line 40 def paginate_set(set) active_set = ensure_active_set(set) active_set = active_set.paginate(paginate_instructions) active_set end
process_set(set)
click to toggle source
# File lib/action_set.rb, line 22 def process_set(set) paginate_set(sort_set(filter_set(ensure_active_set(set)))) end
sort_set(set)
click to toggle source
# File lib/action_set.rb, line 32 def sort_set(set) active_set = ensure_active_set(set) active_set = active_set.sort(SortInstructions.new(sort_params, set, self).get) if sort_params.any? active_set end
Private Instance Methods
ensure_active_set(set)
click to toggle source
# File lib/action_set.rb, line 110 def ensure_active_set(set) return set if set.is_a?(ActiveSet) ActiveSet.new(set) end
export_instructions()
click to toggle source
rubocop:disable Metrics/AbcSize
# File lib/action_set.rb, line 61 def export_instructions {}.tap do |struct| struct[:format] = export_params[:format] || request.format.symbol columns_params = export_params[:columns]&.map do |column| Hash[column&.map do |k, v| is_literal_value = ->(key) { key.to_s == 'value*' } key = is_literal_value.call(k) ? 'value' : k val = is_literal_value.call(k) ? send(v) : v [key, val] end] end struct[:columns] = if columns_params&.any? columns_params elsif respond_to?(:export_set_columns, true) send(:export_set_columns) else # :nocov: [{}] # :nocov: end end end
export_params()
click to toggle source
# File lib/action_set.rb, line 98 def export_params params.fetch(:export, {}).to_unsafe_hash end
export_set_options(format)
click to toggle source
# File lib/action_set.rb, line 102 def export_set_options(format) {}.tap do |opts| opts[:type] = format.to_s opts[:filename] = "#{Time.zone.now.strftime('%Y%m%d_%H:%M:%S')}.#{format.symbol}" opts[:disposition] = :inline if %w[development test].include?(Rails.env.to_s) end end
filter_params()
click to toggle source
rubocop:enable Metrics/AbcSize
# File lib/action_set.rb, line 86 def filter_params params.fetch(:filter, {}).to_unsafe_hash end
paginate_instructions()
click to toggle source
# File lib/action_set.rb, line 56 def paginate_instructions paginate_params.transform_values(&:to_i) end
paginate_params()
click to toggle source
# File lib/action_set.rb, line 94 def paginate_params params.fetch(:paginate, {}).to_unsafe_hash end
sort_params()
click to toggle source
# File lib/action_set.rb, line 90 def sort_params params.fetch(:sort, {}).to_unsafe_hash end