chartable 0.0.0.1 → 0.0.0.2

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: 542726255882a8805df4e6f6fdd0417234dea2841340b1e0c703729c40c9355f
4
- data.tar.gz: 38f0a30b7f1dc584968a268a8eed9c042788aedd285b98b2fc6b336ef43b27b4
3
+ metadata.gz: 7366c67606157ae0f28e3cda5bd591858a662fb4d1ac27dca22d3e26e1155a3b
4
+ data.tar.gz: 63db758f26ae8057f200727a2fb735e8cb675a28f01d751bd31a8dcd3bc16aba
5
5
  SHA512:
6
- metadata.gz: 3364382cc913e5e98ed6bc7aae962cfd261639241fceb709e9f5e583a32f2e913a99d9921cafb2234034ff80eb027e1025988e2877e7b86362eb0c48aeb1bb71
7
- data.tar.gz: f95d5ae606a9cde926d3242bb7cf2d46736fe80260285e3e57b5d078fee8fba6f0a7cf5e5abea56d318906625e2668394b71f47770dc6c4716c557bb97ce1da7
6
+ metadata.gz: 8ccdf6bf85dd948d187caa1cd4d4455bd30c7c2c1831e872896802ef909ca1d572ff3db9e212781d2335e1b2a2d4d9e29f2b847bf08f342a0069292bfa09496e
7
+ data.tar.gz: 0fba6005933df7394b20ea0c69c3a27611acb00e863f793a3910c5b8eaea24496e0896eae700080b99f8e9ac7fcd376958d094ef6d8fc0476830c2aa41026358
@@ -6,7 +6,19 @@ module Chartable
6
6
  #
7
7
  # @return [Hash]
8
8
  def self.call(scope, on:)
9
- scope.group("DATE_FORMAT(#{on}, '%M %d, %Y')").size
9
+ if ActiveRecord::Base.connection.class.to_s.match(/sqlite/i)
10
+ scope.group("strftime('%m %d, %Y', #{on})").size.transform_keys do |key|
11
+ data = key.split(" ")
12
+ month_number = data.shift
13
+ month_name = Date::MONTHNAMES[month_number.to_i]
14
+ data.unshift(month_name)
15
+ data.join(" ")
16
+ end
17
+ elsif ActiveRecord::Base.connection.class.to_s.match(/postgresql/i)
18
+ scope.group("to_char(#{on},'FMMonth DD, YYYY')").size
19
+ else
20
+ scope.group("DATE_FORMAT(#{on}, '%M %d, %Y')").size
21
+ end
10
22
  end
11
23
  end
12
24
  end
@@ -3,10 +3,20 @@ module Chartable
3
3
  class Monthly
4
4
  # It returns analytics data for the monthly period.
5
5
  # Example output: `{"November 2018" => 1, "October 2018" => 1}`
6
+ # SQLite does not support DATE_FORMAT function so a little hack is needed
6
7
  #
7
8
  # @return [Hash]
8
9
  def self.call(scope, on:)
9
- scope.group("DATE_FORMAT(#{on},'%M %Y')").size
10
+ if ActiveRecord::Base.connection.class.to_s.match(/sqlite/i)
11
+ scope.group("strftime('%m %Y', #{on})").size.transform_keys do |key|
12
+ month_number = key.match(/^[0-9]{2}(?= )/).to_s
13
+ key.gsub(month_number, Date::MONTHNAMES[month_number.to_i])
14
+ end
15
+ elsif ActiveRecord::Base.connection.class.to_s.match(/postgresql/i)
16
+ scope.group("to_char(#{on},'FMMonth YYYY')").size
17
+ else
18
+ scope.group("DATE_FORMAT(#{on},'%M %Y')").size
19
+ end
10
20
  end
11
21
  end
12
22
  end
@@ -6,7 +6,24 @@ module Chartable
6
6
  #
7
7
  # @return [Hash]
8
8
  def self.call(scope, on:)
9
- scope.group("CONCAT('Q', QUARTER(#{on}), DATE_FORMAT(#{on},' %Y'))").size
9
+ if ActiveRecord::Base.connection.class.to_s.match(/sqlite/i)
10
+ scope.group("strftime('%m %Y', #{on})").size.transform_keys do |key|
11
+ month_number = key.match(/^[0-9]{2}(?= )/).to_s
12
+ quarter = case month_number.to_i
13
+ when 1..3 then 1
14
+ when 4..6 then 2
15
+ when 7..9 then 3
16
+ else
17
+ 4
18
+ end
19
+
20
+ key.gsub(month_number, "Q#{quarter}")
21
+ end
22
+ elsif ActiveRecord::Base.connection.class.to_s.match(/postgresql/i)
23
+ scope.group("concat('Q', to_char(#{on},'Q YYYY'))").size
24
+ else
25
+ scope.group("CONCAT('Q', QUARTER(#{on}), DATE_FORMAT(#{on},' %Y'))").size
26
+ end
10
27
  end
