hyperactive 0.2.4 → 0.2.5

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 CHANGED
@@ -9,6 +9,7 @@ Hyperactive::Hash:: A collection class that contains any number of Hyperactive::
9
9
  Hyperactive::List:: A collection class that contains any number of Hyperactive::Records in a list like structure.
10
10
  Hyperactive::Index:: A module included into Hyperactive::Record that adds simple indexing capabilities of the <b>find_by_...</b> type.
11
11
  Hyperactive::Transactions:: A module included into Hyperactive::Record that adds a few simplifications in handling transactions properly.
12
+ Hyperactive::Hooker:: A module that provides around-hook functinality to Hyperactive::Record, so that you can implement save, destroy, create and load hooks that wrap the actual event.
12
13
 
13
14
  == Usage:
14
15
 
@@ -21,19 +22,16 @@ You can also use <b>new</b> of course, but beware that this will not store the o
21
22
  <b>or</b> give you a proxy. Both of these things are good for you, so use get_instance unless you know
22
23
  what you are doing.
23
24
 
24
- By loading Hyperactive::Record you will automatically define Hyperactive::CAPTAIN which will
25
- be an Archipelago::Pirate::Captain that is your interface to the distributed database.
26
-
27
25
  == Examples:
28
26
 
29
27
  To define a Record subclass that has the properties @active and @city that are indexed in two ways:
30
28
 
31
- class MyClass < Hyperactive::Record
29
+ class MyClass < Hyperactive::Record:Bass
32
30
  attr_accessor :active, :city
33
- select(:active_records, Proc.new do |record|
31
+ select :active_records do |record|
34
32
  record.active == true
35
- end)
36
- index_by(:city)
33
+ end
34
+ index_by :city
37
35
  end
38
36
 
39
37
  This will allow you to find all active MyClass instances by:
@@ -0,0 +1,91 @@
1
+ # Archipelago - a distributed computing toolkit for ruby
2
+ # Copyright (C) 2006 Martin Kihlgren <zond at troja dot ath dot cx>
3
+ #
4
+ # This program is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU General Public License
6
+ # as published by the Free Software Foundation; either version 2
7
+ # of the License, or (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
+
18
+ module Hyperactive
19
+
20
+ #
21
+ # A utility package for classes being aware of their dirtyness.
22
+ #
23
+ module Cleaner
24
+
25
+ #
26
+ # Include this to get the new accessor methods that automatically check if you are dirty.
27
+ #
28
+ module Accessors
29
+
30
+ #
31
+ # The +base+ class including this will get a our ClassMethods as well.
32
+ #
33
+ def self.append_features(base)
34
+ super
35
+ base.extend(ClassMethods)
36
+ end
37
+
38
+ #
39
+ # Replies whether we are dirty.
40
+ #
41
+ def dirty?
42
+ @dirty ||= false
43
+ end
44
+
45
+ #
46
+ # Mark us as dirty.
47
+ #
48
+ def is_dirty!
49
+ @dirty = true
50
+ end
51
+
52
+ #
53
+ # Mark us as clean.
54
+ #
55
+ def is_clean!
56
+ @dirty = false
57
+ end
58
+
59
+ #
60
+ # The class methods that help us set/get instance variables in a dirt-aware way.
61
+ #
62
+ module ClassMethods
63
+ #
64
+ # Works like normal attr_writer but sets us to dirty.
65
+ #
66
+ def attr_writer(*attributes)
67
+ super
68
+ attributes.each do |attribute|
69
+ alias_method "hyperactive_cleaner_accessors_#{attribute}=", "#{attribute}="
70
+ define_method("#{attribute}=") do |new_value|
71
+ self.send("hyperactive_cleaner_accessors_#{attribute}=", new_value)
72
+ self.is_dirty!
73
+ end
74
+ end
75
+ end
76
+
77
+ #
78
+ # Works like normal attr_accessor but with with dirt-aware attr_writer.
79
+ #
80
+ def attr_accessor(*attributes)
81
+ attr_reader(*attributes)
82
+ attr_writer(*attributes)
83
+ end
84
+
85
+ end
86
+
87
+ end
88
+
89
+ end
90
+
91
+ end
@@ -35,7 +35,11 @@ module Hyperactive
35
35
  # A wrapper class that knows what key, value and list_element belong together.
36
36
  #
37
37
  class Element < Hyperactive::Record::Bass
