Class: Entities

Inherits:
Object
  • Object
show all
Defined in:
lib/schemaless_rest_api/entities.rb

Overview

Entities mapped by environment variables

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.modelsHash

Returns Hash of models.

Returns:

  • (Hash)

    Hash of models



10
11
12
# File 'lib/schemaless_rest_api/entities.rb', line 10

def models
  @models
end

Class Method Details

.find_all(model, params) ⇒ Object

Find all values for given model querying via params



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/schemaless_rest_api/entities.rb', line 39

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

.page_data(model, params, values) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/schemaless_rest_api/entities.rb', line 12

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

.query_from_params(params) ⇒ Object



31
32
33
34
35
36
# File 'lib/schemaless_rest_api/entities.rb', line 31

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