aggtive_record 0.2.2 → 0.2.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.
- checksums.yaml +8 -8
- data/VERSION +1 -1
- data/aggtive_record.gemspec +1 -1
- data/lib/aggtive_record/egg_scopes/collation/rate_per.rb +7 -2
- data/spec/functional/collation_spec.rb +9 -1
- data/spec/lib/rate_spec.rb +11 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NGVmOTFmZTQ3MGExYjRlM2M5ZWViMDM0NzQ5ZjRiNTM0NGU4YzE1Yg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MGNlMThmOTU1NmYxYjNjMGJmM2QwZjU0YzczOWU3YzJhNjY3MjQzZA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YjUxNmM0NDg4ZmI1NzE1ZjEyZjdiY2IzOWFmMjZhZWI3ZTk4NDhkYmY4ZGU0
|
10
|
+
NTUyNjVhOGMzZjk4YjUwNmU3NDMxN2NlYTc2Nzk0M2JlMTIzNGQ2ODRkYzUx
|
11
|
+
NjM5NmU3N2M5NmY0ZDUwYTA4YzFlMjkxY2JiNGJhZjc2MTZhMDM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YjU5NGQ2YmRiZTkwZWQwMGVmOTdmOGFmMWU5NmQ2OTEyOGRmYTU1NzExY2Vi
|
14
|
+
YzY2YjFjYzcxODdiYWFiMGE2YTc5NzMyMDBmOWZkNzk0MWQ1YTY4ZTE5ZDlk
|
15
|
+
MGNmYWM0NzJmNjNkMjU3Y2ExNzdiODdjYWIwOWMyNTY2MjU2NTE=
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.3
|
data/aggtive_record.gemspec
CHANGED
@@ -22,12 +22,17 @@ module AggtiveRecord
|
|
22
22
|
timespan_in_seconds ||= self.timespan_to_now(records)
|
23
23
|
|
24
24
|
# return 0 if no timespan_in_seconds
|
25
|
-
return 0 if timespan_in_seconds.to_i ==0
|
25
|
+
return 0 if timespan_in_seconds.to_i == 0
|
26
26
|
|
27
27
|
# eg. :hour is 3600 seconds
|
28
28
|
time_period_in_secs = AggtiveRecord::Time.to_seconds(time_period)
|
29
|
+
|
30
|
+
# if the rate query is #per_year, and the only record was created 1 day ago
|
31
|
+
# then the rate should be _no greater_ than 1 per year (as opposed to 365 per year)
|
32
|
+
time_denominator = [time_period_in_secs, timespan_in_seconds].max
|
33
|
+
|
29
34
|
|
30
|
-
return records.size.to_f * time_period_in_secs /
|
35
|
+
return records.size.to_f * time_period_in_secs / time_denominator
|
31
36
|
end
|
32
37
|
|
33
38
|
# defines rate_per_year, rate_per_hour
|
@@ -52,9 +52,17 @@ describe AggtiveRecord do
|
|
52
52
|
old_time = MusicRecord.order('published_at').pluck(:published_at).first
|
53
53
|
new_time = Time.now
|
54
54
|
|
55
|
-
expect(MusicRecord.rate_per_week(:overall)).to eq
|
55
|
+
expect(MusicRecord.rate_per_week(:overall)).to eq MusicRecord.count.to_f * AggtiveRecord::Time.to_seconds(:week) / (new_time - old_time)
|
56
56
|
end
|
57
57
|
|
58
|
+
it '#rate_per_month(:overall)' do
|
59
|
+
old_time = MusicRecord.order('published_at').pluck(:published_at).first
|
60
|
+
new_time = Time.now
|
61
|
+
|
62
|
+
expect(MusicRecord.rate_per_month(:overall)).to eq MusicRecord.count.to_f * AggtiveRecord::Time.to_seconds(:month) / (new_time - old_time)
|
63
|
+
end
|
64
|
+
|
65
|
+
|
58
66
|
|
59
67
|
it '#rate_per_week(:past_14_days)' do
|
60
68
|
expect(MusicRecord.rate_per_week(:past_14_days)).to eq 0.5
|
data/spec/lib/rate_spec.rb
CHANGED
@@ -23,10 +23,20 @@ describe "AggtiveRecord::EggScopes -- .rate" do
|
|
23
23
|
MusicRecord.create published_at: 59.minutes.ago
|
24
24
|
expect(MusicRecord.rate_per_hour ).to be_within(0.1).of 2
|
25
25
|
end
|
26
|
-
|
27
26
|
end
|
28
27
|
|
29
28
|
|
29
|
+
context 'when time span of all records is less than the time period' do
|
30
|
+
context 'it should have a minimum rate of per that time_period' do
|
31
|
+
it 'should have rate no less than 1 per month' do
|
32
|
+
Timecop.freeze
|
33
|
+
MusicRecord.create published_at: 1.day.ago
|
34
|
+
|
35
|
+
expect(MusicRecord.rate_per_month).to eq 1
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
30
40
|
it 'should raise an error when a non-time period is passed in'
|
31
41
|
|
32
42
|
end
|