Class: Netfira::WebConnect::Model::Record

Inherits:
Netfira::WebConnect::Model show all
Extended by:
Materialization
Includes:
Digests, Events, Relations, Serializer
Defined in:
lib/netfira/web_connect/model/record/writable.rb,
lib/netfira/web_connect/model.rb,
lib/netfira/web_connect/model/record.rb,
lib/netfira/web_connect/model/record/events.rb,
lib/netfira/web_connect/model/record/digests.rb,
lib/netfira/web_connect/model/record/sendable.rb,
lib/netfira/web_connect/model/record/relations.rb,
lib/netfira/web_connect/model/record/serializer.rb,
lib/netfira/web_connect/model/record/translations.rb,
lib/netfira/web_connect/model/record/materialization.rb

Overview

noinspection RubyStringKeysInHashInspection

Defined Under Namespace

Modules: Digests, Events, Materialization, Relations, Sendable, Serializer, Translations, Tree, Writable Classes: FileRecord, TranslatedString, Translation

Constant Summary

Constants included from Serializer

Serializer::EXCLUDE_FROM_SERIALIZE

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Materialization

materialize

Methods included from Digests

#digest

Methods included from Serializer

#to_s

Methods included from Relations

#relate, #unrelate

Methods inherited from Netfira::WebConnect::Model

#dispatch_event, plural_name, single_name

Class Method Details

.find_by_origin_id(shop, id) ⇒ Object



56
57
58
59
# File 'lib/netfira/web_connect/model/record.rb', line 56

def find_by_origin_id(shop, id)
  id = id.b if OctaWord === id
  with_deleted.find_by origin_key => id, shop_id: shop.id
end

.find_or_create_by_origin_id(shop, id) ⇒ Object



67
68
69
70
71
# File 'lib/netfira/web_connect/model/record.rb', line 67

def find_or_create_by_origin_id(shop, id)
  record = find_or_initialize_by_origin_id(shop, id)
  record.save unless record.persisted?
  record
end

.find_or_initialize_by_origin_id(shop, id) ⇒ Object



61
62
63
64
65
# File 'lib/netfira/web_connect/model/record.rb', line 61

def find_or_initialize_by_origin_id(shop, id)
  id = Guid.from_base64(id).b if origin_key == :guid
  find_by_origin_id(shop, id).tap { |record| record.restore! if record && record.destroyed? } or
      new(origin_key => id, shop_id: shop.id)
end

.has_file?Boolean



73
74
75
# File 'lib/netfira/web_connect/model/record.rb', line 73

def has_file?
  @has_file ||= self < FileRecord
end

.has_languages?Boolean



36
37
38
# File 'lib/netfira/web_connect/model/record.rb', line 36

def has_languages?
  const_defined? :Translation, false
end

.origin_keyObject



44
45
46
# File 'lib/netfira/web_connect/model/record.rb', line 44

def origin_key
  @origin_key ||= writable? ? :guid : (table_props.origin_key || "#{single_name}_id").to_sym
end


81
82
83
# File 'lib/netfira/web_connect/model/record.rb', line 81

def related_classes
  @related_classes ||= []
end

.schemaObject



77
78
79
# File 'lib/netfira/web_connect/model/record.rb', line 77

def schema
  @schema ||= Netfira::WebConnect.schema[self]
end

.sendableObject



19
20
21
22
23
24
25
26
# File 'lib/netfira/web_connect/model/record.rb', line 19

def sendable
  return super unless self == Model::Record # This should raise an error!
  @sendable_classes ||= Models.constants.map do |name|
    Models.const_get name
  end.select do |klass|
    Class === klass && klass < Model::Record && klass.sendable?
  end
end

.sendable?Boolean



52
53
54
# File 'lib/netfira/web_connect/model/record.rb', line 52

def sendable?
  @sendable ||= table_props.sendable
end

.table_nameObject



28
29
30
31
32
33
34
# File 'lib/netfira/web_connect/model/record.rb', line 28

def table_name
  @table_name ||= if self == Model::Record
    Models::Table.table_name
  else
    Netfira::WebConnect.db_table_prefix(plural_name).to_s
  end
end

.tree?Boolean



40
41
42
# File 'lib/netfira/web_connect/model/record.rb', line 40

def tree?
  @is_tree ||= attribute_names.include? 'parent_id'
end

.writable?Boolean



48
49
50
# File 'lib/netfira/web_connect/model/record.rb', line 48

def writable?
  @writable ||= table_props.writable
end

Instance Method Details

#as_readonlyObject



96
97
98
99
100
101
# File 'lib/netfira/web_connect/model/record.rb', line 96

def as_readonly
  readonly!
  yield
  instance_variable_set :@readonly, false
  self
end

#as_readwriteObject



103
104
105
106
107
108
# File 'lib/netfira/web_connect/model/record.rb', line 103

def as_readwrite
  instance_variable_set :@readonly, false
  yield
  readonly!
  self
end

#origin_idObject



92
93
94
# File 'lib/netfira/web_connect/model/record.rb', line 92

def origin_id
  __send__ origin_key
end

#reloadObject



110
111
112
113
# File 'lib/netfira/web_connect/model/record.rb', line 110

def reload
  clear_translations if has_languages?
  super
end

#write_with_type_casting(key, value) ⇒ Object



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/netfira/web_connect/model/record.rb', line 115

def write_with_type_casting(key, value)
  schema = self.class.schema
  if schema.localize.include? key
    set_translated_string key, value
  elsif key == :parent_id
    value = value.to_s
    write_attribute key, value.empty? ? nil : value
  else
    type = schema.columns[key]
    return false unless type
    value = value.to_s if type == 'string'
    write_attribute key, value
  end
  true
end