Sha256: d5727c9dc10498f4a7e3232950347fb0dc4b20848d6777d1a1c720e6d071c168

Contents?: true

Size: 1.86 KB

Versions: 1

Compression:

Stored size: 1.86 KB

Contents

# frozen_string_literal: true

# typed: true

# Entities mapped by environment variables
class Entities
  @models = {}
  class << self
    # @return [Hash] Hash of models
    attr_accessor :models

    def page_data(model, params, values)
      page = params[:page].to_i.positive? ? params[:page].to_i : 1
      page_size = params[:page_size].to_i.positive? ? params[:page_size].to_i : 10
      total_count = values.count
      total_pages = (total_count / page_size.to_f).ceil
      page_res = {
        current_page: page,
        page_size: page_size,
        total_count: total_count,
        total_pages: total_pages,
        _links: {
          self: { href: "/#{model}?page=#{page}&page_size=#{page_size}" }
        }
      }
      page_res[:_links][:next] = { href: "/#{model}?page=#{page + 1}&page_size=#{page_size}" } if page < total_pages
      page_res[:_links][:prev] = { href: "/#{model}?page=#{page - 1}&page_size=#{page_size}" } if page > 1
      page_res
    end

    def query_from_params(params)
      query = params.dup
      query.delete(:page)
      query.delete(:page_size)
      query
    end

    # Find all values for given model querying via params
    def find_all(model, params)
      query = query_from_params params
      total_items = if query == {}
                      Entities.models[model].values
                    else
                      Entities.models[model].values.find_all do |val|
                        val[query.keys[0].to_s].to_s == query.values[0]
                      end
                    end
      pagination = page_data(model, params, total_items)
      skip = (pagination[:current_page] - 1) * pagination[:page_size]

      items = total_items.drop(skip).take(pagination[:page_size])
      response = {
        _embedded: {},
        pagination: pagination
      }
      response[:_embedded][model.to_sym] = items
      response
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
schemaless_rest_api-0.7.0 lib/schemaless_rest_api/entities.rb