Module: Xampl::XamplPersistedObject

Includes:
XamplObject
Defined in:
lib/xamplr/xampl-persisted-object.rb

Instance Attribute Summary collapse

Attributes included from XamplObject

#is_changed, #parents

Instance Method Summary collapse

Methods included from XamplObject

#===, #add_parent, #changes_accepted, #compare_xampl, #copy_xampl, from_ruby, from_string, from_xml_file, from_xml_string, #ignore_when_no_index, #indexed_by, #init_attributes, #init_hook, #inspect, #invalid, #invalidate, lookup_preferred_ns_prefix, #mark_changed_deep, #new_from_xml_file, #new_from_xml_string, #note_add_child, #note_add_to_parent, #note_adding_text_content, #note_attributes_initialised, #note_closed, #note_created, #note_initialise_attributes_with, #note_invalidate, #note_replacing, ns_preferred_prefix, #persist, #pp_xml, realise_from_xml_string, recover_from_string, #schedule_a_deletion_if_needed, #should_schedule_delete?, #substituting_to_xml, #to_ruby, #to_s, #to_xml

Instance Attribute Details

#load_neededObject

Returns the value of attribute load_needed.



7
8
9
# File 'lib/xamplr/xampl-persisted-object.rb', line 7

def load_needed
  @load_needed
end

#must_be_mentionedObject

Returns the value of attribute must_be_mentioned.



8
9
10
# File 'lib/xamplr/xampl-persisted-object.rb', line 8

def must_be_mentioned
  @must_be_mentioned
end

#persisterObject (readonly)

Returns the value of attribute persister.



6
7
8
# File 'lib/xamplr/xampl-persisted-object.rb', line 6

def persister
  @persister
end

Instance Method Details

#accessedObject

Raises:



14
15
16
17
18
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/xamplr/xampl-persisted-object.rb', line 14

def accessed
  raise XamplIsInvalid.new(self) if invalid
  # TODO -- why do I need to get rid of this line, alternatively, why
  # is this next line even there? Well, because accessed is now called
  # differently. But???
  #raise NoActivePersister unless @persister

  if @load_needed and @persister then
    raise NoActivePersister.new unless @persister

    if nil == Xampl.persister then
      #raise UnmanagedChange.new(self)
      if not @persister.syncing then
        Xampl.read_only(@persister) do
          Xampl.lazy_load(self)
        end
      else
        puts "LOAD NEEDED(2): REFUSED (persister: #{@persister.name})"
        puts "                pid: #{self.get_the_index} #{self}"
        caller(0).each { | trace | puts "  #{trace}"}
      end
    elsif Xampl.persister != @persister then
      raise MixedPersisters.new(@persister, self)
    elsif Xampl.persister == @persister then
      if not @persister.syncing then
        Xampl.lazy_load(self)
      else
        puts "LOAD NEEDED(3): BAD IDEA, but load anyway (persister: #{@persister.name})"
        puts "                #{self.class.name}"
        puts "                pid: #{self.get_the_index}"
        Xampl.lazy_load(self)
#            puts "LOAD NEEDED(3): REFUSED (persister: #{@persister.name})"
#            puts "                #{self.class.name}"
#            puts "                pid: #{self.get_the_index}"
#            caller(0).each { | trace | puts "  #{trace}"}
      end
    else
      puts "LOAD NEEDED(4): REFUSED (persister: #{@persister.name})"
      puts "                pid: #{self.get_the_index} #{self}"
      caller(0).each { | trace | puts "  #{trace}"}
    end
  else
    puts "LOAD NEEDED(5): REFUSED (persister: #{@persister})" if @load_needed
    puts "                pid: #{self.get_the_index} #{self}" if @load_needed
    caller(0).each { | trace | puts "  #{trace}"} if @load_needed
  end
end

#changedObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/xamplr/xampl-persisted-object.rb', line 66

def changed
#      puts "CHANGED: is_changed #{@is_changed} xampl #{self}"
  unless Xampl.persister then
    raise UnmanagedChange.new(self)
  end
  if @persister then
    if Xampl.persister != @persister then
      raise UnmanagedChange.new(self)
    end
    if @persister.block_changes then
      raise BlockedChange.new(self)
    end
  end
  unless @is_changed then
    @is_changed = true
    if @persister then
      @persister.has_changed self
    end
  end
end

#changed?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/xamplr/xampl-persisted-object.rb', line 62

def changed?
  @is_changed = true
end

#describe_yourselfObject



127
128
129
# File 'lib/xamplr/xampl-persisted-object.rb', line 127

def describe_yourself
  nil
end

#force_loadObject



87
88
89
90
91
92
93
94
95
96
97
# File 'lib/xamplr/xampl-persisted-object.rb', line 87

def force_load
  @load_needed = true
  @is_changed = false
  @persister.has_not_changed(self) if @persister
  self.clear_non_persistent_index_attributes
  methods = self.methods.grep(/init_.*_as_child/)
  methods.each do |method_name|
    self.send(method_name)
  end
  @children = []
end

#init_xampl_objectObject



116
117
118
119
120
121
122
123
124
125
# File 'lib/xamplr/xampl-persisted-object.rb', line 116

def init_xampl_object
  super
  @persister = nil
  @load_needed = false
  if (Xampl.persister and Xampl.persister.automatic) then
    Xampl.persister.introduce(self)
  else
    introduce_persister(nil)
  end
end

#introduce_persister(persister) ⇒ Object



107
108
109
110
111
112
113
114
# File 'lib/xamplr/xampl-persisted-object.rb', line 107

def introduce_persister(persister)
  #accessed
  if @persister and (@persister != persister) then
    raise AlreadyKnownToPersister.new(self, persister)
  end
  @persister = persister
  return true
end

#persist_requiredObject



10
11
12
# File 'lib/xamplr/xampl-persisted-object.rb', line 10

def persist_required
  return true
end

#reset_contentsObject



99
100
101
102
103
104
105
# File 'lib/xamplr/xampl-persisted-object.rb', line 99

def reset_contents
  self.clear_non_persistent_index_attributes
  self.methods.grep(/init_.*_as_child/).each do |method_name|
    self.send(method_name)
  end
  @children = []
end