Class: Fiona7::TypeRegister

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/fiona7/type_register.rb

Defined Under Namespace

Classes: AdHocTypeDefinition, TypeDefinition

Constant Summary collapse

TYPE_MAP =
{
  link:           :linklist,
  reference:      :linklist,
  referencelist:  :linklist,
  widgetlist:     :linklist,
  binary:         :linklist,
  number:         :string,
  stringlist:     :text
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeTypeRegister

Returns a new instance of TypeRegister.



123
124
125
126
# File 'lib/fiona7/type_register.rb', line 123

def initialize
  self.cms_defs = {}
  self.usr_defs = {}
end

Instance Attribute Details

#cms_defsObject

Returns the value of attribute cms_defs.



120
121
122
# File 'lib/fiona7/type_register.rb', line 120

def cms_defs
  @cms_defs
end

#usr_defsObject

Returns the value of attribute usr_defs.



121
122
123
# File 'lib/fiona7/type_register.rb', line 121

def usr_defs
  @usr_defs
end

Instance Method Details

#ad_hoc_synchronize(type_definition) ⇒ Object



167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
# File 'lib/fiona7/type_register.rb', line 167

def ad_hoc_synchronize(type_definition)
  obj_class = type_definition.name

  existing_definition = self.usr_defs[obj_class]
  if existing_definition
    type_definition = existing_definition.merge(type_definition)
  else
    self.usr_defs[obj_class] = type_definition
  end

  return if true &&
    self.cms_def_present?(obj_class) &&
    defs_compatible?(self.cms_defs[obj_class], type_definition)

  Rails.logger.warn "Ad hoc synchronization required of #{type_definition.name}"

  self.synchronize(obj_class)
  self.load(obj_class)
end

#add_usr_attr(obj_class, name, type, values = nil) ⇒ Object



162
163
164
165
# File 'lib/fiona7/type_register.rb', line 162

def add_usr_attr(obj_class, name, type, values=nil)
  self.usr_defs[obj_class] ||= TypeDefinition.new(obj_class)
  self.usr_defs[obj_class].add_attr(name, type, nil, nil, values)
end

#read(obj_class) ⇒ Object



147
148
149
150
151
152
# File 'lib/fiona7/type_register.rb', line 147

def read(obj_class)
  if !self.read?(obj_class)
    self.load(obj_class) 
  end
  self.cms_defs[obj_class]
end

#read?(obj_class) ⇒ Boolean

Returns:

  • (Boolean)


128
129
130
# File 'lib/fiona7/type_register.rb', line 128

def read?(obj_class)
  self.cms_def_present?(obj_class)
end

#read_allObject



132
133
134
# File 'lib/fiona7/type_register.rb', line 132

def read_all
  self.cms_defs.values
end

#read_mangled(obj_class) ⇒ Object



143
144
145
# File 'lib/fiona7/type_register.rb', line 143

def read_mangled(obj_class)
  read(Fiona7::ObjClassNameDemangler.new(obj_class).demangle)
end

#write(obj_class) ⇒ Object



154
155
156
157
158
159
160
# File 'lib/fiona7/type_register.rb', line 154

def write(obj_class)
  if !self.write?(obj_class)
    self.synchronize(obj_class) 
    self.load(obj_class)
  end
  self.cms_defs[obj_class]
end

#write?(obj_class) ⇒ Boolean

Returns:

  • (Boolean)


136
137
138
139
140
141
# File 'lib/fiona7/type_register.rb', line 136

def write?(obj_class)
  true &&
    self.usr_def_present?(obj_class) &&
    self.cms_def_present?(obj_class) &&
    self.defs_compatible?(self.cms_defs[obj_class], self.usr_defs[obj_class])
end