38
+
39
+ include Hyperactive::Cleaner::Accessors
40
+
38
41
  attr_accessor :key, :value, :list_element
42
+
39
43
  #
40
44
  # Initialize a new Hash::Element with given +key+, +value+ and +list_element+.
41
45
  #
@@ -52,9 +56,10 @@ module Hyperactive
52
56
  #
53
57
  class Head < Hyperactive::Record::Bass
54
58
 
55
- attr_accessor :list
56
-
57
59
  include Archipelago::Current::ThreadedCollection
60
+ include Hyperactive::Cleaner::Accessors
61
+
62
+ attr_accessor :list
58
63
 
59
64
  #
60
65
  # Initialize a Hash::Head.
@@ -84,7 +89,7 @@ module Hyperactive
84
89
  # Return the value for +key+.
85
90
  #
86
91
  def [](key)
87
- element = Hyperactive::CAPTAIN[my_key_for(key), @transaction]
92
+ element = Archipelago::Pirate::BLACKBEARD[my_key_for(key), @transaction]
88
93
  if element
89
94
  return element.value
90
95
  else
@@ -96,7 +101,7 @@ module Hyperactive
96
101
  # Returns whether +key+ is included in this Hash.
97
102
  #
98
103
  def include?(key)
99
- Hyperactive::CAPTAIN.include?(my_key_for(key), @transaction)
104
+ Archipelago::Pirate::BLACKBEARD.include?(my_key_for(key), @transaction)
100
105
  end
101
106
 
102
107
  #
@@ -105,13 +110,13 @@ module Hyperactive
105
110
  def []=(key, value)
106
111
  self.list = Hyperactive::List::Head.get_instance_with_transaction(@transaction) unless self.list
107
112
 
108
- if (element = Hyperactive::CAPTAIN[my_key_for(key), @transaction])
113
+ if (element = Archipelago::Pirate::BLACKBEARD[my_key_for(key), @transaction])
109
114
  element.value = value
110
115
  else
111
116
  element = Element.get_instance_with_transaction(@transaction, key, value, nil)
112
117
  self.list << element
113
118
  element.list_element = self.list.last_element
114
- Hyperactive::CAPTAIN[my_key_for(key), @transaction] = element
119
+ Archipelago::Pirate::BLACKBEARD[my_key_for(key), @transaction] = element
115
120
  end
116
121
  end
117
122
 
@@ -123,9 +128,9 @@ module Hyperactive
123
128
 
124
129
  return_value = nil
125
130
 
126
- element = Hyperactive::CAPTAIN[my_key_for(key), @transaction]
131
+ element = Archipelago::Pirate::BLACKBEARD[my_key_for(key), @transaction]
127
132
  if element
128
- Hyperactive::CAPTAIN.delete(my_key_for(key), @transaction)
133
+ Archipelago::Pirate::BLACKBEARD.delete(my_key_for(key), @transaction)
129
134
  self.list.unlink!(element.list_element)
130
135
  return_value = element.value
131
136
  element.destroy!
@@ -17,6 +17,10 @@
17
17
 
18
18
  module Hyperactive
19
19
 
20
+ #
21
+ # A package containing methods that will help you create automatically
22
+ # updated indexes of your Records.
23
+ #
20
24
  module Index
21
25
 
22
26
  #
@@ -70,12 +74,12 @@ module Hyperactive
70
74
  old_key = get_key_for(old_record)
71
75
  new_key = get_key_for(record)
72
76
  if old_key != new_key
73
- (CAPTAIN[old_key] ||= Hyperactive::Hash::Head.get_instance_with_transaction(record.transaction)).delete(record.record_id)
74
- (CAPTAIN[new_key] ||= Hyperactive::Hash::Head.get_instance_with_transaction(record.transaction))[record.record_id] = record
77
+ (Archipelago::Pirate::BLACKBEARD[old_key] ||= Hyperactive::Hash::Head.get_instance_with_transaction(record.transaction)).delete(record.record_id)
78
+ (Archipelago::Pirate::BLACKBEARD[new_key] ||= Hyperactive::Hash::Head.get_instance_with_transaction(record.transaction))[record.record_id] = record
75
79
  end
76
80
  else
77
81
  record = arguments.first
