google_analytics_feeds 0.0.1 → 0.1.0

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.1
1
+ 0.1.0
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{google_analytics_feeds}
8
- s.version = "0.0.1"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Roland Swingler}]
@@ -133,6 +133,67 @@ module GoogleAnalyticsFeeds
133
133
  end
134
134
  end
135
135
 
136
+ class FilterBuilder
137
+ include Naming
138
+
139
+ def initialize
140
+ @filters = []
141
+ end
142
+
143
+ def build(&block)
144
+ instance_eval(&block)
145
+ @filters.join(';')
146
+ end
147
+
148
+ # TODO: remove duplication
149
+
150
+ def eql(name, value)
151
+ filter(name, value, '==')
152
+ end
153
+
154
+ def not_eql(name, value)
155
+ filter(name, value, '!=')
156
+ end
157
+
158
+ def contains(n, v)
159
+ filter(n, v, '=@')
160
+ end
161
+
162
+ def not_contains(n, v)
163
+ filter(n, v, '!@')
164
+ end
165
+
166
+ def gt(n, v)
167
+ filter(n, v, '>')
168
+ end
169
+
170
+ def gte(n, v)
171
+ filter(n, v, '>=')
172
+ end
173
+
174
+ def lt(n, v)
175
+ filter(n, v, '<')
176
+ end
177
+
178
+ def lte(n, v)
179
+ filter(n, v, '<=')
180
+ end
181
+
182
+ def match(n, v)
183
+ filter(n, v, '=~')
184
+ end
185
+
186
+ def not_match(n, v)
187
+ filter(n, v, '!~')
188
+ end
189
+
190
+ private
191
+
192
+ def filter(name, value, operation)
193
+ @filters << [symbol_to_name(name), operation, value.to_s].join('')
194
+ end
195
+ end
196
+
136
197
  class DataFeed
137
198
  include Naming
138
199
 
@@ -179,6 +240,13 @@ module GoogleAnalyticsFeeds
179
240
  }
180
241
  end
181
242
 
243
+ def filters(&block)
244
+ builder =
245
+ clone_and_set {|params|
246
+ params['filters'] = FilterBuilder.new.build(&block)
247
+ }
248
+ end
249
+
182
250
  # Sorts the result set by a column.
183
251
  #
184
252
  # Direction can be :asc or :desc.
data/spec/request_spec.rb CHANGED
@@ -44,4 +44,17 @@ describe GoogleAnalyticsFeeds::DataFeed do
44
44
 
45
45
  headers["Authorization"].should == "GoogleLogin auth=123"
46
46
  end
47
+
48
+ it "can add filters" do
49
+ feed = described_class.new.
50
+ filters {
51
+ eql :baz, 4
52
+ contains :foo, "123"
53
+ }
54
+
55
+ uri = Addressable::URI.parse(feed.uri)
56
+ uri.query_values.should == {
57
+ "filters" => "ga:baz==4;ga:foo=@123"
58
+ }
59
+ end
47
60
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google_analytics_feeds
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 0
9
8
  - 1
10
- version: 0.0.1
9
+ - 0
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Roland Swingler