persistence 0.0.1.alpha → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. data/CHANGELOG.md +4 -0
  2. data/README.md +260 -17
  3. data/lib/namespaces.rb +55 -0
  4. data/lib/persistence.rb +38 -3
  5. data/lib/persistence/adapter/abstract.rb +22 -0
  6. data/lib/persistence/adapter/abstract/enable_disable.rb +107 -0
  7. data/lib/persistence/adapter/abstract/primary_key/id_property_string.rb +33 -0
  8. data/lib/persistence/adapter/abstract/primary_key/simple.rb +29 -0
  9. data/lib/persistence/adapter/mock.rb +9 -0
  10. data/lib/persistence/adapter/mock/adapter_interface.rb +102 -0
  11. data/lib/persistence/adapter/mock/bucket.rb +9 -0
  12. data/lib/persistence/adapter/mock/bucket/bucket_interface.rb +260 -0
  13. data/lib/persistence/adapter/mock/bucket/index.rb +9 -0
  14. data/lib/persistence/adapter/mock/bucket/index/index_interface.rb +155 -0
  15. data/lib/persistence/adapter/mock/cursor.rb +9 -0
  16. data/lib/persistence/adapter/mock/cursor/cursor_interface.rb +238 -0
  17. data/lib/persistence/cursor.rb +11 -0
  18. data/lib/persistence/cursor/atomic.rb +110 -0
  19. data/lib/persistence/cursor/cursor_interface.rb +337 -0
  20. data/lib/persistence/exception/block_required.rb +7 -0
  21. data/lib/persistence/exception/conflicting_index_already_declared.rb +7 -0
  22. data/lib/persistence/exception/duplicate_violates_unique_index.rb +7 -0
  23. data/lib/persistence/exception/explicit_index_required.rb +7 -0
  24. data/lib/persistence/exception/indexing_block_failed_to_generate_keys.rb +7 -0
  25. data/lib/persistence/exception/indexing_object_requires_keys.rb +7 -0
  26. data/lib/persistence/exception/key_value_required.rb +7 -0
  27. data/lib/persistence/exception/no_port_enabled.rb +7 -0
  28. data/lib/persistence/object.rb +21 -0
  29. data/lib/persistence/object/autodetermine.rb +74 -0
  30. data/lib/persistence/object/class_instance.rb +1884 -0
  31. data/lib/persistence/object/complex.rb +17 -0
  32. data/lib/persistence/object/complex/array.rb +14 -0
  33. data/lib/persistence/object/complex/array/class_instance.rb +37 -0
  34. data/lib/persistence/object/complex/array/object_instance.rb +54 -0
  35. data/lib/persistence/object/complex/attributes.rb +1808 -0
  36. data/lib/persistence/object/complex/attributes/attributes_array.rb +32 -0
  37. data/lib/persistence/object/complex/attributes/attributes_hash.rb +187 -0
  38. data/lib/persistence/object/complex/attributes/default_atomic_non_atomic.rb +102 -0
  39. data/lib/persistence/object/complex/attributes/hash_to_port.rb +40 -0
  40. data/lib/persistence/object/complex/class_and_object_instance.rb +132 -0
  41. data/lib/persistence/object/complex/class_instance.rb +267 -0
  42. data/lib/persistence/object/complex/complex_object.rb +111 -0
  43. data/lib/persistence/object/complex/hash.rb +14 -0
  44. data/lib/persistence/object/complex/hash/class_instance.rb +40 -0
  45. data/lib/persistence/object/complex/hash/object_instance.rb +63 -0
  46. data/lib/persistence/object/complex/index/attribute_index.rb +10 -0
  47. data/lib/persistence/object/complex/index/attribute_index/attribute_index_interface.rb +43 -0
  48. data/lib/persistence/object/complex/object_instance.rb +469 -0
  49. data/lib/persistence/object/flat.rb +17 -0
  50. data/lib/persistence/object/flat/class_instance.rb +34 -0
  51. data/lib/persistence/object/flat/file.rb +14 -0
  52. data/lib/persistence/object/flat/file/class_instance.rb +122 -0
  53. data/lib/persistence/object/flat/file/contents.rb +7 -0
  54. data/lib/persistence/object/flat/file/file_persistence.rb +147 -0
  55. data/lib/persistence/object/flat/file/object_instance.rb +116 -0
  56. data/lib/persistence/object/flat/file/path.rb +9 -0
  57. data/lib/persistence/object/flat/object_instance.rb +24 -0
  58. data/lib/persistence/object/index.rb +479 -0
  59. data/lib/persistence/object/index/block_index.rb +10 -0
  60. data/lib/persistence/object/index/block_index/block_index_interface.rb +110 -0
  61. data/lib/persistence/object/index/explicit_index.rb +10 -0
  62. data/lib/persistence/object/index/explicit_index/explicit_index_interface.rb +57 -0
  63. data/lib/persistence/object/index_hash.rb +40 -0
  64. data/lib/persistence/object/object_instance.rb +322 -0
  65. data/lib/persistence/object/parse_persistence_args.rb +145 -0
  66. data/lib/persistence/port.rb +9 -0
  67. data/lib/persistence/port/bucket.rb +9 -0
  68. data/lib/persistence/port/bucket/bucket_index.rb +9 -0
  69. data/lib/persistence/port/bucket/bucket_interface.rb +685 -0
  70. data/lib/persistence/port/controller.rb +263 -0
  71. data/lib/persistence/port/port_interface.rb +417 -0
  72. data/lib/requires.rb +146 -0
  73. data/spec/Integration_spec.rb +53 -0
  74. data/spec/Persistence_spec.rb +175 -0
  75. data/spec/example_objects.rb +6 -0
  76. data/spec/example_objects/complex_object.rb +7 -0
  77. data/spec/example_objects/complex_object/array_object.rb +7 -0
  78. data/spec/example_objects/complex_object/hash_object.rb +7 -0
  79. data/spec/example_objects/flat_object.rb +7 -0
  80. data/spec/example_objects/flat_object/file_object.rb +7 -0
  81. data/spec/persistence/adapter/enable_disable_spec.rb +29 -0
  82. data/spec/persistence/adapter/mock/cursor_spec.rb +64 -0
  83. data/spec/persistence/adapter/mock_helpers.rb +27 -0
  84. data/spec/persistence/adapter/mock_helpers/bucket.rb +10 -0
  85. data/spec/persistence/adapter/mock_helpers/integration/dictionary_hash.rb +4 -0
  86. data/spec/persistence/adapter/mock_helpers/integration/note.rb +18 -0
  87. data/spec/persistence/adapter/mock_helpers/integration/notes_array.rb +4 -0
  88. data/spec/persistence/adapter/mock_helpers/integration/user.rb +44 -0
  89. data/spec/persistence/adapter/mock_helpers/integration/user/address.rb +18 -0
  90. data/spec/persistence/adapter/mock_helpers/integration/user/dictionary_entry.rb +12 -0
  91. data/spec/persistence/adapter/mock_helpers/integration/user/sub_account.rb +15 -0
  92. data/spec/persistence/adapter/mock_helpers/object.rb +87 -0
  93. data/spec/persistence/adapter/mock_helpers/port.rb +21 -0
  94. data/spec/persistence/adapter/mock_spec.rb +211 -0
  95. data/spec/persistence/adapter/primary_key/id_property_string_spec.rb +27 -0
  96. data/spec/persistence/adapter/primary_key/simple_spec.rb +19 -0
  97. data/spec/persistence/adapter/spec_abstract/adapter_spec.rb +223 -0
  98. data/spec/persistence/adapter/spec_abstract/cursor_spec.rb +116 -0
  99. data/spec/persistence/cursor/atomic_spec.rb +86 -0
  100. data/spec/persistence/cursor/object_and_class_instance_spec.rb +73 -0
  101. data/spec/persistence/cursor_spec.rb +128 -0
  102. data/spec/persistence/object/complex/attributes/persistence_hash/array_instance_spec.rb +51 -0
  103. data/spec/persistence/object/complex/attributes/persistence_hash/hash_instance_spec.rb +56 -0
  104. data/spec/persistence/object/complex/attributes_spec.rb +1717 -0
  105. data/spec/persistence/object/complex/complex_spec.rb +922 -0
  106. data/spec/persistence/object/complex/index/attribute_index_spec.rb +76 -0
  107. data/spec/persistence/object/flat/bignum_spec.rb +33 -0
  108. data/spec/persistence/object/flat/class_instance_spec.rb +30 -0
  109. data/spec/persistence/object/flat/class_spec.rb +38 -0
  110. data/spec/persistence/object/flat/complex_spec.rb +36 -0
  111. data/spec/persistence/object/flat/false_class_spec.rb +34 -0
  112. data/spec/persistence/object/flat/file/class_instance_spec.rb +54 -0
  113. data/spec/persistence/object/flat/file/object_instance_spec.rb +143 -0
  114. data/spec/persistence/object/flat/file_spec.rb +64 -0
  115. data/spec/persistence/object/flat/fixnum_spec.rb +32 -0
  116. data/spec/persistence/object/flat/float_spec.rb +32 -0
  117. data/spec/persistence/object/flat/indexing_spec.rb +38 -0
  118. data/spec/persistence/object/flat/rational_spec.rb +33 -0
  119. data/spec/persistence/object/flat/regexp_spec.rb +32 -0
  120. data/spec/persistence/object/flat/string_spec.rb +34 -0
  121. data/spec/persistence/object/flat/symbol_spec.rb +32 -0
  122. data/spec/persistence/object/flat/true_class_spec.rb +32 -0
  123. data/spec/persistence/object/indexes/block_index_spec.rb +119 -0
  124. data/spec/persistence/object/indexes/explicit_index_spec.rb +112 -0
  125. data/spec/persistence/object/parse_persistence_args_spec.rb +65 -0
  126. data/spec/persistence/object_spec.rb +310 -0
  127. data/spec/persistence/port/bucket/bucket_interface_spec.rb +146 -0
  128. data/spec/persistence/port/bucket/index/bucket_index_spec.rb +67 -0
  129. data/spec/persistence/port/bucket_spec.rb +20 -0
  130. data/spec/persistence/port/controller_spec.rb +60 -0
  131. data/spec/persistence/port/port_interface_spec.rb +105 -0
  132. metadata +178 -21
  133. data/.gitignore +0 -17
  134. data/Gemfile +0 -4
  135. data/LICENSE +0 -22
  136. data/Rakefile +0 -2
  137. data/lib/persistence/version.rb +0 -3
  138. data/persistence.gemspec +0 -17
