chicagowarehouse 0.4.4 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
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.4"
17
+ gem.version = "0.4.5"
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.4"
8
+ s.version = "0.4.5"
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 = "2013-07-24"
12
+ s.date = "2013-09-16"
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,7 +83,7 @@ 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.15"
87
87
  s.summary = "Ruby Data Warehousing"
88
88
 
89
89
  if s.respond_to? :specification_version then
@@ -65,5 +65,15 @@ module Chicago::Schema::Builders
65
65
  def has_predetermined_values
66
66
  @options[:predetermined_values] = true
67
67
  end
68
+
69
+ # Defines this dimension as uncountable.
70
+ #
71
+ # By default, dimensions are considered countable entities if they
72
+ # have an original_id column. In some cases, a dimension may be
73
+ # identifiable by this column, but still not semantically be a
74
+ # countable entity.
75
+ def uncountable
76
+ @options[:uncountable] = true
77
+ end
68
78
  end
69
79
  end
@@ -61,6 +61,7 @@ module Chicago
61
61
  @table_name = sprintf(DIMENSION_TABLE_FORMAT, name).to_sym
62
62
  @key_table_name = sprintf(KEY_TABLE_FORMAT, @table_name).to_sym
63
63
  @predetermined_values = !! opts[:predetermined_values]
64
+ @countable = !opts[:uncountable]
64
65
  check_null_records
65
66
  end
66
67
 
@@ -96,6 +97,11 @@ module Chicago
96
97
  !! original_key
97
98
  end
98
99
 
100
+ # Returns true if these dimension entries can be counted.
101
+ def countable?
102
+ @countable && identifiable?
103
+ end
104
+
99
105
  # Returns true if the set of values for this dimension is
100
106
  # pretermined.
101
107
  #
@@ -8,7 +8,7 @@ module Chicago
8
8
  class DimensionReference < Column
9
9
  extend Forwardable
10
10
 
11
- def_delegators :@dimension, :columns, :column_definitions, :identifiers, :main_identifier, :identifiable?, :original_key, :natural_key, :table_name, :[], :key_table_name
11
+ def_delegators :@dimension, :columns, :column_definitions, :identifiers, :main_identifier, :identifiable?, :original_key, :natural_key, :table_name, :[], :key_table_name, :countable?
12
12
 
13
13
  def initialize(name, dimension, opts={})
14
14
  super name, :integer, opts.merge(:min => 0)
@@ -17,6 +17,10 @@ module Chicago
17
17
  @key_name = opts[:key_name] || "#{@name}_dimension_id".to_sym
18
18
  end
19
19
 
20
+ def countable_label
21
+ "No. of #{label.pluralize}"
22
+ end
23
+
20
24
  # Returns the key name of this dimension.
21
25
  def database_name
22
26
  @key_name
@@ -36,6 +36,16 @@ describe Chicago::Schema::DimensionReference do
36
36
  described_class.new(:foo, @dimension).original_key.should == :result
37
37
  end
38
38
 
39
+ it "returns countable from the dimension" do
40
+ @dimension.should_receive(:countable?).and_return(true)
41
+ described_class.new(:foo, @dimension).should be_countable
42
+ end
43
+
44
+ it "has a countable label" do
45
+ described_class.new(:foo, @dimension).countable_label.
46
+ should == "No. of Foos"
47
+ end
48
+
39
49
  it "returns natural_key from the dimension" do
40
50
  @dimension.should_receive(:natural_key).and_return(:result)
41
51
  described_class.new(:foo, @dimension).natural_key.should == :result
@@ -103,6 +103,18 @@ describe Chicago::Schema::Dimension do
103
103
  described_class.new(:user, :columns => [column]).should be_identifiable
104
104
  end
105
105
 
106
+ it "is considered countable if it has an original key [DEPRECATED]" do
107
+ column = stub(:c, :name => :original_id)
108
+ described_class.new(:user, :columns => [column]).should be_countable
109
+ described_class.new(:user, :columns => []).should_not be_countable
110
+ end
111
+
112
+ it "can be marked as uncountable" do
113
+ column = stub(:c, :name => :original_id)
114
+ described_class.new(:user, :columns => [column],
115
+ :uncountable => true).should_not be_countable
116
+ end
117
+
106
118
  it "can have predetermined values" do
107
119
  described_class.new(:countries, :predetermined_values => true).should have_predetermined_values
108
120
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chicagowarehouse
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 5
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 4
10
- version: 0.4.4
9
+ - 5
10
+ version: 0.4.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Roland Swingler
@@ -15,10 +15,12 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-07-24 00:00:00 Z
18
+ date: 2013-09-16 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- version_requirements: &id001 !ruby/object:Gem::Requirement
21
+ type: :runtime
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
22
24
  none: false
23
25
  requirements:
24
26
  - - ~>
@@ -29,11 +31,11 @@ dependencies:
29
31
  - 0
30
32
  version: "3.0"
31
33
  name: sequel
32
- prerelease: false
33
- type: :runtime
34
- requirement: *id001
34
+ version_requirements: *id001
35
35
  - !ruby/object:Gem::Dependency
36
- version_requirements: &id002 !ruby/object:Gem::Requirement
36
+ type: :runtime
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
37
39
  none: false
38
40
  requirements:
39
41
  - - ">="
@@ -45,11 +47,11 @@ dependencies:
45
47
  - 2
46
48
  version: 0.3.2
47
49
  name: sequel_migration_builder
48
- prerelease: false
49
- type: :runtime
50
- requirement: *id002
50
+ version_requirements: *id002
51
51
  - !ruby/object:Gem::Dependency
52
- version_requirements: &id003 !ruby/object:Gem::Requirement
52
+ type: :runtime
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
53
55
  none: false
54
56
  requirements:
55
57
  - - "="
@@ -61,11 +63,11 @@ dependencies:
61
63
  - 1
62
64
  version: 2.8.1
63
65
  name: mysql
64
- prerelease: false
65
- type: :runtime
66
- requirement: *id003
66
+ version_requirements: *id003
67
67
  - !ruby/object:Gem::Dependency
68
- version_requirements: &id004 !ruby/object:Gem::Requirement
68
+ type: :runtime
69
+ prerelease: false
70
+ requirement: &id004 !ruby/object:Gem::Requirement
69
71
  none: false
70
72
  requirements:
71
73
  - - ">="
@@ -75,11 +77,11 @@ dependencies:
75
77
  - 0
76
78
  version: "0"
77
79
  name: chronic
78
- prerelease: false
79
- type: :runtime
80
- requirement: *id004
80
+ version_requirements: *id004
81
81
  - !ruby/object:Gem::Dependency
82
- version_requirements: &id005 !ruby/object:Gem::Requirement
82
+ type: :development
83
+ prerelease: false
84
+ requirement: &id005 !ruby/object:Gem::Requirement
83
85
  none: false
84
86
  requirements:
85
87
  - - ">="
@@ -89,11 +91,11 @@ dependencies:
89
91
  - 0
90
92
  version: "0"
91
93
  name: yard
92
- prerelease: false
93
- type: :development
94
- requirement: *id005
94
+ version_requirements: *id005
95
95
  - !ruby/object:Gem::Dependency
96
- version_requirements: &id006 !ruby/object:Gem::Requirement
96
+ type: :development
97
+ prerelease: false
98
+ requirement: &id006 !ruby/object:Gem::Requirement
97
99
  none: false
98
100
  requirements:
99
101
  - - ~>
@@ -104,11 +106,11 @@ dependencies:
104
106
  - 0
105
107
  version: "2.0"
106
108
  name: rspec
107
- prerelease: false
108
- type: :development
109
- requirement: *id006
109
+ version_requirements: *id006
110
110
  - !ruby/object:Gem::Dependency
