Class: Chouette::TridentActiveRecord

Inherits:
ActiveRecord
  • Object
show all
Defined in:
app/models/chouette/trident_active_record.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ActiveRecord

#human_attribute_name, #nil_if_blank, nullable_attributes

Class Method Details

.model_nameObject



104
105
106
# File 'app/models/chouette/trident_active_record.rb', line 104

def self.model_name
  ActiveModel::Name.new self, Chouette, self.name.demodulize
end

.object_id_keyObject

triggers to generate objectId and objectVersion TODO setting prefix in referential object



12
13
14
# File 'app/models/chouette/trident_active_record.rb', line 12

def self.object_id_key
  model_name
end

Instance Method Details

#build_objectidObject



69
70
71
72
73
74
75
76
# File 'app/models/chouette/trident_active_record.rb', line 69

def build_objectid
  #logger.info 'start after_create : '+self.objectid
  if self.objectid.include? ':__pending_id__'
    fix_uniq_objectid
    self.update_attributes( :objectid => self.objectid, :object_version => (self.object_version - 1) )
  end
  #logger.info 'end after_create : '+self.objectid
end

#clean_object_idObject



49
50
51
52
53
# File 'app/models/chouette/trident_active_record.rb', line 49

def clean_object_id
  if self.objectid.include?("__pending_id__")
    self.objectid=nil
  end
end

#default_valuesObject



121
122
123
# File 'app/models/chouette/trident_active_record.rb', line 121

def default_values
  self.object_version ||= 1
end

#fix_uniq_objectidObject



55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'app/models/chouette/trident_active_record.rb', line 55

def fix_uniq_objectid
    base_objectid = self.objectid.rpartition(":").first
    self.objectid = "#{base_objectid}:#{self.id}"
    if !self.valid?
      base_objectid="#{self.objectid}_"
      cnt=1
      while !self.valid? 
        self.objectid = "#{base_objectid}#{cnt}"
        cnt += 1
      end
    end
  
end

#objectidObject



108
109
110
# File 'app/models/chouette/trident_active_record.rb', line 108

def objectid
  Chouette::ObjectId.new read_attribute(:objectid)
end

#objectid_format_complianceObject



83
84
85
86
87
88
89
90
91
92
93
# File 'app/models/chouette/trident_active_record.rb', line 83

def objectid_format_compliance
  if !self.objectid.valid?
    #errors.add(:objectid, "is not a valid ObjectId object")
    errors.add(:objectid,I18n.t("activerecord.errors.models.trident.invalid_object_id",:type => self.class.object_id_key))
  else
    unless self.objectid.object_type==self.class.object_id_key
      #errors.add(:objectid, "doesn't have expected object_type: #{self.class.object_id_key}")
      errors.add(:objectid,I18n.t("activerecord.errors.models.trident.invalid_object_id_type",:type => self.class.object_id_key))
    end
  end
end

#prefixObject



16
17
18
# File 'app/models/chouette/trident_active_record.rb', line 16

def prefix
  "NINOXE"
end

#prepare_auto_columnsObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'app/models/chouette/trident_active_record.rb', line 19

def prepare_auto_columns
  # logger.info 'calling before_validation'
  # logger.info 'start before_validation : '+self.objectid.to_s
  if self.objectid.nil? || self.objectid.blank?
    # if empty, generate a pending objectid which will be completed after creation
    if self.id.nil?
       self.objectid = "#{prefix}:#{self.class.object_id_key}:__pending_id__#{rand(1000)}"
    else
       self.objectid = "#{prefix}:#{self.class.object_id_key}:#{self.id}"
       fix_uniq_objectid
    end
  elsif not self.objectid.include? ':'
    # if one token : technical token : completed by prefix and key
    self.objectid = "#{prefix}:#{self.class.object_id_key}:#{self.objectid}"
  end
  # logger.info 'end before_validation : '+self.objectid
  # initialize or update version
  if self.object_version.nil?
    self.object_version = 1
  else
    self.object_version += 1
  end
  self.creation_time = Time.now
  self.creator_id = 'chouette'
end

#reset_auto_columnsObject



45
46
47
# File 'app/models/chouette/trident_active_record.rb', line 45

def reset_auto_columns
  clean_object_id unless self.errors.nil? || self.errors.empty?
end

#timestamp_attributes_for_createObject

:nodoc:



129
130
131
# File 'app/models/chouette/trident_active_record.rb', line 129

def timestamp_attributes_for_create #:nodoc:
  [:creation_time]
end

#timestamp_attributes_for_updateObject

:nodoc:



125
126
127
# File 'app/models/chouette/trident_active_record.rb', line 125

def timestamp_attributes_for_update #:nodoc:
  [:creation_time]
end

#uniq_objectidObject



95
96
97
98
99
100
101
102
# File 'app/models/chouette/trident_active_record.rb', line 95

def uniq_objectid
  i = 0
  baseobjectid = self.objectid
  while self.class.exists?(:objectid => self.objectid) 
    i += 1
    self.objectid = baseobjectid+"_"+i.to_s
  end
end