hprevalence 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +18 -0
- data/lib/hprevalence.rb +243 -0
- data/lib/internal/command_logger.rb +98 -0
- data/lib/internal/iomanager.rb +83 -0
- data/lib/internal/object_graph.rb +68 -0
- data/lib/internal/serializer.rb +83 -0
- data/lib/internal/store_manager.rb +74 -0
- data/lib/transparent.rb +218 -0
- data/rake.rb +4 -0
- data/rakefile.rb +62 -0
- data/test/abstract_hprevalence_testcase.rb +26 -0
- data/test/command_logger_test.rb +39 -0
- data/test/default_model_serializer_test.rb +65 -0
- data/test/dvd_store_model.rb +57 -0
- data/test/file_io_manager_test.rb +129 -0
- data/test/natural_object_model_test.rb +119 -0
- data/test/simple_engine_test.rb +79 -0
- data/test/task_model.rb +74 -0
- data/test/transparent_module_test.rb +95 -0
- metadata +54 -0
@@ -0,0 +1,119 @@
|
|
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
|
+
@system.available_items << Dvd.new( 'Fight Club', 22.1, fiction )
|
45
|
+
@system.available_items << Dvd.new( 'Monty Python and the Holy Grail', 15, comedy )
|
46
|
+
|
47
|
+
assert_equal 2, @system.available_items.length
|
48
|
+
assert_equal 2, @system.available_categories.length
|
49
|
+
|
50
|
+
load_engine
|
51
|
+
|
52
|
+
assert_equal 2, @system.available_items.length
|
53
|
+
assert_equal 2, @system.available_categories.length
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_more_engine_loads
|
57
|
+
load_engine
|
58
|
+
assert_equal 0, @system.total_customers
|
59
|
+
|
60
|
+
fiction = Category.new('Fiction')
|
61
|
+
comedy = Category.new('Comedy')
|
62
|
+
|
63
|
+
@system.available_categories << fiction
|
64
|
+
@system.available_categories << comedy
|
65
|
+
|
66
|
+
assert_equal 0, @system.available_items.length
|
67
|
+
assert_equal 2, @system.available_categories.length
|
68
|
+
|
69
|
+
@system.available_items << Dvd.new( 'Fight Club', 22.1, fiction )
|
70
|
+
@system.available_items << Dvd.new( 'Monty Python and the Holy Grail', 15, comedy )
|
71
|
+
|
72
|
+
assert_equal 2, @system.available_items.length
|
73
|
+
assert_equal 2, @system.available_categories.length
|
74
|
+
|
75
|
+
load_engine
|
76
|
+
|
77
|
+
assert_equal 2, @system.available_items.length
|
78
|
+
assert_equal 2, @system.available_categories.length
|
79
|
+
|
80
|
+
horror = Category.new('Horror')
|
81
|
+
@system.available_categories << horror
|
82
|
+
|
83
|
+
@system.available_items << Dvd.new( 'Pet Sematary - 1989', 22.6, horror )
|
84
|
+
@system.available_items << Dvd.new( 'Falwty Towers - 12 episodes', 40.6, comedy )
|
85
|
+
|
86
|
+
assert_equal 4, @system.available_items.length
|
87
|
+
assert_equal 3, @system.available_categories.length
|
88
|
+
|
89
|
+
load_engine
|
90
|
+
|
91
|
+
assert_equal 4, @system.available_items.length
|
92
|
+
assert_equal 3, @system.available_categories.length
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_depth_with_snapshot
|
97
|
+
assert_equal 0, @system.total_customers
|
98
|
+
|
99
|
+
fiction = Category.new('Fiction')
|
100
|
+
comedy = Category.new('Comedy')
|
101
|
+
|
102
|
+
@system.available_categories << fiction
|
103
|
+
@system.available_categories << comedy
|
104
|
+
|
105
|
+
@system.available_items << Dvd.new( 'Fight Club', 22.1, fiction )
|
106
|
+
@system.available_items << Dvd.new( 'Monty Python and the Holy Grail', 15, comedy )
|
107
|
+
|
108
|
+
assert_equal 2, @system.available_items.length
|
109
|
+
assert_equal 2, @system.available_categories.length
|
110
|
+
|
111
|
+
@engine.take_snapshot
|
112
|
+
|
113
|
+
load_engine
|
114
|
+
|
115
|
+
assert_equal 2, @system.available_items.length
|
116
|
+
assert_equal 2, @system.available_categories.length
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__) + "/../lib/")
|
2
|
+
|
3
|
+
require 'hprevalence'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'abstract_hprevalence_testcase'
|
6
|
+
require 'task_model'
|
7
|
+
|
8
|
+
class SimpleEngineTest < Test::Unit::TestCase
|
9
|
+
include AbstractHPrevalenceTestHelper
|
10
|
+
|
11
|
+
def setup
|
12
|
+
reset_dir 'store/engine_test'
|
13
|
+
ensure_dir
|
14
|
+
load_engine
|
15
|
+
end
|
16
|
+
|
17
|
+
def teardown
|
18
|
+
@engine.close
|
19
|
+
end
|
20
|
+
|
21
|
+
def load_engine
|
22
|
+
teardown unless @engine.nil?
|
23
|
+
|
24
|
+
@engine = HPrevalence::EngineBuilder.build( @target_dir ) {
|
25
|
+
TaskDatabase.new()
|
26
|
+
}
|
27
|
+
|
28
|
+
assert_not_nil @engine
|
29
|
+
@system = @engine.system
|
30
|
+
assert_not_nil @system
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_add_task
|
34
|
+
task = Task.new( 'put the cat out', 'Before go sleep, put the cat out otherwise he will meow during the night' )
|
35
|
+
@engine.execute_command( AddTaskCommand.new( task ) )
|
36
|
+
|
37
|
+
assert_equal 1, @system.tasks.length
|
38
|
+
|
39
|
+
load_engine
|
40
|
+
|
41
|
+
assert_equal 1, @system.tasks.length
|
42
|
+
assert_equal 'put the cat out', @system.tasks[0].name
|
43
|
+
assert_equal 'Before go sleep, put the cat out otherwise he will meow during the night', @system.tasks[0].contents
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_add_and_remove
|
47
|
+
task = Task.new( 'one', 'Before go sleep, put the cat out otherwise he will meow during the night' )
|
48
|
+
@engine.execute_command( AddTaskCommand.new( task ) )
|
49
|
+
task = Task.new( 'two', 'Brush your teeth before go to bed' )
|
50
|
+
@engine.execute_command( AddTaskCommand.new( task ) )
|
51
|
+
|
52
|
+
assert_equal 2, @system.tasks.length
|
53
|
+
|
54
|
+
@engine.execute_command( RemoveTaskCommand.new( 'two' ) )
|
55
|
+
|
56
|
+
assert_equal 1, @system.tasks.length
|
57
|
+
|
58
|
+
load_engine
|
59
|
+
|
60
|
+
assert_equal 1, @system.tasks.length
|
61
|
+
assert_equal 'one', @system.tasks[0].name
|
62
|
+
assert_equal 'Before go sleep, put the cat out otherwise he will meow during the night', @system.tasks[0].contents
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_snapshot
|
66
|
+
task = Task.new( 'one', 'Before go sleep, put the cat out otherwise he will meow during the night' )
|
67
|
+
@engine.execute_command( AddTaskCommand.new( task ) )
|
68
|
+
task = Task.new( 'two', 'Brush your teeth before go to bed' )
|
69
|
+
@engine.execute_command( AddTaskCommand.new( task ) )
|
70
|
+
|
71
|
+
assert_equal 2, @system.tasks.length
|
72
|
+
@engine.take_snapshot
|
73
|
+
|
74
|
+
load_engine
|
75
|
+
|
76
|
+
assert_equal 2, @system.tasks.length
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
data/test/task_model.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__) + "/../lib/")
|
2
|
+
|
3
|
+
class Task
|
4
|
+
|
5
|
+
attr_accessor :name, :contents
|
6
|
+
|
7
|
+
def initialize( name, contents )
|
8
|
+
@name, @contents = name, contents
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
class TaskDatabase
|
14
|
+
attr_reader :tasks
|
15
|
+
attr_accessor :priority_task
|
16
|
+
|
17
|
+
def initialize()
|
18
|
+
@tasks = []
|
19
|
+
@priority_task = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_task( task )
|
23
|
+
@tasks << task
|
24
|
+
end
|
25
|
+
|
26
|
+
def remove_task_by_name( name )
|
27
|
+
@tasks.delete_if { |task|
|
28
|
+
task.name == name
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def find_task_by_name( name )
|
33
|
+
@tasks.find { |task|
|
34
|
+
task.name == name
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
class AddTaskCommand
|
41
|
+
|
42
|
+
def initialize( task )
|
43
|
+
@task = task
|
44
|
+
end
|
45
|
+
|
46
|
+
def execute( system )
|
47
|
+
system.add_task( @task )
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
class UpdateTaskCommand
|
53
|
+
|
54
|
+
def initialize( name, new_content )
|
55
|
+
@name, @new_content = name, new_content
|
56
|
+
end
|
57
|
+
|
58
|
+
def execute( system )
|
59
|
+
system.find_task_by_name( @name ).contents = new_content
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
class RemoveTaskCommand
|
65
|
+
|
66
|
+
def initialize( name )
|
67
|
+
@name = name
|
68
|
+
end
|
69
|
+
|
70
|
+
def execute( system )
|
71
|
+
system.remove_task_by_name( @name )
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__) + "/../lib/")
|
2
|
+
|
3
|
+
require 'hprevalence'
|
4
|
+
require 'transparent'
|
5
|
+
require 'abstract_hprevalence_testcase'
|
6
|
+
require 'task_model'
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
class TransparentTest < Test::Unit::TestCase
|
10
|
+
include AbstractHPrevalenceTestHelper
|
11
|
+
|
12
|
+
def setup
|
13
|
+
reset_dir 'store/transparent_test'
|
14
|
+
ensure_dir
|
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
|
+
TaskDatabase.new()
|
27
|
+
}
|
28
|
+
|
29
|
+
assert_not_nil @engine
|
30
|
+
@system = @engine.system
|
31
|
+
assert_not_nil @system
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_proxy_registration
|
35
|
+
fake_proxy1 = ""
|
36
|
+
fake_proxy2 = 10
|
37
|
+
|
38
|
+
proxy_id1 = @engine.register_proxy( fake_proxy1 )
|
39
|
+
proxy_id2 = @engine.register_proxy( fake_proxy2 )
|
40
|
+
|
41
|
+
assert_not_nil proxy_id1
|
42
|
+
assert_not_nil proxy_id2
|
43
|
+
|
44
|
+
assert_equal fake_proxy1, @engine.proxy_by_id( proxy_id1 )
|
45
|
+
assert_equal fake_proxy2, @engine.proxy_by_id( proxy_id2 )
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_simple_case
|
49
|
+
assert_equal 0, @system.tasks.length
|
50
|
+
@system.add_task( Task.new( 'first', 'content' ) )
|
51
|
+
@system.add_task( Task.new( 'second', 'content' ) )
|
52
|
+
assert_equal 2, @system.tasks.length
|
53
|
+
|
54
|
+
load_engine
|
55
|
+
|
56
|
+
assert_equal 2, @system.tasks.length
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_simple_case_with_snapshot
|
60
|
+
assert_equal 0, @system.tasks.length
|
61
|
+
@system.add_task( Task.new( 'first', 'content' ) )
|
62
|
+
@system.add_task( Task.new( 'second', 'content' ) )
|
63
|
+
assert_equal 2, @system.tasks.length
|
64
|
+
|
65
|
+
@engine.take_snapshot
|
66
|
+
|
67
|
+
load_engine
|
68
|
+
|
69
|
+
assert_equal 2, @system.tasks.length
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_several_snapshots
|
73
|
+
assert_equal 0, @system.tasks.length
|
74
|
+
@system.add_task( Task.new( 'first', 'content' ) )
|
75
|
+
@system.add_task( Task.new( 'second', 'content' ) )
|
76
|
+
assert_equal 2, @system.tasks.length
|
77
|
+
|
78
|
+
@engine.take_snapshot
|
79
|
+
@system.add_task( Task.new( 'third', 'content' ) )
|
80
|
+
@engine.take_snapshot
|
81
|
+
@system.add_task( Task.new( 'forth', 'content' ) )
|
82
|
+
@engine.take_snapshot
|
83
|
+
|
84
|
+
load_engine
|
85
|
+
|
86
|
+
assert_equal 4, @system.tasks.length
|
87
|
+
@system.remove_task_by_name( 'first' )
|
88
|
+
assert_equal 3, @system.tasks.length
|
89
|
+
|
90
|
+
load_engine
|
91
|
+
|
92
|
+
assert_equal 3, @system.tasks.length
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
metadata
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.1
|
3
|
+
specification_version: 1
|
4
|
+
name: hprevalence
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.1.0
|
7
|
+
date: 2004-10-24
|
8
|
+
summary: Ruby based prevalence engine.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
author: Hamilton Verissimo
|
12
|
+
email: hammett@apache.org
|
13
|
+
homepage: http://www.digitalcraftsmen.com.br/~hammett
|
14
|
+
rubyforge_project: hprevalence
|
15
|
+
description: HPrevalence is an prevalence engine for Ruby which aims to provide non-intrusive capabilities to prevalent object models.
|
16
|
+
autorequire: hprevalence
|
17
|
+
default_executable:
|
18
|
+
bindir: bin
|
19
|
+
has_rdoc: false
|
20
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
21
|
+
requirements:
|
22
|
+
-
|
23
|
+
- ">"
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: 0.0.0
|
26
|
+
version:
|
27
|
+
platform: ruby
|
28
|
+
files:
|
29
|
+
- README
|
30
|
+
- "./rake.rb"
|
31
|
+
- "./rakefile.rb"
|
32
|
+
- "./lib/hprevalence.rb"
|
33
|
+
- "./lib/transparent.rb"
|
34
|
+
- "./lib/internal/command_logger.rb"
|
35
|
+
- "./lib/internal/iomanager.rb"
|
36
|
+
- "./lib/internal/object_graph.rb"
|
37
|
+
- "./lib/internal/serializer.rb"
|
38
|
+
- "./lib/internal/store_manager.rb"
|
39
|
+
- "./test/abstract_hprevalence_testcase.rb"
|
40
|
+
- "./test/command_logger_test.rb"
|
41
|
+
- "./test/default_model_serializer_test.rb"
|
42
|
+
- "./test/dvd_store_model.rb"
|
43
|
+
- "./test/file_io_manager_test.rb"
|
44
|
+
- "./test/natural_object_model_test.rb"
|
45
|
+
- "./test/simple_engine_test.rb"
|
46
|
+
- "./test/task_model.rb"
|
47
|
+
- "./test/transparent_module_test.rb"
|
48
|
+
test_files: []
|
49
|
+
rdoc_options: []
|
50
|
+
extra_rdoc_files: []
|
51
|
+
executables: []
|
52
|
+
extensions: []
|
53
|
+
requirements: []
|
54
|
+
dependencies: []
|