78
- (CAPTAIN[get_key_for(record)] ||= Hyperactive::Hash::Head.get_instance_with_transaction(record.transaction)).delete(record.record_id)
82
+ (Archipelago::Pirate::BLACKBEARD[get_key_for(record)] ||= Hyperactive::Hash::Head.get_instance_with_transaction(record.transaction)).delete(record.record_id)
79
83
  end
80
84
  end
81
85
  end
@@ -107,32 +111,38 @@ module Hyperactive
107
111
  case @mode
108
112
  when :select
109
113
  if @matcher.call(record)
110
- CAPTAIN[@key, record.transaction][record.record_id] = record
114
+ Archipelago::Pirate::BLACKBEARD[@key, record.transaction][record.record_id] = record
111
115
  else
112
- CAPTAIN[@key, record.transaction].delete(record.record_id)
116
+ Archipelago::Pirate::BLACKBEARD[@key, record.transaction].delete(record.record_id)
113
117
  end
114
118
  when :reject
115
119
  if @matcher.call(record)
116
- CAPTAIN[@key, record.transaction].delete(record.record_id)
120
+ Archipelago::Pirate::BLACKBEARD[@key, record.transaction].delete(record.record_id)
117
121
  else
118
- CAPTAIN[@key, record.transaction][record.record_id] = record
122
+ Archipelago::Pirate::BLACKBEARD[@key, record.transaction][record.record_id] = record
119
123
  end
120
124
  when :delete_if_match
121
125
  if @matcher.call(record)
122
- CAPTAIN[@key, record.transaction].delete(record.record_id)
126
+ Archipelago::Pirate::BLACKBEARD[@key, record.transaction].delete(record.record_id)
123
127
  end
124
128
  when :delete_unless_match
125
129
  unless @matcher.call(record)
126
- CAPTAIN[@key, record.transaction].delete(record.record_id)
130
+ Archipelago::Pirate::BLACKBEARD[@key, record.transaction].delete(record.record_id)
127
131
  end
128
132
  end
129
133
  end
130
134
  end
131
135
 
132
136
  module Indexable
133
-
137
+
134
138
  def self.append_features(base)
135
139
  super
140
+ base.class_eval do
141
+ #
142
+ # We depend on lots of hooks.
143
+ #
144
+ include(Hyperactive::Hooker::Pimp)
145
+ end
136
146
  base.extend(ClassMethods)
137
147
  end
138
148
 
@@ -147,7 +157,7 @@ module Hyperactive
147
157
  klass = self
148
158
  self.class.class_eval do
149
159
  define_method("find_by_#{attributes.join("_and_")}") do |*args|
150
- CAPTAIN[IndexBuilder.get_key(klass, attributes, args)]
160
+ Archipelago::Pirate::BLACKBEARD[IndexBuilder.get_key(klass, attributes, args)]
151
161
  end
152
162
  end
153
163
  index_builder = IndexBuilder.new(self, attributes)
@@ -163,10 +173,10 @@ module Hyperactive
163
173
  #
164
174
  def select(name, &block) #:yields: instance
165
175
  key = collection_key(name)
166
- CAPTAIN[key] ||= Hyperactive::Hash::Head.get_instance
176
+ Archipelago::Pirate::BLACKBEARD[key] ||= Hyperactive::Hash::Head.get_instance
167
177
  self.class.class_eval do
168
178
  define_method(name) do
169
- CAPTAIN[key]
179
+ Archipelago::Pirate::BLACKBEARD[key]
170
180
  end
171
181
  end
172
182
  self.save_hooks << MatchSaver.new(key, block, :select)
@@ -181,10 +191,10 @@ module Hyperactive
181
191
  #
182
192
  def reject(name, &block) #:yields: instance
183
193
  key = collection_key(name)
184
- CAPTAIN[key] ||= Hyperactive::Hash::Head.get_instance
194
+ Archipelago::Pirate::BLACKBEARD[key] ||= Hyperactive::Hash::Head.get_instance
185
195
  self.class.class_eval do
186
196
  define_method(name) do
187
- CAPTAIN[key]
197
+ Archipelago::Pirate::BLACKBEARD[key]
188
198
  end
189
199
  end
190
200
  self.save_hooks << MatchSaver.new(key, block, :reject)
@@ -30,10 +30,11 @@ module Hyperactive
30
30
  # A wrapper class that knows its previous and next List::Elements as well as its value and the id of its list.
31
31
  #
32
32
  class Element < Hyperactive::Record::Bass
33
- attr_accessor :previous, :next, :value, :list_id
34
33
 
