partitioned 0.8.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,9 +1,10 @@
1
1
  #
2
2
  # :include: ../../README
3
3
  #
4
+
4
5
  module Partitioned
5
6
  #
6
- # used by PartitionedBase class methods that must be overidden.
7
+ # Used by PartitionedBase class methods that must be overridden.
7
8
  #
8
9
  class MethodNotImplemented < StandardError
9
10
  def initialize(model, method_name, is_class_method = true)
@@ -16,11 +17,11 @@ module Partitioned
16
17
  # an ActiveRecord::Base class that can be partitioned.
17
18
  #
18
19
  # Uses a domain specific language to configure, see Partitioned::PartitionedBase::Configurator
19
- # for more information
20
+ # for more information.
20
21
  #
21
- # Extends Partitioned::BulkMethodsMixin to provide create_many and update_many
22
+ # Extends Partitioned::BulkMethodsMixin to provide create_many and update_many.
22
23
  #
23
- # Uses PartitionManager to manage creation of child tables
24
+ # Uses PartitionManager to manage creation of child tables.
24
25
  #
25
26
  # Monkey patches some ActiveRecord routines to call back to this class when INSERT and UPDATE
26
27
  # statements are built (to determine the table_name with respect to values being inserted or updated)
@@ -32,69 +33,86 @@ module Partitioned
32
33
  self.abstract_class = true
33
34
 
34
35
  #
35
- # returns an array of attribute names (strings) used to fetch the key value(s)
36
+ # Returns an array of attribute names (strings) used to fetch the key value(s)
36
37
  # the determine this specific partition table.
37
38
  #
39
+ # @return [String] the column name used to partition this table
40
+ # @return [Array<String>] the column names used to partition this table
38
41
  def self.partition_keys
39
42
  return configurator.on_fields
40
43
  end
41
44
 
42
45
  #
43
- # the specific values for a partition of this active record's type which are defined by
44
- # #partition_keys
46
+ # The specific values for a partition of this active record's type which are defined by
47
+ # {#self.partition_keys}
45
48
  #
49
+ # @param [Hash] values key/value pairs to extract values from
50
+ # @return [Object] value of partition key
51
+ # @return [Array<Object>] values of partition keys
46
52
  def self.partition_key_values(values)
47
53
  symbolized_values = values.symbolize_keys
48
54
  return self.partition_keys.map{|key| symbolized_values[key.to_sym]}
49
55
  end
50
56
 
51
57
  #
52
- # the name of the current partition table determined by this active records attributes that
58
+ # The name of the current partition table determined by this active records attributes that
53
59
  # define the key value(s) for the constraint check.
54
60
  #
61
+ # @return [String] the fully qualified name of the database table, ie: foos_partitions.p17
55
62
  def partition_table_name
56
63
  symbolized_attributes = attributes.symbolize_keys
57
64
  return self.class.partition_name(*self.class.partition_keys.map{|attribute_name| symbolized_attributes[attribute_name]})
58
65
  end
59
66
 
60
67
  #
61
- # normalize the value to be used for partitioning. This allows, for instance, a class that partitions on
62
- # a time field to group the times by month. An integer field might be grouped by every 10mil values, A
68
+ # Normalize the value to be used for partitioning. This allows, for instance, a class that partitions on
69
+ # a time field to group the times by month. An integer field might be grouped by every 10mil values, A
63
70
  # string field might be grouped by its first character.
64
71
  #
72
+ # @param [Object] value the partition key value
73
+ # @return [Object] the normalized value for the key value passed in
65
74
  def self.partition_normalize_key_value(value)
66
75
  return value
67
76
  end
68
77
 
69
78
  #
70
- # range generation provided for methods like created_infrastructure that need a set of partition key values
79
+ # Range generation provided for methods like created_infrastructure that need a set of partition key values
71
80
  # to operate on.
72
81
  #
82
+ # @param [Object] start_value the first value to generate the range from
83
+ # @param [Object] end_value the last value to generate the range from
84
+ # @param [Object] step (1) number of values to advance.
85
+ # @return [Enumerable] the range generated
73
86
  def self.partition_generate_range(start_value, end_value, step = 1)
