aggtive_record 0.1.5 → 0.2.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 +8 -8
- data/Gemfile +1 -1
- data/Gemfile.lock +4 -4
- data/VERSION +1 -1
- data/aggtive_record.gemspec +5 -5
- data/lib/aggtive_record/egg_scopes/collation/rate_per.rb +10 -9
- data/lib/aggtive_record/egg_scopes/time_bucket.rb +0 -2
- data/lib/aggtive_record/egg_scopes/time_span.rb +2 -0
- data/spec/functional/collation_spec.rb +13 -0
- data/spec/spec_helper.rb +6 -0
- metadata +6 -6
checksums.yaml
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
!binary "U0hBMQ==":
|
|
3
3
|
metadata.gz: !binary |-
|
|
4
|
-
|
|
4
|
+
M2M3MDM5ZjQxYTBjYjQ4NTU1ODBmZmEwMzgyMTUwZTcwNmU4ZTUwOA==
|
|
5
5
|
data.tar.gz: !binary |-
|
|
6
|
-
|
|
6
|
+
Y2VlZDg2MTU3NTBiZTk1OTNmNWE0NDM5Njk5YzkzMTFmYzA2ZDgwMw==
|
|
7
7
|
!binary "U0hBNTEy":
|
|
8
8
|
metadata.gz: !binary |-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
NmQxZGFhMmY1ZWU5Y2IyMmJlNDViOTVkNDM0ZGFmMmIyMzliNDhmOTczMGMz
|
|
10
|
+
Nzc3ZmNjNzVkMjAzMmMxODlhNWFiMzdjYzJjOWRjMjZlZWYxYzE5NjZkZGQ3
|
|
11
|
+
ZWQyZGViMzAyZTE3Yzc2MDhlMjY4ZDQxNjg0YjZjNmNkMDcwZDc=
|
|
12
12
|
data.tar.gz: !binary |-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
ZTM5ZTdhYWQyYmFjMjU3YTY3YTQ2YWNhMDk5ZGY0OTYwMzkxYWQwNWM3YzYy
|
|
14
|
+
NTJkMTdmNzk1NzlkMTI2NmE0NmI4OGU3ODVkNGQ1NTBlODI0OTg1Njg3NzYz
|
|
15
|
+
YjBhZDdlYzM0ZjUxOGU2NWNjNGI2OTRiOWYzOWMxNzFhNmUzMDA=
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -34,7 +34,7 @@ GEM
|
|
|
34
34
|
highline (1.6.19)
|
|
35
35
|
httpauth (0.2.0)
|
|
36
36
|
i18n (0.6.5)
|
|
37
|
-
jeweler (1.8.
|
|
37
|
+
jeweler (1.8.8)
|
|
38
38
|
builder
|
|
39
39
|
bundler (~> 1.0)
|
|
40
40
|
git (>= 1.2.5)
|
|
@@ -47,7 +47,7 @@ GEM
|
|
|
47
47
|
jwt (0.1.8)
|
|
48
48
|
multi_json (>= 1.5)
|
|
49
49
|
method_source (0.8.2)
|
|
50
|
-
multi_json (1.8.
|
|
50
|
+
multi_json (1.8.1)
|
|
51
51
|
multi_xml (0.5.5)
|
|
52
52
|
multipart-post (1.2.0)
|
|
53
53
|
mysql2 (0.3.13)
|
|
@@ -77,7 +77,7 @@ GEM
|
|
|
77
77
|
rspec-mocks (2.14.3)
|
|
78
78
|
slop (3.4.6)
|
|
79
79
|
timecop (0.6.3)
|
|
80
|
-
tzinfo (0.3.
|
|
80
|
+
tzinfo (0.3.38)
|
|
81
81
|
|
|
82
82
|
PLATFORMS
|
|
83
83
|
ruby
|
|
@@ -88,7 +88,7 @@ DEPENDENCIES
|
|
|
88
88
|
bundler
|
|
89
89
|
database_cleaner (~> 1.0.1)
|
|
90
90
|
groupdate
|
|
91
|
-
jeweler
|
|
91
|
+
jeweler
|
|
92
92
|
mysql2
|
|
93
93
|
pry
|
|
94
94
|
rspec (~> 2.14.1)
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.2.0
|
data/aggtive_record.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = "aggtive_record"
|
|
8
|
-
s.version = "0.
|
|
8
|
+
s.version = "0.2.0"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Dan Nguyen"]
|
|
12
|
-
s.date = "2013-10-
|
|
12
|
+
s.date = "2013-10-11"
|
|
13
13
|
s.description = "This is not even remotely finished or even started on. Please don't download."
|
|
14
14
|
s.email = "dansonguyen@gmail.com"
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -63,7 +63,7 @@ Gem::Specification.new do |s|
|
|
|
63
63
|
s.add_runtime_dependency(%q<activesupport>, ["~> 3.2.14"])
|
|
64
64
|
s.add_development_dependency(%q<rspec>, ["~> 2.14.1"])
|
|
65
65
|
s.add_development_dependency(%q<bundler>, [">= 0"])
|
|
66
|
-
s.add_development_dependency(%q<jeweler>, ["
|
|
66
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
|
67
67
|
s.add_development_dependency(%q<pry>, [">= 0"])
|
|
68
68
|
s.add_development_dependency(%q<database_cleaner>, ["~> 1.0.1"])
|
|
69
69
|
s.add_development_dependency(%q<mysql2>, [">= 0"])
|
|
@@ -74,7 +74,7 @@ Gem::Specification.new do |s|
|
|
|
74
74
|
s.add_dependency(%q<activesupport>, ["~> 3.2.14"])
|
|
75
75
|
s.add_dependency(%q<rspec>, ["~> 2.14.1"])
|
|
76
76
|
s.add_dependency(%q<bundler>, [">= 0"])
|
|
77
|
-
s.add_dependency(%q<jeweler>, ["
|
|
77
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
78
78
|
s.add_dependency(%q<pry>, [">= 0"])
|
|
79
79
|
s.add_dependency(%q<database_cleaner>, ["~> 1.0.1"])
|
|
80
80
|
s.add_dependency(%q<mysql2>, [">= 0"])
|
|
@@ -86,7 +86,7 @@ Gem::Specification.new do |s|
|
|
|
86
86
|
s.add_dependency(%q<activesupport>, ["~> 3.2.14"])
|
|
87
87
|
s.add_dependency(%q<rspec>, ["~> 2.14.1"])
|
|
88
88
|
s.add_dependency(%q<bundler>, [">= 0"])
|
|
89
|
-
s.add_dependency(%q<jeweler>, ["
|
|
89
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
90
90
|
s.add_dependency(%q<pry>, [">= 0"])
|
|
91
91
|
s.add_dependency(%q<database_cleaner>, ["~> 1.0.1"])
|
|
92
92
|
s.add_dependency(%q<mysql2>, [">= 0"])
|
|
@@ -17,12 +17,15 @@ module AggtiveRecord
|
|
|
17
17
|
# tk: this may be unnecessary
|
|
18
18
|
records = self.scoped.to_a
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
# eg. :hour is 3600 seconds
|
|
21
|
+
time_period_in_secs = AggtiveRecord::Time.to_seconds(time_period)
|
|
22
|
+
|
|
23
|
+
#e.g. whatever is passed in, or all of them from the beginning to end of reconrds
|
|
21
24
|
timespan_in_seconds ||= self.timespan_to_now(records)
|
|
22
25
|
|
|
23
26
|
|
|
24
27
|
|
|
25
|
-
return records.size.to_f *
|
|
28
|
+
return records.size.to_f * time_period_in_secs / timespan_in_seconds
|
|
26
29
|
end
|
|
27
30
|
|
|
28
31
|
# defines rate_per_year, rate_per_hour
|
|
@@ -31,18 +34,16 @@ module AggtiveRecord
|
|
|
31
34
|
AggtiveRecord::Time.periods.each do |period_name|
|
|
32
35
|
foo_name = "rate_per_#{period_name}".to_sym
|
|
33
36
|
# defining scope here, dynamically
|
|
34
|
-
define_method foo_name do |*args|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if args[0].present?
|
|
37
|
+
define_method foo_name do |*args|
|
|
38
|
+
if args[0].present? && args[0] !~ /^overall$/
|
|
38
39
|
# i.e: #rate_per_month(:past_year)
|
|
39
|
-
past_scope = args[0] # past_year
|
|
40
|
-
raise ArgumentError, "Must be a scope with 'past_'" unless past_scope.to_s =~ /^past_/
|
|
40
|
+
past_scope = args[0] # past_year, :overall
|
|
41
|
+
raise ArgumentError, "Must be a scope with 'past_' or 'overall'" unless past_scope.to_s =~ /^past_/
|
|
41
42
|
|
|
42
43
|
time_scoped_records = self.send( past_scope )
|
|
43
44
|
past_time_span_name = past_scope.to_s.match(/past_(\w+)/)[1]
|
|
44
45
|
past_period_in_seconds = AggtiveRecord::Time.to_seconds(past_time_span_name)
|
|
45
|
-
else
|
|
46
|
+
else # overall or no argument
|
|
46
47
|
time_scoped_records = scoped
|
|
47
48
|
past_period_in_seconds = self.timespan_to_now(time_scoped_records)
|
|
48
49
|
end
|
|
@@ -11,6 +11,8 @@ module AggtiveRecord
|
|
|
11
11
|
|
|
12
12
|
scope :past_time_periods, ->(num, period_name){ where("#{self.datetime_attribute} >= ?", num.send(period_name).send(:ago) ) }
|
|
13
13
|
|
|
14
|
+
# just include all records
|
|
15
|
+
scope :overall, ->(){ where("#{self.datetime_attribute} IS NOT ?", nil) }
|
|
14
16
|
|
|
15
17
|
# singular time periods
|
|
16
18
|
# e.g. scope :past_year, ->{ past_time_periods(1, :year)}
|
|
@@ -18,10 +18,23 @@ describe AggtiveRecord do
|
|
|
18
18
|
expect(MusicRecord.past_14_days.count).to eq 1
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
+
it '#overall' do
|
|
22
|
+
expect(MusicRecord.overall.count).to eq 4
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it '#rate_per_week(:overall)' do
|
|
26
|
+
old_time = MusicRecord.order('published_at').pluck(:published_at).first
|
|
27
|
+
new_time = Time.now
|
|
28
|
+
|
|
29
|
+
expect(MusicRecord.rate_per_week(:overall)).to eq 4.0 * AggtiveRecord::Time.to_seconds(:week) / (new_time - old_time)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
21
33
|
it '#rate_per_week(:past_14_days)' do
|
|
22
34
|
expect(MusicRecord.rate_per_week(:past_14_days)).to eq 0.5
|
|
23
35
|
end
|
|
24
36
|
|
|
37
|
+
|
|
25
38
|
it '#past_year' do
|
|
26
39
|
expect(MusicRecord.past_year.count).to eq 3
|
|
27
40
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -47,6 +47,12 @@ DatabaseCleaner.strategy = :truncation
|
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
RSpec.configure do |config|
|
|
50
|
+
config.filter_run_excluding skip: true
|
|
51
|
+
config.run_all_when_everything_filtered = true
|
|
52
|
+
config.filter_run :focus => true
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
50
56
|
config.color_enabled = true
|
|
51
57
|
config.tty = true
|
|
52
58
|
config.formatter = :documentation # :progress, :html, :textmate
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: aggtive_record
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dan Nguyen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2013-10-
|
|
11
|
+
date: 2013-10-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: groupdate
|
|
@@ -70,16 +70,16 @@ dependencies:
|
|
|
70
70
|
name: jeweler
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- -
|
|
73
|
+
- - ! '>='
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
75
|
+
version: '0'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- -
|
|
80
|
+
- - ! '>='
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
82
|
+
version: '0'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: pry
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|