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