74
87
  return Range.new(start_value, end_value).step(step)
75
88
  end
76
89
 
77
90
  #
78
- # return an instance of this partition table's table manager.
91
+ # Return an instance of this partition table's table manager.
79
92
  #
93
+ # @return [{PartitionManager}] the partition manager for this partitioned model
80
94
  def self.partition_manager
81
95
  @partition_manager = self::PartitionManager.new(self) unless @partition_manager.present?
82
96
  return @partition_manager
83
97
  end
84
98
 
85
99
  #
86
- # return an instance of this partition table's sql_adapter (used by the partition manage to
100
+ # Return an instance of this partition table's sql_adapter (used by the partition manage to
87
101
  # create SQL statements)
88
102
  #
103
+ # @return [{SqlAdapter}] the object used to create sql statements for this partitioned model
89
104
  def self.sql_adapter
90
105
  @sql_adapter = self::SqlAdapter.new(self) unless @sql_adapter.present?
91
106
  return @sql_adapter
92
107
  end
93
108
 
94
109
  #
95
- # in activerecord 3.0 we need to supply an Arel::Table for the key value(s) used
110
+ # In activerecord 3.0 we need to supply an Arel::Table for the key value(s) used
96
111
  # to determine the specific child table to access.
97
112
  #
113
+ # @param [Hash] values key/value pairs for all attributes
114
+ # @param [String] as (nil) the name of the table associated with this Arel::Table
115
+ # @return [Arel::Table] the generated Arel::Table
98
116
  def self.dynamic_arel_table(values, as = nil)
99
117
  @arel_tables ||= {}
100
118
  key_values = self.partition_key_values(values)
@@ -106,9 +124,11 @@ module Partitioned
106
124
  end
107
125
 
108
126
  #
109
- # used by our active record hacks to supply an Arel::Table given this active record's
127
+ # Used by our active record hacks to supply an Arel::Table given this active record's
110
128
  # current attributes.
111
129
  #
130
+ # @param [String] as (nil) the name of the table associated with the Arel::Table
131
+ # @return [Arel::Table] the generated Arel::Table
112
132
  def dynamic_arel_table(as = nil)
113
133
  symbolized_attributes = attributes.symbolize_keys
114
134
  key_values = Hash[*self.class.partition_keys.map{|name| [name,symbolized_attributes[name]]}.flatten]
@@ -118,6 +138,8 @@ module Partitioned
118
138
  # :from_partition_scope is generally not used directly,
119
139
  # use helper self.from_partition so that the derived class
120
140
  # can be passed into :from_partition_scope