11
28
  end
12
29
  end
@@ -2,11 +2,17 @@ module Chartable
2
2
  module Queries
3
3
  class Weekly
4
4
  # It returns analytics data for the weekly period.
5
- # Example output: `{"01/28/18 - 02/03/18" => 1, "02/11/18 - 02/17/18" => 1}`
5
+ # Example output: `{"01/28/2018 - 02/03/2018" => 1, "02/11/2018 - 02/17/2018" => 1}`
6
6
  #
7
7
  # @return [Hash]
8
8
  def self.call(scope, on:)
9
- scope.group("CONCAT(DATE_FORMAT(DATE(DATE_ADD(#{on}, INTERVAL(1-DAYOFWEEK(#{on})) DAY)), '%m/%d/%y'), ' - ', DATE_FORMAT(DATE(DATE_ADD(#{on}, INTERVAL(7-DAYOFWEEK(#{on})) DAY)),'%m/%d/%y'))").size
9
+ if ActiveRecord::Base.connection.class.to_s.match(/sqlite/i)
10
+ scope.group("strftime('%m/%d/%Y', date(#{on}, 'weekday 0', '-7 days')) || ' - ' || strftime('%m/%d/%Y', date(#{on}, 'weekday 0', '-1 days'))").size
11
+ elsif ActiveRecord::Base.connection.class.to_s.match(/postgresql/i)
12
+ scope.group("concat(to_char(date_trunc('week', #{on}) + '-1 day', 'MM/DD/YYYY'), ' - ', to_char(date_trunc('week', #{on}) + '5 days', 'MM/DD/YYYY'))").size
13
+ else
14
+ scope.group("CONCAT(DATE_FORMAT(DATE(DATE_ADD(#{on}, INTERVAL(1-DAYOFWEEK(#{on})) DAY)), '%m/%d/%Y'), ' - ', DATE_FORMAT(DATE(DATE_ADD(#{on}, INTERVAL(7-DAYOFWEEK(#{on})) DAY)),'%m/%d/%Y'))").size
15
+ end
10
16
  end
11
17
  end
12
18
  end
@@ -6,7 +6,13 @@ module Chartable
6
6
  #
7
7
  # @return [Hash]
8
8
  def self.call(scope, on:)
9
- scope.group("YEAR(#{on})").size
9
+ if ActiveRecord::Base.connection.class.to_s.match(/sqlite/i)
10
+ scope.group("cast(strftime('%Y', #{on}) as decimal)").size
11
+ elsif ActiveRecord::Base.connection.class.to_s.match(/postgresql/i)
12
+ scope.group("cast(to_char(#{on},'YYYY') as integer)").size
13
+ else
14
+ scope.group("YEAR(#{on})").size
15
+ end
10
16
  end
11
17
  end
12
18
  end
@@ -13,12 +13,13 @@ module Chartable
13
13
 
14
14
  return scope if from_date.nil? && to_date.nil?
15
15
 
16
- if from_date.nil?
17
- scope.where("DATE(#{on}) <= ?", to_date.to_date)
18
- elsif to_date.nil?
19
- scope.where("DATE(#{on}) >= ?", from_date.to_date)
20
- else
21
- scope.where("DATE(#{on}) >= ? AND DATE(#{on}) <= ?", from_date.to_date, to_date.to_date)
16
+ case
17
+ when from_date.nil?
18
+ scope.where("DATE(#{on}) <= ?", to_date.to_date)
19
+ when to_date.nil?
20
+ scope.where("DATE(#{on}) >= ?", from_date.to_date)
21
+ else
22
+ scope.where("DATE(#{on}) >= ? AND DATE(#{on}) <= ?", from_date.to_date, to_date.to_date)
22
23
  end
23
24
  end
24
25
  end
@@ -6,7 +6,7 @@ module Chartable
6
6
  #
7
7
  # @return [String]
8
8
  def to_s
9
- "0.0.0.1"
9
+ "0.0.0.2"
10
10
  end
11
11
  end
12
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chartable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0.1
4
+ version: 0.0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paweł Dąbrowski