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.
@@ -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
@@ -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: []