141
+ #
142
+ # @return [Hash] the from scoping
121
143
  scope :from_partition_scope, lambda { |target_class, *partition_field|
122
144
  {
123
145
  :from => "#{target_class.partition_name(*partition_field)} AS #{target_class.table_name}"
@@ -125,7 +147,7 @@ module Partitioned
125
147
  }
126
148
 
127
149
  #
128
- # real scope (uses #from_partition_scope). This scope is used to target the
150
+ # Real scope (uses #from_partition_scope). This scope is used to target the
129
151
  # active record find() to a specific child table and alias it to the name of the
130
152
  # parent table (so activerecord can generally work with it)
131
153
  #
@@ -139,6 +161,8 @@ module Partitioned
139
161
  # class methods is not inherited, one must use this form (#from_partition) instead
140
162
  # of #from_partition_scope to get the most derived classes specific active record scope.
141
163
  #
164
+ # @param [*Array<Object>] partition_field the field values to partition on
165
+ # @return [Hash] the scoping
142
166
  def self.from_partition(*partition_field)
143
167
  from_partition_scope(self, *partition_field)
144
168
  end
@@ -146,6 +170,8 @@ module Partitioned
146
170
  # :from_partitioned_without_alias_scope is generally not used directly,
147
171
  # use helper self.from_partitioned_without_alias so that the derived class
148
172
  # can be passed into :from_partitioned_without_alias_scope
173
+ #
174
+ # @return [Hash] the from scoping
149
175
  scope :from_partitioned_without_alias_scope, lambda { |target_class, *partition_field|
150
176
  {
151
177
  :from => target_class.partition_name(*partition_field)
@@ -153,7 +179,7 @@ module Partitioned
153
179
  }
154
180
 
155
181
  #
156
- # real scope (uses #from_partitioned_without_alias_scope). This scope is used to target the
182
+ # Real scope (uses #from_partitioned_without_alias_scope). This scope is used to target the
157
183
  # active record find() to a specific child table. Is probably best used in advanced
158
184
  # activerecord queries when a number of tables are involved in the query.
159
185
  #
@@ -176,13 +202,16 @@ module Partitioned
176
202
  # class methods is not inherited, one must use this form (#from_partitioned_without_alias) instead
177
203
  # of #from_partitioned_without_alias_scope to get the most derived classes specific active record scope.
178
204
  #
205
+ # @param [*Array<Object>] partition_field the field values to partition on
206
+ # @return [Hash] the scoping
179
207
  def self.from_partitioned_without_alias(*partition_field)
180
208
  from_partitioned_without_alias_scope(self, *partition_field)
181
209
  end
182
210
 
183
211
  #
184
- # return a object used to read configurator information
212
+ # Return a object used to read configurator information.
185
213
  #
214
+ # @return [{Configurator::Reader}] the configuration reader for this partitioned model
186
215
  def self.configurator
187
216
  unless @configurator
188
217
  @configurator = self::Configurator::Reader.new(self)
@@ -191,7 +220,7 @@ module Partitioned
191
220
  end
192
221
 
193
222
  #
194
- # yields an object used to configure the ActiveRecord class for partitioning
223
+ # Yields an object used to configure the ActiveRecord class for partitioning
195
224
  # using the Configurator Domain Specific Language.
196
225
  #
197
226
  # usage:
@@ -201,42 +230,45 @@ module Partitioned
201
230
  # partition.foreign_key :company_id
202
231
  # end
203
232
  #
233
+ # @return [{Configurator::Dsl}] the Domain Specifical Language UI manager
204
234
  def self.partitioned
205
235
  @configurator_dsl ||= self::Configurator::Dsl.new(self)
206
236
  yield @configurator_dsl
207
237
  end
208
238
 
209
239
  #
210
- # returns the configurator DSL object
240
+ # Returns the configurator DSL object.
211
241
  #
242
+ # @return [{Configurator::Dsl}] the Domain Specifical Language UI manager
212
243
  def self.configurator_dsl
213
244
  return @configurator_dsl
214
245
  end
215
246
 
216
247
  partitioned do |partition|
217
248
  #
218
- # the schema name to place all child tables.
249
+ # The schema name to place all child tables.
219
250
  #
220
- # by default this will be the table name of the parent class with a suffix "_partitions".
221
- # for a parent table name foos, that would be foos_partitions
251
+ # By default this will be the table name of the parent class with a suffix "_partitions".
252
+ #
253
+ # For a parent table name foos, that would be foos_partitions
222
254
  #
223
255
  partition.schema_name lambda {|model|
224
256
  return model.table_name + '_partitions'
225
257
  }
226
258
 
227
259
  #
228
- # the table name of the table who is the direct ancestor of a child table.
260
+ # The table name of the table who is the direct ancestor of a child table.
229
261
  # The child table is defined by the partition key values passed in.
230
262
  #
231
263
  # By default this is just the active record's notion of the name of the class.
232
- # Multi Level partitiong requires more work.
264
+ # Multi Level partitioning requires more work.
233
265
  #
234
266
  partition.parent_table_name lambda {|model, *partition_key_values|
235
267
  return model.table_name
236
268
  }
237
269
 
238
270
  #
239
- # the schema name of the table who is the direct ancestor of a child table.
271
+ # The schema name of the table who is the direct ancestor of a child table.
240
272
  # The child table is defined by the partition key values passed in.
241
273
  #
242
274
  partition.parent_table_schema_name lambda {|model, *partition_key_values|
@@ -245,15 +277,15 @@ module Partitioned
245
277
  }
246
278
 
247
279
  #
248
- # the prefix for a child table's name. This is typically a letter ('p') so that
280
+ # The prefix for a child table's name. This is typically a letter ('p') so that
249
281
  # the base_name of the table can be a number generated programtically from
250
282
  # the partition key values.
251
283
  #
252
- # for instance, a child table of the table 'foos' may be partitioned on
284
+ # For instance, a child table of the table 'foos' may be partitioned on
253
285
  # the column company_id whose value is 42. specific child table would be named
254
286
  # 'foos_partitions.p42'
255
287
  #
256
- # the 'p' is the name_prefix because 'foos_partitions.42' is not a valid table name
288
+ # The 'p' is the name_prefix because 'foos_partitions.42' is not a valid table name
257
289
  # (without quoting).
258
290
  #
259
291
  partition.name_prefix lambda {|model, *partition_key_values|
@@ -261,7 +293,7 @@ module Partitioned
261
293
  }
262
294
 
263
295
  #
264
- # the child tables name without the schema name
296
+ # The child tables name without the schema name.
265
297
  #
266
298
  partition.part_name lambda {|model, *partition_key_values|
267
299
  configurator = model.configurator
@@ -269,7 +301,7 @@ module Partitioned
269
301
  }
270
302
 
271
303
  #
272
- # the full name of a child table defined by the partition key values
304
+ # The full name of a child table defined by the partition key values.
273
305
  #
274
306
  partition.table_name lambda {|model, *partition_key_values|
275
307
  configurator = model.configurator
@@ -277,78 +309,117 @@ module Partitioned
277
309
  }
278
310
 
279
311
  #
280
- # the name of the child table without a schema name or prefix. this is used to
312
+ # The name of the child table without a schema name or prefix. this is used to
281
313
  # build child table names for multi-level partitions.
282
314
  #
283
- # for a table named foos_partitions.p42, this would be "42"
315
+ # For a table named foos_partitions.p42, this would be "42"
284
316
  #
285
317
  partition.base_name lambda { |model, *partition_key_values|
286
318
  return model.partition_normalize_key_value(*partition_key_values).to_s
287
319
  }
288
320
  end
289
321
 
322
+ #
323
+ # this methods are hand delegated because forwardable module conflicts
324
+ # with rails delegate.
325
+ #
326
+
290
327
  ##
291
328
  # :singleton-method: drop_partition_table
292
329
  # delegated to Partitioned::PartitionedBase::PartitionManager#drop_partition_table
330
+ def self.drop_partition_table(*partition_key_values)
331
+ partition_manager.drop_partition_table(*partition_key_values)
332
+ end
293
333
 
294
334
  ##
295
335
  # :singleton-method: create_partition_table
296
336
  # delegated to Partitioned::PartitionedBase::PartitionManager#create_partition_table
337
+ def self.create_partition_table(*partition_key_values)
338
+ partition_manager.create_partition_table(*partition_key_values)
339
+ end
297
340
 
298
341
  ##
299
342
  # :singleton-method: add_partition_table_index
300
343
  # delegated to Partitioned::PartitionedBase::PartitionManager#add_partition_table_index
344
+ def self.add_partition_table_index(*partition_key_values)
345
+ partition_manager.add_partition_table_index(*partition_key_values)
346
+ end
301
347
 
302
348
  ##
303
349
  # :singleton-method: add_references_to_partition_table
304
350
  # delegated to Partitioned::PartitionedBase::PartitionManager#add_references_to_partition_table
351
+ def self.add_references_to_partition_table(*partition_key_values)
352
+ partition_manager.add_references_to_partition_table(*partition_key_values)
353
+ end
305
354
 
306
355
  ##
307
356
  # :method: create_partition_schema
308
357
  # delegated to Partitioned::PartitionedBase::PartitionManager#create_partition_schema
358
+ def self.create_partition_schema(*partition_key_values)
359
+ partition_manager.create_partition_schema(*partition_key_values)
360
+ end
309
361
 
310
362
  ##
311
363
  # :singleton-method: add_parent_table_rules
312
364
  # delegated to Partitioned::PartitionedBase::PartitionManager#add_parent_table_rules
365
+ def self.add_parent_table_rules(*partition_key_values)
366
+ partition_manager.add_parent_table_rules(*partition_key_values)
367
+ end
313
368
 
314
369
  ##
315
370
  # :method: drop_old_partitions
316
371
  # delegated to Partitioned::PartitionedBase::PartitionManager#drop_old_partitions
372
+ def self.drop_old_partitions
373
+ partition_manager.drop_old_partitions
374
+ end
317
375
 
318
376
  ##
319
377
  # :method: create_new_partitions
320
378
  # delegated to Partitioned::PartitionedBase::PartitionManager#create_new_partitions
379
+ def self.create_new_partitions
380
+ partition_manager.create_new_partitions
381
+ end
321
382
 
322
383
  ##
323
384
  # :method: drop_old_partition
324
385
  # delegated to Partitioned::PartitionedBase::PartitionManager#drop_old_partition
386
+ def self.drop_old_partition(*partition_key_values)
387
+ partition_manager.drop_old_partition(*partition_key_values)
388
+ end
325
389
 
326
390
  ##
327
391
  # :method: create_new_partition
328
392
  # delegated to Partitioned::PartitionedBase::PartitionManager#create_new_partition
393
+ def self.create_new_partition(*partition_key_values)
394
+ partition_manager.create_new_partition(*partition_key_values)
395
+ end
329
396
 
330
397
  ##
331
398
  # :method: create_new_partition_tables
332
399
  # delegated to Partitioned::PartitionedBase::PartitionManager#create_new_partition_tables
400
+ def self.create_new_partition_tables(enumerable)
401
+ partition_manager.create_new_partition_tables(enumerable)
402
+ end
333
403
 
334
404
  ##
335
405
  # :method: create_infrastructure
336
406
  # delegated to Partitioned::PartitionedBase::PartitionManager#create_infrastructure
407
+ def self.create_infrastructure
408
+ partition_manager.create_infrastructure
409
+ end
337
410
 
338
411
  ##
339
412
  # :method: partition_table_name
340
413
  # delegated to Partitioned::PartitionedBase::PartitionManager#partition_table_name
414
+ def self.partition_table_name(*partition_key_values)
415
+ return partition_manager.partition_table_name(*partition_key_values)
416
+ end
341
417
 
342
418
  ##
343
419
  # :method: partition_name
344
420
  # delegated to Partitioned::PartitionedBase::PartitionManager#partition_table_name
345
-
346
- extend SingleForwardable
347
- def_delegators :partition_manager, :drop_partition_table, :create_partition_table,
348
- :add_partition_table_index, :add_references_to_partition_table,
349
- :create_partition_schema, :add_parent_table_rules, :drop_old_partitions,
350
- :create_new_partitions, :drop_old_partition, :create_new_partition,
351
- :create_new_partition_tables, :create_infrastructure, :partition_table_name
352
- def_delegator :partition_manager, :partition_table_name, :partition_name
421
+ def self.partition_name(*partition_key_values)
422
+ return partition_manager.partition_table_name(*partition_key_values)
423
+ end
353
424
  end
354
425
  end
@@ -1,3 +1,4 @@
1
1
  module Partitioned
2
- VERSION = "0.8.0"
2
+ # the current version of this gem
3
+ VERSION = "1.0.1"
3
4
  end
data/partitioned.gemspec CHANGED
@@ -6,15 +6,16 @@ require "partitioned/version"
6
6
  Gem::Specification.new do |s|
7
7
  s.name = 'partitioned'
8
8
  s.version = Partitioned::VERSION
9
+ s.license = 'New BSD License'
9
10
  s.date = '2012-03-07'
10
11
  s.summary = "Postgres table partitioning support for ActiveRecord."
11
- s.description = "A gem providing support for table partitioning in ActiveRecord. Support is currently only supported for postgres database. Other features include child table management (creation and deletion) abd bulk data creating and updating"
12
+ s.description = "A gem providing support for table partitioning in ActiveRecord. Support is only available for postgres databases. Other features include child table management (creation and deletion) and bulk data creating and updating."
12
13
  s.authors = ["Keith Gabryelski", "Aleksandr Dembskiy"]
13
14
  s.email = 'keith@fiksu.com'
14
15
  s.files = `git ls-files`.split("\n")
15
16
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
17
  s.require_path = 'lib'
17
- s.homepage = 'http://www.fiksu.com'
18
+ s.homepage = 'http://github.com/fiksu/partitioned'
18
19
  s.add_dependency('pg')
19
20
  s.add_dependency "rails", '>= 3.0.0'
20
21
  s.add_dependency('rspec-rails')
metadata CHANGED
@@ -1,76 +1,73 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: partitioned
3
- version: !ruby/object:Gem::Version
4
- hash: 63
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 8
9
- - 0
10
- version: 0.8.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Keith Gabryelski
14
9
  - Aleksandr Dembskiy
15
10
  autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
-
19
- date: 2012-03-07 00:00:00 Z
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
13
+ date: 2012-03-07 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
22
16
  name: pg
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
25
18
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
33
23
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: rails
37
24
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: !ruby/object:Gem::Requirement
39
26
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 7
44
- segments:
45
- - 3
46
- - 0
47
- - 0
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: rails
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
48
38
  version: 3.0.0
49
39
  type: :runtime
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: rspec-rails
53
40
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
41
+ version_requirements: !ruby/object:Gem::Requirement
55
42
  none: false
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- hash: 3
60
- segments:
61
- - 0
62
- version: "0"
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 3.0.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec-rails
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
63
55
  type: :runtime
64
- version_requirements: *id003
65
- description: A gem providing support for table partitioning in ActiveRecord. Support is currently only supported for postgres database. Other features include child table management (creation and deletion) abd bulk data creating and updating
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ description: A gem providing support for table partitioning in ActiveRecord. Support
64
+ is only available for postgres databases. Other features include child table management
65
+ (creation and deletion) and bulk data creating and updating.
66
66
  email: keith@fiksu.com
67
67
  executables: []
68
-
69
68
  extensions: []
70
-
71
69
  extra_rdoc_files: []
72
-
73
- files:
70
+ files:
74
71
  - Gemfile
75
72
  - LICENSE
76
73
  - PARTITIONING_EXPLAINED.txt
@@ -165,40 +162,38 @@ files:
165
162
  - spec/support/shared_example_spec_helper_for_integer_key.rb
166
163
  - spec/support/shared_example_spec_helper_for_time_key.rb
167
164
  - spec/support/tables_spec_helper.rb
168
- homepage: http://www.fiksu.com
169
- licenses: []
170
-
165
+ homepage: http://github.com/fiksu/partitioned
166
+ licenses:
167
+ - New BSD License
171
168
  post_install_message:
172
169
  rdoc_options: []
173
-
174
- require_paths:
170
+ require_paths:
175
171
  - lib
176
- required_ruby_version: !ruby/object:Gem::Requirement
172
+ required_ruby_version: !ruby/object:Gem::Requirement
177
173
  none: false
178
- requirements:
179
- - - ">="
180
- - !ruby/object:Gem::Version
181
- hash: 3
182
- segments:
174
+ requirements:
175
+ - - ! '>='
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ segments:
183
179
  - 0
184
- version: "0"
185
- required_rubygems_version: !ruby/object:Gem::Requirement
180
+ hash: -2034428678854769428
181
+ required_rubygems_version: !ruby/object:Gem::Requirement
186
182
  none: false
187
- requirements:
188
- - - ">="
189
- - !ruby/object:Gem::Version
190
- hash: 3
191
- segments:
183
+ requirements:
184
+ - - ! '>='
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ segments:
192
188
  - 0
193
- version: "0"
189
+ hash: -2034428678854769428
194
190
  requirements: []
195
-
196
191
  rubyforge_project:
197
- rubygems_version: 1.8.21
192
+ rubygems_version: 1.8.24
198
193
  signing_key:
199
194
  specification_version: 3
200
195
  summary: Postgres table partitioning support for ActiveRecord.
201
- test_files:
196
+ test_files:
202
197
  - spec/dummy/.rspec
203
198
  - spec/dummy/README.rdoc
204
199
  - spec/dummy/Rakefile