hprevalence 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/hprevalence.rb +28 -181
- data/lib/internal/command_logger.rb +11 -34
- data/lib/internal/marshallers/default.rb +17 -0
- data/lib/internal/marshallers/soap_marshaller.rb +26 -0
- data/lib/internal/marshallers/yaml_marshaller.rb +22 -0
- data/lib/internal/serializer.rb +38 -52
- data/lib/internal/store_manager.rb +9 -24
- data/rakefile.rb +1 -1
- data/samples/simple/main.rb +10 -0
- data/{test → samples/simple}/task_model.rb +0 -12
- data/samples/transparent/task_model.rb +36 -0
- data/test/command_logger_test.rb +2 -6
- data/test/default_model_serializer_test.rb +9 -8
- data/test/marshaller_test.rb +68 -0
- data/test/models/task_model.rb +91 -0
- data/test/simple_engine_test.rb +22 -5
- data/test/simple_engine_with_soap_test.rb +94 -0
- data/test/simple_engine_with_yaml_test.rb +94 -0
- metadata +12 -10
- data/lib/transparent.rb +0 -245
- data/test/circular_reference_test.rb +0 -96
- data/test/dvd_store_model.rb +0 -97
- data/test/natural_object_model_test.rb +0 -143
- data/test/project_model.rb +0 -99
- data/test/restoring_test.rb +0 -54
- data/test/transparent_module_test.rb +0 -115
@@ -1,96 +0,0 @@
|
|
1
|
-
|
2
|
-
$:.unshift(File.dirname(__FILE__) + "/../lib/")
|
3
|
-
|
4
|
-
require 'hprevalence'
|
5
|
-
require 'transparent'
|
6
|
-
require 'abstract_hprevalence_testcase'
|
7
|
-
require 'dvd_store_model'
|
8
|
-
require 'test/unit'
|
9
|
-
|
10
|
-
class Item
|
11
|
-
attr_accessor :sub_item
|
12
|
-
|
13
|
-
def initialize( sub )
|
14
|
-
@sub_item = sub
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
class SampleDatabase
|
19
|
-
include HPrevalence::Transparent::CustomBehavior
|
20
|
-
|
21
|
-
attr_reader :list
|
22
|
-
attr_proxy_attribute :list
|
23
|
-
attr_proxy_method :create_item
|
24
|
-
|
25
|
-
def initialize()
|
26
|
-
@list = []
|
27
|
-
end
|
28
|
-
|
29
|
-
def create_item( sub = nil )
|
30
|
-
Item.new( sub )
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
class CircularReferenceTest < Test::Unit::TestCase
|
35
|
-
include AbstractHPrevalenceTestHelper
|
36
|
-
|
37
|
-
def setup
|
38
|
-
reset_dir 'store/circular_test'
|
39
|
-
ensure_dir
|
40
|
-
load_engine
|
41
|
-
end
|
42
|
-
|
43
|
-
def teardown
|
44
|
-
@engine.close
|
45
|
-
end
|
46
|
-
|
47
|
-
def load_engine
|
48
|
-
teardown unless @engine.nil?
|
49
|
-
|
50
|
-
@engine = HPrevalence::EngineBuilder.build_transparent( @target_dir ) {
|
51
|
-
SampleDatabase.new()
|
52
|
-
}
|
53
|
-
|
54
|
-
assert_not_nil @engine
|
55
|
-
@system = @engine.system
|
56
|
-
assert_not_nil @system
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_simple
|
60
|
-
item = @system.create_item()
|
61
|
-
@system.list << item
|
62
|
-
|
63
|
-
load_engine
|
64
|
-
|
65
|
-
assert_equal 1, @system.list.length
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_circular
|
69
|
-
item = @system.create_item()
|
70
|
-
item.sub_item = item
|
71
|
-
|
72
|
-
@system.list << item
|
73
|
-
|
74
|
-
load_engine
|
75
|
-
|
76
|
-
assert_equal 1, @system.list.length
|
77
|
-
item = @system.list[0]
|
78
|
-
assert_equal item, item.sub_item
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_circular_with_snapshot
|
82
|
-
item = @system.create_item()
|
83
|
-
item.sub_item = item
|
84
|
-
|
85
|
-
@system.list << item
|
86
|
-
|
87
|
-
@engine.take_snapshot
|
88
|
-
load_engine
|
89
|
-
|
90
|
-
assert_equal 1, @system.list.length
|
91
|
-
item = @system.list[0]
|
92
|
-
assert_equal item, item.sub_item
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
96
|
-
|
data/test/dvd_store_model.rb
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
$:.unshift(File.dirname(__FILE__) + "/../lib/")
|
2
|
-
|
3
|
-
require 'transparent'
|
4
|
-
|
5
|
-
class AbstractCollection
|
6
|
-
include Enumerable
|
7
|
-
include HPrevalence::Transparent::CustomBehavior
|
8
|
-
attr_read_only :each
|
9
|
-
|
10
|
-
def initialize()
|
11
|
-
@list = []
|
12
|
-
end
|
13
|
-
|
14
|
-
def add( item )
|
15
|
-
@list << item
|
16
|
-
item
|
17
|
-
end
|
18
|
-
|
19
|
-
def each()
|
20
|
-
@list.each { |item|
|
21
|
-
yield(item)
|
22
|
-
}
|
23
|
-
end
|
24
|
-
|
25
|
-
def length
|
26
|
-
@list.length
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
class DvdCollection < AbstractCollection
|
32
|
-
# include HPrevalence::Transparent::CustomBehavior
|
33
|
-
|
34
|
-
def initialize()
|
35
|
-
super
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
|
-
class DvdStore
|
41
|
-
include HPrevalence::Transparent::CustomBehavior
|
42
|
-
|
43
|
-
attr_reader :available_items
|
44
|
-
attr_reader :available_categories
|
45
|
-
attr_reader :customers
|
46
|
-
|
47
|
-
attr_proxy_attribute :available_items, :available_categories, :customers
|
48
|
-
attr_proxy_method :create_dvd
|
49
|
-
attr_read_only :total_customers
|
50
|
-
|
51
|
-
def initialize()
|
52
|
-
@available_items = DvdCollection.new()
|
53
|
-
@available_categories = []
|
54
|
-
@customers = []
|
55
|
-
end
|
56
|
-
|
57
|
-
def total_customers
|
58
|
-
@customers.length
|
59
|
-
end
|
60
|
-
|
61
|
-
def create_dvd( dvd )
|
62
|
-
dvd
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
|
67
|
-
class Category
|
68
|
-
attr_reader :name
|
69
|
-
|
70
|
-
def initialize( name )
|
71
|
-
@name = name
|
72
|
-
end
|
73
|
-
|
74
|
-
end
|
75
|
-
|
76
|
-
class Dvd
|
77
|
-
attr_accessor :name, :price, :categories
|
78
|
-
|
79
|
-
def initialize( name, price, *categories )
|
80
|
-
@name, @price = name, price
|
81
|
-
@categories = *categories.dup()
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
85
|
-
|
86
|
-
class Customer
|
87
|
-
attr_accessor :name, :items_bought, :prefered_categories
|
88
|
-
|
89
|
-
def initialize( name )
|
90
|
-
@name = name
|
91
|
-
@items_bought = []
|
92
|
-
@prefered_categories = []
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
96
|
-
|
97
|
-
|
@@ -1,143 +0,0 @@
|
|
1
|
-
|
2
|
-
$:.unshift(File.dirname(__FILE__) + "/../lib/")
|
3
|
-
|
4
|
-
require 'hprevalence'
|
5
|
-
require 'transparent'
|
6
|
-
require 'abstract_hprevalence_testcase'
|
7
|
-
require 'dvd_store_model'
|
8
|
-
require 'test/unit'
|
9
|
-
|
10
|
-
class NaturalObjectModelTest < Test::Unit::TestCase
|
11
|
-
include AbstractHPrevalenceTestHelper
|
12
|
-
|
13
|
-
def setup
|
14
|
-
reset_dir 'store/natural_test'
|
15
|
-
ensure_dir
|
16
|
-
load_engine
|
17
|
-
end
|
18
|
-
|
19
|
-
def teardown
|
20
|
-
@engine.close
|
21
|
-
end
|
22
|
-
|
23
|
-
def load_engine
|
24
|
-
teardown unless @engine.nil?
|
25
|
-
|
26
|
-
@engine = HPrevalence::EngineBuilder.build_transparent( @target_dir ) {
|
27
|
-
DvdStore.new()
|
28
|
-
}
|
29
|
-
|
30
|
-
assert_not_nil @engine
|
31
|
-
@system = @engine.system
|
32
|
-
assert_not_nil @system
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_depth_1
|
36
|
-
assert_equal 0, @system.total_customers
|
37
|
-
|
38
|
-
fiction = Category.new('Fiction')
|
39
|
-
comedy = Category.new('Comedy')
|
40
|
-
|
41
|
-
@system.available_categories << fiction
|
42
|
-
@system.available_categories << comedy
|
43
|
-
|
44
|
-
dvd1 = @system.create_dvd( Dvd.new( 'Fight Club', 22.1, fiction ) )
|
45
|
-
dvd2 = @system.create_dvd( Dvd.new( 'Monty Python and the Holy Grail', 15, comedy ) )
|
46
|
-
|
47
|
-
@system.available_items.add( dvd1 )
|
48
|
-
@system.available_items.add( dvd2 )
|
49
|
-
|
50
|
-
assert_equal 2, @system.available_items.length
|
51
|
-
assert_equal 2, @system.available_categories.length
|
52
|
-
|
53
|
-
load_engine
|
54
|
-
|
55
|
-
assert_equal 2, @system.available_items.length
|
56
|
-
assert_equal 2, @system.available_categories.length
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_read_only_each
|
60
|
-
assert_equal 0, @system.total_customers
|
61
|
-
|
62
|
-
fiction = Category.new('Fiction')
|
63
|
-
comedy = Category.new('Comedy')
|
64
|
-
|
65
|
-
@system.available_categories << fiction
|
66
|
-
@system.available_categories << comedy
|
67
|
-
|
68
|
-
dvd1 = @system.create_dvd( Dvd.new( 'Fight Club', 22.1, fiction ) )
|
69
|
-
dvd2 = @system.create_dvd( Dvd.new( 'Monty Python and the Holy Grail', 15, comedy ) )
|
70
|
-
|
71
|
-
@system.available_items.add( dvd1 )
|
72
|
-
@system.available_items.add( dvd2 )
|
73
|
-
|
74
|
-
@system.available_items.each() do |item|
|
75
|
-
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_more_engine_loads
|
81
|
-
load_engine
|
82
|
-
assert_equal 0, @system.total_customers
|
83
|
-
|
84
|
-
fiction = Category.new('Fiction')
|
85
|
-
comedy = Category.new('Comedy')
|
86
|
-
|
87
|
-
@system.available_categories << fiction
|
88
|
-
@system.available_categories << comedy
|
89
|
-
|
90
|
-
assert_equal 0, @system.available_items.length
|
91
|
-
assert_equal 2, @system.available_categories.length
|
92
|
-
|
93
|
-
@system.available_items.add( Dvd.new( 'Fight Club', 22.1, fiction ) )
|
94
|
-
@system.available_items.add( Dvd.new( 'Monty Python and the Holy Grail', 15, comedy ) )
|
95
|
-
|
96
|
-
assert_equal 2, @system.available_items.length
|
97
|
-
assert_equal 2, @system.available_categories.length
|
98
|
-
|
99
|
-
load_engine
|
100
|
-
|
101
|
-
assert_equal 2, @system.available_items.length
|
102
|
-
assert_equal 2, @system.available_categories.length
|
103
|
-
|
104
|
-
horror = Category.new('Horror')
|
105
|
-
@system.available_categories << horror
|
106
|
-
|
107
|
-
@system.available_items.add( Dvd.new( 'Pet Sematary - 1989', 22.6, horror ) )
|
108
|
-
@system.available_items.add( Dvd.new( 'Fawlty Towers - 12 episodes', 40.6, comedy ) )
|
109
|
-
|
110
|
-
assert_equal 4, @system.available_items.length
|
111
|
-
assert_equal 3, @system.available_categories.length
|
112
|
-
|
113
|
-
load_engine
|
114
|
-
|
115
|
-
assert_equal 4, @system.available_items.length
|
116
|
-
assert_equal 3, @system.available_categories.length
|
117
|
-
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_depth_with_snapshot
|
121
|
-
assert_equal 0, @system.total_customers
|
122
|
-
|
123
|
-
fiction = Category.new('Fiction')
|
124
|
-
comedy = Category.new('Comedy')
|
125
|
-
|
126
|
-
@system.available_categories << fiction
|
127
|
-
@system.available_categories << comedy
|
128
|
-
|
129
|
-
@system.available_items.add( Dvd.new( 'Fight Club', 22.1, fiction ) )
|
130
|
-
@system.available_items.add( Dvd.new( 'Monty Python and the Holy Grail', 15, comedy ) )
|
131
|
-
|
132
|
-
assert_equal 2, @system.available_items.length
|
133
|
-
assert_equal 2, @system.available_categories.length
|
134
|
-
|
135
|
-
@engine.take_snapshot
|
136
|
-
|
137
|
-
load_engine
|
138
|
-
|
139
|
-
assert_equal 2, @system.available_items.length
|
140
|
-
assert_equal 2, @system.available_categories.length
|
141
|
-
end
|
142
|
-
|
143
|
-
end
|
data/test/project_model.rb
DELETED
@@ -1,99 +0,0 @@
|
|
1
|
-
$:.unshift(File.dirname(__FILE__) + "/../lib/")
|
2
|
-
|
3
|
-
require 'hprevalence'
|
4
|
-
require 'transparent'
|
5
|
-
|
6
|
-
class ModelBase
|
7
|
-
include HPrevalence::Transparent::CustomBehavior
|
8
|
-
attr_read_only :ident
|
9
|
-
|
10
|
-
attr_reader :ident
|
11
|
-
attr_accessor :name
|
12
|
-
|
13
|
-
def initialize(name, id_val = name)
|
14
|
-
@ident, @name = id_val, name
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
class ModelArrayBase
|
19
|
-
include Enumerable
|
20
|
-
include HPrevalence::Transparent::CustomBehavior
|
21
|
-
attr_read_only :[], :each, :length
|
22
|
-
|
23
|
-
def initialize()
|
24
|
-
@list = []
|
25
|
-
end
|
26
|
-
|
27
|
-
def add( item )
|
28
|
-
@list << item
|
29
|
-
end
|
30
|
-
|
31
|
-
def each
|
32
|
-
@list.each { |item| yield(item) }
|
33
|
-
end
|
34
|
-
|
35
|
-
def [](index)
|
36
|
-
if (index.kind_of?(Integer))
|
37
|
-
return @list[index]
|
38
|
-
elsif (index.kind_of?(String))
|
39
|
-
return find { |item| item.ident == index }
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def length
|
44
|
-
@list.length
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
class User < ModelBase
|
50
|
-
attr_reader :password
|
51
|
-
|
52
|
-
def initialize(name, password)
|
53
|
-
super(name)
|
54
|
-
@password = password
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
class Project < ModelBase
|
59
|
-
attr_reader :owner
|
60
|
-
|
61
|
-
def initialize(name, idVal, owner)
|
62
|
-
super(name, idVal)
|
63
|
-
@owner = owner
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
class UserCollection < ModelArrayBase
|
68
|
-
def initialize()
|
69
|
-
super
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
class ProjectCollection < ModelArrayBase
|
74
|
-
def initialize()
|
75
|
-
super
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
class ApplicationDatabase
|
80
|
-
include HPrevalence::Transparent::CustomBehavior
|
81
|
-
|
82
|
-
attr_reader :users, :projects
|
83
|
-
attr_proxy_attribute :users, :projects
|
84
|
-
attr_proxy_method :create_user, :create_project
|
85
|
-
|
86
|
-
def initialize
|
87
|
-
@users = UserCollection.new()
|
88
|
-
@projects = ProjectCollection.new()
|
89
|
-
end
|
90
|
-
|
91
|
-
def create_user( login, pass )
|
92
|
-
User.new( login, pass )
|
93
|
-
end
|
94
|
-
|
95
|
-
def create_project( name, id, user )
|
96
|
-
Project.new( name, id, user )
|
97
|
-
end
|
98
|
-
|
99
|
-
end
|
data/test/restoring_test.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
|
2
|
-
$:.unshift(File.dirname(__FILE__) + "/../lib/")
|
3
|
-
|
4
|
-
require 'hprevalence'
|
5
|
-
require 'transparent'
|
6
|
-
require 'abstract_hprevalence_testcase'
|
7
|
-
require 'project_model'
|
8
|
-
require 'test/unit'
|
9
|
-
|
10
|
-
class RestoringTest < Test::Unit::TestCase
|
11
|
-
include AbstractHPrevalenceTestHelper
|
12
|
-
|
13
|
-
def setup
|
14
|
-
@target_dir = create_dir_name('store/fixed')
|
15
|
-
load_engine
|
16
|
-
end
|
17
|
-
|
18
|
-
def teardown
|
19
|
-
@engine.close
|
20
|
-
end
|
21
|
-
|
22
|
-
def load_engine
|
23
|
-
teardown unless @engine.nil?
|
24
|
-
|
25
|
-
@engine = HPrevalence::EngineBuilder.build_transparent( @target_dir ) {
|
26
|
-
ApplicationDatabase.new()
|
27
|
-
}
|
28
|
-
|
29
|
-
assert_not_nil @engine
|
30
|
-
@system = @engine.system
|
31
|
-
assert_not_nil @system
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_a
|
35
|
-
teardown
|
36
|
-
reset_dir 'store/fixed'
|
37
|
-
setup
|
38
|
-
|
39
|
-
user = @system.create_user( "test", "test" )
|
40
|
-
@system.users.add( user ) unless @system.users.length != 0
|
41
|
-
|
42
|
-
project = @system.create_project( 'cas', 'Castle', user )
|
43
|
-
@system.projects.add( project )
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
def atest_aaa
|
48
|
-
|
49
|
-
assert_equal 1, @system.users.length
|
50
|
-
assert_equal 1, @system.projects.length
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|