Sha256: 2f2e1709010af7beb769cfd850260ac7ae32726e43d604fc2d70dfcfd4ebf06c

Contents?: true

Size: 1.91 KB

Versions: 16

Compression:

Stored size: 1.91 KB

Contents

module DynamicScaffold
  class ListBuilder
    def initialize(config)
      @config = config
      @items = []
      @sorter = nil
      @order = []
      @title = nil
      @filter = nil
    end

    def pagination(options = nil)
      @pagination = List::Pagination.new(options) unless options.nil?

      @pagination
    end

    def page_param_name
      pagination ? pagination.param_name : nil
    end

    def sorter(params = nil)
      @sorter = params if params
      @sorter
    end

    def item(*args, &block)
      item = List::Item.new(@config, *args, block)
      @items << item
      item
    end

    def items
      if @items.empty?
        @config.model.column_names.each do |column|
          @items << List::Item.new(@config, column, nil)
        end
      end
      @items
    end

    def sorter_attribute
      @sorter.keys.first
    end

    def sorter_direction
      @sorter.values.first
    end

    def order(*args)
      @order = args unless args.empty?
      @order
    end

    def title(*args, &block)
      if args[0].is_a?(Symbol) || args[0].is_a?(String) || block_given?
        @title = {
          column_name: args[0],
          block: block
        }
      else
        record = args[0]
        return @config.controller.view_context.instance_exec(record, &@title[:block]) if @title[:block]

        record.public_send(@title[:column_name])
      end
    end

    def title?
      @title.present?
    end

    def build_sql(scope_params)
      sql = @config.model.all
      sql = sql.where scope_params
      ret = @config.controller.instance_exec(sql, &@filter) unless @filter.nil?
      sql = ret unless ret.nil?
      unless sql.is_a? ::ActiveRecord::Relation
        raise(
          Error::InvalidOperation,
          'You must return ActiveRecord::Relation from filter block'
        )
      end
      sql
    end

    def filter(&block)
      @filter = block if block_given?
      @filter
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
dynamic_scaffold-1.6.0 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.5.0 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.4.3 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.4.2 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.4.1 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.4.0 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.3.0 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.2.2 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.2.1 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.2.0 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.1.4 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.1.3 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.1.2 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.1.1 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.1.0 lib/dynamic_scaffold/list_builder.rb
dynamic_scaffold-1.0.0 lib/dynamic_scaffold/list_builder.rb