Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save yzhanginwa/66487207413b707016e9b8ab7d013e7c to your computer and use it in GitHub Desktop.
Save yzhanginwa/66487207413b707016e9b8ab7d013e7c to your computer and use it in GitHub Desktop.
AA and ActiveResource
module ActiveAdmin
module Filters
module FormtasticAddons
alias :old_seems_searchable? :seems_searchable?
def seems_searchable?
return false if ransacker?
old_seems_searchable?
end
def klass
@object.try(:object).try(:klass)
end
def ransacker?
klass.try(:_ransackers).try(:key?, method.to_s)
end
def scope?
context = Ransack::Context.for klass rescue nil
context.respond_to?(:ransackable_scope?) && context.ransackable_scope?(method.to_s, klass)
end
end
end
end
module ActiveAdmin
module Helpers
module Collection
def collection_size(c = collection)
if c.is_a? ActiveRecord::Relation
c = c.except :select, :order
c.group_values.present? ? c.count.count : c.count
else
c.respond_to?(:count) ? c.count : 0
end
end
end
end
end
class Payment < MyActiveResource
schema do
attribute 'customer_id', :integer
attribute 'amount', :integer
attribute 'created_at', :string
attribute 'success', :boolean
end
def self.column_names
content_columns
end
def self.content_columns
if @content_columns.nil?
@content_columns = Array.new
known_attributes.each do |name|
@content_columns << ResourceColumn.new(name)
end
end
@content_columns
end
def self.columns
content_columns
end
class ResourceColumn
attr_reader :name
def initialize(name)
@name = name
end
def type
:string
end
end
end
ActiveAdmin.register Payment do
actions :index
config.batch_actions = false
filter :created_at_gteq, as: :date_time_picker
controller do
def find_collection
@search = OpenStruct.new(params[:q] || {})
result = Payment.find(:all, params: {
order: params.fetch(:order, 'created_at_desc'),
page: params.fetch(:page, 1),
per_page: params.fetch(:per_page, 50),
q: params[:q] || {}
})
#this uses https://github.com/Fivell/activeresource-response,
# but can be replaced with other ActiveResource pagination implementation
limit = result.http_response['X-Limit-Value'].to_i
offset = result.http_response['X-Offset-Value'].to_i
total = result.http_response['X-Total-Count'].to_i
Kaminari.paginate_array(result, limit: limit, offset: offset, total_count: total)
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment