chicagowarehouse 0.4.6 → 0.4.7

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  # The distinct extension won't work in Sequel 3.30 onwards at present.
4
- gem "sequel", ">= 3.34"
4
+ gem "sequel", ">= 3.34", "< 4.7"
5
5
  gem "sequel_migration_builder", ">= 0.3.2"
6
6
  gem "chronic"
7
7
 
data/Rakefile CHANGED
@@ -14,7 +14,7 @@ require 'rake'
14
14
  require 'jeweler'
15
15
  Jeweler::Tasks.new do |gem|
16
16
  gem.name = "chicagowarehouse"
17
- gem.version = "0.4.6"
17
+ gem.version = "0.4.7"
18
18
  gem.summary = "Ruby Data Warehousing"
19
19
  gem.description = "Simple Data Warehouse toolkit for ruby"
20
20
  gem.author = "Roland Swingler"
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "chicagowarehouse"
8
- s.version = "0.4.6"
8
+ s.version = "0.4.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Roland Swingler"]
12
- s.date = "2014-01-06"
12
+ s.date = "2014-03-13"
13
13
  s.description = "Simple Data Warehouse toolkit for ruby"
14
14
  s.email = "roland.swingler@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -83,14 +83,14 @@ Gem::Specification.new do |s|
83
83
  s.homepage = "http://github.com/notonthehighstreet/chicago"
84
84
  s.licenses = ["MIT"]
85
85
  s.require_paths = ["lib"]
86
- s.rubygems_version = "1.8.25"
86
+ s.rubygems_version = "1.8.28"
87
87
  s.summary = "Ruby Data Warehousing"
88
88
 
89
89
  if s.respond_to? :specification_version then
90
90
  s.specification_version = 3
91
91
 
92
92
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
93
- s.add_runtime_dependency(%q<sequel>, [">= 3.34"])
93
+ s.add_runtime_dependency(%q<sequel>, ["< 4.7", ">= 3.34"])
94
94
  s.add_runtime_dependency(%q<sequel_migration_builder>, [">= 0.3.2"])
95
95
  s.add_runtime_dependency(%q<chronic>, [">= 0"])
96
96
  s.add_development_dependency(%q<mysql2>, [">= 0"])
@@ -104,7 +104,7 @@ Gem::Specification.new do |s|
104
104
  s.add_development_dependency(%q<ZenTest>, [">= 0"])
105
105
  s.add_development_dependency(%q<timecop>, [">= 0"])
106
106
  else
107
- s.add_dependency(%q<sequel>, [">= 3.34"])
107
+ s.add_dependency(%q<sequel>, ["< 4.7", ">= 3.34"])
108
108
  s.add_dependency(%q<sequel_migration_builder>, [">= 0.3.2"])
109
109
  s.add_dependency(%q<chronic>, [">= 0"])
110
110
  s.add_dependency(%q<mysql2>, [">= 0"])
@@ -119,7 +119,7 @@ Gem::Specification.new do |s|
119
119
  s.add_dependency(%q<timecop>, [">= 0"])
120
120
  end
121
121
  else
122
- s.add_dependency(%q<sequel>, [">= 3.34"])
122
+ s.add_dependency(%q<sequel>, ["< 4.7", ">= 3.34"])
123
123
  s.add_dependency(%q<sequel_migration_builder>, [">= 0.3.2"])
124
124
  s.add_dependency(%q<chronic>, [">= 0"])
125
125
  s.add_dependency(%q<mysql2>, [">= 0"])
@@ -58,6 +58,10 @@ module Chicago
58
58
  @columns = opts[:columns] || []
59
59
  @identifiers = opts[:identifiers] || []
60
60
  @null_records = opts[:null_records] || []
61
+ @null_records.product(columns).each do |record, column|
62
+ record[column.name] = column.default_value unless record.has_key?(column.name)
63
+ end
64
+
61
65
  @table_name = sprintf(DIMENSION_TABLE_FORMAT, name).to_sym
62
66
  @key_table_name = sprintf(KEY_TABLE_FORMAT, @table_name).to_sym
63
67
  @predetermined_values = !! opts[:predetermined_values]
@@ -74,12 +78,22 @@ module Chicago
74
78
  # create null records for a temporary version of the table.
75
79
  def create_null_records(db, overridden_table_name=nil)