35
34
  include Archipelago::Current::ThreadedCollection
36
35
 
36
+ attr_accessor :previous, :next, :value, :list_id
37
+
37
38
  #
38
39
  # Initialize this List::Element with given +previous_element+, +next_element+, +value+ and +list_id+.
39
40
  #
@@ -43,7 +44,6 @@ module Hyperactive
43
44
  self.value = value
44
45
  self.list_id = list_id
45
46
  end
46
-
47
47
  #
48
48
  # Yield to +block+ once for this and each following element.
49
49
  #
@@ -60,10 +60,11 @@ module Hyperactive
60
60
  # A List head.
61
61
  #
62
62
  class Head < Hyperactive::Record::Bass
63
- attr_accessor :first_element, :last_element, :size
64
63
 
65
64
  include Archipelago::Current::ThreadedCollection
66
65
 
66
+ attr_accessor :first_element, :last_element, :size
67
+
67
68
  #
68
69
  # Create a List::Head. This is in essence the linked list.
69
70
  #
@@ -26,58 +26,65 @@ require 'archipelago'
26
26
  module Hyperactive
27
27
 
28
28
  #
29
- # The default database connector.
29
+ # The host we are running on.
30
30
  #
31
- CAPTAIN = Archipelago::Pirate::Captain.new
31
+ HOST = "#{Socket::gethostbyname(Socket::gethostname)[0]}" rescue "localhost"
32
32
 
33
33
  #
34
34
  # The package containing the base class Bass that simplifies
35
35
  # using archipelago for generic database stuff.
36
36
  #
37
37
  module Record
38
-
39
- #
40
- # A convenient base class to inherit when you want the basic utility methods
41
- # provided by for example ActiveRecord::Base *hint hint*.
38
+
42
39
  #
43
- # NB: When an instance is created you will actually have a copy <b>within your local machine</b>
44
- # which is not what you usually want. Every other time you fetch it using a select or other
45
- # method you will instead receive a proxy object to the database. This means that nothing you
46
- # do to it at that point will be persistent or even necessarily have a defined result.
47
- # Therefore: do not use the instantiated object, instead call <b>my_instance.save</b>
48
- # to get a proxy to the object stored into the database.
40
+ # The methods that make Hyperactive::Record::Bass persistent.
49
41
  #
50
- class Bass
42
+ module Persistent
51
43
 
52
- include Hyperactive::Index::Indexable
53
- include Hyperactive::Transactions::Accessors
54
- include Hyperactive::Transactions::Participant
55
- include Hyperactive::Hooker::Pimp
56
-
57
44
  #
58
- # The host we are running on.
45
+ # Give the class a @record_id getter/setter pair, @transaction getter/setter pair,
46
+ # our instance methods and the class methods of ClassMethods.
59
47
  #
60
- HOST = "#{Socket::gethostbyname(Socket::gethostname)[0]}" rescue "localhost"
48
+ def self.append_features(base)
49
+ super
61
50
 
62
- #
63
- # Return the record with +record_id+, optionally within a +transaction+.
64
- #
65
- def self.find(record_id, transaction = nil)
66
- CAPTAIN[record_id, transaction]
51
+ base.class_eval do
52
+ #
53
+ # Our semi-unique id.
54
+ #
55
+ attr_reader :record_id
56
+ #
57
+ # The transaction we are currently in.
58
+ #
59
+ attr_reader :transaction
60
+ end
61
+
62
+ base.extend(ClassMethods)
67
63
  end
68
64
 
69
65
  #
70
- # Utility method to get a proxy to a newly saved instance of this class in one call.
66
+ # Will execute +block+ within a transaction.
71
67
  #
72
- def self.get_instance(*args)
73
- instance = self.new(*args)
74
- return instance.create
75
- end
76
-
68
+ # What it does is just set the @transaction instance variable
69
+ # before calling the block, and unsetting it after.
77
70
  #
78
- # Our semi-unique id.
71
+ # This means that any classes that want to be transaction sensitive
72
+ # need to take heed regarding the @transaction instance variable.
79
73
  #
80
- attr_reader :record_id
74
+ # For example, when creating new Record instances you may want to use
75
+ # get_instance_with_transaction(@transaction, *args) to ensure that the
76
+ # new instance exists within the same transaction as yourself.
77
+ #
78
+ # See Hyperactive::List::Head and Hyperactive::Hash::Head for examples of this behaviour.
79
+ #
80
+ def with_transaction(transaction, &block)
81
+ @transaction = transaction
82
+ begin
83
+ return yield
84
+ ensure
85
+ @transaction = nil
86
+ end
87
+ end
81
88
 
