flurry 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3cde1d598b20fc4514de059bcc23ca9c80fae07433c9a3f5d50cc26c872afb68
4
- data.tar.gz: d33afbd639fc828e7fe05bb4b47b94f35654ee8e36bb85064e1cecc969ac875a
3
+ metadata.gz: 7dfb857e76e829fc5ef38c907de8ac00e8433071bbf8ffca566dfce7c5bc2020
4
+ data.tar.gz: f16bd69eb991bee0be3dbc5845c82b0ff6697e4d08ebccbf7cfe0ce6801f0d41
5
5
  SHA512:
6
- metadata.gz: a1c24852b29328043a97eb502475581062f96d957bceff546dd822db1c9f22a9a8d0c66f7644f908192eaf8f95874d42cd559a06922a48acb8e0fb74993fabd7
7
- data.tar.gz: 14374f12b87fc3dff4556ddd7dea211a543e5ee96ecc68cce9bf9f42df9c6089d9431a352330a651be6acc1b8a3fc6a2d27095749e461c4a2d7d112b5599c1b4
6
+ metadata.gz: 2de8d6cb00b1ee989c2211808ff11fd2f0185b8411a229ad250346cf4e622e51d6aab1d62b19deeaada6edaad45797f93e76d767e0eac0472a25a11277434f5c
7
+ data.tar.gz: e08caab0c91b15427444eff98b503cdf447ebf20215f2acc69c3d389dda6fa829c2aa966f86cc589e52b5a9c31e33bcefa4ffe5d218a6b87db185af1ccc197ee
data/lib/flurry/helper.rb CHANGED
@@ -20,5 +20,18 @@ module Flurry
20
20
  tomorrow = Date.parse(date.to_s) if date.is_a?(Time)
21
21
  (tomorrow || date) + 1
22
22
  end
23
+
24
+ def merge(hsh, other)
25
+ (hsh || {}).merge(other || {}) do |_key, old_val, new_val|
26
+ case old_val
27
+ when Hash
28
+ merge old_val, new_val
29
+ when Array
30
+ old_val | new_val
31
+ else
32
+ new_val
33
+ end
34
+ end
35
+ end
23
36
  end
24
37
  end
@@ -16,14 +16,17 @@ module Flurry
16
16
  end
17
17
 
18
18
  def showing(**dimensions)
19
- dup.tap { |it| it.dimensions = clean_dimensions(dimensions || {}) }
19
+ dup.tap { |it| it.dimensions = merge(it.dimensions, clean_dimensions(dimensions || {})) }
20
20
  end
21
21
 
22
22
  def select(*metrics)
23
23
  metrics = metrics.flatten.reject(&:nil?) || []
24
24
  raise Flurry::Error, 'at least one metric has to be provided' if metrics.empty?
25
25
 
26
- dup.tap { |it| it.metrics = metrics.map { |m| camelize(m.to_s) } }
26
+ dup.tap do |it|
27
+ it.metrics ||= []
28
+ it.metrics |= metrics.map { |m| camelize(m.to_s) }
29
+ end
27
30
  end
28
31
 
29
32
  def between(start, finish = nil, format: '%Y-%m-%d')
@@ -41,7 +44,7 @@ module Flurry
41
44
 
42
45
  sorts = { sorts => nil } unless sorts.is_a?(Hash)
43
46
  dup.tap do |it|
44
- it.sorts = clean_sorts(sorts || {})
47
+ it.sorts = merge(it.sorts, clean_sorts(sorts || {}))
45
48
  it.top = top
46
49
  end
47
50
  end
@@ -49,7 +52,7 @@ module Flurry
49
52
  def having(**havings)
50
53
  raise Flurry::Error, 'metrics must be provided before having' unless @metrics
51
54
 
52
- dup.tap { |it| it.havings = clean_havings(havings || {}) }
55
+ dup.tap { |it| it.havings = merge(it.havings, clean_havings(havings || {})) }
53
56
  end
54
57
 
55
58
  def time_zone(time_zone)
@@ -68,7 +71,8 @@ module Flurry
68
71
 
69
72
  protected
70
73
 
71
- attr_writer :table, :grain, :dimensions, :metrics, :range, :sorts, :top, :havings, :time_zone, :format
74
+ attr_writer :table, :grain, :range, :top, :time_zone, :format
75
+ attr_accessor :dimensions, :metrics, :sorts, :havings
72
76
 
73
77
  private
74
78
 
@@ -1,3 +1,3 @@
1
1
  module Flurry
2
- VERSION = '0.4.1'.freeze
2
+ VERSION = '0.5.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flurry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roger Bagué
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-25 00:00:00.000000000 Z
11
+ date: 2019-05-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty