flurry 0.4.1 → 0.5.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.
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