111
- version_requirements: &id007 !ruby/object:Gem::Requirement
111
+ type: :development
112
+ prerelease: false
113
+ requirement: &id007 !ruby/object:Gem::Requirement
112
114
  none: false
113
115
  requirements:
114
116
  - - ">="
@@ -118,11 +120,11 @@ dependencies:
118
120
  - 0
119
121
  version: "0"
120
122
  name: bundler
121
- prerelease: false
122
- type: :development
123
- requirement: *id007
123
+ version_requirements: *id007
124
124
  - !ruby/object:Gem::Dependency
125
- version_requirements: &id008 !ruby/object:Gem::Requirement
125
+ type: :development
126
+ prerelease: false
127
+ requirement: &id008 !ruby/object:Gem::Requirement
126
128
  none: false
127
129
  requirements:
128
130
  - - ">="
@@ -132,11 +134,11 @@ dependencies:
132
134
  - 0
133
135
  version: "0"
134
136
  name: jeweler
135
- prerelease: false
136
- type: :development
137
- requirement: *id008
137
+ version_requirements: *id008
138
138
  - !ruby/object:Gem::Dependency
139
- version_requirements: &id009 !ruby/object:Gem::Requirement
139
+ type: :development
140
+ prerelease: false
141
+ requirement: &id009 !ruby/object:Gem::Requirement
140
142
  none: false
141
143
  requirements:
142
144
  - - ">="
@@ -146,11 +148,11 @@ dependencies:
146
148
  - 0
147
149
  version: "0"
148
150
  name: rcov
149
- prerelease: false
150
- type: :development
151
- requirement: *id009
151
+ version_requirements: *id009
152
152
  - !ruby/object:Gem::Dependency
153
- version_requirements: &id010 !ruby/object:Gem::Requirement
153
+ type: :development
154
+ prerelease: false
155
+ requirement: &id010 !ruby/object:Gem::Requirement
154
156
  none: false
155
157
  requirements:
156
158
  - - ">="
@@ -160,11 +162,11 @@ dependencies:
160
162
  - 0
161
163
  version: "0"
162
164
  name: flog
163
- prerelease: false
164
- type: :development
165
- requirement: *id010
165
+ version_requirements: *id010
166
166
  - !ruby/object:Gem::Dependency
167
- version_requirements: &id011 !ruby/object:Gem::Requirement
167
+ type: :development
168
+ prerelease: false
169
+ requirement: &id011 !ruby/object:Gem::Requirement
168
170
  none: false
169
171
  requirements:
170
172
  - - ">="
@@ -174,11 +176,11 @@ dependencies:
174
176
  - 0
175
177
  version: "0"
176
178
  name: ZenTest
177
- prerelease: false
178
- type: :development
179
- requirement: *id011
179
+ version_requirements: *id011
180
180
  - !ruby/object:Gem::Dependency
181
- version_requirements: &id012 !ruby/object:Gem::Requirement
181
+ type: :development
182
+ prerelease: false
183
+ requirement: &id012 !ruby/object:Gem::Requirement
182
184
  none: false
183
185
  requirements:
184
186
  - - ">="
@@ -188,9 +190,7 @@ dependencies:
188
190
  - 0
189
191
  version: "0"
190
192
  name: timecop
191
- prerelease: false
192
- type: :development
193
- requirement: *id012
193
+ version_requirements: *id012
194
194
  description: Simple Data Warehouse toolkit for ruby
195
195
  email: roland.swingler@gmail.com
196
196
  executables: []
@@ -292,7 +292,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
292
292
  requirements: []
293
293
 
294
294
  rubyforge_project:
295
- rubygems_version: 1.8.25
295
+ rubygems_version: 1.8.15
296
296
  signing_key:
297
297
  specification_version: 3
298
298
  summary: Ruby Data Warehousing