82
89
  #
83
90
  # Utility compare method. Override as you please.
@@ -90,11 +97,6 @@ module Hyperactive
90
97
  end
91
98
  end
92
99
 
93
- def initialize
94
- @record_id = nil
95
- @transaction = nil
96
- end
97
-
98
100
  #
99
101
  # Save this Record instance into the distributed database and return a proxy to the saved object.
100
102
  #
@@ -105,10 +107,10 @@ module Hyperactive
105
107
  @transaction ||= nil
106
108
 
107
109
  self.class.with_hooks(:instance => self, :hooks => self.class.create_hooks) do
108
- CAPTAIN[self.record_id, @transaction] = self
110
+ Archipelago::Pirate::BLACKBEARD[self.record_id, @transaction] = self
109
111
  end
110
112
 
111
- proxy = CAPTAIN[@record_id, @transaction]
113
+ proxy = Archipelago::Pirate::BLACKBEARD[@record_id, @transaction]
112
114
 
113
115
  return proxy
114
116
  end
@@ -120,11 +122,60 @@ module Hyperactive
120
122
  #
121
123
  def destroy!
122
124
  self.class.with_hooks(:instance => self, :hooks => self.class.destroy_hooks) do
123
- CAPTAIN.delete(@record_id, @transaction)
125
+ Archipelago::Pirate::BLACKBEARD.delete(@record_id, @transaction)
124
126
  self.freeze
125
127
  end
126
128
  end
127
129
 
130
+ module ClassMethods
131
+ #
132
+ # Utility method to get a proxy to a within a transaction newly saved instance of this class in one call.
133
+ #
134
+ def get_instance_with_transaction(transaction, *args)
135
+ instance = self.new(*args)
136
+ return_value = nil
137
+ instance.with_transaction(transaction) do
138
+ return_value = instance.create
139
+ end
140
+ return return_value
141
+ end
142
+
143
+ #
144
+ # Return the record with +record_id+, optionally within a +transaction+.
145
+ #
146
+ def find(record_id, transaction = nil)
147
+ Archipelago::Pirate::BLACKBEARD[record_id, transaction]
148
+ end
149
+
150
+ #
151
+ # Utility method to get a proxy to a newly saved instance of this class in one call.
152
+ #
153
+ def get_instance(*args)
154
+ instance = self.new(*args)
155
+ return instance.create
156
+ end
157
+
158
+ end
159
+
160
+ end
161
+
162
+ #
163
+ # A convenient base class to inherit when you want the basic utility methods
164
+ # provided by for example ActiveRecord::Base *hint hint*.
165
+ #
166
+ # NB: When an instance is created you will actually have a copy <b>within your local machine</b>
167
+ # which is not what you usually want. Every other time you fetch it using a select or other
168
+ # method you will instead receive a proxy object to the database. This means that nothing you
169
+ # do to it at that point will be persistent or even necessarily have a defined result.
170
+ # Therefore: do not use the instantiated object, instead call <b>my_instance.save</b>
171
+ # to get a proxy to the object stored into the database.
172
+ #
173
+ class Bass
174
+
175
+ include Hyperactive::Record::Persistent
176
+ include Hyperactive::Index::Indexable
177
+ include Hyperactive::Transactions::Accessors
178
+
128
179
  end
129
180
  end
130
181
  end
@@ -22,68 +22,6 @@ module Hyperactive
22
22
  #
23
23
  module Transactions
24
24
 