@@ -0,0 +1,73 @@
1
+
2
+ require_relative '../../../lib/persistence.rb'
3
+
4
+ describe ::Persistence::Cursor do
5
+
6
+ before :all do
7
+
8
+ ::Persistence.enable_port( :mock, ::Persistence::Adapter::Mock.new )
9
+
10
+ class ::Persistence::Cursor::ClassInstanceMock
11
+ include ::Persistence
12
+ attr_non_atomic_accessor :name
13
+ explicit_index :key
14
+ end
15
+
16
+ @objects = [ ]
17
+ @index = ::Persistence::Cursor::ClassInstanceMock.index( :key )
18
+ 5.times do |this_number|
19
+ instance = ::Persistence::Cursor::ClassInstanceMock.new
20
+ instance.name = 'Number ' << this_number.to_s
21
+ instance.persist!
22
+ @index.index_object( instance, instance.name )
23
+ @index.get_object_id( instance.name ).should == instance.persistence_id
24
+ @objects.push( instance )
25
+ end
26
+
27
+ @cursor = @index.cursor
28
+
29
+ end
30
+
31
+ after :all do
32
+ ::Persistence.disable_port( :mock )
33
+ end
34
+
35
+ ###########
36
+ # count #
37
+ ###########
38
+
39
+ it 'can count' do
40
+ ::Persistence::Cursor::ClassInstanceMock.instance_persistence_bucket.count.should == 5
41
+ ::Persistence::Cursor::ClassInstanceMock.instance_persistence_bucket.count do |object|
42
+ object == @objects[ 2 ]
43
+ end.should == 1
44
+ ::Persistence::Cursor::ClassInstanceMock.instance_persistence_bucket.count( @objects[ 2 ] ).should == 1
45
+
46
+ ::Persistence::Cursor::ClassInstanceMock.count.should == 5
47
+ ::Persistence::Cursor::ClassInstanceMock.count do |object|
48
+ object == @objects[ 2 ]
49
+ end.should == 1
50
+ ::Persistence::Cursor::ClassInstanceMock.count( nil, @objects[ 2 ] ).should == 1
51
+ end
52
+
53
+ ###########
54
+ # count #
55
+ ###########
56
+
57
+ it 'can count' do
58
+
59
+ ::Persistence::Cursor::ClassInstanceMock.index( :key ).count.should == 5
60
+ ::Persistence::Cursor::ClassInstanceMock.index( :key ).count do |object|
61
+ object == @objects[ 2 ]
62
+ end.should == 1
63
+ ::Persistence::Cursor::ClassInstanceMock.index( :key ).count( @objects[ 2 ] ).should == 1
64
+
65
+ ::Persistence::Cursor::ClassInstanceMock.count( :key ).should == 5
66
+ ::Persistence::Cursor::ClassInstanceMock.count( :key ) do |object|
67
+ object == @objects[ 2 ]
68
+ end.should == 1
69
+ ::Persistence::Cursor::ClassInstanceMock.count( :key, @objects[ 2 ] ).should == 1
70
+ end
71
+
72
+ end
73
+
@@ -0,0 +1,128 @@
1
+
2
+ require_relative '../../lib/persistence.rb'
3
+
4
+ describe ::Persistence::Cursor do
5
+
6
+ before :all do
7
+
8
+ ::Persistence.enable_port( :mock, ::Persistence::Adapter::Mock.new )
9
+
10
+ class ::Persistence::Cursor::Mock
11
+ include ::Persistence
12
+ attr_non_atomic_accessor :name
13
+ explicit_index :key
14
+ end
15
+
16
+ @objects = [ ]
17
+ @index = ::Persistence::Cursor::Mock.index( :key )
18
+ 5.times do |this_number|
19
+ instance = ::Persistence::Cursor::Mock.new
20
+ instance.name = 'Number ' << this_number.to_s
21
+ instance.persist!
22
+ @index.index_object( instance, instance.name )
23
+ @index.get_object_id( instance.name ).should == instance.persistence_id
24
+ @objects.push( instance )
25
+ end
26
+
27
+ @cursor = ::Persistence::Cursor::Mock.instance_persistence_bucket.cursor
28
+ @index_cursor = @index.cursor
29
+
30
+ end
31
+
32
+ after :all do
33
+ ::Persistence.disable_port( :mock )
34
+ end
35
+
36
+ ################
37
+ # persisted? #
38
+ ################
39
+
40
+ it 'can report whether a key exists and set its position to the key if it does' do
41
+ @cursor.persisted?( @objects[ 0 ].persistence_id ).should == true
42
+ @index_cursor.persisted?( @objects[ 0 ].name ).should == true
43
+ end
44
+
45
+ ###########
46
+ # first #
47
+ ###########
48
+
49
+ it 'can set its position to the first key' do
50
+ @cursor.first.should == @objects.first
51
+ @cursor.first( 2 ).should == @objects.first( 2 )
52
+ @index_cursor.first.should == @objects.first
53
+ @index_cursor.first( 2 ).should == @objects.first( 2 )
54
+ end
55
+
56
+ ##########
57
+ # last #
58
+ ##########
59
+
60
+ it 'can set its position to the last key' do
61
+ @cursor.last.should == @objects.last
62
+ @cursor.last( 2 ).should == @objects.last( 2 )
63
+ @index_cursor.first
64
+ @index_cursor.current.should == @objects.first
65
+ end
66
+
67
+ #########
68
+ # any #
69
+ #########
70
+
71
+ it 'can set its position to the last key' do
72
+ @objects.include?( @cursor.any ).should == true
73
+ @cursor.any( 2 ).each do |this_object|
74
+ @objects.include?( this_object ).should == true
75
+ end
76
+ @index_cursor.first.should == @objects[ 0 ]
77
+ @index_cursor.next.should == @objects[ 0 ]
78
+ @index_cursor.next.should == @objects[ 1 ]
79
+ @index_cursor.next( 2 ).should == @objects[ 2..3 ]
80
+ end
81
+
82
+ #############
83
+ # current #
84
+ #############
85
+
86
+ it 'can return the current key' do
87
+ @cursor.first
88
+ @cursor.current.should == @objects.first
89
+ end
90
+
91
+ ##########
92
+ # next #
93
+ ##########
94
+
95
+ it 'can set its position to the next key' do
96
+ @cursor.first.should == @objects[ 0 ]
97
+ @cursor.next.should == @objects[ 0 ]
98
+ @cursor.next.should == @objects[ 1 ]
99
+ @cursor.next( 2 ).should == @objects[ 2..3 ]
100
+ end
101
+
102
+ ##########
103
+ # each #
104
+ ##########
105
+
106
+ it 'can iterate each record' do
107
+ @cursor.first
108
+ @cursor.each_with_index do |this_object, this_index|
109
+ this_object.should == @objects[ this_index ]
110
+ end
111
+ @cursor.first
112
+ enum = @cursor.each
113
+ enum.is_a?( Enumerator ).should == true
114
+ enum.next.should == @objects[ 0 ]
115
+ enum.next.should == @objects[ 1 ]
116
+ @index_cursor.first
117
+ @index_cursor.each_with_index do |this_object, this_index|
118
+ this_object.should == @objects[ this_index ]
119
+ end
120
+ @index_cursor.first
121
+ enum = @index_cursor.each
122
+ enum.is_a?( Enumerator ).should == true
123
+ enum.next.should == @objects[ 0 ]
124
+ enum.next.should == @objects[ 1 ]
125
+ end
126
+
127
+ end
128
+
@@ -0,0 +1,51 @@
1
+
2
+ require_relative '../../../../../../lib/persistence.rb'
3
+
4
+ describe ::Persistence::Object::Complex::Array do
5
+
6
+ before :all do
7
+ ::Persistence.enable_port( :mock, ::Persistence::Adapter::Mock.new )
8
+ end
9
+
10
+ after :all do
11
+ ::Persistence.disable_port( :mock )
12
+ end
13
+
14
+ ##############################
15
+ # persistence_hash_to_port #
16
+ ##############################
17
+
18
+ it "can create a persistence hash to correspond to persistence state" do
19
+
20
+ class ::Persistence::Object::Complex::Array::SubArray < Array
21
+ include ::Persistence::Object::Complex
22
+ include ::Persistence::Object::Complex::Array::ObjectInstance
23
+ extend ::Persistence::Object::Complex::Array::ClassInstance
24
+ end
25
+ class ::Persistence::Object::Complex::Array::ComplexObject
26
+
27
+ include ::Persistence::Object::Complex
28
+
29
+ def persist!
30
+ persistence_port.put_object!( self )
31
+ return self
32
+ end
33
+
34
+ end
35
+
36
+ complex_instance = ::Persistence::Object::Complex::Array::ComplexObject.new
37
+ instance = ::Persistence::Object::Complex::Array::SubArray.new( [ 1, 2, 3, 4, 5, complex_instance ] )
38
+
39
+ instance.persistence_hash_to_port.should == { 0 => 1,
40
+ 1 => 2,
41
+ 2 => 3,
42
+ 3 => 4,
43
+ 4 => 5,
44
+ 5 => complex_instance.persistence_id.to_s }
45
+
46
+ instance[ 5 ].should == complex_instance
47
+ instance.instance_eval { is_complex_object?( self [ 5 ] ) }.should == true
48
+
49
+ end
50
+
51
+ end
@@ -0,0 +1,56 @@
1
+
2
+ require_relative '../../../../../../lib/persistence.rb'
3
+
4
+ describe ::Persistence::Object::Complex::Hash do
5
+
6
+ before :all do
7
+ ::Persistence.enable_port( :mock, ::Persistence::Adapter::Mock.new )
8
+ end
9
+
10
+ after :all do
11
+ ::Persistence.disable_port( :mock )
12
+ end
13
+
14
+ ##############################
15
+ # persistence_hash_to_port #
16
+ ##############################
17
+
18
+ it "can create a persistence hash to correspond to persistence state" do
19
+ module ::Persistence::Object::Complex::Hash::PersistenceHashToPortMock
20
+
21
+ class HashMock < Hash
22
+ include ::Persistence::Object::Complex
23
+ include ::Persistence::Object::Complex::Hash::ObjectInstance
24
+ extend ::Persistence::Object::Complex::Hash::ClassInstance
25
+ end
26
+
27
+ class ComplexObject
28
+
29
+ include ::Persistence::Object::Complex
30
+
31
+ def persist!
32
+ persistence_port.put_object!( self )
33
+ return self
34
+ end
35
+
36
+ end
37
+
38
+ complex_instance = ComplexObject.new
39
+ instance = HashMock.new
40
+ instance[ 1 ] = :some_value
41
+ instance[ :key ] = :other_value
42
+ instance[ complex_instance ] = :complex_value
43
+ instance[ :complex_key ] = complex_instance
44
+
45
+ instance.persistence_hash_to_port.should == { 1 => :some_value,
46
+ :key => :other_value,
47
+ complex_instance.persistence_id.to_s => :complex_value,
48
+ :complex_key => complex_instance.persistence_id.to_s }
49
+
50
+ instance[ :complex_key ].should == complex_instance
51
+ instance[ complex_instance ].should == :complex_value
52
+
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,1717 @@
1
+
2
+ require_relative '../../../../lib/persistence.rb'
3
+
4
+ describe ::Persistence::Object::Complex::Attributes do
5
+
6
+ #######################
7
+ # atomic_attributes #
8
+ #######################
9
+
10
+ it 'can declare atomic attribute readers, writers, accessors, and automatically update corresponding declarations' do
11
+ class ::Persistence::Object::Complex::Attributes::AtomicAttributesMock
12
+
13
+ include ::Persistence::Object::Complex
14
+
15
+ atomic_attributes.empty?.should == true
16
+
17
+ # reader
18
+ atomic_attributes.add( :some_reader, :reader )
19
+ atomic_attributes[ :some_reader ].should == :reader
20
+ persistent_attributes[ :some_reader ].should == :reader
21
+ atomic_attribute_readers.include?( :some_reader ).should == true
22
+ atomic_attribute_writers.include?( :some_reader ).should == false
23
+ atomic_attribute_accessors.include?( :some_reader ).should == false
24
+ non_atomic_attributes.empty?.should == true
25
+ non_atomic_attribute_readers.include?( :some_reader ).should == false
26
+ non_atomic_attribute_writers.include?( :some_reader ).should == false
27
+ non_atomic_attribute_accessors.include?( :some_reader ).should == false
28
+
29
+ atomic_attributes[ :some_other_reader ] = :reader
30
+ atomic_attributes[ :some_other_reader ].should == :reader
31
+ persistent_attributes[ :some_other_reader ].should == :reader
32
+ atomic_attribute_readers.include?( :some_other_reader ).should == true
33
+ atomic_attribute_writers.include?( :some_other_reader ).should == false
34
+ atomic_attribute_accessors.include?( :some_other_reader ).should == false
35
+ non_atomic_attributes.empty?.should == true
36
+ non_atomic_attribute_readers.include?( :some_other_reader ).should == false
37
+ non_atomic_attribute_writers.include?( :some_other_reader ).should == false
38
+ non_atomic_attribute_accessors.include?( :some_other_reader ).should == false
39
+
40
+ atomic_attributes.add( :some_reader, :writer )
41
+ atomic_attributes[ :some_reader ].should == :accessor
42
+ persistent_attributes[ :some_reader ].should == :accessor
43
+ atomic_attribute_readers.include?( :some_reader ).should == true
44
+ atomic_attribute_writers.include?( :some_reader ).should == true
45
+ atomic_attribute_accessors.include?( :some_reader ).should == true
46
+ non_atomic_attributes.empty?.should == true
47
+ non_atomic_attribute_readers.include?( :some_reader ).should == false
48
+ non_atomic_attribute_writers.include?( :some_reader ).should == false
49
+ non_atomic_attribute_accessors.include?( :some_reader ).should == false
50
+
51
+ atomic_attributes.subtract( :some_reader, :writer )
52
+ atomic_attributes[ :some_reader ].should == :reader
53
+ persistent_attributes[ :some_reader ].should == :reader
54
+ atomic_attribute_readers.include?( :some_reader ).should == true
55
+ atomic_attribute_writers.include?( :some_reader ).should == false
56
+ atomic_attribute_accessors.include?( :some_reader ).should == false
57
+ non_atomic_attributes.empty?.should == true
58
+ non_atomic_attribute_readers.include?( :some_reader ).should == false
59
+ non_atomic_attribute_writers.include?( :some_reader ).should == false
60
+ non_atomic_attribute_accessors.include?( :some_reader ).should == false
61
+
62
+ # writer
63
+ atomic_attributes.add( :some_writer, :writer )
64
+ atomic_attributes[ :some_writer ].should == :writer
65
+ persistent_attributes[ :some_writer ].should == :writer
66
+ atomic_attribute_readers.include?( :some_writer ).should == false
67
+ atomic_attribute_writers.include?( :some_writer ).should == true
68
+ atomic_attribute_accessors.include?( :some_writer ).should == false
69
+ non_atomic_attributes.empty?.should == true
70
+ non_atomic_attribute_readers.include?( :some_writer ).should == false
71
+ non_atomic_attribute_writers.include?( :some_writer ).should == false
72
+ non_atomic_attribute_accessors.include?( :some_writer ).should == false
73
+
74
+ atomic_attributes[ :some_other_writer ] = :writer
75
+ atomic_attributes[ :some_other_writer ].should == :writer
76
+ persistent_attributes[ :some_other_writer ].should == :writer
77
+ atomic_attribute_readers.include?( :some_other_writer ).should == false
78
+ atomic_attribute_writers.include?( :some_other_writer ).should == true
79
+ atomic_attribute_accessors.include?( :some_other_writer ).should == false
80
+ non_atomic_attributes.empty?.should == true
81
+ non_atomic_attribute_readers.include?( :some_other_writer ).should == false
82
+ non_atomic_attribute_writers.include?( :some_other_writer ).should == false
83
+ non_atomic_attribute_accessors.include?( :some_other_writer ).should == false
84
+
85
+ atomic_attributes.add( :some_writer, :reader )
86
+ atomic_attributes[ :some_writer ].should == :accessor
87
+ persistent_attributes[ :some_writer ].should == :accessor
88
+ atomic_attribute_readers.include?( :some_writer ).should == true
89
+ atomic_attribute_writers.include?( :some_writer ).should == true
90
+ atomic_attribute_accessors.include?( :some_writer ).should == true
91
+ non_atomic_attributes.empty?.should == true
92
+ non_atomic_attribute_readers.include?( :some_writer ).should == false
93
+ non_atomic_attribute_writers.include?( :some_writer ).should == false
94
+ non_atomic_attribute_accessors.include?( :some_writer ).should == false
95
+
96
+ atomic_attributes.subtract( :some_writer, :reader )
97
+ atomic_attributes[ :some_writer ].should == :writer
98
+ persistent_attributes[ :some_writer ].should == :writer
99
+ atomic_attribute_readers.include?( :some_writer ).should == false
100
+ atomic_attribute_writers.include?( :some_writer ).should == true
101
+ atomic_attribute_accessors.include?( :some_writer ).should == false
102
+ non_atomic_attributes.empty?.should == true
103
+ non_atomic_attribute_readers.include?( :some_writer ).should == false
104
+ non_atomic_attribute_writers.include?( :some_writer ).should == false
105
+ non_atomic_attribute_accessors.include?( :some_writer ).should == false
106
+
107
+ # accessor
108
+ atomic_attributes.add( :some_accessor, :accessor )
109
+ atomic_attributes[ :some_accessor ].should == :accessor
110
+ persistent_attributes[ :some_accessor ].should == :accessor
111
+ atomic_attribute_readers.include?( :some_accessor ).should == true
112
+ atomic_attribute_writers.include?( :some_accessor ).should == true
113
+ atomic_attribute_accessors.include?( :some_accessor ).should == true
114
+ non_atomic_attributes.empty?.should == true
115
+ non_atomic_attribute_readers.include?( :some_accessor ).should == false
116
+ non_atomic_attribute_writers.include?( :some_accessor ).should == false
117
+ non_atomic_attribute_accessors.include?( :some_accessor ).should == false
118
+
119
+ atomic_attributes[ :some_other_accessor ] = :accessor
120
+ atomic_attributes[ :some_other_accessor ].should == :accessor
121
+ persistent_attributes[ :some_other_accessor ].should == :accessor
122
+ atomic_attribute_readers.include?( :some_other_accessor ).should == true
123
+ atomic_attribute_writers.include?( :some_other_accessor ).should == true
124
+ atomic_attribute_accessors.include?( :some_other_accessor ).should == true
125
+ non_atomic_attributes.empty?.should == true
126
+ non_atomic_attribute_readers.include?( :some_other_accessor ).should == false
127
+ non_atomic_attribute_writers.include?( :some_other_accessor ).should == false
128
+ non_atomic_attribute_accessors.include?( :some_other_accessor ).should == false
129
+
130
+ atomic_attributes.subtract( :some_other_accessor, :accessor )
131
+ atomic_attribute_readers.include?( :some_other_accessor ).should == false
132
+ atomic_attribute_writers.include?( :some_other_accessor ).should == false
133
+ atomic_attribute_accessors.include?( :some_other_accessor ).should == false
134
+ non_atomic_attributes.empty?.should == true
135
+ non_atomic_attribute_readers.include?( :some_other_accessor ).should == false
136
+ non_atomic_attribute_writers.include?( :some_other_accessor ).should == false
137
+ non_atomic_attribute_accessors.include?( :some_other_accessor ).should == false
138
+
139
+ # nil
140
+ atomic_attributes[ :some_accessor ] = nil
141
+ atomic_attribute_readers.include?( :some_accessor ).should == false
142
+ atomic_attribute_writers.include?( :some_accessor ).should == false
143
+ atomic_attribute_accessors.include?( :some_accessor ).should == false
144
+ non_atomic_attributes.empty?.should == true
145
+ non_atomic_attribute_readers.include?( :some_accessor ).should == false
146
+ non_atomic_attribute_writers.include?( :some_accessor ).should == false
147
+ non_atomic_attribute_accessors.include?( :some_accessor ).should == false
148
+
149
+ end
150
+ end
151
+
152
+ ###########################
153
+ # non_atomic_attributes #
154
+ ###########################
155
+
156
+ it 'can declare non-atomic attribute readers, writers, accessors, and automatically update corresponding declarations' do
157
+ class ::Persistence::Object::Complex::Attributes::NonAtomicAttributesMock
158
+
159
+ include ::Persistence::Object::Complex
160
+
161
+ non_atomic_attributes.empty?.should == true
162
+
163
+ # reader
164
+ non_atomic_attributes.add( :some_reader, :reader )
165
+ non_atomic_attributes[ :some_reader ].should == :reader
166
+ persistent_attributes[ :some_reader ].should == :reader
167
+ non_atomic_attribute_readers.include?( :some_reader ).should == true
168
+ non_atomic_attribute_writers.include?( :some_reader ).should == false
169
+ non_atomic_attribute_accessors.include?( :some_reader ).should == false
170
+ atomic_attributes.empty?.should == true
171
+ atomic_attribute_readers.include?( :some_reader ).should == false
172
+ atomic_attribute_writers.include?( :some_reader ).should == false
173
+ atomic_attribute_accessors.include?( :some_reader ).should == false
174
+
175
+ non_atomic_attributes[ :some_other_reader ] = :reader
176
+ non_atomic_attributes[ :some_other_reader ].should == :reader
177
+ persistent_attributes[ :some_other_reader ].should == :reader
178
+ non_atomic_attribute_readers.include?( :some_other_reader ).should == true
179
+ non_atomic_attribute_writers.include?( :some_other_reader ).should == false
180
+ non_atomic_attribute_accessors.include?( :some_other_reader ).should == false
181
+ atomic_attributes.empty?.should == true
182
+ atomic_attribute_readers.include?( :some_other_reader ).should == false
183
+ atomic_attribute_writers.include?( :some_other_reader ).should == false
184
+ atomic_attribute_accessors.include?( :some_other_reader ).should == false
185
+
186
+ non_atomic_attributes.add( :some_reader, :writer )
187
+ non_atomic_attributes[ :some_reader ].should == :accessor
188
+ persistent_attributes[ :some_reader ].should == :accessor
189
+ non_atomic_attribute_readers.include?( :some_reader ).should == true
190
+ non_atomic_attribute_writers.include?( :some_reader ).should == true
191
+ non_atomic_attribute_accessors.include?( :some_reader ).should == true
192
+ atomic_attributes.empty?.should == true
193
+ atomic_attribute_readers.include?( :some_reader ).should == false
194
+ atomic_attribute_writers.include?( :some_reader ).should == false
195
+ atomic_attribute_accessors.include?( :some_reader ).should == false
196
+
197
+ non_atomic_attributes.subtract( :some_reader, :writer )
198
+ non_atomic_attributes[ :some_reader ].should == :reader
199
+ persistent_attributes[ :some_reader ].should == :reader
200
+ non_atomic_attribute_readers.include?( :some_reader ).should == true
201
+ non_atomic_attribute_writers.include?( :some_reader ).should == false
202
+ non_atomic_attribute_accessors.include?( :some_reader ).should == false
203
+ atomic_attributes.empty?.should == true
204
+ atomic_attribute_readers.include?( :some_reader ).should == false
205
+ atomic_attribute_writers.include?( :some_reader ).should == false
206
+ atomic_attribute_accessors.include?( :some_reader ).should == false
207
+
208
+ # writer
209
+ non_atomic_attributes.add( :some_writer, :writer )
210
+ non_atomic_attributes[ :some_writer ].should == :writer
211
+ persistent_attributes[ :some_writer ].should == :writer
212
+ non_atomic_attribute_readers.include?( :some_writer ).should == false
213
+ non_atomic_attribute_writers.include?( :some_writer ).should == true
214
+ non_atomic_attribute_accessors.include?( :some_writer ).should == false
215
+ atomic_attributes.empty?.should == true
216
+ atomic_attribute_readers.include?( :some_writer ).should == false
217
+ atomic_attribute_writers.include?( :some_writer ).should == false
218
+ atomic_attribute_accessors.include?( :some_writer ).should == false
219
+
220
+ non_atomic_attributes[ :some_other_writer ] = :writer
221
+ non_atomic_attributes[ :some_other_writer ].should == :writer
222
+ persistent_attributes[ :some_other_writer ].should == :writer
223
+ non_atomic_attribute_readers.include?( :some_other_writer ).should == false
224
+ non_atomic_attribute_writers.include?( :some_other_writer ).should == true
225
+ non_atomic_attribute_accessors.include?( :some_other_writer ).should == false
226
+ atomic_attributes.empty?.should == true
227
+ atomic_attribute_readers.include?( :some_other_writer ).should == false
228
+ atomic_attribute_writers.include?( :some_other_writer ).should == false
229
+ atomic_attribute_accessors.include?( :some_other_writer ).should == false
230
+
231
+ non_atomic_attributes.add( :some_writer, :reader )
232
+ non_atomic_attributes[ :some_writer ].should == :accessor
233
+ persistent_attributes[ :some_writer ].should == :accessor
234
+ non_atomic_attribute_readers.include?( :some_writer ).should == true
235
+ non_atomic_attribute_writers.include?( :some_writer ).should == true
236
+ non_atomic_attribute_accessors.include?( :some_writer ).should == true
237
+ atomic_attributes.empty?.should == true
238
+ atomic_attribute_readers.include?( :some_writer ).should == false
239
+ atomic_attribute_writers.include?( :some_writer ).should == false
240
+ atomic_attribute_accessors.include?( :some_writer ).should == false
241
+
242
+ non_atomic_attributes.subtract( :some_writer, :reader )
243
+ non_atomic_attributes[ :some_writer ].should == :writer
244
+ persistent_attributes[ :some_writer ].should == :writer
245
+ non_atomic_attribute_readers.include?( :some_writer ).should == false
246
+ non_atomic_attribute_writers.include?( :some_writer ).should == true
247
+ non_atomic_attribute_accessors.include?( :some_writer ).should == false
248
+ atomic_attributes.empty?.should == true
249
+ atomic_attribute_readers.include?( :some_writer ).should == false
250
+ atomic_attribute_writers.include?( :some_writer ).should == false
251
+ atomic_attribute_accessors.include?( :some_writer ).should == false
252
+
253
+ # accessor
254
+ non_atomic_attributes.add( :some_accessor, :accessor )
255
+ non_atomic_attributes[ :some_accessor ].should == :accessor
256
+ persistent_attributes[ :some_accessor ].should == :accessor
257
+ non_atomic_attribute_readers.include?( :some_accessor ).should == true
258
+ non_atomic_attribute_writers.include?( :some_accessor ).should == true
259
+ non_atomic_attribute_accessors.include?( :some_accessor ).should == true
260
+ atomic_attributes.empty?.should == true
261
+ atomic_attribute_readers.include?( :some_accessor ).should == false
262
+ atomic_attribute_writers.include?( :some_accessor ).should == false
263
+ atomic_attribute_accessors.include?( :some_accessor ).should == false
264
+
265
+ non_atomic_attributes[ :some_other_accessor ] = :accessor
266
+ non_atomic_attributes[ :some_other_accessor ].should == :accessor
267
+ persistent_attributes[ :some_other_accessor ].should == :accessor
268
+ non_atomic_attribute_readers.include?( :some_other_accessor ).should == true
269
+ non_atomic_attribute_writers.include?( :some_other_accessor ).should == true
270
+ non_atomic_attribute_accessors.include?( :some_other_accessor ).should == true
271
+ atomic_attributes.empty?.should == true
272
+ atomic_attribute_readers.include?( :some_other_accessor ).should == false
273
+ atomic_attribute_writers.include?( :some_other_accessor ).should == false
274
+ atomic_attribute_accessors.include?( :some_other_accessor ).should == false
275
+
276
+ non_atomic_attributes.subtract( :some_other_accessor, :accessor )
277
+ non_atomic_attribute_readers.include?( :some_other_accessor ).should == false
278
+ non_atomic_attribute_writers.include?( :some_other_accessor ).should == false
279
+ non_atomic_attribute_accessors.include?( :some_other_accessor ).should == false
280
+ atomic_attributes.empty?.should == true
281
+ atomic_attribute_readers.include?( :some_other_accessor ).should == false
282
+ atomic_attribute_writers.include?( :some_other_accessor ).should == false
283
+ atomic_attribute_accessors.include?( :some_other_accessor ).should == false
284
+
285
+ # nil
286
+ non_atomic_attributes[ :some_accessor ] = nil
287
+ non_atomic_attribute_readers.include?( :some_accessor ).should == false
288
+ non_atomic_attribute_writers.include?( :some_accessor ).should == false
289
+ non_atomic_attribute_accessors.include?( :some_accessor ).should == false
290
+ atomic_attributes.empty?.should == true
291
+ atomic_attribute_readers.include?( :some_accessor ).should == false
292
+ atomic_attribute_writers.include?( :some_accessor ).should == false
293
+ atomic_attribute_accessors.include?( :some_accessor ).should == false
294
+
295
+ end
296
+ end
297
+
298
+ ###########################
299
+ # persistent_attributes #
300
+ ###########################
301
+
302
+ it 'can declare persistent attribute readers, writers, accessors (which default to non-atomic or atomic), and automatically update corresponding declarations' do
303
+ class ::Persistence::Object::Complex::Attributes::PersistentAttributesMock
304
+
305
+ include ::Persistence::Object::Complex
306
+
307
+ # Atomic
308
+
309
+ atomic_attributes.empty?.should == true
310
+ non_atomic_attributes.empty?.should == true
311
+ persistent_attributes.empty?.should == true
312
+
313
+ persistent_attributes.default_atomic!
314
+
315
+ # reader
316
+ persistent_attributes.add( :some_reader, :reader )
317
+ atomic_attributes[ :some_reader ].should == :reader
318
+ persistent_attributes[ :some_reader ].should == :reader
319
+ atomic_attribute_readers.include?( :some_reader ).should == true
320
+ atomic_attribute_writers.include?( :some_reader ).should == false
321
+ atomic_attribute_accessors.include?( :some_reader ).should == false
322
+ non_atomic_attributes.empty?.should == true
323
+ non_atomic_attribute_readers.include?( :some_reader ).should == false
324
+ non_atomic_attribute_writers.include?( :some_reader ).should == false
325
+ non_atomic_attribute_accessors.include?( :some_reader ).should == false
326
+
327
+ persistent_attributes[ :some_other_reader ] = :reader
328
+ atomic_attributes[ :some_other_reader ].should == :reader
329
+ persistent_attributes[ :some_other_reader ].should == :reader
330
+ atomic_attribute_readers.include?( :some_other_reader ).should == true
331
+ atomic_attribute_writers.include?( :some_other_reader ).should == false
332
+ atomic_attribute_accessors.include?( :some_other_reader ).should == false
333
+ non_atomic_attributes.empty?.should == true
334
+ non_atomic_attribute_readers.include?( :some_other_reader ).should == false
335
+ non_atomic_attribute_writers.include?( :some_other_reader ).should == false
336
+ non_atomic_attribute_accessors.include?( :some_other_reader ).should == false
337
+
338
+ persistent_attributes.add( :some_reader, :writer )
339
+ atomic_attributes[ :some_reader ].should == :accessor
340
+ persistent_attributes[ :some_reader ].should == :accessor
341
+ atomic_attribute_readers.include?( :some_reader ).should == true
342
+ atomic_attribute_writers.include?( :some_reader ).should == true
343
+ atomic_attribute_accessors.include?( :some_reader ).should == true
344
+ non_atomic_attributes.empty?.should == true
345
+ non_atomic_attribute_readers.include?( :some_reader ).should == false
346
+ non_atomic_attribute_writers.include?( :some_reader ).should == false
347
+ non_atomic_attribute_accessors.include?( :some_reader ).should == false
348
+
349
+ persistent_attributes.subtract( :some_reader, :writer )
350
+ atomic_attributes[ :some_reader ].should == :reader
351
+ persistent_attributes[ :some_reader ].should == :reader
352
+ atomic_attribute_readers.include?( :some_reader ).should == true
353
+ atomic_attribute_writers.include?( :some_reader ).should == false
354
+ atomic_attribute_accessors.include?( :some_reader ).should == false
355
+ non_atomic_attributes.empty?.should == true
356
+ non_atomic_attribute_readers.include?( :some_reader ).should == false
357
+ non_atomic_attribute_writers.include?( :some_reader ).should == false
358
+ non_atomic_attribute_accessors.include?( :some_reader ).should == false
359
+
360
+ # writer
361
+ persistent_attributes.add( :some_writer, :writer )
362
+ atomic_attributes[ :some_writer ].should == :writer
363
+ persistent_attributes[ :some_writer ].should == :writer
364
+ atomic_attribute_readers.include?( :some_writer ).should == false
365
+ atomic_attribute_writers.include?( :some_writer ).should == true
366
+ atomic_attribute_accessors.include?( :some_writer ).should == false
367
+ non_atomic_attributes.empty?.should == true
368
+ non_atomic_attribute_readers.include?( :some_writer ).should == false
369
+ non_atomic_attribute_writers.include?( :some_writer ).should == false
370
+ non_atomic_attribute_accessors.include?( :some_writer ).should == false
371
+
372
+ persistent_attributes[ :some_other_writer ] = :writer
373
+ atomic_attributes[ :some_other_writer ].should == :writer
374
+ persistent_attributes[ :some_other_writer ].should == :writer
375
+ atomic_attribute_readers.include?( :some_other_writer ).should == false
376
+ atomic_attribute_writers.include?( :some_other_writer ).should == true
377
+ atomic_attribute_accessors.include?( :some_other_writer ).should == false
378
+ non_atomic_attributes.empty?.should == true
379
+ non_atomic_attribute_readers.include?( :some_other_writer ).should == false
380
+ non_atomic_attribute_writers.include?( :some_other_writer ).should == false
381
+ non_atomic_attribute_accessors.include?( :some_other_writer ).should == false
382
+
383
+ persistent_attributes.add( :some_writer, :reader )
384
+ atomic_attributes[ :some_writer ].should == :accessor
385
+ persistent_attributes[ :some_writer ].should == :accessor
386
+ atomic_attribute_readers.include?( :some_writer ).should == true
387
+ atomic_attribute_writers.include?( :some_writer ).should == true
388
+ atomic_attribute_accessors.include?( :some_writer ).should == true
389
+ non_atomic_attributes.empty?.should == true
390
+ non_atomic_attribute_readers.include?( :some_writer ).should == false
391
+ non_atomic_attribute_writers.include?( :some_writer ).should == false
392
+ non_atomic_attribute_accessors.include?( :some_writer ).should == false
393
+
394
+ persistent_attributes.subtract( :some_writer, :reader )
395
+ atomic_attributes[ :some_writer ].should == :writer
396
+ persistent_attributes[ :some_writer ].should == :writer
397
+ atomic_attribute_readers.include?( :some_writer ).should == false
398
+ atomic_attribute_writers.include?( :some_writer ).should == true
399
+ atomic_attribute_accessors.include?( :some_writer ).should == false
400
+ non_atomic_attributes.empty?.should == true
401
+ non_atomic_attribute_readers.include?( :some_writer ).should == false
402
+ non_atomic_attribute_writers.include?( :some_writer ).should == false
403
+ non_atomic_attribute_accessors.include?( :some_writer ).should == false
404
+
405
+ # accessor
406
+ persistent_attributes.add( :some_accessor, :accessor )
407
+ atomic_attributes[ :some_accessor ].should == :accessor
408
+ persistent_attributes[ :some_accessor ].should == :accessor
409
+ atomic_attribute_readers.include?( :some_accessor ).should == true
410
+ atomic_attribute_writers.include?( :some_accessor ).should == true
411
+ atomic_attribute_accessors.include?( :some_accessor ).should == true
412
+ non_atomic_attributes.empty?.should == true
413
+ non_atomic_attribute_readers.include?( :some_accessor ).should == false
414
+ non_atomic_attribute_writers.include?( :some_accessor ).should == false
415
+ non_atomic_attribute_accessors.include?( :some_accessor ).should == false
416
+
417
+ persistent_attributes[ :some_other_accessor ] = :accessor
418
+ atomic_attributes[ :some_other_accessor ].should == :accessor
419
+ persistent_attributes[ :some_other_accessor ].should == :accessor
420
+ atomic_attribute_readers.include?( :some_other_accessor ).should == true
421
+ atomic_attribute_writers.include?( :some_other_accessor ).should == true
422
+ atomic_attribute_accessors.include?( :some_other_accessor ).should == true
423
+ non_atomic_attributes.empty?.should == true
424
+ non_atomic_attribute_readers.include?( :some_other_accessor ).should == false
425
+ non_atomic_attribute_writers.include?( :some_other_accessor ).should == false
426
+ non_atomic_attribute_accessors.include?( :some_other_accessor ).should == false
427
+
428
+ persistent_attributes.subtract( :some_other_accessor, :accessor )
429
+ atomic_attribute_readers.include?( :some_other_accessor ).should == false
430
+ atomic_attribute_writers.include?( :some_other_accessor ).should == false
431
+ atomic_attribute_accessors.include?( :some_other_accessor ).should == false
432
+ non_atomic_attributes.empty?.should == true
433
+ non_atomic_attribute_readers.include?( :some_other_accessor ).should == false
434
+ non_atomic_attribute_writers.include?( :some_other_accessor ).should == false
435
+ non_atomic_attribute_accessors.include?( :some_other_accessor ).should == false
436
+
437
+ # nil
438
+ persistent_attributes[ :some_accessor ] = nil
439
+ atomic_attribute_readers.include?( :some_accessor ).should == false
440
+ atomic_attribute_writers.include?( :some_accessor ).should == false
441
+ atomic_attribute_accessors.include?( :some_accessor ).should == false
442
+ non_atomic_attributes.empty?.should == true
443
+ non_atomic_attribute_readers.include?( :some_accessor ).should == false
444
+ non_atomic_attribute_writers.include?( :some_accessor ).should == false
445
+ non_atomic_attribute_accessors.include?( :some_accessor ).should == false
446
+
447
+ atomic_attributes.clear
448
+ non_atomic_attributes.clear
449
+ persistent_attributes.clear
450
+
451
+ #################################################
452
+
453
+ # Non-Atomic
454
+
455
+ atomic_attributes.empty?.should == true
456
+ non_atomic_attributes.empty?.should == true
457
+ persistent_attributes.empty?.should == true
458
+
459
+ persistent_attributes.default_non_atomic!
460
+
461
+ # reader
462
+ persistent_attributes.add( :some_reader, :reader )
463
+ non_atomic_attributes[ :some_reader ].should == :reader
464
+ persistent_attributes[ :some_reader ].should == :reader
465
+ non_atomic_attribute_readers.include?( :some_reader ).should == true
466
+ non_atomic_attribute_writers.include?( :some_reader ).should == false
467
+ non_atomic_attribute_accessors.include?( :some_reader ).should == false
468
+ atomic_attributes.empty?.should == true
469
+ atomic_attribute_readers.include?( :some_reader ).should == false
470
+ atomic_attribute_writers.include?( :some_reader ).should == false
471
+ atomic_attribute_accessors.include?( :some_reader ).should == false
472
+
473
+ persistent_attributes[ :some_other_reader ] = :reader
474
+ non_atomic_attributes[ :some_other_reader ].should == :reader
475
+ persistent_attributes[ :some_other_reader ].should == :reader
476
+ non_atomic_attribute_readers.include?( :some_other_reader ).should == true
477
+ non_atomic_attribute_writers.include?( :some_other_reader ).should == false
478
+ non_atomic_attribute_accessors.include?( :some_other_reader ).should == false
479
+ atomic_attributes.empty?.should == true
480
+ atomic_attribute_readers.include?( :some_other_reader ).should == false
481
+ atomic_attribute_writers.include?( :some_other_reader ).should == false
482
+ atomic_attribute_accessors.include?( :some_other_reader ).should == false
483
+
484
+ persistent_attributes.add( :some_reader, :writer )
485
+ non_atomic_attributes[ :some_reader ].should == :accessor
486
+ persistent_attributes[ :some_reader ].should == :accessor
487
+ non_atomic_attribute_readers.include?( :some_reader ).should == true
488
+ non_atomic_attribute_writers.include?( :some_reader ).should == true
489
+ non_atomic_attribute_accessors.include?( :some_reader ).should == true
490
+ atomic_attributes.empty?.should == true
491
+ atomic_attribute_readers.include?( :some_reader ).should == false
492
+ atomic_attribute_writers.include?( :some_reader ).should == false
493
+ atomic_attribute_accessors.include?( :some_reader ).should == false
494
+
495
+ persistent_attributes.subtract( :some_reader, :writer )
496
+ non_atomic_attributes[ :some_reader ].should == :reader
497
+ persistent_attributes[ :some_reader ].should == :reader
498
+ non_atomic_attribute_readers.include?( :some_reader ).should == true
499
+ non_atomic_attribute_writers.include?( :some_reader ).should == false
500
+ non_atomic_attribute_accessors.include?( :some_reader ).should == false
501
+ atomic_attributes.empty?.should == true
502
+ atomic_attribute_readers.include?( :some_reader ).should == false
503
+ atomic_attribute_writers.include?( :some_reader ).should == false
504
+ atomic_attribute_accessors.include?( :some_reader ).should == false
505
+
506
+ # writer
507
+ persistent_attributes.add( :some_writer, :writer )
508
+ non_atomic_attributes[ :some_writer ].should == :writer
509
+ persistent_attributes[ :some_writer ].should == :writer
510
+ non_atomic_attribute_readers.include?( :some_writer ).should == false
511
+ non_atomic_attribute_writers.include?( :some_writer ).should == true
512
+ non_atomic_attribute_accessors.include?( :some_writer ).should == false
513
+ atomic_attributes.empty?.should == true
514
+ atomic_attribute_readers.include?( :some_writer ).should == false
515
+ atomic_attribute_writers.include?( :some_writer ).should == false
516
+ atomic_attribute_accessors.include?( :some_writer ).should == false
517
+
518
+ persistent_attributes[ :some_other_writer ] = :writer
519
+ non_atomic_attributes[ :some_other_writer ].should == :writer
520
+ persistent_attributes[ :some_other_writer ].should == :writer
521
+ non_atomic_attribute_readers.include?( :some_other_writer ).should == false
522
+ non_atomic_attribute_writers.include?( :some_other_writer ).should == true
523
+ non_atomic_attribute_accessors.include?( :some_other_writer ).should == false
524
+ atomic_attributes.empty?.should == true
525
+ atomic_attribute_readers.include?( :some_other_writer ).should == false
526
+ atomic_attribute_writers.include?( :some_other_writer ).should == false
527
+ atomic_attribute_accessors.include?( :some_other_writer ).should == false
528
+
529
+ persistent_attributes.add( :some_writer, :reader )
530
+ non_atomic_attributes[ :some_writer ].should == :accessor
531
+ persistent_attributes[ :some_writer ].should == :accessor
532
+ non_atomic_attribute_readers.include?( :some_writer ).should == true
533
+ non_atomic_attribute_writers.include?( :some_writer ).should == true
534
+ non_atomic_attribute_accessors.include?( :some_writer ).should == true
535
+ atomic_attributes.empty?.should == true
536
+ atomic_attribute_readers.include?( :some_writer ).should == false
537
+ atomic_attribute_writers.include?( :some_writer ).should == false
538
+ atomic_attribute_accessors.include?( :some_writer ).should == false
539
+
540
+ persistent_attributes.subtract( :some_writer, :reader )
541
+ non_atomic_attributes[ :some_writer ].should == :writer
542
+ persistent_attributes[ :some_writer ].should == :writer
543
+ non_atomic_attribute_readers.include?( :some_writer ).should == false
544
+ non_atomic_attribute_writers.include?( :some_writer ).should == true
545
+ non_atomic_attribute_accessors.include?( :some_writer ).should == false
546
+ atomic_attributes.empty?.should == true
547
+ atomic_attribute_readers.include?( :some_writer ).should == false
548
+ atomic_attribute_writers.include?( :some_writer ).should == false
549
+ atomic_attribute_accessors.include?( :some_writer ).should == false
550
+
551
+ # accessor
552
+ persistent_attributes.add( :some_accessor, :accessor )
553
+ non_atomic_attributes[ :some_accessor ].should == :accessor
554
+ persistent_attributes[ :some_accessor ].should == :accessor
555
+ non_atomic_attribute_readers.include?( :some_accessor ).should == true
556
+ non_atomic_attribute_writers.include?( :some_accessor ).should == true
557
+ non_atomic_attribute_accessors.include?( :some_accessor ).should == true
558
+ atomic_attributes.empty?.should == true
559
+ atomic_attribute_readers.include?( :some_accessor ).should == false
560
+ atomic_attribute_writers.include?( :some_accessor ).should == false
561
+ atomic_attribute_accessors.include?( :some_accessor ).should == false
562
+
563
+ persistent_attributes[ :some_other_accessor ] = :accessor
564
+ non_atomic_attributes[ :some_other_accessor ].should == :accessor
565
+ persistent_attributes[ :some_other_accessor ].should == :accessor
566
+ non_atomic_attribute_readers.include?( :some_other_accessor ).should == true
567
+ non_atomic_attribute_writers.include?( :some_other_accessor ).should == true
568
+ non_atomic_attribute_accessors.include?( :some_other_accessor ).should == true
569
+ atomic_attributes.empty?.should == true
570
+ atomic_attribute_readers.include?( :some_other_accessor ).should == false
571
+ atomic_attribute_writers.include?( :some_other_accessor ).should == false
572
+ atomic_attribute_accessors.include?( :some_other_accessor ).should == false
573
+
574
+ persistent_attributes.subtract( :some_other_accessor, :accessor )
575
+ non_atomic_attribute_readers.include?( :some_other_accessor ).should == false
576
+ non_atomic_attribute_writers.include?( :some_other_accessor ).should == false
577
+ non_atomic_attribute_accessors.include?( :some_other_accessor ).should == false
578
+ atomic_attributes.empty?.should == true
579
+ atomic_attribute_readers.include?( :some_other_accessor ).should == false
580
+ atomic_attribute_writers.include?( :some_other_accessor ).should == false
581
+ atomic_attribute_accessors.include?( :some_other_accessor ).should == false
582
+
583
+ # nil
584
+ persistent_attributes[ :some_accessor ] = nil
585
+ non_atomic_attribute_readers.include?( :some_accessor ).should == false
586
+ non_atomic_attribute_writers.include?( :some_accessor ).should == false
587
+ non_atomic_attribute_accessors.include?( :some_accessor ).should == false
588
+ atomic_attributes.empty?.should == true
589
+ atomic_attribute_readers.include?( :some_accessor ).should == false
590
+ atomic_attribute_writers.include?( :some_accessor ).should == false
591
+ atomic_attribute_accessors.include?( :some_accessor ).should == false
592
+
593
+ end
594
+ end
595
+
596
+ ##############################
597
+ # atomic_attribute_readers #
598
+ ##############################
599
+
600
+ it 'can declare atomic attribute accessors' do
601
+ class ::Persistence::Object::Complex::Attributes::AtomicAttributeReaders
602
+
603
+ include ::Persistence::Object::Complex
604
+
605
+ atomic_attribute_writers.empty?.should == true
606
+ atomic_attribute_readers.empty?.should == true
607
+ atomic_attribute_accessors.empty?.should == true
608
+ atomic_attributes.empty?.should == true
609
+ non_atomic_attributes.empty?.should == true
610
+ non_atomic_attribute_writers.empty?.should == true
611
+ non_atomic_attribute_readers.empty?.should == true
612
+ non_atomic_attribute_accessors.empty?.should == true
613
+
614
+ atomic_attribute_readers.push( :some_reader )
615
+ atomic_attributes[ :some_reader ].should == :reader
616
+ persistent_attributes[ :some_reader ].should == :reader
617
+ atomic_attribute_readers.should == [ :some_reader ]
618
+ atomic_attribute_writers.empty?.should == true
619
+ atomic_attribute_accessors.empty?.should == true
620
+ non_atomic_attributes.empty?.should == true
621
+ non_atomic_attribute_writers.empty?.should == true
622
+ non_atomic_attribute_readers.empty?.should == true
623
+ non_atomic_attribute_accessors.empty?.should == true
624
+
625
+ atomic_attributes[ :some_reader ] = :accessor
626
+ atomic_attribute_writers.delete( :some_reader )
627
+ atomic_attribute_readers.should == [ :some_reader ]
628
+ atomic_attribute_writers.empty?.should == true
629
+ atomic_attribute_accessors.empty?.should == true
630
+ non_atomic_attributes.empty?.should == true
631
+ non_atomic_attribute_writers.empty?.should == true
632
+ non_atomic_attribute_readers.empty?.should == true
633
+ non_atomic_attribute_accessors.empty?.should == true
634
+
635
+ atomic_attribute_readers.delete( :some_reader )
636
+ atomic_attributes[ :some_reader ].should == nil
637
+ persistent_attributes[ :some_reader ].should == nil
638
+ atomic_attribute_readers.empty?.should == true
639
+ atomic_attribute_writers.empty?.should == true
640
+ atomic_attribute_accessors.empty?.should == true
641
+ non_atomic_attributes.empty?.should == true
642
+ non_atomic_attribute_writers.empty?.should == true
643
+ non_atomic_attribute_readers.empty?.should == true
644
+ non_atomic_attribute_accessors.empty?.should == true
645
+
646
+ end
647
+ end
648
+
649
+
650
+ ##############################
651
+ # atomic_attribute_writers #
652
+ ##############################
653
+
654
+ it 'can declare atomic attribute accessors' do
655
+ class ::Persistence::Object::Complex::Attributes::AtomicAttributeWriters
656
+
657
+ include ::Persistence::Object::Complex
658
+
659
+ atomic_attribute_writers.empty?.should == true
660
+ atomic_attribute_readers.empty?.should == true
661
+ atomic_attribute_accessors.empty?.should == true
662
+ atomic_attributes.empty?.should == true
663
+ non_atomic_attributes.empty?.should == true
664
+ non_atomic_attribute_writers.empty?.should == true
665
+ non_atomic_attribute_readers.empty?.should == true
666
+ non_atomic_attribute_accessors.empty?.should == true
667
+
668
+ atomic_attribute_writers.push( :some_writer )
669
+ atomic_attributes[ :some_writer ].should == :writer
670
+ persistent_attributes[ :some_writer ].should == :writer
671
+ atomic_attribute_writers.should == [ :some_writer ]
672
+ atomic_attribute_readers.empty?.should == true
673
+ atomic_attribute_accessors.empty?.should == true
674
+ non_atomic_attributes.empty?.should == true
675
+ non_atomic_attribute_writers.empty?.should == true
676
+ non_atomic_attribute_readers.empty?.should == true
677
+ non_atomic_attribute_accessors.empty?.should == true
678
+
679
+ atomic_attributes[ :some_writer ] = :accessor
680
+ atomic_attribute_readers.delete( :some_writer )
681
+ atomic_attribute_writers.should == [ :some_writer ]
682
+ atomic_attribute_readers.empty?.should == true
683
+ atomic_attribute_accessors.empty?.should == true
684
+ non_atomic_attributes.empty?.should == true
685
+ non_atomic_attribute_writers.empty?.should == true
686
+ non_atomic_attribute_readers.empty?.should == true
687
+ non_atomic_attribute_accessors.empty?.should == true
688
+
689
+ atomic_attribute_writers.delete( :some_writer )
690
+ atomic_attributes[ :some_writer ].should == nil
691
+ persistent_attributes[ :some_writer ].should == nil
692
+ atomic_attribute_readers.empty?.should == true
693
+ atomic_attribute_writers.empty?.should == true
694
+ atomic_attribute_accessors.empty?.should == true
695
+ non_atomic_attributes.empty?.should == true
696
+ non_atomic_attribute_writers.empty?.should == true
697
+ non_atomic_attribute_readers.empty?.should == true
698
+ non_atomic_attribute_accessors.empty?.should == true
699
+
700
+ end
701
+ end
702
+
703
+ ################################
704
+ # atomic_attribute_accessors #
705
+ ################################
706
+
707
+ it 'can declare atomic attribute accessors' do
708
+ class ::Persistence::Object::Complex::Attributes::AtomicAttributeAccessors
709
+
710
+ include ::Persistence::Object::Complex
711
+
712
+ atomic_attribute_writers.empty?.should == true
713
+ atomic_attribute_readers.empty?.should == true
714
+ atomic_attribute_accessors.empty?.should == true
715
+ atomic_attributes.empty?.should == true
716
+ non_atomic_attributes.empty?.should == true
717
+ non_atomic_attribute_writers.empty?.should == true
718
+ non_atomic_attribute_readers.empty?.should == true
719
+ non_atomic_attribute_accessors.empty?.should == true
720
+
721
+ atomic_attribute_accessors.push( :some_accessor )
722
+ atomic_attributes[ :some_accessor ].should == :accessor
723
+ persistent_attributes[ :some_accessor ].should == :accessor
724
+ atomic_attribute_writers.should == [ :some_accessor ]
725
+ atomic_attribute_readers.should == [ :some_accessor ]
726
+ atomic_attribute_accessors.should == [ :some_accessor ]
727
+ non_atomic_attributes.empty?.should == true
728
+ non_atomic_attribute_writers.empty?.should == true
729
+ non_atomic_attribute_readers.empty?.should == true
730
+ non_atomic_attribute_accessors.empty?.should == true
731
+
732
+ atomic_attribute_accessors.delete( :some_accessor )
733
+ atomic_attributes[ :some_accessor ].should == nil
734
+ persistent_attributes[ :some_accessor ].should == nil
735
+ atomic_attribute_readers.empty?.should == true
736
+ atomic_attribute_writers.empty?.should == true
737
+ atomic_attribute_accessors.empty?.should == true
738
+ non_atomic_attributes.empty?.should == true
739
+ non_atomic_attribute_writers.empty?.should == true
740
+ non_atomic_attribute_readers.empty?.should == true
741
+ non_atomic_attribute_accessors.empty?.should == true
742
+
743
+ end
744
+ end
745
+
746
+ ##################################
747
+ # non_atomic_attribute_readers #
748
+ ##################################
749
+
750
+ it 'can declare non-atomic attribute accessors' do
751
+ class ::Persistence::Object::Complex::Attributes::NonAtomicAttributeReaders
752
+
753
+ include ::Persistence::Object::Complex
754
+
755
+ non_atomic_attribute_writers.empty?.should == true
756
+ non_atomic_attribute_readers.empty?.should == true
757
+ non_atomic_attribute_accessors.empty?.should == true
758
+ non_atomic_attributes.empty?.should == true
759
+ atomic_attributes.empty?.should == true
760
+ atomic_attribute_writers.empty?.should == true
761
+ atomic_attribute_readers.empty?.should == true
762
+ atomic_attribute_accessors.empty?.should == true
763
+
764
+ non_atomic_attribute_readers.push( :some_reader )
765
+ non_atomic_attributes[ :some_reader ].should == :reader
766
+ persistent_attributes[ :some_reader ].should == :reader
767
+ non_atomic_attribute_readers.should == [ :some_reader ]
768
+ non_atomic_attribute_writers.empty?.should == true
769
+ non_atomic_attribute_accessors.empty?.should == true
770
+ atomic_attributes.empty?.should == true
771
+ atomic_attribute_writers.empty?.should == true
772
+ atomic_attribute_readers.empty?.should == true
773
+ atomic_attribute_accessors.empty?.should == true
774
+
775
+ non_atomic_attributes[ :some_reader ] = :accessor
776
+ non_atomic_attribute_writers.delete( :some_reader )
777
+ non_atomic_attribute_readers.should == [ :some_reader ]
778
+ non_atomic_attribute_writers.empty?.should == true
779
+ non_atomic_attribute_accessors.empty?.should == true
780
+ atomic_attributes.empty?.should == true
781
+ atomic_attribute_writers.empty?.should == true
782
+ atomic_attribute_readers.empty?.should == true
783
+ atomic_attribute_accessors.empty?.should == true
784
+
785
+ non_atomic_attribute_readers.delete( :some_reader )
786
+ non_atomic_attributes[ :some_reader ].should == nil
787
+ persistent_attributes[ :some_reader ].should == nil
788
+ non_atomic_attribute_readers.empty?.should == true
789
+ non_atomic_attribute_writers.empty?.should == true
790
+ non_atomic_attribute_accessors.empty?.should == true
791
+ atomic_attributes.empty?.should == true
792
+ atomic_attribute_writers.empty?.should == true
793
+ atomic_attribute_readers.empty?.should == true
794
+ atomic_attribute_accessors.empty?.should == true
795
+
796
+ end
797
+ end
798
+
799
+ ##################################
800
+ # non_atomic_attribute_writers #
801
+ ##################################
802
+
803
+ it 'can declare non-atomic attribute accessors' do
804
+ class ::Persistence::Object::Complex::Attributes::NonAtomicAttributeWriters
805
+
806
+ include ::Persistence::Object::Complex
807
+
808
+ non_atomic_attribute_writers.empty?.should == true
809
+ non_atomic_attribute_readers.empty?.should == true
810
+ non_atomic_attribute_accessors.empty?.should == true
811
+ non_atomic_attributes.empty?.should == true
812
+ atomic_attributes.empty?.should == true
813
+ atomic_attribute_writers.empty?.should == true
814
+ atomic_attribute_readers.empty?.should == true
815
+ atomic_attribute_accessors.empty?.should == true
816
+
817
+ non_atomic_attribute_writers.push( :some_writer )
818
+ non_atomic_attributes[ :some_writer ].should == :writer
819
+ persistent_attributes[ :some_writer ].should == :writer
820
+ non_atomic_attribute_writers.should == [ :some_writer ]
821
+ non_atomic_attribute_readers.empty?.should == true
822
+ non_atomic_attribute_accessors.empty?.should == true
823
+ atomic_attributes.empty?.should == true
824
+ atomic_attribute_writers.empty?.should == true
825
+ atomic_attribute_readers.empty?.should == true
826
+ atomic_attribute_accessors.empty?.should == true
827
+
828
+ non_atomic_attributes[ :some_writer ] = :accessor
829
+ non_atomic_attribute_readers.delete( :some_writer )
830
+ non_atomic_attribute_writers.should == [ :some_writer ]
831
+ non_atomic_attribute_readers.empty?.should == true
832
+ non_atomic_attribute_accessors.empty?.should == true
833
+ atomic_attributes.empty?.should == true
834
+ atomic_attribute_writers.empty?.should == true
835
+ atomic_attribute_readers.empty?.should == true
836
+ atomic_attribute_accessors.empty?.should == true
837
+
838
+ non_atomic_attribute_writers.delete( :some_writer )
839
+ non_atomic_attributes[ :some_writer ].should == nil
840
+ persistent_attributes[ :some_writer ].should == nil
841
+ non_atomic_attribute_readers.empty?.should == true
842
+ non_atomic_attribute_writers.empty?.should == true
843
+ non_atomic_attribute_accessors.empty?.should == true
844
+ atomic_attributes.empty?.should == true
845
+ atomic_attribute_writers.empty?.should == true
846
+ atomic_attribute_readers.empty?.should == true
847
+ atomic_attribute_accessors.empty?.should == true
848
+
849
+ end
850
+ end
851
+
852
+ ####################################
853
+ # non_atomic_attribute_accessors #
854
+ ####################################
855
+
856
+ it 'can declare non-atomic attribute accessors' do
857
+ class ::Persistence::Object::Complex::Attributes::NonAtomicAttributeAccessors
858
+
859
+ include ::Persistence::Object::Complex
860
+
861
+ non_atomic_attribute_writers.empty?.should == true
862
+ non_atomic_attribute_readers.empty?.should == true
863
+ non_atomic_attribute_accessors.empty?.should == true
864
+ non_atomic_attributes.empty?.should == true
865
+ atomic_attributes.empty?.should == true
866
+ atomic_attribute_writers.empty?.should == true
867
+ atomic_attribute_readers.empty?.should == true
868
+ atomic_attribute_accessors.empty?.should == true
869
+
870
+ non_atomic_attribute_accessors.push( :some_accessor )
871
+ non_atomic_attributes[ :some_accessor ].should == :accessor
872
+ persistent_attributes[ :some_accessor ].should == :accessor
873
+ non_atomic_attribute_writers.should == [ :some_accessor ]
874
+ non_atomic_attribute_readers.should == [ :some_accessor ]
875
+ non_atomic_attribute_accessors.should == [ :some_accessor ]
876
+ atomic_attributes.empty?.should == true
877
+ atomic_attribute_writers.empty?.should == true
878
+ atomic_attribute_readers.empty?.should == true
879
+ atomic_attribute_accessors.empty?.should == true
880
+
881
+ non_atomic_attribute_accessors.delete( :some_accessor )
882
+ non_atomic_attributes[ :some_accessor ].should == nil
883
+ persistent_attributes[ :some_accessor ].should == nil
884
+ non_atomic_attribute_readers.empty?.should == true
885
+ non_atomic_attribute_writers.empty?.should == true
886
+ non_atomic_attribute_accessors.empty?.should == true
887
+ atomic_attributes.empty?.should == true
888
+ atomic_attribute_writers.empty?.should == true
889
+ atomic_attribute_readers.empty?.should == true
890
+ atomic_attribute_accessors.empty?.should == true
891
+
892
+ end
893
+ end
894
+
895
+ ##################################
896
+ # persistent_attribute_readers #
897
+ ##################################
898
+
899
+ it 'can declare persistent attribute readers' do
900
+ class ::Persistence::Object::Complex::Attributes::PersistentAttributeReaders
901
+
902
+ include ::Persistence::Object::Complex
903
+
904
+ # Atomic
905
+
906
+ persistent_attribute_readers.default_atomic!
907
+
908
+ atomic_attribute_writers.empty?.should == true
909
+ atomic_attribute_readers.empty?.should == true
910
+ atomic_attribute_accessors.empty?.should == true
911
+ atomic_attributes.empty?.should == true
912
+ non_atomic_attributes.empty?.should == true
913
+ non_atomic_attribute_writers.empty?.should == true
914
+ non_atomic_attribute_readers.empty?.should == true
915
+ non_atomic_attribute_accessors.empty?.should == true
916
+
917
+ atomic_attribute_readers.push( :some_reader )
918
+ atomic_attributes[ :some_reader ].should == :reader
919
+ persistent_attributes[ :some_reader ].should == :reader
920
+ atomic_attribute_readers.should == [ :some_reader ]
921
+ atomic_attribute_writers.empty?.should == true
922
+ atomic_attribute_accessors.empty?.should == true
923
+ non_atomic_attributes.empty?.should == true
924
+ non_atomic_attribute_writers.empty?.should == true
925
+ non_atomic_attribute_readers.empty?.should == true
926
+ non_atomic_attribute_accessors.empty?.should == true
927
+
928
+ atomic_attributes[ :some_reader ] = :accessor
929
+ atomic_attribute_writers.delete( :some_reader )
930
+ atomic_attribute_readers.should == [ :some_reader ]
931
+ atomic_attribute_writers.empty?.should == true
932
+ atomic_attribute_accessors.empty?.should == true
933
+ non_atomic_attributes.empty?.should == true
934
+ non_atomic_attribute_writers.empty?.should == true
935
+ non_atomic_attribute_readers.empty?.should == true
936
+ non_atomic_attribute_accessors.empty?.should == true
937
+
938
+ atomic_attribute_readers.delete( :some_reader )
939
+ atomic_attributes[ :some_reader ].should == nil
940
+ persistent_attributes[ :some_reader ].should == nil
941
+ atomic_attribute_readers.empty?.should == true
942
+ atomic_attribute_writers.empty?.should == true
943
+ atomic_attribute_accessors.empty?.should == true
944
+ non_atomic_attributes.empty?.should == true
945
+ non_atomic_attribute_writers.empty?.should == true
946
+ non_atomic_attribute_readers.empty?.should == true
947
+ non_atomic_attribute_accessors.empty?.should == true
948
+
949
+ # Non-Atomic
950
+
951
+ persistent_attribute_readers.default_non_atomic!
952
+
953
+ non_atomic_attribute_writers.empty?.should == true
954
+ non_atomic_attribute_readers.empty?.should == true
955
+ non_atomic_attribute_accessors.empty?.should == true
956
+ non_atomic_attributes.empty?.should == true
957
+ atomic_attributes.empty?.should == true
958
+ atomic_attribute_writers.empty?.should == true
959
+ atomic_attribute_readers.empty?.should == true
960
+ atomic_attribute_accessors.empty?.should == true
961
+
962
+ non_atomic_attribute_readers.push( :some_reader )
963
+ non_atomic_attributes[ :some_reader ].should == :reader
964
+ persistent_attributes[ :some_reader ].should == :reader
965
+ non_atomic_attribute_readers.should == [ :some_reader ]
966
+ non_atomic_attribute_writers.empty?.should == true
967
+ non_atomic_attribute_accessors.empty?.should == true
968
+ atomic_attributes.empty?.should == true
969
+ atomic_attribute_writers.empty?.should == true
970
+ atomic_attribute_readers.empty?.should == true
971
+ atomic_attribute_accessors.empty?.should == true
972
+
973
+ non_atomic_attributes[ :some_reader ] = :accessor
974
+ non_atomic_attribute_writers.delete( :some_reader )
975
+ non_atomic_attribute_readers.should == [ :some_reader ]
976
+ non_atomic_attribute_writers.empty?.should == true
977
+ non_atomic_attribute_accessors.empty?.should == true
978
+ atomic_attributes.empty?.should == true
979
+ atomic_attribute_writers.empty?.should == true
980
+ atomic_attribute_readers.empty?.should == true
981
+ atomic_attribute_accessors.empty?.should == true
982
+
983
+ non_atomic_attribute_readers.delete( :some_reader )
984
+ non_atomic_attributes[ :some_reader ].should == nil
985
+ persistent_attributes[ :some_reader ].should == nil
986
+ non_atomic_attribute_readers.empty?.should == true
987
+ non_atomic_attribute_writers.empty?.should == true
988
+ non_atomic_attribute_accessors.empty?.should == true
989
+ atomic_attributes.empty?.should == true
990
+ atomic_attribute_writers.empty?.should == true
991
+ atomic_attribute_readers.empty?.should == true
992
+ atomic_attribute_accessors.empty?.should == true
993
+
994
+ end
995
+ end
996
+
997
+ ##################################
998
+ # persistent_attribute_writers #
999
+ ##################################
1000
+
1001
+ it 'can declare persistent attribute writers' do
1002
+ class ::Persistence::Object::Complex::Attributes::PersistentAttributeWriters
1003
+
1004
+ include ::Persistence::Object::Complex
1005
+
1006
+ # Atomic
1007
+
1008
+ persistent_attribute_writers.default_atomic!
1009
+
1010
+ atomic_attribute_writers.empty?.should == true
1011
+ atomic_attribute_readers.empty?.should == true
1012
+ atomic_attribute_accessors.empty?.should == true
1013
+ atomic_attributes.empty?.should == true
1014
+ non_atomic_attributes.empty?.should == true
1015
+ non_atomic_attribute_writers.empty?.should == true
1016
+ non_atomic_attribute_readers.empty?.should == true
1017
+ non_atomic_attribute_accessors.empty?.should == true
1018
+
1019
+ atomic_attribute_writers.push( :some_writer )
1020
+ atomic_attributes[ :some_writer ].should == :writer
1021
+ persistent_attributes[ :some_writer ].should == :writer
1022
+ atomic_attribute_writers.should == [ :some_writer ]
1023
+ atomic_attribute_readers.empty?.should == true
1024
+ atomic_attribute_accessors.empty?.should == true
1025
+ non_atomic_attributes.empty?.should == true
1026
+ non_atomic_attribute_writers.empty?.should == true
1027
+ non_atomic_attribute_readers.empty?.should == true
1028
+ non_atomic_attribute_accessors.empty?.should == true
1029
+
1030
+ atomic_attributes[ :some_writer ] = :accessor
1031
+ atomic_attribute_readers.delete( :some_writer )
1032
+ atomic_attribute_writers.should == [ :some_writer ]
1033
+ atomic_attribute_readers.empty?.should == true
1034
+ atomic_attribute_accessors.empty?.should == true
1035
+ non_atomic_attributes.empty?.should == true
1036
+ non_atomic_attribute_writers.empty?.should == true
1037
+ non_atomic_attribute_readers.empty?.should == true
1038
+ non_atomic_attribute_accessors.empty?.should == true
1039
+
1040
+ atomic_attribute_writers.delete( :some_writer )
1041
+ atomic_attributes[ :some_writer ].should == nil
1042
+ persistent_attributes[ :some_writer ].should == nil
1043
+ atomic_attribute_readers.empty?.should == true
1044
+ atomic_attribute_writers.empty?.should == true
1045
+ atomic_attribute_accessors.empty?.should == true
1046
+ non_atomic_attributes.empty?.should == true
1047
+ non_atomic_attribute_writers.empty?.should == true
1048
+ non_atomic_attribute_readers.empty?.should == true
1049
+ non_atomic_attribute_accessors.empty?.should == true
1050
+
1051
+ # Non-Atomic
1052
+
1053
+ persistent_attribute_writers.default_non_atomic!
1054
+
1055
+ non_atomic_attribute_writers.empty?.should == true
1056
+ non_atomic_attribute_readers.empty?.should == true
1057
+ non_atomic_attribute_accessors.empty?.should == true
1058
+ non_atomic_attributes.empty?.should == true
1059
+ atomic_attributes.empty?.should == true
1060
+ atomic_attribute_writers.empty?.should == true
1061
+ atomic_attribute_readers.empty?.should == true
1062
+ atomic_attribute_accessors.empty?.should == true
1063
+
1064
+ non_atomic_attribute_writers.push( :some_writer )
1065
+ non_atomic_attributes[ :some_writer ].should == :writer
1066
+ persistent_attributes[ :some_writer ].should == :writer
1067
+ non_atomic_attribute_writers.should == [ :some_writer ]
1068
+ non_atomic_attribute_readers.empty?.should == true
1069
+ non_atomic_attribute_accessors.empty?.should == true
1070
+ atomic_attributes.empty?.should == true
1071
+ atomic_attribute_writers.empty?.should == true
1072
+ atomic_attribute_readers.empty?.should == true
1073
+ atomic_attribute_accessors.empty?.should == true
1074
+
1075
+ non_atomic_attributes[ :some_writer ] = :accessor
1076
+ non_atomic_attribute_readers.delete( :some_writer )
1077
+ non_atomic_attribute_writers.should == [ :some_writer ]
1078
+ non_atomic_attribute_readers.empty?.should == true
1079
+ non_atomic_attribute_accessors.empty?.should == true
1080
+ atomic_attributes.empty?.should == true
1081
+ atomic_attribute_writers.empty?.should == true
1082
+ atomic_attribute_readers.empty?.should == true
1083
+ atomic_attribute_accessors.empty?.should == true
1084
+
1085
+ non_atomic_attribute_writers.delete( :some_writer )
1086
+ non_atomic_attributes[ :some_writer ].should == nil
1087
+ persistent_attributes[ :some_writer ].should == nil
1088
+ non_atomic_attribute_readers.empty?.should == true
1089
+ non_atomic_attribute_writers.empty?.should == true
1090
+ non_atomic_attribute_accessors.empty?.should == true
1091
+ atomic_attributes.empty?.should == true
1092
+ atomic_attribute_writers.empty?.should == true
1093
+ atomic_attribute_readers.empty?.should == true
1094
+ atomic_attribute_accessors.empty?.should == true
1095
+
1096
+ end
1097
+ end
1098
+
1099
+ ####################################
1100
+ # persistent_attribute_accessors #
1101
+ ####################################
1102
+
1103
+ it 'can declare persistent attribute accessors' do
1104
+ class ::Persistence::Object::Complex::Attributes::PersistentAttributeAccessors
1105
+
1106
+ include ::Persistence::Object::Complex
1107
+
1108
+ # Atomic
1109
+
1110
+ persistent_attribute_accessors.default_atomic!
1111
+
1112
+ atomic_attribute_writers.empty?.should == true
1113
+ atomic_attribute_readers.empty?.should == true
1114
+ atomic_attribute_accessors.empty?.should == true
1115
+ atomic_attributes.empty?.should == true
1116
+ non_atomic_attributes.empty?.should == true
1117
+ non_atomic_attribute_writers.empty?.should == true
1118
+ non_atomic_attribute_readers.empty?.should == true
1119
+ non_atomic_attribute_accessors.empty?.should == true
1120
+
1121
+ atomic_attribute_accessors.push( :some_accessor )
1122
+ atomic_attributes[ :some_accessor ].should == :accessor
1123
+ persistent_attributes[ :some_accessor ].should == :accessor
1124
+ atomic_attribute_writers.should == [ :some_accessor ]
1125
+ atomic_attribute_readers.should == [ :some_accessor ]
1126
+ atomic_attribute_accessors.should == [ :some_accessor ]
1127
+ non_atomic_attributes.empty?.should == true
1128
+ non_atomic_attribute_writers.empty?.should == true
1129
+ non_atomic_attribute_readers.empty?.should == true
1130
+ non_atomic_attribute_accessors.empty?.should == true
1131
+
1132
+ atomic_attribute_accessors.delete( :some_accessor )
1133
+ atomic_attributes[ :some_accessor ].should == nil
1134
+ persistent_attributes[ :some_accessor ].should == nil
1135
+ atomic_attribute_readers.empty?.should == true
1136
+ atomic_attribute_writers.empty?.should == true
1137
+ atomic_attribute_accessors.empty?.should == true
1138
+ non_atomic_attributes.empty?.should == true
1139
+ non_atomic_attribute_writers.empty?.should == true
1140
+ non_atomic_attribute_readers.empty?.should == true
1141
+ non_atomic_attribute_accessors.empty?.should == true
1142
+
1143
+
1144
+ # Non-Atomic
1145
+
1146
+ persistent_attribute_accessors.default_non_atomic!
1147
+
1148
+ non_atomic_attribute_writers.empty?.should == true
1149
+ non_atomic_attribute_readers.empty?.should == true
1150
+ non_atomic_attribute_accessors.empty?.should == true
1151
+ non_atomic_attributes.empty?.should == true
1152
+ atomic_attributes.empty?.should == true
1153
+ atomic_attribute_writers.empty?.should == true
1154
+ atomic_attribute_readers.empty?.should == true
1155
+ atomic_attribute_accessors.empty?.should == true
1156
+
1157
+ non_atomic_attribute_accessors.push( :some_accessor )
1158
+ non_atomic_attributes[ :some_accessor ].should == :accessor
1159
+ persistent_attributes[ :some_accessor ].should == :accessor
1160
+ non_atomic_attribute_writers.should == [ :some_accessor ]
1161
+ non_atomic_attribute_readers.should == [ :some_accessor ]
1162
+ non_atomic_attribute_accessors.should == [ :some_accessor ]
1163
+ atomic_attributes.empty?.should == true
1164
+ atomic_attribute_writers.empty?.should == true
1165
+ atomic_attribute_readers.empty?.should == true
1166
+ atomic_attribute_accessors.empty?.should == true
1167
+
1168
+ non_atomic_attribute_accessors.delete( :some_accessor )
1169
+ non_atomic_attributes[ :some_accessor ].should == nil
1170
+ persistent_attributes[ :some_accessor ].should == nil
1171
+ non_atomic_attribute_readers.empty?.should == true
1172
+ non_atomic_attribute_writers.empty?.should == true
1173
+ non_atomic_attribute_accessors.empty?.should == true
1174
+ atomic_attributes.empty?.should == true
1175
+ atomic_attribute_writers.empty?.should == true
1176
+ atomic_attribute_readers.empty?.should == true
1177
+ atomic_attribute_accessors.empty?.should == true
1178
+
1179
+ end
1180
+ end
1181
+
1182
+ #######################
1183
+ # atomic_attribute? #
1184
+ #######################
1185
+
1186
+ it 'can report whether an attribute is atomic (:accessor, :reader, :writer).' do
1187
+ class ::Persistence::Object::Complex::Attributes::AtomicAttributeQ
1188
+ include ::Persistence::Object::Complex
1189
+ atomic_attributes[ :some_accessor ] = :accessor
1190
+ atomic_attributes[ :some_reader ] = :reader
1191
+ atomic_attributes[ :some_writer ] = :writer
1192
+ end
1193
+ ::Persistence::Object::Complex::Attributes::AtomicAttributeQ.new.instance_eval do
1194
+
1195
+ atomic_attribute?( :some_accessor ).should == true
1196
+ atomic_attribute?( :some_reader ).should == true
1197
+ atomic_attribute?( :some_writer ).should == true
1198
+ atomic_attribute?( :some_other_accessor ).should == false
1199
+ atomic_attribute?( :some_other_reader ).should == false
1200
+ atomic_attribute?( :some_other_writer ).should == false
1201
+
1202
+ atomic_attribute?( :some_accessor ).should == true
1203
+ atomic_attribute?( :some_reader ).should == true
1204
+ atomic_attribute?( :some_writer ).should == true
1205
+ atomic_attribute?( :some_other_accessor ).should == false
1206
+ atomic_attribute?( :some_other_reader ).should == false
1207
+ atomic_attribute?( :some_other_writer ).should == false
1208
+
1209
+ end
1210
+ end
1211
+
1212
+ ################################
1213
+ # atomic_attribute_accessor? #
1214
+ ################################
1215
+
1216
+ it 'can report whether an attribute is a atomic :accessor' do
1217
+ class ::Persistence::Object::Complex::Attributes::AtomicAttributeAccessorQ
1218
+ include ::Persistence::Object::Complex
1219
+ atomic_attributes[ :some_accessor ] = :accessor
1220
+ atomic_attributes[ :some_reader ] = :reader
1221
+ atomic_attributes[ :some_writer ] = :writer
1222
+ end
1223
+ ::Persistence::Object::Complex::Attributes::AtomicAttributeAccessorQ.new.instance_eval do
1224
+
1225
+ atomic_attribute_accessor?( :some_accessor ).should == true
1226
+ atomic_attribute_accessor?( :some_reader ).should == false
1227
+ atomic_attribute_accessor?( :some_writer ).should == false
1228
+ atomic_attribute_accessor?( :some_other_accessor ).should == false
1229
+ atomic_attribute_accessor?( :some_other_reader ).should == false
1230
+ atomic_attribute_accessor?( :some_other_writer ).should == false
1231
+
1232
+ atomic_attribute_accessor?( :some_accessor ).should == true
1233
+ atomic_attribute_accessor?( :some_reader ).should == false
1234
+ atomic_attribute_accessor?( :some_writer ).should == false
1235
+ atomic_attribute_accessor?( :some_other_accessor ).should == false
1236
+ atomic_attribute_accessor?( :some_other_reader ).should == false
1237
+ atomic_attribute_accessor?( :some_other_writer ).should == false
1238
+
1239
+ end
1240
+ end
1241
+
1242
+ ##############################
1243
+ # atomic_attribute_reader? #
1244
+ ##############################
1245
+
1246
+ it 'can report whether an attribute is a atomic :reader' do
1247
+ class ::Persistence::Object::Complex::Attributes::AtomicAttributeReaderQ
1248
+ include ::Persistence::Object::Complex
1249
+ atomic_attributes[ :some_accessor ] = :accessor
1250
+ atomic_attributes[ :some_reader ] = :reader
1251
+ atomic_attributes[ :some_writer ] = :writer
1252
+ end
1253
+ ::Persistence::Object::Complex::Attributes::AtomicAttributeReaderQ.new.instance_eval do
1254
+
1255
+ atomic_attribute_reader?( :some_accessor ).should == true
1256
+ atomic_attribute_reader?( :some_reader ).should == true
1257
+ atomic_attribute_reader?( :some_writer ).should == false
1258
+ atomic_attribute_reader?( :some_other_accessor ).should == false
1259
+ atomic_attribute_reader?( :some_other_reader ).should == false
1260
+ atomic_attribute_reader?( :some_other_writer ).should == false
1261
+
1262
+ atomic_attribute_reader?( :some_accessor ).should == true
1263
+ atomic_attribute_reader?( :some_reader ).should == true
1264
+ atomic_attribute_reader?( :some_writer ).should == false
1265
+ atomic_attribute_reader?( :some_other_accessor ).should == false
1266
+ atomic_attribute_reader?( :some_other_reader ).should == false
1267
+ atomic_attribute_reader?( :some_other_writer ).should == false
1268
+
1269
+ end
1270
+ end
1271
+
1272
+ ##############################
1273
+ # atomic_attribute_writer? #
1274
+ ##############################
1275
+
1276
+ it 'can report whether an attribute is a atomic :writer' do
1277
+ class ::Persistence::Object::Complex::Attributes::AtomicAttributeWriterQ
1278
+ include ::Persistence::Object::Complex
1279
+ atomic_attributes[ :some_accessor ] = :accessor
1280
+ atomic_attributes[ :some_reader ] = :reader
1281
+ atomic_attributes[ :some_writer ] = :writer
1282
+ end
1283
+ ::Persistence::Object::Complex::Attributes::AtomicAttributeWriterQ.new.instance_eval do
1284
+
1285
+ atomic_attribute_writer?( :some_accessor ).should == true
1286
+ atomic_attribute_writer?( :some_reader ).should == false
1287
+ atomic_attribute_writer?( :some_writer ).should == true
1288
+ atomic_attribute_writer?( :some_other_accessor ).should == false
1289
+ atomic_attribute_writer?( :some_other_reader ).should == false
1290
+ atomic_attribute_writer?( :some_other_writer ).should == false
1291
+
1292
+ atomic_attribute_writer?( :some_accessor ).should == true
1293
+ atomic_attribute_writer?( :some_reader ).should == false
1294
+ atomic_attribute_writer?( :some_writer ).should == true
1295
+ atomic_attribute_writer?( :some_other_accessor ).should == false
1296
+ atomic_attribute_writer?( :some_other_reader ).should == false
1297
+ atomic_attribute_writer?( :some_other_writer ).should == false
1298
+
1299
+ end
1300
+ end
1301
+
1302
+ #############################
1303
+ # atomic_attribute_status #
1304
+ #############################
1305
+
1306
+ it 'can report the current atomic status (:accessor, :reader, :writer) of an attribute' do
1307
+ class ::Persistence::Object::Complex::Attributes::AtomicAttributeStatus
1308
+ include ::Persistence::Object::Complex
1309
+ atomic_attributes[ :some_accessor ] = :accessor
1310
+ atomic_attributes[ :some_reader ] = :reader
1311
+ atomic_attributes[ :some_writer ] = :writer
1312
+ end
1313
+ ::Persistence::Object::Complex::Attributes::AtomicAttributeStatus.new.instance_eval do
1314
+
1315
+ atomic_attribute_status( :some_accessor ).should == :accessor
1316
+ atomic_attribute_status( :some_reader ).should == :reader
1317
+ atomic_attribute_status( :some_writer ).should == :writer
1318
+ atomic_attribute_status( :some_other_accessor ).should == nil
1319
+ atomic_attribute_status( :some_other_reader ).should == nil
1320
+ atomic_attribute_status( :some_other_writer ).should == nil
1321
+
1322
+ atomic_attribute_status( :some_accessor ).should == :accessor
1323
+ atomic_attribute_status( :some_reader ).should == :reader
1324
+ atomic_attribute_status( :some_writer ).should == :writer
1325
+ atomic_attribute_status( :some_other_accessor ).should == nil
1326
+ atomic_attribute_status( :some_other_reader ).should == nil
1327
+ atomic_attribute_status( :some_other_writer ).should == nil
1328
+
1329
+ end
1330
+ end
1331
+
1332
+ ###########################
1333
+ # non_atomic_attribute? #
1334
+ ###########################
1335
+
1336
+ it 'can report whether an attribute is non_atomic (:accessor, :reader, :writer).' do
1337
+ class ::Persistence::Object::Complex::Attributes::NonAtomicAttributeQ
1338
+ include ::Persistence::Object::Complex
1339
+ non_atomic_attributes[ :some_accessor ] = :accessor
1340
+ non_atomic_attributes[ :some_reader ] = :reader
1341
+ non_atomic_attributes[ :some_writer ] = :writer
1342
+ end
1343
+ ::Persistence::Object::Complex::Attributes::NonAtomicAttributeQ.new.instance_eval do
1344
+
1345
+ non_atomic_attribute?( :some_accessor ).should == true
1346
+ non_atomic_attribute?( :some_reader ).should == true
1347
+ non_atomic_attribute?( :some_writer ).should == true
1348
+ non_atomic_attribute?( :some_other_accessor ).should == false
1349
+ non_atomic_attribute?( :some_other_reader ).should == false
1350
+ non_atomic_attribute?( :some_other_writer ).should == false
1351
+
1352
+ non_atomic_attribute?( :some_accessor ).should == true
1353
+ non_atomic_attribute?( :some_reader ).should == true
1354
+ non_atomic_attribute?( :some_writer ).should == true
1355
+ non_atomic_attribute?( :some_other_accessor ).should == false
1356
+ non_atomic_attribute?( :some_other_reader ).should == false
1357
+ non_atomic_attribute?( :some_other_writer ).should == false
1358
+
1359
+ end
1360
+ end
1361
+
1362
+ ####################################
1363
+ # non_atomic_attribute_accessor? #
1364
+ ####################################
1365
+
1366
+ it 'can report whether an attribute is a non_atomic :accessor' do
1367
+ class ::Persistence::Object::Complex::Attributes::NonAtomicAttributeAccessorQ
1368
+ include ::Persistence::Object::Complex
1369
+ non_atomic_attributes[ :some_accessor ] = :accessor
1370
+ non_atomic_attributes[ :some_reader ] = :reader
1371
+ non_atomic_attributes[ :some_writer ] = :writer
1372
+ end
1373
+ ::Persistence::Object::Complex::Attributes::NonAtomicAttributeAccessorQ.new.instance_eval do
1374
+
1375
+ non_atomic_attribute_accessor?( :some_accessor ).should == true
1376
+ non_atomic_attribute_accessor?( :some_reader ).should == false
1377
+ non_atomic_attribute_accessor?( :some_writer ).should == false
1378
+ non_atomic_attribute_accessor?( :some_other_accessor ).should == false
1379
+ non_atomic_attribute_accessor?( :some_other_reader ).should == false
1380
+ non_atomic_attribute_accessor?( :some_other_writer ).should == false
1381
+
1382
+ non_atomic_attribute_accessor?( :some_accessor ).should == true
1383
+ non_atomic_attribute_accessor?( :some_reader ).should == false
1384
+ non_atomic_attribute_accessor?( :some_writer ).should == false
1385
+ non_atomic_attribute_accessor?( :some_other_accessor ).should == false
1386
+ non_atomic_attribute_accessor?( :some_other_reader ).should == false
1387
+ non_atomic_attribute_accessor?( :some_other_writer ).should == false
1388
+
1389
+ end
1390
+ end
1391
+
1392
+ ##################################
1393
+ # non_atomic_attribute_reader? #
1394
+ ##################################
1395
+
1396
+ it 'can report whether an attribute is a non_atomic :reader' do
1397
+ class ::Persistence::Object::Complex::Attributes::NonAtomicAttributeReaderQ
1398
+ include ::Persistence::Object::Complex
1399
+ non_atomic_attributes[ :some_accessor ] = :accessor
1400
+ non_atomic_attributes[ :some_reader ] = :reader
1401
+ non_atomic_attributes[ :some_writer ] = :writer
1402
+ end
1403
+ ::Persistence::Object::Complex::Attributes::NonAtomicAttributeReaderQ.new.instance_eval do
1404
+
1405
+ non_atomic_attribute_reader?( :some_accessor ).should == true
1406
+ non_atomic_attribute_reader?( :some_reader ).should == true
1407
+ non_atomic_attribute_reader?( :some_writer ).should == false
1408
+ non_atomic_attribute_reader?( :some_other_accessor ).should == false
1409
+ non_atomic_attribute_reader?( :some_other_reader ).should == false
1410
+ non_atomic_attribute_reader?( :some_other_writer ).should == false
1411
+
1412
+ non_atomic_attribute_reader?( :some_accessor ).should == true
1413
+ non_atomic_attribute_reader?( :some_reader ).should == true
1414
+ non_atomic_attribute_reader?( :some_writer ).should == false
1415
+ non_atomic_attribute_reader?( :some_other_accessor ).should == false
1416
+ non_atomic_attribute_reader?( :some_other_reader ).should == false
1417
+ non_atomic_attribute_reader?( :some_other_writer ).should == false
1418
+
1419
+ end
1420
+ end
1421
+
1422
+ ##################################
1423
+ # non_atomic_attribute_writer? #
1424
+ ##################################
1425
+
1426
+ it 'can report whether an attribute is a non_atomic :writer' do
1427
+ class ::Persistence::Object::Complex::Attributes::NonAtomicAttributeWriterQ
1428
+ include ::Persistence::Object::Complex
1429
+ non_atomic_attributes[ :some_accessor ] = :accessor
1430
+ non_atomic_attributes[ :some_reader ] = :reader
1431
+ non_atomic_attributes[ :some_writer ] = :writer
1432
+ end
1433
+ ::Persistence::Object::Complex::Attributes::NonAtomicAttributeWriterQ.new.instance_eval do
1434
+
1435
+ non_atomic_attribute_writer?( :some_accessor ).should == true
1436
+ non_atomic_attribute_writer?( :some_reader ).should == false
1437
+ non_atomic_attribute_writer?( :some_writer ).should == true
1438
+ non_atomic_attribute_writer?( :some_other_accessor ).should == false
1439
+ non_atomic_attribute_writer?( :some_other_reader ).should == false
1440
+ non_atomic_attribute_writer?( :some_other_writer ).should == false
1441
+
1442
+ non_atomic_attribute_writer?( :some_accessor ).should == true
1443
+ non_atomic_attribute_writer?( :some_reader ).should == false
1444
+ non_atomic_attribute_writer?( :some_writer ).should == true
1445
+ non_atomic_attribute_writer?( :some_other_accessor ).should == false
1446
+ non_atomic_attribute_writer?( :some_other_reader ).should == false
1447
+ non_atomic_attribute_writer?( :some_other_writer ).should == false
1448
+
1449
+ end
1450
+ end
1451
+
1452
+ #################################
1453
+ # non_atomic_attribute_status #
1454
+ #################################
1455
+
1456
+ it 'can report the current non_atomic status (:accessor, :reader, :writer) of an attribute' do
1457
+ class ::Persistence::Object::Complex::Attributes::NonAtomicAttributeStatus
1458
+ include ::Persistence::Object::Complex
1459
+ non_atomic_attributes[ :some_accessor ] = :accessor
1460
+ non_atomic_attributes[ :some_reader ] = :reader
1461
+ non_atomic_attributes[ :some_writer ] = :writer
1462
+ end
1463
+ ::Persistence::Object::Complex::Attributes::NonAtomicAttributeStatus.new.instance_eval do
1464
+
1465
+ non_atomic_attribute_status( :some_accessor ).should == :accessor
1466
+ non_atomic_attribute_status( :some_reader ).should == :reader
1467
+ non_atomic_attribute_status( :some_writer ).should == :writer
1468
+ non_atomic_attribute_status( :some_other_accessor ).should == nil
1469
+ non_atomic_attribute_status( :some_other_reader ).should == nil
1470
+ non_atomic_attribute_status( :some_other_writer ).should == nil
1471
+
1472
+ non_atomic_attribute_status( :some_accessor ).should == :accessor
1473
+ non_atomic_attribute_status( :some_reader ).should == :reader
1474
+ non_atomic_attribute_status( :some_writer ).should == :writer
1475
+ non_atomic_attribute_status( :some_other_accessor ).should == nil
1476
+ non_atomic_attribute_status( :some_other_reader ).should == nil
1477
+ non_atomic_attribute_status( :some_other_writer ).should == nil
1478
+
1479
+ end
1480
+ end
1481
+
1482
+ ###########################
1483
+ # persistent_attribute? #
1484
+ ###########################
1485
+
1486
+ it 'can report whether an attribute is persistent (:accessor, :reader, :writer).' do
1487
+ class ::Persistence::Object::Complex::Attributes::PersistentAttributeQ
1488
+ include ::Persistence::Object::Complex
1489
+ non_atomic_attributes[ :some_non_atomic_accessor ] = :accessor
1490
+ non_atomic_attributes[ :some_non_atomic_reader ] = :reader
1491
+ non_atomic_attributes[ :some_non_atomic_writer ] = :writer
1492
+ atomic_attributes[ :some_atomic_accessor ] = :accessor
1493
+ atomic_attributes[ :some_atomic_reader ] = :reader
1494
+ atomic_attributes[ :some_atomic_writer ] = :writer
1495
+ end
1496
+ ::Persistence::Object::Complex::Attributes::PersistentAttributeQ.new.instance_eval do
1497
+
1498
+ persistent_attribute?( :some_non_atomic_accessor ).should == true
1499
+ persistent_attribute?( :some_non_atomic_reader ).should == true
1500
+ persistent_attribute?( :some_non_atomic_writer ).should == true
1501
+ persistent_attribute?( :some_non_atomic_other_accessor ).should == false
1502
+ persistent_attribute?( :some_non_atomic_other_reader ).should == false
1503
+ persistent_attribute?( :some_non_atomic_other_writer ).should == false
1504
+
1505
+ persistent_attribute?( :some_non_atomic_accessor ).should == true
1506
+ persistent_attribute?( :some_non_atomic_reader ).should == true
1507
+ persistent_attribute?( :some_non_atomic_writer ).should == true
1508
+ persistent_attribute?( :some_non_atomic_other_accessor ).should == false
1509
+ persistent_attribute?( :some_non_atomic_other_reader ).should == false
1510
+ persistent_attribute?( :some_non_atomic_other_writer ).should == false
1511
+
1512
+ persistent_attribute?( :some_atomic_accessor ).should == true
1513
+ persistent_attribute?( :some_atomic_reader ).should == true
1514
+ persistent_attribute?( :some_atomic_writer ).should == true
1515
+ persistent_attribute?( :some_atomic_other_accessor ).should == false
1516
+ persistent_attribute?( :some_atomic_other_reader ).should == false
1517
+ persistent_attribute?( :some_atomic_other_writer ).should == false
1518
+
1519
+ persistent_attribute?( :some_atomic_accessor ).should == true
1520
+ persistent_attribute?( :some_atomic_reader ).should == true
1521
+ persistent_attribute?( :some_atomic_writer ).should == true
1522
+ persistent_attribute?( :some_atomic_other_accessor ).should == false
1523
+ persistent_attribute?( :some_atomic_other_reader ).should == false
1524
+ persistent_attribute?( :some_atomic_other_writer ).should == false
1525
+
1526
+ end
1527
+ end
1528
+
1529
+ ####################################
1530
+ # persistent_attribute_accessor? #
1531
+ ####################################
1532
+
1533
+ it 'can report whether an attribute is a persistent :accessor' do
1534
+ class ::Persistence::Object::Complex::Attributes::PersistentAttributeAccessorQ
1535
+ include ::Persistence::Object::Complex
1536
+ non_atomic_attributes[ :some_non_atomic_accessor ] = :accessor
1537
+ non_atomic_attributes[ :some_non_atomic_reader ] = :reader
1538
+ non_atomic_attributes[ :some_non_atomic_writer ] = :writer
1539
+ atomic_attributes[ :some_atomic_accessor ] = :accessor
1540
+ atomic_attributes[ :some_atomic_reader ] = :reader
1541
+ atomic_attributes[ :some_atomic_writer ] = :writer
1542
+ end
1543
+ ::Persistence::Object::Complex::Attributes::PersistentAttributeAccessorQ.new.instance_eval do
1544
+
1545
+ persistent_attribute_accessor?( :some_non_atomic_accessor ).should == true
1546
+ persistent_attribute_accessor?( :some_non_atomic_reader ).should == false
1547
+ persistent_attribute_accessor?( :some_non_atomic_writer ).should == false
1548
+ persistent_attribute_accessor?( :some_non_atomic_other_accessor ).should == false
1549
+ persistent_attribute_accessor?( :some_non_atomic_other_reader ).should == false
1550
+ persistent_attribute_accessor?( :some_non_atomic_other_writer ).should == false
1551
+
1552
+ persistent_attribute_accessor?( :some_non_atomic_accessor ).should == true
1553
+ persistent_attribute_accessor?( :some_non_atomic_reader ).should == false
1554
+ persistent_attribute_accessor?( :some_non_atomic_writer ).should == false
1555
+ persistent_attribute_accessor?( :some_non_atomic_other_accessor ).should == false
1556
+ persistent_attribute_accessor?( :some_non_atomic_other_reader ).should == false
1557
+ persistent_attribute_accessor?( :some_non_atomic_other_writer ).should == false
1558
+
1559
+ persistent_attribute_accessor?( :some_atomic_accessor ).should == true
1560
+ persistent_attribute_accessor?( :some_atomic_reader ).should == false
1561
+ persistent_attribute_accessor?( :some_atomic_writer ).should == false
1562
+ persistent_attribute_accessor?( :some_atomic_other_accessor ).should == false
1563
+ persistent_attribute_accessor?( :some_atomic_other_reader ).should == false
1564
+ persistent_attribute_accessor?( :some_atomic_other_writer ).should == false
1565
+
1566
+ persistent_attribute_accessor?( :some_atomic_accessor ).should == true
1567
+ persistent_attribute_accessor?( :some_atomic_reader ).should == false
1568
+ persistent_attribute_accessor?( :some_atomic_writer ).should == false
1569
+ persistent_attribute_accessor?( :some_atomic_other_accessor ).should == false
1570
+ persistent_attribute_accessor?( :some_atomic_other_reader ).should == false
1571
+ persistent_attribute_accessor?( :some_atomic_other_writer ).should == false
1572
+
1573
+ end
1574
+ end
1575
+
1576
+ ##################################
1577
+ # persistent_attribute_reader? #
1578
+ ##################################
1579
+
1580
+ it 'can report whether an attribute is a persistent :reader' do
1581
+ class ::Persistence::Object::Complex::Attributes::PersistentAttributeReaderQ
1582
+ include ::Persistence::Object::Complex
1583
+ non_atomic_attributes[ :some_non_atomic_accessor ] = :accessor
1584
+ non_atomic_attributes[ :some_non_atomic_reader ] = :reader
1585
+ non_atomic_attributes[ :some_non_atomic_writer ] = :writer
1586
+ atomic_attributes[ :some_atomic_accessor ] = :accessor
1587
+ atomic_attributes[ :some_atomic_reader ] = :reader
1588
+ atomic_attributes[ :some_atomic_writer ] = :writer
1589
+ end
1590
+ ::Persistence::Object::Complex::Attributes::PersistentAttributeReaderQ.new.instance_eval do
1591
+
1592
+ persistent_attribute_reader?( :some_non_atomic_accessor ).should == true
1593
+ persistent_attribute_reader?( :some_non_atomic_reader ).should == true
1594
+ persistent_attribute_reader?( :some_non_atomic_writer ).should == false
1595
+ persistent_attribute_reader?( :some_non_atomic_other_accessor ).should == false
1596
+ persistent_attribute_reader?( :some_non_atomic_other_reader ).should == false
1597
+ persistent_attribute_reader?( :some_non_atomic_other_writer ).should == false
1598
+
1599
+ persistent_attribute_reader?( :some_non_atomic_accessor ).should == true
1600
+ persistent_attribute_reader?( :some_non_atomic_reader ).should == true
1601
+ persistent_attribute_reader?( :some_non_atomic_writer ).should == false
1602
+ persistent_attribute_reader?( :some_non_atomic_other_accessor ).should == false
1603
+ persistent_attribute_reader?( :some_non_atomic_other_reader ).should == false
1604
+ persistent_attribute_reader?( :some_non_atomic_other_writer ).should == false
1605
+
1606
+ persistent_attribute_reader?( :some_atomic_accessor ).should == true
1607
+ persistent_attribute_reader?( :some_atomic_reader ).should == true
1608
+ persistent_attribute_reader?( :some_atomic_writer ).should == false
1609
+ persistent_attribute_reader?( :some_atomic_other_accessor ).should == false
1610
+ persistent_attribute_reader?( :some_atomic_other_reader ).should == false
1611
+ persistent_attribute_reader?( :some_atomic_other_writer ).should == false
1612
+
1613
+ persistent_attribute_reader?( :some_atomic_accessor ).should == true
1614
+ persistent_attribute_reader?( :some_atomic_reader ).should == true
1615
+ persistent_attribute_reader?( :some_atomic_writer ).should == false
1616
+ persistent_attribute_reader?( :some_atomic_other_accessor ).should == false
1617
+ persistent_attribute_reader?( :some_atomic_other_reader ).should == false
1618
+ persistent_attribute_reader?( :some_atomic_other_writer ).should == false
1619
+
1620
+ end
1621
+ end
1622
+
1623
+ ##################################
1624
+ # persistent_attribute_writer? #
1625
+ ##################################
1626
+
1627
+ it 'can report whether an attribute is a persistent :writer' do
1628
+ class ::Persistence::Object::Complex::Attributes::PersistentAttributeWriterQ
1629
+ include ::Persistence::Object::Complex
1630
+ non_atomic_attributes[ :some_non_atomic_accessor ] = :accessor
1631
+ non_atomic_attributes[ :some_non_atomic_reader ] = :reader
1632
+ non_atomic_attributes[ :some_non_atomic_writer ] = :writer
1633
+ atomic_attributes[ :some_atomic_accessor ] = :accessor
1634
+ atomic_attributes[ :some_atomic_reader ] = :reader
1635
+ atomic_attributes[ :some_atomic_writer ] = :writer
1636
+ end
1637
+ ::Persistence::Object::Complex::Attributes::PersistentAttributeWriterQ.new.instance_eval do
1638
+
1639
+ persistent_attribute_writer?( :some_non_atomic_accessor ).should == true
1640
+ persistent_attribute_writer?( :some_non_atomic_reader ).should == false
1641
+ persistent_attribute_writer?( :some_non_atomic_writer ).should == true
1642
+ persistent_attribute_writer?( :some_non_atomic_other_accessor ).should == false
1643
+ persistent_attribute_writer?( :some_non_atomic_other_reader ).should == false
1644
+ persistent_attribute_writer?( :some_non_atomic_other_writer ).should == false
1645
+
1646
+ persistent_attribute_writer?( :some_non_atomic_accessor ).should == true
1647
+ persistent_attribute_writer?( :some_non_atomic_reader ).should == false
1648
+ persistent_attribute_writer?( :some_non_atomic_writer ).should == true
1649
+ persistent_attribute_writer?( :some_non_atomic_other_accessor ).should == false
1650
+ persistent_attribute_writer?( :some_non_atomic_other_reader ).should == false
1651
+ persistent_attribute_writer?( :some_non_atomic_other_writer ).should == false
1652
+
1653
+ persistent_attribute_writer?( :some_atomic_accessor ).should == true
1654
+ persistent_attribute_writer?( :some_atomic_reader ).should == false
1655
+ persistent_attribute_writer?( :some_atomic_writer ).should == true
1656
+ persistent_attribute_writer?( :some_atomic_other_accessor ).should == false
1657
+ persistent_attribute_writer?( :some_atomic_other_reader ).should == false
1658
+ persistent_attribute_writer?( :some_atomic_other_writer ).should == false
1659
+
1660
+ persistent_attribute_writer?( :some_atomic_accessor ).should == true
1661
+ persistent_attribute_writer?( :some_atomic_reader ).should == false
1662
+ persistent_attribute_writer?( :some_atomic_writer ).should == true
1663
+ persistent_attribute_writer?( :some_atomic_other_accessor ).should == false
1664
+ persistent_attribute_writer?( :some_atomic_other_reader ).should == false
1665
+ persistent_attribute_writer?( :some_atomic_other_writer ).should == false
1666
+
1667
+ end
1668
+ end
1669
+
1670
+ #################################
1671
+ # persistent_attribute_status #
1672
+ #################################
1673
+
1674
+ it 'can report the current persistent status (:accessor, :reader, :writer) of an attribute' do
1675
+ class ::Persistence::Object::Complex::Attributes::PersistentAttributeStatus
1676
+ include ::Persistence::Object::Complex
1677
+ non_atomic_attributes[ :some_non_atomic_accessor ] = :accessor
1678
+ non_atomic_attributes[ :some_non_atomic_reader ] = :reader
1679
+ non_atomic_attributes[ :some_non_atomic_writer ] = :writer
1680
+ atomic_attributes[ :some_atomic_accessor ] = :accessor
1681
+ atomic_attributes[ :some_atomic_reader ] = :reader
1682
+ atomic_attributes[ :some_atomic_writer ] = :writer
1683
+ end
1684
+ ::Persistence::Object::Complex::Attributes::PersistentAttributeStatus.new.instance_eval do
1685
+
1686
+ persistent_attribute_status( :some_non_atomic_accessor ).should == :accessor
1687
+ persistent_attribute_status( :some_non_atomic_reader ).should == :reader
1688
+ persistent_attribute_status( :some_non_atomic_writer ).should == :writer
1689
+ persistent_attribute_status( :some_non_atomic_other_accessor ).should == nil
1690
+ persistent_attribute_status( :some_non_atomic_other_reader ).should == nil
1691
+ persistent_attribute_status( :some_non_atomic_other_writer ).should == nil
1692
+
1693
+ persistent_attribute_status( :some_non_atomic_accessor ).should == :accessor
1694
+ persistent_attribute_status( :some_non_atomic_reader ).should == :reader
1695
+ persistent_attribute_status( :some_non_atomic_writer ).should == :writer
1696
+ persistent_attribute_status( :some_non_atomic_other_accessor ).should == nil
1697
+ persistent_attribute_status( :some_non_atomic_other_reader ).should == nil
1698
+ persistent_attribute_status( :some_non_atomic_other_writer ).should == nil
1699
+
1700
+ persistent_attribute_status( :some_atomic_accessor ).should == :accessor
1701
+ persistent_attribute_status( :some_atomic_reader ).should == :reader
1702
+ persistent_attribute_status( :some_atomic_writer ).should == :writer
1703
+ persistent_attribute_status( :some_atomic_other_accessor ).should == nil
1704
+ persistent_attribute_status( :some_atomic_other_reader ).should == nil
1705
+ persistent_attribute_status( :some_atomic_other_writer ).should == nil
1706
+
1707
+ persistent_attribute_status( :some_atomic_accessor ).should == :accessor
1708
+ persistent_attribute_status( :some_atomic_reader ).should == :reader
1709
+ persistent_attribute_status( :some_atomic_writer ).should == :writer
1710
+ persistent_attribute_status( :some_atomic_other_accessor ).should == nil
1711
+ persistent_attribute_status( :some_atomic_other_reader ).should == nil
1712
+ persistent_attribute_status( :some_atomic_other_writer ).should == nil
1713
+
1714
+ end
1715
+ end
1716
+
1717
+ end