Class: NotionRubyMapping::Property

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/notion_ruby_mapping/properties/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_id: nil, property_cache: nil, query: nil) ⇒ Property

Returns generated Property object.

Parameters:

  • name (String)

    Property name



52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/notion_ruby_mapping/properties/property.rb', line 52

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

Instance Attribute Details

#nameObject (readonly)

Common methods



14
15
16
# File 'lib/notion_ruby_mapping/properties/property.rb', line 14

def name
  @name
end

#property_cacheObject

Returns the value of attribute property_cache.



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

def property_cache
  @property_cache
end

#property_idObject (readonly)

Common methods



14
15
16
# File 'lib/notion_ruby_mapping/properties/property.rb', line 14

def property_id
  @property_id
end

#will_updateObject (readonly)

Common methods



14
15
16
# File 'lib/notion_ruby_mapping/properties/property.rb', line 14

def will_update
  @will_update
end

Class Method Details

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

Returns generated Property object.

Parameters:

  • name (String)
  • input_json (Hash)
  • base_type (Symbol) (defaults to: :page)

    :page or :database

  • page_id (String, nil)

Returns:

Raises:

  • (StandardError)


70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/notion_ruby_mapping/properties/property.rb', line 70

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

  type = input_json["type"]
  if type.nil?
    new name, property_id: input_json["id"], base_type: base_type, property_cache: property_cache, query: query
  elsif type == "property_item"
    tmp = new name, property_id: input_json["property_item"]["id"], base_type: base_type,
                    property_cache: property_cache, query: query
    objects = List.new(json: input_json, type: :property, value: tmp, query: query).to_a
    case input_json["property_item"]["type"]
    when "people"
      PeopleProperty.new name, people: objects, base_type: base_type,
                               property_cache: property_cache, query: query
    when "relation"
      RelationProperty.new name, relation: objects, base_type: base_type,
                                 property_cache: property_cache, query: query
    when "rich_text"
      RichTextProperty.new name, text_objects: objects, base_type: base_type,
                                 property_cache: property_cache, query: query
    when "rollup"
      RollupProperty.new name, json: objects, base_type: base_type,
                               property_cache: property_cache, query: query
    when "title"
      TitleProperty.new name, text_objects: objects, base_type: base_type,
                              property_cache: property_cache, query: query
    end
  else
    klass = {
      "button" => ButtonProperty,
      "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,
      "relation" => RelationProperty,
      "number" => NumberProperty,
      "people" => PeopleProperty,
      "phone_number" => PhoneNumberProperty,
      "select" => SelectProperty,
      "status" => StatusProperty,
      "title" => TitleProperty,
      "rich_text" => RichTextProperty,
      "unique_id" => UniqueIdProperty,
      "url" => UrlProperty,
      "verification" => VerificationProperty,
    }[type]
    raise StandardError, "Irregular property type: #{type}" unless klass

    answer = klass.new name, property_id: input_json["id"], json: input_json[type], base_type: base_type,
                             property_cache: property_cache
    answer = answer.retrieve_page_property if answer.is_a?(RelationProperty) && input_json["has_more"] == true
    answer
  end
end

Instance Method Details

#assert_database_property(method) ⇒ Object

Parameters:

  • method (Symbol, nil)

Raises:

  • (StandardError)


185
186
187
# File 'lib/notion_ruby_mapping/properties/property.rb', line 185

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)


210
211
212
# File 'lib/notion_ruby_mapping/properties/property.rb', line 210

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

#clear_will_updateFalseClass

Returns:

  • (FalseClass)


133
134
135
136
137
# File 'lib/notion_ruby_mapping/properties/property.rb', line 133

def clear_will_update
  @new_name = nil
  @remove = nil
  @will_update = false
end

#contents?TrueClass, FalseClass

Returns true if it has Property contents.

Returns:

  • (TrueClass, FalseClass)

    true if it has Property contents



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

def contents?
  !instance_of? Property
end

#database?TrueClass, FalseClass

Returns true if database property.

Returns:

  • (TrueClass, FalseClass)

    true if database property



140
141
142
# File 'lib/notion_ruby_mapping/properties/property.rb', line 140

def database?
  @base_type == :database
end

#make_filter_query(key, value, condition: nil, another_type: nil) ⇒ NotionRubyMapping::Query

Returns generated Query object.

Parameters:

  • key (String)

    query parameter

  • value (Object)

    query value

Returns:



152
153
154
155
156
157
158
159
160
161
162
# File 'lib/notion_ruby_mapping/properties/property.rb', line 152

def make_filter_query(key, value, condition: nil, another_type: nil)
  if condition
    Query.new filter: {"property" => @name, type => {condition => {another_type => {key => value}}}}
  elsif another_type
    Query.new filter: {"property" => @name, type => {another_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)


32
33
34
35
36
# File 'lib/notion_ruby_mapping/properties/property.rb', line 32

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



165
166
167
# File 'lib/notion_ruby_mapping/properties/property.rb', line 165

def page?
  @base_type == :page
end

#property_schema_jsonHash

Returns:

  • (Hash)


190
191
192
193
# File 'lib/notion_ruby_mapping/properties/property.rb', line 190

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

#removeNotionRubyMapping::Property

Returns self.

Returns:



39
40
41
42
43
44
# File 'lib/notion_ruby_mapping/properties/property.rb', line 39

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

#retrieve_page_propertyNotionRubyMapping::Property, ...

Returns:

Raises:

  • (StandardError)


215
216
217
218
219
220
221
222
223
224
# File 'lib/notion_ruby_mapping/properties/property.rb', line 215

def retrieve_page_property
  assert_page_property __method__
  raise StandardError, "property_cache.page_id is empty" if @property_cache.page_id.nil?

  json = NotionCache.instance.page_property_request @property_cache.page_id, @property_id,
                                                    (@query&.query_json || {})
  new_property = self.class.create_from_json @name, json, :page, @property_cache, @query
  @property_cache.add_property new_property
  new_property
end

#typeSymbol

Returns property type.

Returns:

  • (Symbol)

    property type



178
179
180
# File 'lib/notion_ruby_mapping/properties/property.rb', line 178

def type
  self.class::TYPE
end

#update_from_json(json) ⇒ Object

Parameters:

  • json (Hash)


170
171
172
173
174
175
# File 'lib/notion_ruby_mapping/properties/property.rb', line 170

def update_from_json(json)
  @will_update = false
  return unless contents?

  @json = json[type] if json[type] && json[type] != "property_item"
end

#update_property_schema_jsonHash

Returns:

  • (Hash)


196
197
198
199
200
201
202
203
204
205
# File 'lib/notion_ruby_mapping/properties/property.rb', line 196

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