76
80
  table_to_populate = overridden_table_name || table_name
81
+
77
82
  unless @null_records.empty?
78
- db[table_to_populate].insert_replace.
79
- insert_multiple(@null_records)
80
- if db.table_exists?(key_table_name)
81
- ids = @null_records.map {|r| {:dimension_id => r[:id]} }
82
- db[key_table_name].insert_replace.insert_multiple(ids)
83
+ begin
84
+ db[table_to_populate].insert_replace.
85
+ insert_multiple(@null_records)
86
+ rescue Exception => e
87
+ raise "Cannot populate null records for dimension #{name} (table #{table_to_populate})\n #{e.message}"
88
+ end
89
+
90
+ begin
91
+ if db.table_exists?(key_table_name)
92
+ ids = @null_records.map {|r| {:dimension_id => r[:id], :original_id => r[:original_id] || 0} }
93
+ db[key_table_name].insert_replace.insert_multiple(ids)
94
+ end
95
+ rescue Exception => e
96
+ raise "Cannot populate key table records for dimension #{name} (table #{table_to_populate})\n #{e.message}"
83
97
  end
84
98
  end
85
99
  end
@@ -14,7 +14,7 @@ describe Chicago::Schema::Dimension do
14
14
  it "can have a description" do
15
15
  described_class.new(:foo, :description => "bar").description.should == "bar"
16
16
  end
17
-
17
+
18
18
  it "has columns" do
19
19
  column = stub(:column)
20
20
  described_class.new(:foo, :columns => [column]).
@@ -41,20 +41,32 @@ describe Chicago::Schema::Dimension do
41
41
  described_class.new(:user, :identifiers => identifiers).
42
42
  identifiers.should == identifiers
43
43
  end
44
-
44
+
45
45
  it "can have a main identifier" do
46
46
  identifiers = [stub(:i), stub(:j)]
47
47
  described_class.new(:user, :identifiers => identifiers).
48
48
  main_identifier.should == identifiers.first
49
49
  end
50
50
 
51
+ it "has null records" do
52
+ column = stub(:column, :name => :bar, :default_value => '')
53
+
54
+ options = {
55
+ :columns => [column],
56
+ :null_records => [{:id => 1}, {:id => 2, :bar => nil}]
57
+ }
58
+
59
+ described_class.new(:user, options).
60
+ null_records.should == [{:id => 1, :bar => ''}, {:id => 2, :bar => nil}]
61
+ end
62
+
51
63
  it "can create null records in the database, replacing existing records" do
52
- db = mock(:db)
64
+ db = mock(:db)
53
65
  db.stub(:[]).and_return(db)
54
66
  db.stub(:table_exists?).with(:keys_dimension_user).and_return(true)
55
67
  db.should_receive(:insert_replace).twice.and_return(db)
56
68
  db.should_receive(:insert_multiple).with([{:id => 1, :foo => :bar}])
57
- db.should_receive(:insert_multiple).with([{:dimension_id => 1}])
69
+ db.should_receive(:insert_multiple).with([{:dimension_id => 1, :original_id => 0}])
58
70
  described_class.new(:user,
59
71
  :null_records => [{ :id => 1,
60
72
  :foo => :bar}]).create_null_records(db)
@@ -118,7 +130,7 @@ describe Chicago::Schema::Dimension do
118
130
  it "can have predetermined values" do
119
131
  described_class.new(:countries, :predetermined_values => true).should have_predetermined_values
120
132
  end
121
-
133
+
122
134
  it "is visitable" do
123
135
  visitor = mock(:visitor)
124
136
  dimension = described_class.new(:foo)
@@ -24,15 +24,15 @@ describe Chicago::StarSchema do
24
24
  specify "can be defined with columns" do
25
25
  dimension = @schema.define_dimension(:user) do
26
26
  columns { string :email }
27
- end
27
+ end
28
28
  dimension.should have_column_named(:email)
29
29
  end
30
30
 
31
31
  specify "can define columns in multiple blocks" do
32
32
  dimension = @schema.define_dimension(:user) do
33
33
  columns { string :email }
34
- columns { string :name }
35
- end
34
+ columns { string :name }
35
+ end
36
36
  dimension.should have_column_named(:name)
37
37
  end
38
38
 
@@ -41,7 +41,7 @@ describe Chicago::StarSchema do
41
41
  columns { string :email }