25
- #
26
- # Include this to get methods to do with participating in a transaction.
27
- #
28
- module Participant
29
-
30
- #
31
- # The transaction we are currently in.
32
- #
33
- attr_reader :transaction
34
-
35
- #
36
- # Will execute +block+ within a transaction.
37
- #
38
- # What it does is just set the @transaction instance variable
39
- # before calling the block, and unsetting it after.
40
- #
41
- # This means that any classes that want to be transaction sensitive
42
- # need to take heed regarding the @transaction instance variable.
43
- #
44
- # For example, when creating new Record instances you may want to use
45
- # get_instance_with_transaction(@transaction, *args) to ensure that the
46
- # new instance exists within the same transaction as yourself.
47
- #
48
- # See Hyperactive::List::Head and Hyperactive::Hash::Head for examples of this behaviour.
49
- #
50
- def with_transaction(transaction, &block)
51
- @transaction = transaction
52
- begin
53
- yield
54
- ensure
55
- @transaction = nil
56
- end
57
- end
58
-
59
- #
60
- # Add our ClassMethods to anyone that includes us.
61
- #
62
- def self.append_features(base)
63
- super
64
- base.extend(ClassMethods)
65
- end
66
-
67
- #
68
- # Class methods for transaction participants.
69
- #
70
- module ClassMethods
71
- #
72
- # Utility method to get a proxy to a within a transaction newly saved instance of this class in one call.
73
- #
74
- def get_instance_with_transaction(transaction, *args)
75
- instance = self.new(*args)
76
- return_value = nil
77
- instance.with_transaction(transaction) do
78
- return_value = instance.create
79
- end
80
- return return_value
81
- end
82
-
83
- end
84
-
85
- end
86
-
87
25
  #
88
26
  # Include this to get the default attr_reader at al redefined to be transactionally aware.
89
27
  #
@@ -105,9 +43,11 @@ module Hyperactive
105
43
  # Works like normal attr_reader but with transactional awareness.
106
44
  #
107
45
  def attr_reader(*attributes)
46
+ super
108
47
  attributes.each do |attribute|
48
+ alias_method "hyperactive_transactions_accessors_#{attribute}", attribute
109
49
  define_method(attribute) do
110
- value = instance_variable_get("@#{attribute}")
50
+ value = self.send("hyperactive_transactions_accessors_#{attribute}")
111
51
  if Archipelago::Treasure::Dubloon === value
112
52
  if @transaction ||= nil
113
53
  return value.join(@transaction)
@@ -125,13 +65,15 @@ module Hyperactive
125
65
  # Works like normal attr_writer but with transactional awareness.
126
66
  #
127
67
  def attr_writer(*attributes)
68
+ super
128
69
  attributes.each do |attribute|
70
+ alias_method "hyperactive_transactions_accessors_#{attribute}=", "#{attribute}="
129
71
  define_method("#{attribute}=") do |new_value|
130
72
  if Archipelago::Treasure::Dubloon === new_value
131
73
  new_value.assert_transaction(@transaction) if @transaction ||= nil
132
- instance_variable_set("@#{attribute}", new_value)
74
+ self.send("hyperactive_transactions_accessors_#{attribute}=", new_value)
133
75
  else
134
- instance_variable_set("@#{attribute}", new_value)
76
+ self.send("hyperactive_transactions_accessors_#{attribute}=", new_value)
135
77
  end
136
78
  end
137
79
  end
data/lib/hyperactive.rb CHANGED
@@ -20,6 +20,7 @@ $: << File.dirname(__FILE__)
20
20
  require 'hyperactive/hooker'
21
21
  require 'hyperactive/index'
22
22
  require 'hyperactive/transactions'
23
+ require 'hyperactive/cleaner'
23
24
  require 'hyperactive/record'
24
25
  require 'hyperactive/hash'
25
26
  require 'hyperactive/list'
@@ -10,13 +10,13 @@ class HashBenchmark < Test::Unit::TestCase
10
10
  @c2.publish!
11
11
  @tm = TestManager.new(:persistence_provider => Archipelago::Hashish::BerkeleyHashishProvider.new(Pathname.new(__FILE__).parent.join("tranny1.db")))
12
12
  @tm.publish!
