Sha256: 1b3c32de31f006bfac76b0f7cd824dfb1b476ff2f67b29c7ab2465509b37b2bd
Contents?: true
Size: 1.52 KB
Versions: 3
Compression:
Stored size: 1.52 KB
Contents
module Tableling class Model def initialize options = {}, &block @fields = [] @field_options = {} Array.wrap(options[:modules] || []).each do |mod| extend mod initialize_model options if respond_to? :initialize_model end instance_eval &block if block end def field name, options = {}, &block if field = @fields.find{ |f| f.name.to_s == name.to_s } return field end # TODO: do not add field if it's already there Field.new(name, @field_options.merge(options), &block).tap{ |f| @fields << f } end def quick_search &block @quick_search = block end def process params q = params[:base] || base_query if @quick_search and params[:quickSearch].present? q = @quick_search.call q, params[:quickSearch].to_s end total = q.count :all if params[:sort].present? params[:sort].select{ |item| item.match /\A([^ ]+)* (asc|desc)\Z/ }.each do |item| parts = item.split ' ' q = field(parts[0]).with_order q, parts[1].to_sym end end @fields.each{ |f| q = f.with_includes q } limit = params[:pageSize].to_i limit = 10 if limit <= 0 q = q.limit limit offset = params[:page].to_i - 1 offset = 0 if offset < 0 q = q.offset offset * limit { :total => total, :data => q.all.collect{ |o| @fields.inject({}){ |memo,f| memo[f.name] = f.extract(o); memo } } } end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
tableling-rails-0.0.10 | lib/tableling-rails/model.rb |
tableling-rails-0.0.9 | lib/tableling-rails/model.rb |
tableling-rails-0.0.8 | lib/tableling-rails/model.rb |