42
42
 
43
43
  natural_key :email
44
- end
44
+ end
45
45
 
46
46
  dimension.natural_key.should == [:email]
47
47
  end
@@ -52,21 +52,21 @@ describe Chicago::StarSchema do
52
52
  end
53
53
  dimension.description.should == "Hello"
54
54
  end
55
-
55
+
56
56
  specify "can have null records defined" do
57
57
  dimension = @schema.define_dimension(:user) do
58
58
  columns { string :email }
59
59
 
60
60
  null_record :id => 1, :email => "Missing"
61
- null_record :id => 2, :email => "Not Applicable"
62
- end
61
+ null_record :id => 2, :email => "Not Applicable", :original_id => -1
62
+ end
63
63
 
64
64
  db = stub(:db, :table_exists? => true)
65
65
  db.stub_chain(:[], :insert_replace).and_return(db)
66
66
  db.should_receive(:insert_multiple).with([{:id => 1, :email => "Missing"},
67
- {:id => 2, :email => "Not Applicable"}])
68
- db.should_receive(:insert_multiple).with([{:dimension_id => 1},
69
- {:dimension_id => 2}])
67
+ {:id => 2, :email => "Not Applicable", :original_id => -1}])
68
+ db.should_receive(:insert_multiple).with([{:dimension_id => 1, :original_id => 0},
69
+ {:dimension_id => 2, :original_id => -1}])
70
70
  dimension.create_null_records(db)
71
71
  end
72
72
 
@@ -110,7 +110,7 @@ describe Chicago::StarSchema do
110
110
  }.to raise_error(Chicago::MissingDefinitionError)
111
111
  end
112
112
  end
113
-
113
+
114
114
  describe "facts" do
115
115
  specify "are not defined initially" do
116
116
  @schema.facts.should be_empty
@@ -192,7 +192,7 @@ describe Chicago::StarSchema do
192
192
  end
193
193
  fact.description.should == "Hello"
194
194
  end
195
-
195
+
196
196
  specify "can have a natural key defined" do
197
197
  dim = @schema.define_dimension(:date)
198
198
  fact = @schema.define_fact(:foo) do
@@ -200,11 +200,11 @@ describe Chicago::StarSchema do
200
200
 
201
201
  natural_key :date
202
202
  end
203
-
203
+
204
204
  fact.natural_key.should == [:date]
205
205
  end
206
206
  end
207
-
207
+
208
208
  it "allows definition of a fact and a dimension with the same name" do
209
209
  @schema.define_fact(:user)
210
210
  expect { @schema.define_dimension(:user) }.
metadata CHANGED
@@ -1,218 +1,238 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: chicagowarehouse
3
- version: !ruby/object:Gem::Version
4
- hash: 3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.7
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 4
9
- - 6
10
- version: 0.4.6
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Roland Swingler
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2014-01-06 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- version_requirements: &id001 !ruby/object:Gem::Requirement
22
- none: false
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- hash: 67
27
- segments:
28
- - 3
29
- - 34
30
- version: "3.34"
31
- requirement: *id001
32
- type: :runtime
33
- prerelease: false
12
+ date: 2014-03-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
34
15
  name: sequel
35
- - !ruby/object:Gem::Dependency
36
- version_requirements: &id002 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
37
17
  none: false
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- hash: 23
42
- segments:
43
- - 0
44
- - 3
45
- - 2
46
- version: 0.3.2
47
- requirement: *id002
18
+ requirements:
19
+ - - <
20
+ - !ruby/object:Gem::Version
21
+ version: '4.7'
22
+ - - ! '>='
23
+ - !ruby/object:Gem::Version
24
+ version: '3.34'
48
25
  type: :runtime
49
26
  prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - <
31
+ - !ruby/object:Gem::Version
32
+ version: '4.7'
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '3.34'
36
+ - !ruby/object:Gem::Dependency
50
37
  name: sequel_migration_builder
51
- - !ruby/object:Gem::Dependency
52
- version_requirements: &id003 !ruby/object:Gem::Requirement
38
+ requirement: !ruby/object:Gem::Requirement
53
39
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
61
- requirement: *id003
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 0.3.2
62
44
  type: :runtime
63
45
  prerelease: false
46
+ version_requirements: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: 0.3.2
52
+ - !ruby/object:Gem::Dependency
64
53
  name: chronic
