stats_combiner 0.0.2 → 0.0.3

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
@@ -66,40 +66,45 @@ module StatsCombiner
66
66
  :prefix => nil
67
67
  }.merge!(datum)
68
68
 
69
- filters.each do |filter|
70
-
71
- # set prefixes where they match title regexes
72
- # /\| TPMDC/ => http://tpmdc
73
- if (filter[:rule][:prefix] && filter[:rule][:title_regex]) && datum[:title].match(filter[:rule][:title_regex])
74
- datum[:prefix] = filter[:rule][:prefix]
75
- end
76
-
77
- # modify path => '?q=new_suffix'
78
- # append to path with regex replacement variables => '\1&new_suffix'
79
- if (filter[:rule][:suffix] && filter[:rule][:path_regex]) && datum[:path].match(filter[:rule][:path_regex])
80
- datum[:path].gsub!(filter[:rule][:path_regex],filter[:rule][:suffix])
81
- end
69
+ filters.each do |filter|
70
+
71
+ #skip filters if datum has already been nil'd
72
+ if not (datum[:title].nil? || datum[:path].nil?)
82
73
 
83
- # apply title mods
84
- # modify_title => true /==>
85
- # modify_title => "DC Central"
86
- # title_regex => /| TPMDC/, modify_title => '\1 Central' ==> TPMDC Central
87
- if filter[:rule][:modify_title]
88
- filter[:rule][:modify_title] = '' unless filter[:rule][:modify_title].is_a?(String)
89
- datum[:title].gsub!(filter[:rule][:title_regex], filter[:rule][:modify_title])
90
- datum[:title].strip!
91
- end
74
+ # set prefixes where they match title regexes
75
+ # /\| TPMDC/ => http://tpmdc
76
+ if (filter[:rule][:prefix] && filter[:rule][:title_regex]) && datum[:title].match(filter[:rule][:title_regex])
77
+ datum[:prefix] = filter[:rule][:prefix]
78
+ end
79
+
80
+ # modify path => '?q=new_suffix'
81
+ # append to path with regex replacement variables => '\1&new_suffix'
82
+ if (filter[:rule][:suffix] && filter[:rule][:path_regex]) && datum[:path].match(filter[:rule][:path_regex])
83
+ datum[:path].gsub!(filter[:rule][:path_regex],filter[:rule][:suffix])
84
+ end
85
+
86
+ # apply title mods
87
+ # modify_title => true /==>
88
+ # modify_title => "DC Central"
89
+ # title_regex => /| TPMDC/, modify_title => '\1 Central' ==> TPMDC Central
90
+ if filter[:rule][:modify_title]
91
+ filter[:rule][:modify_title] = '' unless filter[:rule][:modify_title].is_a?(String)
92
+ datum[:title].gsub!(filter[:rule][:title_regex], filter[:rule][:modify_title])
93
+ datum[:title].strip!
94
+ end
95
+
96
+ # apply excludes.
97
+ # this should take out the whole record if it matches a path or title regex
98
+ if filter[:rule][:exclude] && ((filter[:rule][:path_regex].is_a?(Regexp) && datum[:path].match(filter[:rule][:path_regex])) || (filter[:rule][:title_regex].is_a?(Regexp) && datum[:title].match(filter[:rule][:title_regex])))
99
+ # nil out datum.
100
+ # StatsCombiner::Combiner will sweep away the nils later
101
+ datum[:title] = datum[:path] = datum[:prefix] = nil
102
+ end
92
103
 
93
- # apply excludes.
94
- # this should take out the whole record if it matches a path or title regex
95
- if filter[:rule][:exclude] && ((filter[:rule][:path_regex].is_a?(Regexp) && datum[:path].match(filter[:rule][:path_regex])) || (filter[:rule][:title_regex].is_a?(Regexp) && datum[:title].match(filter[:rule][:title_regex])))
96
- # nil out datum.
97
- # StatsCombiner::Combiner will sweep away the nils later
98
- datum[:title] = datum[:path] = datum[:prefix] = nil
104
+ end
105
+
99
106
  end
100
107
 
101
- end
102
-
103
108
  datum
104
109
 
105
110
  end
@@ -179,9 +179,11 @@ describe "basic Filterer filtering" do
179
179
  result = StatsCombiner::Filterer.apply_filters!(@f.filters,datum)
180
180
  result[:title].should be_nil
181
181
  result[:path].should be_nil
182
-
183
- @f.filters.clear
184
-
182
+
183
+ end
184
+
185
+ it 'should not nil out data when path or title regexes are unmatched' do
186
+
185
187
  #now, let's look for invalid data. run a regex against a nonmatch
186
188
  @f.add :path_regex => /(\/$|\/index.php$)/, :exclude => true
187
189
 
@@ -204,6 +206,26 @@ describe "basic Filterer filtering" do
204
206
 
205
207
  end
206
208
 
