Class: NotionRubyMapping::Property

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

Overview

abstract class for property

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, will_update: false, base_type: :page) ⇒ Property

Returns generated Property object.

Parameters:

  • name (String)

    Property name



35
36
37
38
39
40
41
42
43
# File 'lib/notion_ruby_mapping/property.rb', line 35

def initialize(name, will_update: false, base_type: :page)
  @name = name
  @will_update = will_update
  @base_type = base_type
  @create = false
  @remove = false
  @new_name = nil
  @json = nil
end

Instance Attribute Details

#nameObject (readonly)

Common methods



10
11
12
# File 'lib/notion_ruby_mapping/property.rb', line 10

def name
  @name
end

#will_updateObject (readonly)

Common methods



10
11
12
# File 'lib/notion_ruby_mapping/property.rb', line 10

def will_update
  @will_update
end

Class Method Details

.create_from_json(name, input_json, base_type = :page) ⇒ NotionRubyMapping::Property?

Returns generated Property object.

Parameters:

  • name (String)
  • input_json (Hash)

Returns:

Raises:

  • (StandardError)


48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/notion_ruby_mapping/property.rb', line 48

def self.create_from_json(name, input_json, base_type = :page)
  raise StandardError, "Property not found: #{name}:#{input_json}" if input_json.nil?

  type = input_json["type"]
  klass = {
    "checkbox" => CheckboxProperty,
    "created_time" => CreatedTimeProperty,
    "date" => DateProperty,
    "formula" => FormulaProperty,
    "last_edited_time" => LastEditedTimeProperty,
    "rollup" => RollupProperty,
    "email" => EmailProperty,
    "files" => FilesProperty,
    "created_by" => CreatedByProperty,
    "last_edited_by" => LastEditedByProperty,
    "multi_select" => MultiSelectProperty,
    "people" => PeopleProperty,
    "relation" => RelationProperty,
    "number" => NumberProperty,
    "phone_number" => PhoneNumberProperty,
    "select" => SelectProperty,
    "title" => TitleProperty,
    "rich_text" => RichTextProperty,
    "url" => UrlProperty,
  }[type]
  raise StandardError, "Irregular property type: #{type}" unless klass

  klass.new name, json: input_json[type], base_type: base_type
end

Instance Method Details

#assert_database_property(method) ⇒ Object

Parameters:

  • method (Symbol, nil)

Raises:

  • (StandardError)


120
121
122
# File 'lib/notion_ruby_mapping/property.rb', line 120

def assert_database_property(method)
  raise StandardError, "#{method} can execute only Database property." unless database?
end

#assert_page_property(method) ⇒ Object

Parameters:

  • method (Symbol, nil)

Raises:

  • (StandardError)


145
146
147
# File 'lib/notion_ruby_mapping/property.rb', line 145

def assert_page_property(method)
  raise StandardError, "#{method} can execute only Page property." unless @base_type == :page
end

#clear_will_updateFalseClass

Returns:

  • (FalseClass)


79
80
81
# File 'lib/notion_ruby_mapping/property.rb', line 79

def clear_will_update
  @will_update = false
end

#database?TrueClass, FalseClass

Returns true if database property.

Returns:

  • (TrueClass, FalseClass)

    true if database property



84
85
86
# File 'lib/notion_ruby_mapping/property.rb', line 84

def database?
  @base_type == :database
end

#make_filter_query(key, value, rollup = nil, rollup_type = nil) ⇒ NotionRubyMapping::Query

Returns generated Query object.

Parameters:

  • key (String)

    query parameter

  • value (Object)

    query value

Returns:



91
92
93
94
95
96
97
98
99
# File 'lib/notion_ruby_mapping/property.rb', line 91

def make_filter_query(key, value, rollup = nil, rollup_type = nil)
  if rollup
    Query.new filter: {"property" => @name, rollup => {rollup_type => {key => value}}}
  elsif @name == "__timestamp__"
    Query.new filter: {"timestamp" => type, type => {key => value}}
  else
    Query.new filter: {"property" => @name, type => {key => value}}
  end
end

#new_name=(new_name) ⇒ Object

Parameters:

  • new_name (String)


15
16
17
18
19
# File 'lib/notion_ruby_mapping/property.rb', line 15

def new_name=(new_name)
  assert_database_property __method__
  @will_update = true
  @new_name = new_name
end

#page?TrueClass, FalseClass

Returns true if page property.

Returns:

  • (TrueClass, FalseClass)

    true if page property



102
103
104
# File 'lib/notion_ruby_mapping/property.rb', line 102

def page?
  @base_type == :page
end

#property_schema_jsonHash

Returns:

  • (Hash)


125
126
127
128
# File 'lib/notion_ruby_mapping/property.rb', line 125

def property_schema_json
  assert_database_property __method__
  {@name => {type => property_schema_json_sub}}
end

#property_values_jsonHash

Returns {} created_time cannot be updated.

Returns:

  • (Hash)

    {} created_time cannot be updated



152
153
154
155
# File 'lib/notion_ruby_mapping/property.rb', line 152

def property_values_json
  assert_page_property __method__
  {}
end

#removeNotionRubyMapping::Property

Returns self.

Returns:



22
23
24
25
26
27
# File 'lib/notion_ruby_mapping/property.rb', line 22

def remove
  assert_database_property __method__
  @will_update = true
  @remove = true
  self
end

#typeSymbol

Returns property type.

Returns:

  • (Symbol)

    property type



113
114
115
# File 'lib/notion_ruby_mapping/property.rb', line 113

def type
  self.class::TYPE
end

#update_from_json(json) ⇒ Object

Parameters:

  • json (Hash)


107
108
109
110
# File 'lib/notion_ruby_mapping/property.rb', line 107

def update_from_json(json)
  @will_update = false
  @json = json[type]
end

#update_property_schema_jsonHash

Returns:

  • (Hash)


131
132
133
134
135
136
137
138
139
140
# File 'lib/notion_ruby_mapping/property.rb', line 131

def update_property_schema_json
  assert_database_property __method__
  if @remove
    {@name => nil}
  elsif @new_name
    {@name => {"name" => @new_name}}
  else
    {}
  end
end