Module: Xampl::XamplPersistedObject

Includes:
XamplObject
Included in:
XamplExample::Thing, XamplExample::Things, XamplGenerator::Elements
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, #init_attributes, #init_hook, #invalid, #invalidate, lookup_preferred_ns_prefix, #mark_changed_deep, #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, #to_ruby, #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

#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:



13
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
# File 'lib/xamplr/xampl-persisted-object.rb', line 13

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): REFUSED (persister: #{@persister.name})"
        puts "                pid: #{self.get_the_index} #{self}"
        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



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/xamplr/xampl-persisted-object.rb', line 56

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

#describe_yourselfObject



117
118
119
# File 'lib/xamplr/xampl-persisted-object.rb', line 117

def describe_yourself
  nil
end

#force_loadObject



77
78
79
80
81
82
83
84
85
86
87
# File 'lib/xamplr/xampl-persisted-object.rb', line 77

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



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

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



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

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

#persist_requiredObject



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

def persist_required
  return true
end

#reset_contentsObject



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

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