209
+ it 'should handle multiple exclude rules by avoiding putting nils through filters twice' do
210
+
211
+ @f.add :path_regex => /(\/$|\/index.php$)/, :exclude => true
212
+ @f.add :path_regex => /talk\/blogs/, :exclude => true
213
+
214
+ datum_1 = {:visitors=>3090, :created_at=>nil, :path=>"/", :id=>1, :title=>"Talking Points Memo | Breaking News and Analysis"}
215
+
216
+ result_1 = StatsCombiner::Filterer.apply_filters!(@f.filters,datum_1)
217
+ result_1[:title].should be_nil
218
+ result_1[:path].should be_nil
219
+
220
+
221
+ datum_2 = {:visitors=>6, :created_at=>nil, :path=>"/talk/blogs/a/m/americandad/2010/03/an-open-letter-to-conservative.php/", :id=>31, :title=>"An open letter to conservatives | AmericanDad's Blog"}
222
+
223
+ result_2 = StatsCombiner::Filterer.apply_filters!(@f.filters,datum_2)
224
+ result_2[:title].should be_nil
225
+ result_2[:path].should be_nil
226
+
227
+ end
228
+
207
229
  end
208
230
 
209
231
  # best way to do this (without prying open the Class) might be
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{stats_combiner}
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Al Shaw"]
@@ -31,7 +31,7 @@ Gem::Specification.new do |s|
31
31
  s.homepage = %q{http://github.com/tpm/stats_combiner}
32
32
  s.rdoc_options = ["--charset=UTF-8"]
33
33
  s.require_paths = ["lib"]
34
- s.rubygems_version = %q{1.3.7}
34
+ s.rubygems_version = %q{1.3.6}
35
35
  s.summary = %q{StatsCombiner creates most-viewed story widgets from the Chartbeat API}
36
36
  s.test_files = [
37
37
  "spec/spec_helper.rb",
@@ -42,7 +42,7 @@ Gem::Specification.new do |s|
42
42
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
43
43
  s.specification_version = 3
44
44
 
45
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
46
46
  s.add_runtime_dependency(%q<chartbeat>, [">= 0"])
47
47
  s.add_runtime_dependency(%q<sequel>, [">= 0"])
48
48
  s.add_development_dependency(%q<rspec>, [">= 0"])
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stats_combiner
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 0
9
- - 2
10
- version: 0.0.2
8
+ - 3
9
+ version: 0.0.3
11
10
  platform: ruby
12
11
  authors:
13
12
  - Al Shaw
@@ -22,11 +21,9 @@ dependencies:
22
21
  name: chartbeat
23
22
  prerelease: false
24
23
  requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
24
  requirements:
27
25
  - - ">="
28
26
  - !ruby/object:Gem::Version
29
- hash: 3
30
27
  segments:
31
28
  - 0
32
29
  version: "0"
@@ -36,11 +33,9 @@ dependencies:
36
33
  name: sequel
37
34
  prerelease: false
38
35
  requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
36
  requirements:
41
37
  - - ">="
42
38
  - !ruby/object:Gem::Version
43
- hash: 3
44
39
  segments:
45
40
  - 0
46
41
  version: "0"
@@ -50,11 +45,9 @@ dependencies:
50
45
  name: rspec
51
46
  prerelease: false
52
47
  requirement: &id003 !ruby/object:Gem::Requirement
53
- none: false
54
48
  requirements:
55
49
  - - ">="
56
50
  - !ruby/object:Gem::Version
57
- hash: 3
58
51
  segments:
59
52
  - 0
60
53
  version: "0"
@@ -64,11 +57,9 @@ dependencies:
64
57
  name: fakeweb
65
58
  prerelease: false
66
59
  requirement: &id004 !ruby/object:Gem::Requirement
67
- none: false
68
60
  requirements:
69
61
  - - ">="
70
62
  - !ruby/object:Gem::Version
71
- hash: 3
72
63
  segments:
73
64
  - 0
74
65
  version: "0"
@@ -78,11 +69,9 @@ dependencies:
78
69
  name: timecop
79
70
  prerelease: false
80
71
  requirement: &id005 !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ">="
84
74
  - !ruby/object:Gem::Version
85
- hash: 3
86
75
  segments:
87
76
  - 0
88
77
  version: "0"
@@ -92,11 +81,9 @@ dependencies:
92
81
  name: hpricot
93
82
  prerelease: false
94
83
  requirement: &id006 !ruby/object:Gem::Requirement
95
- none: false
96
84
  requirements:
97
85
  - - ">="
98
86
  - !ruby/object:Gem::Version
99
- hash: 3
100
87
  segments:
101
88
  - 0
102
89
  version: "0"
@@ -132,27 +119,23 @@ rdoc_options:
132
119
  require_paths:
133
120
  - lib
134
121
  required_ruby_version: !ruby/object:Gem::Requirement
135
- none: false
136
122
  requirements:
137
123
  - - ">="
138
124
  - !ruby/object:Gem::Version
139
- hash: 3
140
125
  segments:
141
126
  - 0
142
127
  version: "0"
143
128
  required_rubygems_version: !ruby/object:Gem::Requirement
144
- none: false
145
129
  requirements:
146
130
  - - ">="
147
131
  - !ruby/object:Gem::Version
148
- hash: 3
149
132
  segments:
150
133
  - 0
151
134
  version: "0"
152
135
  requirements: []
153
136
 
154
137
  rubyforge_project:
155
- rubygems_version: 1.3.7
138
+ rubygems_version: 1.3.6
156
139
  signing_key:
157
140
  specification_version: 3
158
141
  summary: StatsCombiner creates most-viewed story widgets from the Chartbeat API