13
- Hyperactive::CAPTAIN.setup(:chest_description => {:class => 'TestChest'},
13
+ Archipelago::Pirate::BLACKBEARD.setup(:chest_description => {:class => 'TestChest'},
14
14
  :tranny_description => {:class => 'TestManager'})
15
15
  assert_within(20) do
16
- Set.new(Hyperactive::CAPTAIN.chests.keys) == Set.new([@c.service_id, @c2.service_id])
16
+ Set.new(Archipelago::Pirate::BLACKBEARD.chests.keys) == Set.new([@c.service_id, @c2.service_id])
17
17
  end
18
18
  assert_within(20) do
19
- Hyperactive::CAPTAIN.trannies.keys == [@tm.service_id]
19
+ Archipelago::Pirate::BLACKBEARD.trannies.keys == [@tm.service_id]
20
20
  end
21
21
  end
22
22
 
@@ -36,8 +36,8 @@ class HashBenchmark < Test::Unit::TestCase
36
36
  end
37
37
 
38
38
  def test_regular_hash_set_get
39
- Hyperactive::CAPTAIN["h"] = {}
40
- h = Hyperactive::CAPTAIN["h"]
39
+ Archipelago::Pirate::BLACKBEARD["h"] = {}
40
+ h = Archipelago::Pirate::BLACKBEARD["h"]
41
41
  r = Hyperactive::Record::Bass.get_instance
42
42
  hash_test("Hash", h, r, 100)
43
43
  end
data/tests/hash_test.rb CHANGED
@@ -19,14 +19,14 @@ class HashTest < Test::Unit::TestCase
19
19
  @c2.publish!
20
20
  @tm = TestManager.new(:persistence_provider => Archipelago::Hashish::BerkeleyHashishProvider.new(Pathname.new(__FILE__).parent.join("tranny1.db")))
21
21
  @tm.publish!
22
- Hyperactive::CAPTAIN.setup(:chest_description => {:class => 'TestChest'},
22
+ Archipelago::Pirate::BLACKBEARD.setup(:chest_description => {:class => 'TestChest'},
23
23
  :tranny_description => {:class => 'TestManager'})
24
- Hyperactive::CAPTAIN.update_services!
24
+ Archipelago::Pirate::BLACKBEARD.update_services!
25
25
  assert_within(10) do
26
- Hyperactive::CAPTAIN.chests.keys.sort == [@c.service_id, @c2.service_id].sort
26
+ Archipelago::Pirate::BLACKBEARD.chests.keys.sort == [@c.service_id, @c2.service_id].sort
27
27
  end
28
28
  assert_within(10) do
29
- Hyperactive::CAPTAIN.trannies.keys == [@tm.service_id]
29
+ Archipelago::Pirate::BLACKBEARD.trannies.keys == [@tm.service_id]
30
30
  end
31
31
  end
32
32
 
@@ -69,7 +69,7 @@ class HashTest < Test::Unit::TestCase
69
69
 
70
70
  h2.each do |k,v|
71
71
  assert_equal(v, h[k])
72
- assert_equal(v, Hyperactive::CAPTAIN[h.record_id][k])
72
+ assert_equal(v, Archipelago::Pirate::BLACKBEARD[h.record_id][k])
73
73
  end
74
74
  end
75
75
 
@@ -10,13 +10,13 @@ class ListBenchmark < Test::Unit::TestCase
10
10
  @c2.publish!
11
11
  @tm = TestManager.new(:persistence_provider => Archipelago::Hashish::BerkeleyHashishProvider.new(Pathname.new(__FILE__).parent.join("tranny1.db")))
12
12
  @tm.publish!
13
- Hyperactive::CAPTAIN.setup(:chest_description => {:class => 'TestChest'},
13
+ Archipelago::Pirate::BLACKBEARD.setup(:chest_description => {:class => 'TestChest'},
14
14
  :tranny_description => {:class => 'TestManager'})
15
15
  assert_within(20) do
16
- Set.new(Hyperactive::CAPTAIN.chests.keys) == Set.new([@c.service_id, @c2.service_id])
16
+ Set.new(Archipelago::Pirate::BLACKBEARD.chests.keys) == Set.new([@c.service_id, @c2.service_id])
17
17
  end
18
18
  assert_within(20) do
19
- Hyperactive::CAPTAIN.trannies.keys == [@tm.service_id]
19
+ Archipelago::Pirate::BLACKBEARD.trannies.keys == [@tm.service_id]
20
20
  end
21
21
  end
22
22
 
data/tests/list_test.rb CHANGED
@@ -18,14 +18,14 @@ class ListTest < Test::Unit::TestCase
18
18
  @c2.publish!
19
19
  @tm = TestManager.new(:persistence_provider => Archipelago::Hashish::BerkeleyHashishProvider.new(Pathname.new(__FILE__).parent.join("tranny1.db")))
20
20
  @tm.publish!
21
- Hyperactive::CAPTAIN.setup(:chest_description => {:class => 'TestChest'},
21
+ Archipelago::Pirate::BLACKBEARD.setup(:chest_description => {:class => 'TestChest'},
22
22
  :tranny_description => {:class => 'TestManager'})
23
- Hyperactive::CAPTAIN.update_services!
23
+ Archipelago::Pirate::BLACKBEARD.update_services!
24
24
  assert_within(10) do
25
- Hyperactive::CAPTAIN.chests.keys.sort == [@c.service_id, @c2.service_id].sort
25
+ Archipelago::Pirate::BLACKBEARD.chests.keys.sort == [@c.service_id, @c2.service_id].sort
26
26
  end
27
27
  assert_within(10) do
28
- Hyperactive::CAPTAIN.trannies.keys == [@tm.service_id]
28
+ Archipelago::Pirate::BLACKBEARD.trannies.keys == [@tm.service_id]
29
29
  end
30
30
  end
31
31
 
@@ -56,8 +56,8 @@ class ListTest < Test::Unit::TestCase
56
56
  r1 = l.first_element.record_id
57
57
  r2 = l.record_id
58
58
  l.destroy!
59
- assert(!Hyperactive::CAPTAIN.include?(r1))
60
- assert(!Hyperactive::CAPTAIN.include?(r2))
59
+ assert(!Archipelago::Pirate::BLACKBEARD.include?(r1))
60
+ assert(!Archipelago::Pirate::BLACKBEARD.include?(r2))
61
61
  end
62
62
 
63
63
  def test_each
data/tests/record_test.rb CHANGED
@@ -37,14 +37,14 @@ class RecordTest < Test::Unit::TestCase
37
37
  @c2.publish!
38
38
  @tm = TestManager.new(:persistence_provider => Archipelago::Hashish::BerkeleyHashishProvider.new(Pathname.new(__FILE__).parent.join("tranny1.db")))
39
39
  @tm.publish!
40
- Hyperactive::CAPTAIN.setup(:chest_description => {:class => 'TestChest'},
40
+ Archipelago::Pirate::BLACKBEARD.setup(:chest_description => {:class => 'TestChest'},
41
41
  :tranny_description => {:class => 'TestManager'})
42
- Hyperactive::CAPTAIN.update_services!
42
+ Archipelago::Pirate::BLACKBEARD.update_services!
43
43
  assert_within(10) do
44
- Hyperactive::CAPTAIN.chests.keys.sort == [@c.service_id, @c2.service_id].sort
44
+ Archipelago::Pirate::BLACKBEARD.chests.keys.sort == [@c.service_id, @c2.service_id].sort
45
45
  end
46
46
  assert_within(10) do
47
- Hyperactive::CAPTAIN.trannies.keys == [@tm.service_id]
47
+ Archipelago::Pirate::BLACKBEARD.trannies.keys == [@tm.service_id]
48
48
  end
49
49
  $BEFORE_SAVE = 0
50
50
  $AFTER_SAVE = 0
@@ -140,13 +140,13 @@ class RecordTest < Test::Unit::TestCase
140
140
  assert_equal(2, $BEFORE_SAVE)
141
141
  assert_equal(2, $AFTER_SAVE)
142
142
  assert_equal("brunt", r.bajs)
143
- assert_equal("brunt", Hyperactive::CAPTAIN[r.record_id].bajs)
143
+ assert_equal("brunt", Archipelago::Pirate::BLACKBEARD[r.record_id].bajs)
144
144
  i = r.record_id
145
- assert_equal(r, Hyperactive::CAPTAIN[i])
145
+ assert_equal(r, Archipelago::Pirate::BLACKBEARD[i])
146
146
  r.destroy!
147
147
  assert_equal(1, $BEFORE_DESTROY)
148
148
  assert_equal(1, $AFTER_DESTROY)
149
- assert_equal(nil, Hyperactive::CAPTAIN[i])
149
+ assert_equal(nil, Archipelago::Pirate::BLACKBEARD[i])
150
150
  end
151
151
 
152
152
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: hyperactive
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.2.4
7
- date: 2006-12-02 00:00:00 +01:00
6
+ version: 0.2.5
7
+ date: 2006-12-20 00:00:00 +01:00
8
8
  summary: A base class for persistent objects that uses archipelago for persistence. Useful for Ruby on Rails models for example.
9
9
  require_paths:
10
10
  - lib
@@ -29,6 +29,7 @@ authors:
29
29
  - Martin Kihlgren
30
30
  files:
31
31
  - lib/hyperactive.rb
32
+ - lib/hyperactive/cleaner.rb
32
33
  - lib/hyperactive/hash.rb
33
34
  - lib/hyperactive/hooker.rb
34
35
  - lib/hyperactive/index.rb