65
- - !ruby/object:Gem::Dependency
66
- version_requirements: &id004 !ruby/object:Gem::Requirement
54
+ requirement: !ruby/object:Gem::Requirement
67
55
  none: false
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- hash: 3
72
- segments:
73
- - 0
74
- version: "0"
75
- requirement: *id004
76
- type: :development
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ type: :runtime
77
61
  prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ - !ruby/object:Gem::Dependency
78
69
  name: mysql2
79
- - !ruby/object:Gem::Dependency
80
- version_requirements: &id005 !ruby/object:Gem::Requirement
70
+ requirement: !ruby/object:Gem::Requirement
81
71
  none: false
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- hash: 3
86
- segments:
87
- - 0
88
- version: "0"
89
- requirement: *id005
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
90
76
  type: :development
91
77
  prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
92
85
  name: yard
93
- - !ruby/object:Gem::Dependency
94
- version_requirements: &id006 !ruby/object:Gem::Requirement
86
+ requirement: !ruby/object:Gem::Requirement
95
87
  none: false
96
- requirements:
97
- - - ~>
98
- - !ruby/object:Gem::Version
99
- hash: 3
100
- segments:
101
- - 2
102
- - 0
103
- version: "2.0"
104
- requirement: *id006
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
105
92
  type: :development
106
93
  prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ - !ruby/object:Gem::Dependency
107
101
  name: rspec
108
- - !ruby/object:Gem::Dependency
109
- version_requirements: &id007 !ruby/object:Gem::Requirement
102
+ requirement: !ruby/object:Gem::Requirement
110
103
  none: false
111
- requirements:
112
- - - ">="
113
- - !ruby/object:Gem::Version
114
- hash: 3
115
- segments:
116
- - 0
117
- version: "0"
118
- requirement: *id007
104
+ requirements:
105
+ - - ~>
106
+ - !ruby/object:Gem::Version
107
+ version: '2.0'
119
108
  type: :development
120
109
  prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ~>
114
+ - !ruby/object:Gem::Version
115
+ version: '2.0'
116
+ - !ruby/object:Gem::Dependency
121
117
  name: bundler
122
- - !ruby/object:Gem::Dependency
123
- version_requirements: &id008 !ruby/object:Gem::Requirement
118
+ requirement: !ruby/object:Gem::Requirement
124
119
  none: false
125
- requirements:
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- hash: 3
129
- segments:
130
- - 0
131
- version: "0"
132
- requirement: *id008
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
133
124
  type: :development
134
125
  prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ - !ruby/object:Gem::Dependency
135
133
  name: jeweler
136
- - !ruby/object:Gem::Dependency
137
- version_requirements: &id009 !ruby/object:Gem::Requirement
134
+ requirement: !ruby/object:Gem::Requirement
138
135
  none: false
139
- requirements:
140
- - - ">="
141
- - !ruby/object:Gem::Version
142
- hash: 3
143
- segments:
144
- - 0
145
- version: "0"
146
- requirement: *id009
136
+ requirements:
137
+ - - ! '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
147
140
  type: :development
148
141
  prerelease: false
142
+ version_requirements: !ruby/object:Gem::Requirement
143
+ none: false
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ - !ruby/object:Gem::Dependency
149
149
  name: rcov
150
- - !ruby/object:Gem::Dependency
151
- version_requirements: &id010 !ruby/object:Gem::Requirement
150
+ requirement: !ruby/object:Gem::Requirement
152
151
  none: false
153
- requirements:
154
- - - ">="
155
- - !ruby/object:Gem::Version
156
- hash: 3
157
- segments:
158
- - 0
159
- version: "0"
160
- requirement: *id010
152
+ requirements:
153
+ - - ! '>='
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
161
156
  type: :development
162
157
  prerelease: false
158
+ version_requirements: !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ! '>='
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ - !ruby/object:Gem::Dependency
163
165
  name: simplecov
164
- - !ruby/object:Gem::Dependency
165
- version_requirements: &id011 !ruby/object:Gem::Requirement
166
+ requirement: !ruby/object:Gem::Requirement
166
167
  none: false
167
- requirements:
168
- - - ">="
169
- - !ruby/object:Gem::Version
170
- hash: 3
171
- segments:
172
- - 0
173
- version: "0"
174
- requirement: *id011
168
+ requirements:
169
+ - - ! '>='
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
175
172
  type: :development
