Sha256: c023ce9ea6fced2c4a7a6444ca1e5cb4d3ed7ba76f24b8f77855df97dc33edd3

Contents?: true

Size: 1.3 KB

Versions: 16

Compression:

Stored size: 1.3 KB

Contents

module ForestLiana
  class HasManyGetter
    def initialize(resource, association, params)
      @resource = resource
      @association = association
      @params = params
    end

    def perform
      @records = @resource
        .unscoped
        .find(@params[:id])
        .send(@params[:association_name])
      @records = sort_query
    end

    def records
      @records.limit(limit).offset(offset)
    end

    def count
      @records.to_a.length
    end

    private

    def offset
      return 0 unless pagination?

      number = @params[:page][:number]
      if number && number.to_i > 0
        (number.to_i - 1) * limit
      else
        0
      end
    end

    def limit
      return 10 unless pagination?

      if @params[:page][:size]
        @params[:page][:size].to_i
      else
        10
      end
    end

    def pagination?
      @params[:page] && @params[:page][:number]
    end

    def sort_query
      if @params[:sort]
        field = @params[:sort]
        order = detect_sort_order(field)
        field.slice!(0) if order == :desc

        @records = @records
          .order("#{@params[:association_name]}.#{field} #{order.upcase}")
      else
        @records
      end
    end

    def detect_sort_order(field)
      return (if field[0] == '-' then :desc else :asc end)
    end

  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
forest_liana-1.3.23 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.22 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.21 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.20 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.19 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.18 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.17 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.16 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.15 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.14 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.13 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.12 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.11 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.10 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.9 app/services/forest_liana/has_many_getter.rb
forest_liana-1.3.8 app/services/forest_liana/has_many_getter.rb