hprevalence 0.1.1 → 0.2.0
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.
- 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
|