Class: NotionRubyMapping::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/notion_ruby_mapping/controllers/query.rb

Overview

Query object

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filter: {}, sort: [], page_size: 100, start_cursor: nil) ⇒ Query

Returns a new instance of Query.



6
7
8
9
10
11
# File 'lib/notion_ruby_mapping/controllers/query.rb', line 6

def initialize(filter: {}, sort: [], page_size: 100, start_cursor: nil)
  @filter = filter
  @sort = sort
  @page_size = page_size
  @start_cursor = start_cursor
end

Instance Attribute Details

#filterObject (readonly)

Returns the value of attribute filter.



12
13
14
# File 'lib/notion_ruby_mapping/controllers/query.rb', line 12

def filter
  @filter
end

#page_sizeObject (readonly)

Returns the value of attribute page_size.



12
13
14
# File 'lib/notion_ruby_mapping/controllers/query.rb', line 12

def page_size
  @page_size
end

#sortObject (readonly)

Returns the value of attribute sort.



12
13
14
# File 'lib/notion_ruby_mapping/controllers/query.rb', line 12

def sort
  @sort
end

#start_cursorObject

Returns the value of attribute start_cursor.



13
14
15
# File 'lib/notion_ruby_mapping/controllers/query.rb', line 13

def start_cursor
  @start_cursor
end

Instance Method Details

#and(another_query) ⇒ NotionRubyMapping::Query

Returns updated self (Query object).

Parameters:

  • other query

Returns:

  • updated self (Query object)



17
18
19
20
21
22
23
24
# File 'lib/notion_ruby_mapping/controllers/query.rb', line 17

def and(another_query)
  if @filter.key? "and"
    @filter["and"] << another_query.filter
  else
    @filter = {"and" => [@filter, another_query.filter]}
  end
  self
end

#ascending(property) ⇒ NotionRubyMapping::Query

Returns updated self (Query object).

Parameters:

Returns:

  • updated self (Query object)



28
29
30
31
32
# File 'lib/notion_ruby_mapping/controllers/query.rb', line 28

def ascending(property)
  key = property.is_a?(LastEditedTimeProperty) || property.is_a?(CreatedTimeProperty) ? "timestamp" : "property"
  @sort << {key => property.name, "direction" => "ascending"}
  self
end

#descending(property) ⇒ NotionRubyMapping::Query

Returns updated self (Query object).

Parameters:

Returns:

  • updated self (Query object)



36
37
38
39
40
# File 'lib/notion_ruby_mapping/controllers/query.rb', line 36

def descending(property)
  key = property.is_a?(LastEditedTimeProperty) || property.is_a?(CreatedTimeProperty) ? "timestamp" : "property"
  @sort << {key => property.name, "direction" => "descending"}
  self
end

#or(other_query) ⇒ NotionRubyMapping::Query

Returns updated self (Query object).

Parameters:

  • other query

Returns:

  • updated self (Query object)



44
45
46
47
48
49
50
51
# File 'lib/notion_ruby_mapping/controllers/query.rb', line 44

def or(other_query)
  if @filter.key? "or"
    @filter["or"] << other_query.filter
  else
    @filter = {"or" => [@filter, other_query.filter]}
  end
  self
end

#query_jsonHash

Returns:



54
55
56
57
58
59
60
61
# File 'lib/notion_ruby_mapping/controllers/query.rb', line 54

def query_json
  parameters = {}
  parameters[:filter] = @filter unless @filter.empty?
  parameters[:sorts] = @sort unless @sort.empty?
  parameters[:start_cursor] = @start_cursor if @start_cursor
  parameters[:page_size] = @page_size if @page_size
  parameters
end

#query_stringString (frozen)

Returns:



64
65
66
67
68
69
# File 'lib/notion_ruby_mapping/controllers/query.rb', line 64

def query_string
  ans = []
  ans << "page_size=#{@page_size}" if @page_size
  ans << "start_cursor=#{@start_cursor}" if @start_cursor
  ans.empty? ? "" : "?#{ans.join("&")}"
end