176
173
  prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ none: false
176
+ requirements:
177
+ - - ! '>='
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ - !ruby/object:Gem::Dependency
177
181
  name: flog
178
- - !ruby/object:Gem::Dependency
179
- version_requirements: &id012 !ruby/object:Gem::Requirement
182
+ requirement: !ruby/object:Gem::Requirement
180
183
  none: false
181
- requirements:
182
- - - ">="
183
- - !ruby/object:Gem::Version
184
- hash: 3
185
- segments:
186
- - 0
187
- version: "0"
188
- requirement: *id012
184
+ requirements:
185
+ - - ! '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
189
188
  type: :development
190
189
  prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ none: false
192
+ requirements:
193
+ - - ! '>='
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ - !ruby/object:Gem::Dependency
191
197
  name: ZenTest
192
- - !ruby/object:Gem::Dependency
193
- version_requirements: &id013 !ruby/object:Gem::Requirement
198
+ requirement: !ruby/object:Gem::Requirement
194
199
  none: false
195
- requirements:
196
- - - ">="
197
- - !ruby/object:Gem::Version
198
- hash: 3
199
- segments:
200
- - 0
201
- version: "0"
202
- requirement: *id013
200
+ requirements:
201
+ - - ! '>='
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
203
204
  type: :development
204
205
  prerelease: false
206
+ version_requirements: !ruby/object:Gem::Requirement
207
+ none: false
208
+ requirements:
209
+ - - ! '>='
210
+ - !ruby/object:Gem::Version
211
+ version: '0'
212
+ - !ruby/object:Gem::Dependency
205
213
  name: timecop
214
+ requirement: !ruby/object:Gem::Requirement
215
+ none: false
216
+ requirements:
217
+ - - ! '>='
218
+ - !ruby/object:Gem::Version
219
+ version: '0'
220
+ type: :development
221
+ prerelease: false
222
+ version_requirements: !ruby/object:Gem::Requirement
223
+ none: false
224
+ requirements:
225
+ - - ! '>='
226
+ - !ruby/object:Gem::Version
227
+ version: '0'
206
228
  description: Simple Data Warehouse toolkit for ruby
207
229
  email: roland.swingler@gmail.com
208
230
  executables: []
209
-
210
231
  extensions: []
211
-
212
- extra_rdoc_files:
232
+ extra_rdoc_files:
213
233
  - LICENSE
214
234
  - README
215
- files:
235
+ files:
216
236
  - .document
217
237
  - .rspec
218
238
  - Gemfile
@@ -276,37 +296,31 @@ files:
276
296
  - spec/support/shared_examples/schema_visitor.rb
277
297
  - tasks/stats.rake
278
298
  homepage: http://github.com/notonthehighstreet/chicago
279
- licenses:
299
+ licenses:
280
300
  - MIT
281
301
  post_install_message:
282
302
  rdoc_options: []
283
-
284
- require_paths:
303
+ require_paths:
285
304
  - lib
286
- required_ruby_version: !ruby/object:Gem::Requirement
305
+ required_ruby_version: !ruby/object:Gem::Requirement
287
306
  none: false
288
- requirements:
289
- - - ">="
290
- - !ruby/object:Gem::Version
291
- hash: 3
292
- segments:
307
+ requirements:
308
+ - - ! '>='
309
+ - !ruby/object:Gem::Version
310
+ version: '0'
311
+ segments:
293
312
  - 0
294
- version: "0"
295
- required_rubygems_version: !ruby/object:Gem::Requirement
313
+ hash: -2482122801910444787
314
+ required_rubygems_version: !ruby/object:Gem::Requirement
296
315
  none: false
297
- requirements:
298
- - - ">="
299
- - !ruby/object:Gem::Version
300
- hash: 3
301
- segments:
302
- - 0
303
- version: "0"
316
+ requirements:
317
+ - - ! '>='
318
+ - !ruby/object:Gem::Version
319
+ version: '0'
304
320
  requirements: []
305
-
306
321
  rubyforge_project:
307
- rubygems_version: 1.8.25
322
+ rubygems_version: 1.8.28
308
323
  signing_key:
309
324
  specification_version: 3
310
325
  summary: Ruby Data Warehousing
311
326
  test_files: []
312
-