streakable 0.2.0 → 0.3.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 +4 -4
- data/.gitignore +1 -1
- data/.travis.yml +9 -0
- data/Appraisals +3 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile +16 -0
- data/README.md +11 -0
- data/gemfiles/rails3.gemfile +14 -0
- data/gemfiles/rails4.gemfile +14 -0
- data/gemfiles/rails5.gemfile +14 -0
- data/gemfiles/rails6.gemfile +21 -0
- data/lib/streakable/streak.rb +24 -6
- data/spec/spec_helper.rb +2 -0
- data/spec/streakable_spec.rb +39 -31
- data/streakable.gemspec +12 -10
- metadata +50 -63
- data/Gemfile.lock +0 -90
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ffb7354200a8ad9ad4535155a73d7c8281417ee782b7c88aa8fa7157992aa29d
|
4
|
+
data.tar.gz: 25e92ef930699f4075be1d01ff7b8d5f9978e631e63ac2ee7c28226a65a5427e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 160cd6a6578cc545019c9d267e607a94f6952ac6ae1e3c4a3a0c9f317f71ca177d9009408483bee17350d34aee626e574066514204799c8001c180d49ba53936
|
7
|
+
data.tar.gz: 3b357b82ed4840263bf99d7fb4598e3c59e5a318de06190001d03ec8ce208e76e3bec0d04ef8693d93297765d4cdc62a0d36ab36e8374ec8d990482e96b4cb27
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -13,16 +13,25 @@ gemfile:
|
|
13
13
|
- gemfiles/rails3.gemfile
|
14
14
|
- gemfiles/rails4.gemfile
|
15
15
|
- gemfiles/rails5.gemfile
|
16
|
+
- gemfiles/rails6.gemfile
|
16
17
|
matrix:
|
17
18
|
exclude:
|
18
19
|
- rvm: 2.1.0
|
19
20
|
gemfile: gemfiles/rails5.gemfile
|
21
|
+
- rvm: 2.1.0
|
22
|
+
gemfile: gemfiles/rails6.gemfile
|
20
23
|
- rvm: 2.2.0
|
21
24
|
gemfile: gemfiles/rails5.gemfile
|
25
|
+
- rvm: 2.2.0
|
26
|
+
gemfile: gemfiles/rails6.gemfile
|
27
|
+
- rvm: 2.3.0
|
28
|
+
gemfile: gemfiles/rails6.gemfile
|
22
29
|
- rvm: 2.4.0
|
23
30
|
gemfile: gemfiles/rails3.gemfile
|
24
31
|
- rvm: 2.4.0
|
25
32
|
gemfile: gemfiles/rails4.gemfile
|
33
|
+
- rvm: 2.4.0
|
34
|
+
gemfile: gemfiles/rails6.gemfile
|
26
35
|
- rvm: 2.5.0
|
27
36
|
gemfile: gemfiles/rails3.gemfile
|
28
37
|
- rvm: 2.5.0
|
data/Appraisals
CHANGED
@@ -10,7 +10,6 @@ appraise "rails5" do
|
|
10
10
|
gem "activerecord", "5.0.0"
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
# end
|
13
|
+
appraise "rails6" do
|
14
|
+
gem "activerecord", "6.0.0"
|
15
|
+
end
|
data/CHANGELOG.md
ADDED
data/Gemfile
CHANGED
@@ -2,3 +2,19 @@ source 'https://rubygems.org'
|
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in streakable.gemspec
|
4
4
|
gemspec
|
5
|
+
|
6
|
+
# Hinting at development dependencies
|
7
|
+
# Prevents bundler from taking a long-time to resolve
|
8
|
+
group :development, :test do
|
9
|
+
gem 'appraisal'
|
10
|
+
gem 'bundler'
|
11
|
+
gem 'coveralls'
|
12
|
+
gem 'database_cleaner'
|
13
|
+
gem 'pry'
|
14
|
+
gem 'rake'
|
15
|
+
gem 'rspec'
|
16
|
+
gem 'sqlite3'
|
17
|
+
gem 'timecop'
|
18
|
+
gem 'activesupport'
|
19
|
+
gem 'pry-coolline'
|
20
|
+
end
|
data/README.md
CHANGED
@@ -74,6 +74,17 @@ To get all of the streaks, not just the current one:
|
|
74
74
|
user.streaks(:posts)
|
75
75
|
```
|
76
76
|
|
77
|
+
## TODO
|
78
|
+
|
79
|
+
* Add class methods/scopes for calculating streaks on records not in memory
|
80
|
+
|
81
|
+
## Specs
|
82
|
+
To run the specs for the currently running Ruby version, run `bundle install` and then `bundle exec rspec`. To run specs for every supported version of ActionPack, run `bundle exec appraisal install` and then `bundle exec appraisal rspec`.
|
83
|
+
|
84
|
+
## Gem release
|
85
|
+
Make sure the specs pass, bump the version number in streakable.gemspec, build the gem with `gem build streakable.gemspec`. Commit your changes and push to Github, then tag the commit with the current release number using Github's Releases interface (use the format vx.x.x, where x is the semantic version number). You can pull the latest tags to your local repo with `git pull --tags`. Finally, push the gem with `gem push streakable-version-number-here.gem`.
|
86
|
+
|
87
|
+
|
77
88
|
## Contributing
|
78
89
|
|
79
90
|
1. Fork it
|
data/gemfiles/rails3.gemfile
CHANGED
@@ -4,4 +4,18 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
gem "activerecord", "3.2.22"
|
6
6
|
|
7
|
+
group :development, :test do
|
8
|
+
gem "appraisal"
|
9
|
+
gem "bundler"
|
10
|
+
gem "coveralls"
|
11
|
+
gem "database_cleaner"
|
12
|
+
gem "pry"
|
13
|
+
gem "rake"
|
14
|
+
gem "rspec"
|
15
|
+
gem "sqlite3", '~> 1.3.6'
|
16
|
+
gem "timecop"
|
17
|
+
gem "activesupport"
|
18
|
+
gem "pry-coolline"
|
19
|
+
end
|
20
|
+
|
7
21
|
gemspec path: "../"
|
data/gemfiles/rails4.gemfile
CHANGED
@@ -4,4 +4,18 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
gem "activerecord", "4.0.0"
|
6
6
|
|
7
|
+
group :development, :test do
|
8
|
+
gem "appraisal"
|
9
|
+
gem "bundler"
|
10
|
+
gem "coveralls"
|
11
|
+
gem "database_cleaner"
|
12
|
+
gem "pry"
|
13
|
+
gem "rake"
|
14
|
+
gem "rspec"
|
15
|
+
gem "sqlite3", '~> 1.3.6'
|
16
|
+
gem "timecop"
|
17
|
+
gem "activesupport"
|
18
|
+
gem "pry-coolline"
|
19
|
+
end
|
20
|
+
|
7
21
|
gemspec path: "../"
|
data/gemfiles/rails5.gemfile
CHANGED
@@ -4,4 +4,18 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
gem "activerecord", "5.0.0"
|
6
6
|
|
7
|
+
group :development, :test do
|
8
|
+
gem "appraisal"
|
9
|
+
gem "bundler"
|
10
|
+
gem "coveralls"
|
11
|
+
gem "database_cleaner"
|
12
|
+
gem "pry"
|
13
|
+
gem "rake"
|
14
|
+
gem "rspec"
|
15
|
+
gem "sqlite3", '~> 1.3.6'
|
16
|
+
gem "timecop"
|
17
|
+
gem "activesupport"
|
18
|
+
gem "pry-coolline"
|
19
|
+
end
|
20
|
+
|
7
21
|
gemspec path: "../"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "activerecord", "6.0.0"
|
6
|
+
|
7
|
+
group :development, :test do
|
8
|
+
gem "appraisal"
|
9
|
+
gem "bundler"
|
10
|
+
gem "coveralls"
|
11
|
+
gem "database_cleaner"
|
12
|
+
gem "pry"
|
13
|
+
gem "rake"
|
14
|
+
gem "rspec"
|
15
|
+
gem "sqlite3", '~> 1.4'
|
16
|
+
gem "timecop"
|
17
|
+
gem "activesupport"
|
18
|
+
gem "pry-coolline"
|
19
|
+
end
|
20
|
+
|
21
|
+
gemspec path: "../"
|
data/lib/streakable/streak.rb
CHANGED
@@ -38,15 +38,24 @@ class Streak
|
|
38
38
|
# @param [Boolean] longest if true, calculate the longest day streak in the sequence,
|
39
39
|
# not just the current one
|
40
40
|
def length(longest: false)
|
41
|
+
# no streaks
|
41
42
|
if streaks.empty?
|
42
43
|
0
|
44
|
+
|
45
|
+
# calculate the longest one?
|
43
46
|
elsif longest
|
44
47
|
streaks.sort do |x, y|
|
45
48
|
y.size <=> x.size
|
46
49
|
end.first.size
|
50
|
+
|
51
|
+
# default streak calculation
|
47
52
|
else
|
53
|
+
# pull the first streak
|
48
54
|
streak = streaks.first
|
49
|
-
|
55
|
+
|
56
|
+
# either the streak includes today,
|
57
|
+
# or we don't care about today and it includes yesterday
|
58
|
+
if streak.include?(Date.current) || except_today && streak.include?(Date.current - 1.day)
|
50
59
|
streak.size
|
51
60
|
else
|
52
61
|
0
|
@@ -73,7 +82,7 @@ class Streak
|
|
73
82
|
|
74
83
|
# consecutive day, the previous day was "tomorrow"
|
75
84
|
# relative to day (since we're date descending)
|
76
|
-
elsif days[i-1] == day.
|
85
|
+
elsif days[i-1] == (day+1.day)
|
77
86
|
# push to existing streak
|
78
87
|
streak << day
|
79
88
|
|
@@ -93,16 +102,25 @@ class Streak
|
|
93
102
|
streaks << streak
|
94
103
|
end
|
95
104
|
end
|
96
|
-
|
105
|
+
|
97
106
|
streaks
|
98
107
|
end
|
99
108
|
|
109
|
+
# TODO: add class methods/scopes to calculate streaks, days
|
110
|
+
# scrap code from old method below:
|
111
|
+
#
|
112
|
+
# date_strings = instance.send(association).order(column => :desc).pluck(column)
|
113
|
+
# dates = date_strings.map(&:to_date)
|
114
|
+
# dates.sort.reverse.uniq
|
115
|
+
|
100
116
|
private
|
101
117
|
def days
|
102
118
|
@days ||= begin
|
103
|
-
|
104
|
-
|
105
|
-
|
119
|
+
instance.send(association).map do |x|
|
120
|
+
x.send(column).in_time_zone.to_date
|
121
|
+
end.sort do |x, y|
|
122
|
+
x <=> y
|
123
|
+
end.reverse.uniq
|
106
124
|
end
|
107
125
|
end
|
108
126
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
require 'coveralls'
|
2
2
|
Coveralls.wear!
|
3
3
|
|
4
|
+
require "active_support"
|
4
5
|
require "streakable"
|
5
6
|
require "database_cleaner"
|
6
7
|
require "pry"
|
7
8
|
require "support/database_cleaner"
|
8
9
|
require "support/user"
|
9
10
|
require "support/post"
|
11
|
+
require "sqlite3"
|
10
12
|
require "timecop"
|
11
13
|
|
12
14
|
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
|
data/spec/streakable_spec.rb
CHANGED
@@ -4,12 +4,19 @@ describe Streakable do
|
|
4
4
|
let(:user) { User.create }
|
5
5
|
|
6
6
|
let!(:posts) do
|
7
|
-
post_dates.
|
7
|
+
post_dates.map do |date|
|
8
8
|
user.posts.create(created_at: date)
|
9
9
|
end
|
10
10
|
end
|
11
11
|
let(:post_dates) { [] }
|
12
12
|
|
13
|
+
around do |example|
|
14
|
+
Time.zone = 'Eastern Time (US & Canada)'
|
15
|
+
Timecop.freeze(Time.current) do
|
16
|
+
example.run
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
13
20
|
describe "#streak" do
|
14
21
|
subject { user.streak(:posts) }
|
15
22
|
|
@@ -19,7 +26,7 @@ describe Streakable do
|
|
19
26
|
end
|
20
27
|
|
21
28
|
context "user posted on each of the last three days" do
|
22
|
-
let(:post_dates) { [2.days
|
29
|
+
let(:post_dates) { [Time.current-2.days, Time.current-1.days, Time.current] }
|
23
30
|
|
24
31
|
it "returns the streak" do
|
25
32
|
expect(subject).to eq(posts.size)
|
@@ -27,10 +34,10 @@ describe Streakable do
|
|
27
34
|
end
|
28
35
|
|
29
36
|
context "user only has a post today" do
|
30
|
-
let(:post_dates) { [
|
37
|
+
let(:post_dates) { [Time.current] }
|
31
38
|
before do
|
32
39
|
expect(user.posts.length).to eql(1)
|
33
|
-
expect(user.posts.first.created_at.to_date).to eql(Date.current)
|
40
|
+
expect(user.posts.first.created_at.in_time_zone.to_date).to eql(Date.current)
|
34
41
|
end
|
35
42
|
|
36
43
|
it "returns the streak of 1" do
|
@@ -39,7 +46,7 @@ describe Streakable do
|
|
39
46
|
end
|
40
47
|
|
41
48
|
context "user has streak today, and a longer streak before that" do
|
42
|
-
let(:post_dates) { [5.days
|
49
|
+
let(:post_dates) { [Time.current-5.days, Time.current-4.days, Time.current-3.days, Time.current-1.days, Time.current] }
|
43
50
|
|
44
51
|
it "still returns the current streak" do
|
45
52
|
expect(subject).to eq(2)
|
@@ -55,7 +62,7 @@ describe Streakable do
|
|
55
62
|
end
|
56
63
|
|
57
64
|
context "user has streak today, and a shorter streak before that" do
|
58
|
-
let(:post_dates) { [5.days
|
65
|
+
let(:post_dates) { [Time.current-5.days, Time.current-4.days, Time.current-2.days, Time.current-1.days, Time.current] }
|
59
66
|
|
60
67
|
it "still returns the current streak" do
|
61
68
|
expect(subject).to eq(3)
|
@@ -71,7 +78,7 @@ describe Streakable do
|
|
71
78
|
end
|
72
79
|
|
73
80
|
context "user didn't post today, but has a streak before that" do
|
74
|
-
let(:post_dates) { [3.days
|
81
|
+
let(:post_dates) { [Time.current-3.days, Time.current-2.days, Time.current-1.day] }
|
75
82
|
before { expect(post_dates.map(&:to_date)).to_not include(Date.current) }
|
76
83
|
|
77
84
|
it "returns streak of zero" do
|
@@ -87,7 +94,7 @@ describe Streakable do
|
|
87
94
|
end
|
88
95
|
|
89
96
|
context "but has three streaks, longest in the middle" do
|
90
|
-
let(:post_dates) { [3
|
97
|
+
let(:post_dates) { [Date.current-3, Date.current-4, Date.current-6, Date.current-7, Date.current-8, Date.current-10, Date.current-11] }
|
91
98
|
|
92
99
|
it "returns 0" do
|
93
100
|
expect(subject).to eq(0)
|
@@ -96,12 +103,8 @@ describe Streakable do
|
|
96
103
|
end
|
97
104
|
|
98
105
|
context "spanning two months" do
|
99
|
-
|
100
|
-
|
101
|
-
example.run
|
102
|
-
end
|
103
|
-
end
|
104
|
-
let(:post_dates) { [1.day.ago, DateTime.current] }
|
106
|
+
let(:freeze_time) { Time.current.beginning_of_month }
|
107
|
+
let(:post_dates) { [1.day.ago, Time.current] }
|
105
108
|
|
106
109
|
it "returns a streak of 2" do
|
107
110
|
expect(subject).to eq(2)
|
@@ -118,7 +121,7 @@ describe Streakable do
|
|
118
121
|
end
|
119
122
|
|
120
123
|
context "user posted on each of the last two days" do
|
121
|
-
let(:post_dates) { [1.day.ago,
|
124
|
+
let(:post_dates) { [1.day.ago, Time.current] }
|
122
125
|
|
123
126
|
it "returns the streak" do
|
124
127
|
expect(subject).to eq([[Date.current, 1.day.ago.to_date]])
|
@@ -126,18 +129,18 @@ describe Streakable do
|
|
126
129
|
end
|
127
130
|
|
128
131
|
context "user posted on each of the last three days" do
|
129
|
-
let(:post_dates) { [2.days
|
132
|
+
let(:post_dates) { [Time.current-2.days, Time.current-1.days, Time.current] }
|
130
133
|
|
131
134
|
it "returns the streak" do
|
132
|
-
expect(subject).to eq([[Date.current, 1
|
135
|
+
expect(subject).to eq([[Date.current, Date.current-1, Date.current-2]])
|
133
136
|
end
|
134
137
|
end
|
135
138
|
|
136
139
|
context "user only has a post today" do
|
137
|
-
let(:post_dates) { [
|
140
|
+
let(:post_dates) { [Time.current] }
|
138
141
|
before do
|
139
142
|
expect(user.posts.length).to eql(1)
|
140
|
-
expect(user.posts.first.created_at.to_date).to eql(Date.current)
|
143
|
+
expect(user.posts.first.created_at.in_time_zone.to_date).to eql(Date.current)
|
141
144
|
end
|
142
145
|
|
143
146
|
it "returns the streak of 1" do
|
@@ -146,22 +149,22 @@ describe Streakable do
|
|
146
149
|
end
|
147
150
|
|
148
151
|
context "user only has a post yesterday" do
|
149
|
-
let(:post_dates) { [
|
152
|
+
let(:post_dates) { [Time.current-1.day] }
|
150
153
|
before do
|
151
154
|
expect(user.posts.length).to eql(1)
|
152
|
-
expect(user.posts.first.created_at.to_date).to eql(Date.current
|
155
|
+
expect(user.posts.first.created_at.in_time_zone.to_date).to eql(Date.current-1)
|
153
156
|
end
|
154
157
|
|
155
158
|
it "returns the streak of 1" do
|
156
|
-
expect(subject).to eq([[Date.current
|
159
|
+
expect(subject).to eq([[Date.current-1]])
|
157
160
|
end
|
158
161
|
end
|
159
162
|
|
160
163
|
context "user has streak today, and a longer streak before that" do
|
161
|
-
let(:post_dates) { [
|
164
|
+
let(:post_dates) { [Time.current, Time.current-1.days, Time.current-3.days, Time.current-4.days, Time.current-5.days] }
|
162
165
|
|
163
166
|
it "returns the streaks" do
|
164
|
-
expected = [[Date.current, 1
|
167
|
+
expected = [[Date.current, Date.current-1], [Date.current-3, Date.current-4, Date.current-5]].map do |x|
|
165
168
|
x.map(&:to_date)
|
166
169
|
end
|
167
170
|
|
@@ -170,10 +173,10 @@ describe Streakable do
|
|
170
173
|
end
|
171
174
|
|
172
175
|
context "user didn't post today, but has a streak of 3 before that" do
|
173
|
-
let(:post_dates) { [1.days
|
176
|
+
let(:post_dates) { [Time.current-1.days, Time.current-2.days, Time.current-3.days] }
|
174
177
|
|
175
178
|
it "returns the streak" do
|
176
|
-
expected = [[1
|
179
|
+
expected = [[Date.current-1, Date.current-2, Date.current-3]].map do |x|
|
177
180
|
x.map(&:to_date)
|
178
181
|
end
|
179
182
|
|
@@ -182,14 +185,19 @@ describe Streakable do
|
|
182
185
|
end
|
183
186
|
|
184
187
|
context "user has three streaks, longest in the middle" do
|
185
|
-
let(:
|
188
|
+
let(:post_dates_dates_ago) { [3, 4, 6, 7, 8, 10, 11] }
|
189
|
+
let(:post_dates) do
|
190
|
+
post_dates_dates_ago.map {|n| Time.current - n.days}
|
191
|
+
end
|
186
192
|
|
187
|
-
|
188
|
-
|
189
|
-
|
193
|
+
let(:expected_days_ago) do
|
194
|
+
[[3, 4], [6, 7, 8], [10, 11]].map do |list|
|
195
|
+
list.map {|n| Date.current - n}
|
190
196
|
end
|
197
|
+
end
|
191
198
|
|
192
|
-
|
199
|
+
it "returns the streaks" do
|
200
|
+
expect(subject).to eq(expected_days_ago)
|
193
201
|
end
|
194
202
|
end
|
195
203
|
end
|
data/streakable.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'streakable'
|
5
|
-
spec.version = '0.
|
5
|
+
spec.version = '0.3.0'
|
6
6
|
spec.authors = ['szTheory', 'Garrett Martin']
|
7
7
|
spec.description = %q{Track consecutive day streaks on Rails/ActiveRecord models.}
|
8
8
|
spec.summary = %q{Easily track consecutive day streaks on your Rails/ActiveRecord model associations for a given date column.}
|
@@ -19,13 +19,15 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_runtime_dependency 'activerecord', '>= 3.2.22'
|
21
21
|
|
22
|
-
spec.add_development_dependency 'appraisal'
|
23
|
-
spec.add_development_dependency 'bundler'
|
24
|
-
spec.add_development_dependency 'coveralls'
|
25
|
-
spec.add_development_dependency 'database_cleaner'
|
26
|
-
spec.add_development_dependency 'pry'
|
27
|
-
spec.add_development_dependency 'rake'
|
28
|
-
spec.add_development_dependency 'rspec'
|
29
|
-
spec.add_development_dependency 'sqlite3'
|
30
|
-
spec.add_development_dependency 'timecop'
|
22
|
+
spec.add_development_dependency 'appraisal'
|
23
|
+
spec.add_development_dependency 'bundler'
|
24
|
+
spec.add_development_dependency 'coveralls'
|
25
|
+
spec.add_development_dependency 'database_cleaner'
|
26
|
+
spec.add_development_dependency 'pry'
|
27
|
+
spec.add_development_dependency 'rake'
|
28
|
+
spec.add_development_dependency 'rspec'
|
29
|
+
spec.add_development_dependency 'sqlite3'
|
30
|
+
spec.add_development_dependency 'timecop'
|
31
|
+
spec.add_development_dependency 'activesupport'
|
32
|
+
spec.add_development_dependency 'pry-coolline'
|
31
33
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: streakable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- szTheory
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-10-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -29,170 +29,156 @@ dependencies:
|
|
29
29
|
name: appraisal
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - "~>"
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: '2.2'
|
35
32
|
- - ">="
|
36
33
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
34
|
+
version: '0'
|
38
35
|
type: :development
|
39
36
|
prerelease: false
|
40
37
|
version_requirements: !ruby/object:Gem::Requirement
|
41
38
|
requirements:
|
42
|
-
- - "~>"
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: '2.2'
|
45
39
|
- - ">="
|
46
40
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
41
|
+
version: '0'
|
48
42
|
- !ruby/object:Gem::Dependency
|
49
43
|
name: bundler
|
50
44
|
requirement: !ruby/object:Gem::Requirement
|
51
45
|
requirements:
|
52
46
|
- - ">="
|
53
47
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
48
|
+
version: '0'
|
55
49
|
type: :development
|
56
50
|
prerelease: false
|
57
51
|
version_requirements: !ruby/object:Gem::Requirement
|
58
52
|
requirements:
|
59
53
|
- - ">="
|
60
54
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
55
|
+
version: '0'
|
62
56
|
- !ruby/object:Gem::Dependency
|
63
57
|
name: coveralls
|
64
58
|
requirement: !ruby/object:Gem::Requirement
|
65
59
|
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0.8'
|
69
60
|
- - ">="
|
70
61
|
- !ruby/object:Gem::Version
|
71
|
-
version: 0
|
62
|
+
version: '0'
|
72
63
|
type: :development
|
73
64
|
prerelease: false
|
74
65
|
version_requirements: !ruby/object:Gem::Requirement
|
75
66
|
requirements:
|
76
|
-
- - "~>"
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version: '0.8'
|
79
67
|
- - ">="
|
80
68
|
- !ruby/object:Gem::Version
|
81
|
-
version: 0
|
69
|
+
version: '0'
|
82
70
|
- !ruby/object:Gem::Dependency
|
83
71
|
name: database_cleaner
|
84
72
|
requirement: !ruby/object:Gem::Requirement
|
85
73
|
requirements:
|
86
|
-
- - "~>"
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: 1.7.0
|
89
74
|
- - ">="
|
90
75
|
- !ruby/object:Gem::Version
|
91
|
-
version:
|
76
|
+
version: '0'
|
92
77
|
type: :development
|
93
78
|
prerelease: false
|
94
79
|
version_requirements: !ruby/object:Gem::Requirement
|
95
80
|
requirements:
|
96
|
-
- - "~>"
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
version: 1.7.0
|
99
81
|
- - ">="
|
100
82
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
83
|
+
version: '0'
|
102
84
|
- !ruby/object:Gem::Dependency
|
103
85
|
name: pry
|
104
86
|
requirement: !ruby/object:Gem::Requirement
|
105
87
|
requirements:
|
106
|
-
- - "~>"
|
107
|
-
- !ruby/object:Gem::Version
|
108
|
-
version: '0.11'
|
109
88
|
- - ">="
|
110
89
|
- !ruby/object:Gem::Version
|
111
|
-
version: 0
|
90
|
+
version: '0'
|
112
91
|
type: :development
|
113
92
|
prerelease: false
|
114
93
|
version_requirements: !ruby/object:Gem::Requirement
|
115
94
|
requirements:
|
116
|
-
- - "~>"
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: '0.11'
|
119
95
|
- - ">="
|
120
96
|
- !ruby/object:Gem::Version
|
121
|
-
version: 0
|
97
|
+
version: '0'
|
122
98
|
- !ruby/object:Gem::Dependency
|
123
99
|
name: rake
|
124
100
|
requirement: !ruby/object:Gem::Requirement
|
125
101
|
requirements:
|
126
|
-
- - "~>"
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
version: '12.3'
|
129
102
|
- - ">="
|
130
103
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
104
|
+
version: '0'
|
132
105
|
type: :development
|
133
106
|
prerelease: false
|
134
107
|
version_requirements: !ruby/object:Gem::Requirement
|
135
108
|
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '12.3'
|
139
109
|
- - ">="
|
140
110
|
- !ruby/object:Gem::Version
|
141
|
-
version:
|
111
|
+
version: '0'
|
142
112
|
- !ruby/object:Gem::Dependency
|
143
113
|
name: rspec
|
144
114
|
requirement: !ruby/object:Gem::Requirement
|
145
115
|
requirements:
|
146
|
-
- - "~>"
|
147
|
-
- !ruby/object:Gem::Version
|
148
|
-
version: '3.8'
|
149
116
|
- - ">="
|
150
117
|
- !ruby/object:Gem::Version
|
151
|
-
version:
|
118
|
+
version: '0'
|
152
119
|
type: :development
|
153
120
|
prerelease: false
|
154
121
|
version_requirements: !ruby/object:Gem::Requirement
|
155
122
|
requirements:
|
156
|
-
- - "~>"
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
version: '3.8'
|
159
123
|
- - ">="
|
160
124
|
- !ruby/object:Gem::Version
|
161
|
-
version:
|
125
|
+
version: '0'
|
162
126
|
- !ruby/object:Gem::Dependency
|
163
127
|
name: sqlite3
|
164
128
|
requirement: !ruby/object:Gem::Requirement
|
165
129
|
requirements:
|
166
|
-
- - "
|
130
|
+
- - ">="
|
167
131
|
- !ruby/object:Gem::Version
|
168
|
-
version:
|
132
|
+
version: '0'
|
169
133
|
type: :development
|
170
134
|
prerelease: false
|
171
135
|
version_requirements: !ruby/object:Gem::Requirement
|
172
136
|
requirements:
|
173
|
-
- - "
|
137
|
+
- - ">="
|
174
138
|
- !ruby/object:Gem::Version
|
175
|
-
version:
|
139
|
+
version: '0'
|
176
140
|
- !ruby/object:Gem::Dependency
|
177
141
|
name: timecop
|
178
142
|
requirement: !ruby/object:Gem::Requirement
|
179
143
|
requirements:
|
180
|
-
- - "
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
181
152
|
- !ruby/object:Gem::Version
|
182
|
-
version: '0
|
153
|
+
version: '0'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: activesupport
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
183
158
|
- - ">="
|
184
159
|
- !ruby/object:Gem::Version
|
185
|
-
version: 0
|
160
|
+
version: '0'
|
186
161
|
type: :development
|
187
162
|
prerelease: false
|
188
163
|
version_requirements: !ruby/object:Gem::Requirement
|
189
164
|
requirements:
|
190
|
-
- - "
|
165
|
+
- - ">="
|
191
166
|
- !ruby/object:Gem::Version
|
192
|
-
version: '0
|
167
|
+
version: '0'
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: pry-coolline
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
175
|
+
type: :development
|
176
|
+
prerelease: false
|
177
|
+
version_requirements: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
193
179
|
- - ">="
|
194
180
|
- !ruby/object:Gem::Version
|
195
|
-
version: 0
|
181
|
+
version: '0'
|
196
182
|
description: Track consecutive day streaks on Rails/ActiveRecord models.
|
197
183
|
email:
|
198
184
|
executables: []
|
@@ -202,8 +188,8 @@ files:
|
|
202
188
|
- ".gitignore"
|
203
189
|
- ".travis.yml"
|
204
190
|
- Appraisals
|
191
|
+
- CHANGELOG.md
|
205
192
|
- Gemfile
|
206
|
-
- Gemfile.lock
|
207
193
|
- LICENSE.txt
|
208
194
|
- README.md
|
209
195
|
- Rakefile
|
@@ -212,6 +198,7 @@ files:
|
|
212
198
|
- gemfiles/rails3.gemfile
|
213
199
|
- gemfiles/rails4.gemfile
|
214
200
|
- gemfiles/rails5.gemfile
|
201
|
+
- gemfiles/rails6.gemfile
|
215
202
|
- lib/streakable.rb
|
216
203
|
- lib/streakable/streak.rb
|
217
204
|
- spec/spec_helper.rb
|
data/Gemfile.lock
DELETED
@@ -1,90 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
streakable (0.2.0)
|
5
|
-
activerecord (>= 3.2.22)
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: https://rubygems.org/
|
9
|
-
specs:
|
10
|
-
activemodel (5.2.2)
|
11
|
-
activesupport (= 5.2.2)
|
12
|
-
activerecord (5.2.2)
|
13
|
-
activemodel (= 5.2.2)
|
14
|
-
activesupport (= 5.2.2)
|
15
|
-
arel (>= 9.0)
|
16
|
-
activesupport (5.2.2)
|
17
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
-
i18n (>= 0.7, < 2)
|
19
|
-
minitest (~> 5.1)
|
20
|
-
tzinfo (~> 1.1)
|
21
|
-
appraisal (2.2.0)
|
22
|
-
bundler
|
23
|
-
rake
|
24
|
-
thor (>= 0.14.0)
|
25
|
-
arel (9.0.0)
|
26
|
-
coderay (1.1.2)
|
27
|
-
concurrent-ruby (1.1.4)
|
28
|
-
coveralls (0.8.22)
|
29
|
-
json (>= 1.8, < 3)
|
30
|
-
simplecov (~> 0.16.1)
|
31
|
-
term-ansicolor (~> 1.3)
|
32
|
-
thor (~> 0.19.4)
|
33
|
-
tins (~> 1.6)
|
34
|
-
database_cleaner (1.7.0)
|
35
|
-
diff-lcs (1.3)
|
36
|
-
docile (1.3.1)
|
37
|
-
i18n (1.5.3)
|
38
|
-
concurrent-ruby (~> 1.0)
|
39
|
-
json (2.1.0)
|
40
|
-
method_source (0.9.2)
|
41
|
-
minitest (5.11.3)
|
42
|
-
pry (0.12.2)
|
43
|
-
coderay (~> 1.1.0)
|
44
|
-
method_source (~> 0.9.0)
|
45
|
-
rake (12.3.2)
|
46
|
-
rspec (3.8.0)
|
47
|
-
rspec-core (~> 3.8.0)
|
48
|
-
rspec-expectations (~> 3.8.0)
|
49
|
-
rspec-mocks (~> 3.8.0)
|
50
|
-
rspec-core (3.8.0)
|
51
|
-
rspec-support (~> 3.8.0)
|
52
|
-
rspec-expectations (3.8.2)
|
53
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
54
|
-
rspec-support (~> 3.8.0)
|
55
|
-
rspec-mocks (3.8.0)
|
56
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
57
|
-
rspec-support (~> 3.8.0)
|
58
|
-
rspec-support (3.8.0)
|
59
|
-
simplecov (0.16.1)
|
60
|
-
docile (~> 1.1)
|
61
|
-
json (>= 1.8, < 3)
|
62
|
-
simplecov-html (~> 0.10.0)
|
63
|
-
simplecov-html (0.10.2)
|
64
|
-
sqlite3 (1.3.13)
|
65
|
-
term-ansicolor (1.7.1)
|
66
|
-
tins (~> 1.0)
|
67
|
-
thor (0.19.4)
|
68
|
-
thread_safe (0.3.6)
|
69
|
-
timecop (0.9.1)
|
70
|
-
tins (1.20.2)
|
71
|
-
tzinfo (1.2.5)
|
72
|
-
thread_safe (~> 0.1)
|
73
|
-
|
74
|
-
PLATFORMS
|
75
|
-
ruby
|
76
|
-
|
77
|
-
DEPENDENCIES
|
78
|
-
appraisal (~> 2.2, >= 2.2.0)
|
79
|
-
bundler (>= 1.3)
|
80
|
-
coveralls (~> 0.8, >= 0.8.22)
|
81
|
-
database_cleaner (~> 1.7.0, >= 1.7.0)
|
82
|
-
pry (~> 0.11, >= 0.11.3)
|
83
|
-
rake (~> 12.3, >= 12.3.1)
|
84
|
-
rspec (~> 3.8, >= 3.8.0)
|
85
|
-
sqlite3 (~> 1.3.6)
|
86
|
-
streakable!
|
87
|
-
timecop (~> 0.9, >= 0.9.1)
|
88
|
-
|
89
|
-
BUNDLED WITH
|
90
|
-
1.17.3
|