chicagowarehouse 0.4.6 → 0.4.7

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/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
-