hprevalence 0.1.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/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: []
|