lib/query_helper.rb in query_helper-0.2.8 vs lib/query_helper.rb in query_helper-0.2.9

- old
+ new

@@ -38,27 +38,19 @@ @bind_variables = bind_variables @sql_filter = sql_filter @sql_sort = sql_sort @page = determine_page(page: page, per_page: per_page) @per_page = determine_per_page(page: page, per_page: per_page) + set_limit_and_offset() @single_record = single_record @associations = associations @as_json_options = as_json_options @custom_mappings = custom_mappings @api_payload = api_payload @preload = preload @search_fields = search_fields @search_string = search_string - - if @page && @per_page - # Determine limit and offset - limit = @per_page - offset = (@page - 1) * @per_page - - # Merge limit/offset variables into bind_variables - @bind_variables.merge!({limit: limit, offset: offset}) - end end def update( query: nil, model: nil, @@ -67,11 +59,16 @@ associations: [], as_json_options: nil, single_record: nil, custom_mappings: nil, preload: [], - search_fields: nil + search_fields: nil, + sql_filter: nil, + sql_sort: nil, + page: nil, + per_page: nil, + search_string: nil ) @query = query.class < ActiveRecord::Relation ? query.to_sql : query if query @model = query.class < ActiveRecord::Relation ? query.base_class : model if model || query @bind_variables.merge!(bind_variables) filters.each{ |f| add_filter(**f) } @@ -79,10 +76,16 @@ @single_record = single_record if single_record @as_json_options = as_json_options if as_json_options @custom_mappings = custom_mappings if custom_mappings @preload = preload if preload @search_fields = search_fields if search_fields + @sql_filter = sql_filter if sql_filter + @sql_sort = sql_sort if sql_sort + @search_string = search_string if search_string + @page = determine_page(page: page, per_page: per_page) if page + @per_page = determine_per_page(page: page, per_page: per_page) if per_page + set_limit_and_offset() return self end def add_filter(operator_code:, criterion:, comparate:) @sql_filter.filter_values["comparate"] = { operator_code => criterion } @@ -108,11 +111,11 @@ # create the filters from the column maps @sql_filter.create_filters() having_clauses = @sql_filter.having_clauses where_clauses = @sql_filter.where_clauses - + if @search_string search_filter = search_filter(column_maps) if search_filter[:placement] == :where where_clauses << search_filter[:filter] else @@ -121,11 +124,11 @@ end # merge the filter bind variables into the query bind variables @bind_variables.merge!(@sql_filter.bind_variables) - + # Execute Sql Query manipulator = SqlManipulator.new( sql: @query, where_clauses: where_clauses, having_clauses: having_clauses, @@ -184,10 +187,22 @@ return per_page.to_i if per_page return 100 if !per_page && page return nil end + def set_limit_and_offset + if @page && @per_page + # Determine limit and offset + limit = @per_page + offset = (@page - 1) * @per_page + + # Merge limit/offset variables into bind_variables + @bind_variables[:limit] = limit + @bind_variables[:offset] = offset + end + end + def paginated_results { pagination: pagination_results(), data: @results } end @@ -219,25 +234,25 @@ @results.map!{ |r| r.except("_query_full_count") } if @page && @per_page && !@single_record end def pagination_results # Set pagination params if they aren't provided - @per_page = @count unless @per_page - @page = 1 unless @page + results_per_page = @per_page || @count + results_page = @page || 1 - total_pages = (@count/(@per_page.nonzero? || 1).to_f).ceil - next_page = @page + 1 if @page.between?(1, total_pages - 1) - previous_page = @page - 1 if @page.between?(2, total_pages) - first_page = @page == 1 - last_page = @page == total_pages - out_of_range = !@page.between?(1,total_pages) + total_pages = (@count/(results_per_page.nonzero? || 1).to_f).ceil + next_page = results_page + 1 if results_page.between?(1, total_pages - 1) + previous_page = results_page - 1 if results_page.between?(2, total_pages) + first_page = results_page == 1 + last_page = results_page == total_pages + out_of_range = !results_page.between?(1,total_pages) { count: @count, - current_page: @page, + current_page: results_page, next_page: next_page, previous_page: previous_page, total_pages: total_pages, - per_page: @per_page, + per_page: results_per_page, first_page: first_page, last_page: last_page, out_of_range: out_of_range } end