caperoma 0.1.0 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +5 -5
  2. data/.ruby-version +1 -0
  3. data/Capefile +48 -0
  4. data/Capefile.template +48 -0
  5. data/Capefile.test +20 -0
  6. data/Gemfile +25 -10
  7. data/Gemfile.lock +196 -77
  8. data/HELP +321 -0
  9. data/README.md +528 -0
  10. data/Rakefile +73 -18
  11. data/VERSION +1 -1
  12. data/bin/caperoma +47 -11
  13. data/caperoma.gemspec +144 -45
  14. data/config/crontab +10 -0
  15. data/config/schedule.rb +21 -0
  16. data/lib/caperoma.rb +409 -9
  17. data/lib/caperoma/models/account.rb +47 -0
  18. data/lib/caperoma/models/application_record.rb +5 -0
  19. data/lib/caperoma/models/branch.rb +6 -0
  20. data/lib/caperoma/models/project.rb +14 -0
  21. data/lib/caperoma/models/property.rb +5 -0
  22. data/lib/caperoma/models/report.rb +177 -0
  23. data/lib/caperoma/models/report_recipient.rb +6 -0
  24. data/lib/caperoma/models/reports/daily_report.rb +23 -0
  25. data/lib/caperoma/models/reports/retrospective_report.rb +19 -0
  26. data/lib/caperoma/models/reports/three_day_report.rb +19 -0
  27. data/lib/caperoma/models/task.rb +368 -0
  28. data/lib/caperoma/models/tasks/bug.rb +36 -0
  29. data/lib/caperoma/models/tasks/chore.rb +40 -0
  30. data/lib/caperoma/models/tasks/feature.rb +27 -0
  31. data/lib/caperoma/models/tasks/fix.rb +56 -0
  32. data/lib/caperoma/models/tasks/meeting.rb +40 -0
  33. data/lib/caperoma/models/tasks/modules/git.rb +65 -0
  34. data/lib/caperoma/models/tasks/task_with_commit.rb +40 -0
  35. data/lib/caperoma/models/tasks/task_with_separate_branch.rb +42 -0
  36. data/lib/caperoma/services/airbrake_email_processor.rb +47 -0
  37. data/lib/caperoma/services/pivotal_fetcher.rb +108 -0
  38. data/lib/caperoma/version.rb +9 -0
  39. data/spec/caperoma_spec.rb +3 -21
  40. data/spec/factories/accounts.rb +10 -0
  41. data/spec/factories/branches.rb +9 -0
  42. data/spec/factories/projects.rb +8 -0
  43. data/spec/factories/report_recipients.rb +7 -0
  44. data/spec/factories/reports.rb +16 -0
  45. data/spec/factories/tasks.rb +37 -0
  46. data/spec/features/bug_spec.rb +60 -0
  47. data/spec/features/chore_spec.rb +60 -0
  48. data/spec/features/command_unknown_spec.rb +14 -0
  49. data/spec/features/config_spec.rb +161 -0
  50. data/spec/features/feature_spec.rb +60 -0
  51. data/spec/features/finish_spec.rb +18 -0
  52. data/spec/features/fix_spec.rb +60 -0
  53. data/spec/features/meeting_spec.rb +22 -0
  54. data/spec/features/projects_spec.rb +17 -0
  55. data/spec/features/report_recipientss_spec.rb +117 -0
  56. data/spec/features/reports_spec.rb +65 -0
  57. data/spec/features/status_spec.rb +33 -0
  58. data/spec/features/version_spec.rb +11 -0
  59. data/spec/models/account_spec.rb +51 -0
  60. data/spec/models/branch_spec.rb +8 -0
  61. data/spec/models/bug_spec.rb +33 -0
  62. data/spec/models/chore_spec.rb +33 -0
  63. data/spec/models/daily_report_spec.rb +38 -0
  64. data/spec/models/feature_spec.rb +33 -0
  65. data/spec/models/fix_spec.rb +55 -0
  66. data/spec/models/meeting_spec.rb +33 -0
  67. data/spec/models/project_spec.rb +11 -0
  68. data/spec/models/report_recipient_spec.rb +22 -0
  69. data/spec/models/report_spec.rb +16 -0
  70. data/spec/models/retrospective_report_spec.rb +38 -0
  71. data/spec/models/task_spec.rb +613 -0
  72. data/spec/models/task_with_commit_spec.rb +105 -0
  73. data/spec/models/task_with_separate_branch_spec.rb +97 -0
  74. data/spec/models/three_day_report_spec.rb +49 -0
  75. data/spec/spec_helper.rb +26 -16
  76. data/spec/support/capefile_generator.rb +36 -0
  77. data/spec/support/database_cleaner.rb +21 -0
  78. data/spec/support/stubs.rb +178 -9
  79. metadata +283 -42
  80. data/.document +0 -5
  81. data/README.rdoc +0 -26
  82. data/lib/caperoma/credentials.rb +0 -13
  83. data/lib/caperoma/jira_client.rb +0 -57
  84. data/spec/caperoma/credentials_spec.rb +0 -25
  85. data/spec/caperoma/jira_spec.rb +0 -35
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d72c64e6ffa869310d552b75afc267f0e3cdeb24
4
- data.tar.gz: 1d4b90b821373516c202499febde36b2a10e44cf
2
+ SHA256:
3
+ metadata.gz: 8a648f676cfe9c4062e1598073274c668162b813e7ddfeba586d3c46479bfe76
4
+ data.tar.gz: 91239642ce5d990d056f72c2c1147ce37ba9252bbe69c180cdd11e7232f2d229
5
5
  SHA512:
6
- metadata.gz: 64e94f6d47bcca0dbaa4ba54ae249455193377fa08f8f07e8935e930ba9425bb76d1b2a4c12f998c91a27ac3e087f1850e99c8a69b102427a9330f9a034c0db0
7
- data.tar.gz: cac0ae435cc34c0fcefa5fa9477325b8021e8b84d698fd48111000ee970b937087ddc8e9c2c1990b17ca1c41e62961d50cd6b411fb4a248ac19846eb17f804f0
6
+ metadata.gz: afa44dd7474666982ee43221b177cc6c27837df1ac5dbe472abbe2a6b3a4260c0e8618924d82d0bbcb204dadbefb8784f694b43be1237b28997fdf4f51bdf19e
7
+ data.tar.gz: b5414cb1fa697731ebdf4172519862506a0531fb3f554c4307503e62100ec821e5800585d40848a604b3ca0990cf88fb62e9f0a670fe6511fde6f9dbd34360fd
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.3
data/Capefile ADDED
@@ -0,0 +1,48 @@
1
+ # Capefile is a settings file for Caperoma (programming automation system).
2
+ # More detailed information about Caperoma can be found on these sites:
3
+ # http://caperoma.io
4
+ # https://github.com/zoopyserg/caperoma/
5
+ # https://rubygems.org/gems/caperoma
6
+ # http://www.rubydoc.info/gems/caperoma/4.0.1
7
+
8
+ # This file is formatted as a YAML document.
9
+
10
+ # A working example of this configuration file in a live project can be seen here:
11
+ # https://github.com/zoopyserg/caperoma/blob/master/Capefile
12
+
13
+ # --- GITHUB SETTINGS:
14
+ ## The relative path to the repository of this project on Github, to which you need to send pull requests.
15
+ github_repo: zoopyserg/caperoma
16
+
17
+ # --- JIRA SETTINGS:
18
+ ## The full URL of your Jira server where you will create tasks.
19
+ jira_url: https://zoopyserg.atlassian.net/
20
+
21
+ ## The ID of this project on your Jira system.
22
+ jira_project_id: 10001
23
+
24
+ ## Issue identifiers of various types on your Jira system.
25
+ jira_issue_type_ids:
26
+ feature: 10101
27
+ bug: 10103
28
+ chore: 10100
29
+ fix: 10101
30
+ meeting: 10100
31
+
32
+ ## Jira conversion identifiers.
33
+ jira_transition_ids:
34
+ todo: 11
35
+ in_progress: 21
36
+ done: 31
37
+
38
+ # --- PIVOTAL TRAKCER SETTINGS:
39
+ ## The ID of this project on the PivotalTracker site.
40
+ pivotal_tracker_project_id: 2374972
41
+
42
+ ## What tasks to create in PivotalTracker in case the task from Pivotal is not attached to the task in Caperoma
43
+ ## (i.e. the -p or --pivotal_id parameter was not specified at the time of the task start).
44
+ create_features_in_pivotal: true
45
+ create_bugs_in_pivotal: true
46
+ create_chores_in_pivotal: true
47
+ create_fixes_in_pivotal_as_chores: false
48
+ create_meetings_in_pivotal_as_chores: false
data/Capefile.template ADDED
@@ -0,0 +1,48 @@
1
+ # Capefile is a settings file for Caperoma (programming automation system).
2
+ # More detailed information about Caperoma can be found on these sites:
3
+ # http://caperoma.io
4
+ # https://github.com/zoopyserg/caperoma/
5
+ # https://rubygems.org/gems/caperoma
6
+ # http://www.rubydoc.info/gems/caperoma/4.0.1
7
+
8
+ # This file is formatted as a YAML document.
9
+
10
+ # A working example of this configuration file in a live project can be seen here:
11
+ # https://github.com/zoopyserg/caperoma/blob/master/Capefile
12
+
13
+ # --- GITHUB SETTINGS:
14
+ ## The relative path to the repository of this project on Github, to which you need to send pull requests.
15
+ # github_repo: owner/repository
16
+
17
+ # --- JIRA SETTINGS:
18
+ ## The full URL of your Jira server where you will create tasks.
19
+ # jira_url: https://example.atlassian.net/
20
+
21
+ ## The ID of this project on your Jira system.
22
+ # jira_project_id: 12345
23
+
24
+ ## Issue identifiers of various types on your Jira system.
25
+ # jira_issue_type_ids:
26
+ # feature: 10101
27
+ # bug: 10103
28
+ # chore: 10100
29
+ # fix: 10101
30
+ # meeting: 10100
31
+
32
+ ## Jira conversion identifiers.
33
+ # jira_transition_ids:
34
+ # todo: 11
35
+ # in_progress: 21
36
+ # done: 31
37
+
38
+ # --- PIVOTAL TRAKCER SETTINGS:
39
+ ## The ID of this project on the PivotalTracker site.
40
+ # pivotal_tracker_project_id: 12345678
41
+
42
+ ## What tasks to create in PivotalTracker in case the task from Pivotal is not attached to the task in Caperoma
43
+ ## (i.e. the -p or --pivotal_id parameter was not specified at the time of the task start).
44
+ # create_features_in_pivotal: true
45
+ # create_bugs_in_pivotal: true
46
+ # create_chores_in_pivotal: true
47
+ # create_fixes_in_pivotal_as_chores: false
48
+ # create_meetings_in_pivotal_as_chores: false
data/Capefile.test ADDED
@@ -0,0 +1,20 @@
1
+ ---
2
+ github_repo: owner/repo
3
+ jira_url: https://owner.atlassian.net/
4
+ jira_project_id: '123'
5
+ jira_issue_type_ids:
6
+ feature: 10101
7
+ bug: 10103
8
+ chore: 10100
9
+ fix: 10101
10
+ meeting: 10100
11
+ jira_transition_ids:
12
+ todo: 11
13
+ in_progress: 21
14
+ done: 31
15
+ pivotal_tracker_project_id: 2374972
16
+ create_features_in_pivotal: true
17
+ create_bugs_in_pivotal: true
18
+ create_chores_in_pivotal: true
19
+ create_fixes_in_pivotal_as_chores: false
20
+ create_meetings_in_pivotal_as_chores: false
data/Gemfile CHANGED
@@ -1,16 +1,31 @@
1
- source 'http://rubygems.org'
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ ruby '2.6.3'
2
6
 
3
7
  # Runtime dependencies
4
- # gem 'activesupport'
5
- gem 'jira-ruby', :require => 'jira'
8
+ gem 'actionpack'
9
+ gem 'actionview'
10
+ gem 'activerecord'
11
+ gem 'activesupport'
12
+ gem 'faraday'
13
+ gem 'gmail'
14
+ gem 'jbuilder'
15
+ gem 'pivotal-tracker'
16
+ gem 'rubocop'
17
+ gem 'sqlite3'
18
+ gem 'time_difference'
19
+ gem 'whenever', require: false
6
20
 
7
- # Add dependencies to develop your gem here.
8
- # Include everything needed to run rake, tests, features, etc.
9
21
  group :development do
10
- gem 'shoulda', '>= 0'
11
- gem 'rdoc', '~> 3.12'
12
- gem 'bundler', '~> 1.0'
13
- gem 'jeweler', '~> 2.0.1'
14
- gem 'simplecov', '>= 0'
22
+ gem 'bundler'
23
+ gem 'database_cleaner'
24
+ gem 'factory_bot_rails'
25
+ gem 'juwelier'
26
+ gem 'rdoc'
15
27
  gem 'rspec'
28
+ gem 'shoulda'
29
+ gem 'shoulda-matchers'
30
+ gem 'timecop'
16
31
  end
data/Gemfile.lock CHANGED
@@ -1,99 +1,218 @@
1
1
  GEM
2
- remote: http://rubygems.org/
2
+ remote: https://rubygems.org/
3
3
  specs:
4
- activesupport (4.1.4)
5
- i18n (~> 0.6, >= 0.6.9)
6
- json (~> 1.7, >= 1.7.7)
4
+ actionpack (5.2.3)
5
+ actionview (= 5.2.3)
6
+ activesupport (= 5.2.3)
7
+ rack (~> 2.0)
8
+ rack-test (>= 0.6.3)
9
+ rails-dom-testing (~> 2.0)
10
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
11
+ actionview (5.2.3)
12
+ activesupport (= 5.2.3)
13
+ builder (~> 3.1)
14
+ erubi (~> 1.4)
15
+ rails-dom-testing (~> 2.0)
16
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
17
+ activemodel (5.2.3)
18
+ activesupport (= 5.2.3)
19
+ activerecord (5.2.3)
20
+ activemodel (= 5.2.3)
21
+ activesupport (= 5.2.3)
22
+ arel (>= 9.0)
23
+ activesupport (5.2.3)
24
+ concurrent-ruby (~> 1.0, >= 1.0.2)
25
+ i18n (>= 0.7, < 2)
7
26
  minitest (~> 5.1)
8
- thread_safe (~> 0.1)
9
27
  tzinfo (~> 1.1)
10
- addressable (2.3.6)
11
- builder (3.2.2)
28
+ addressable (2.6.0)
29
+ public_suffix (>= 2.0.2, < 4.0)
30
+ arel (9.0.0)
31
+ ast (2.4.0)
32
+ builder (3.2.3)
33
+ chronic (0.10.2)
34
+ concurrent-ruby (1.1.5)
35
+ crack (0.4.3)
36
+ safe_yaml (~> 1.0.0)
37
+ crass (1.0.4)
38
+ database_cleaner (1.7.0)
12
39
  descendants_tracker (0.0.4)
13
40
  thread_safe (~> 0.3, >= 0.3.1)
14
- diff-lcs (1.2.5)
15
- docile (1.1.5)
16
- faraday (0.9.0)
41
+ diff-lcs (1.3)
42
+ domain_name (0.5.20190701)
43
+ unf (>= 0.0.5, < 1.0.0)
44
+ erubi (1.8.0)
45
+ factory_bot (5.0.2)
46
+ activesupport (>= 4.2.0)
47
+ factory_bot_rails (5.0.2)
48
+ factory_bot (~> 5.0.2)
49
+ railties (>= 4.2.0)
50
+ faraday (0.15.4)
17
51
  multipart-post (>= 1.2, < 3)
18
- git (1.2.7)
19
- github_api (0.11.3)
20
- addressable (~> 2.3)
21
- descendants_tracker (~> 0.0.1)
22
- faraday (~> 0.8, < 0.10)
23
- hashie (>= 1.2)
24
- multi_json (>= 1.7.5, < 2.0)
25
- nokogiri (~> 1.6.0)
26
- oauth2
27
- hashie (3.2.0)
28
- highline (1.6.21)
29
- i18n (0.6.11)
30
- jeweler (2.0.1)
52
+ git (1.5.0)
53
+ github_api (0.18.2)
54
+ addressable (~> 2.4)
55
+ descendants_tracker (~> 0.0.4)
56
+ faraday (~> 0.8)
57
+ hashie (~> 3.5, >= 3.5.2)
58
+ oauth2 (~> 1.0)
59
+ gmail (0.7.1)
60
+ gmail_xoauth (>= 0.3.0)
61
+ mail (>= 2.2.1)
62
+ gmail_xoauth (0.4.2)
63
+ oauth (>= 0.3.6)
64
+ hashie (3.6.0)
65
+ highline (2.0.2)
66
+ http-cookie (1.0.3)
67
+ domain_name (~> 0.5)
68
+ i18n (1.6.0)
69
+ concurrent-ruby (~> 1.0)
70
+ jaro_winkler (1.5.3)
71
+ jbuilder (2.9.1)
72
+ activesupport (>= 4.2.0)
73
+ juwelier (2.4.9)
31
74
  builder
32
- bundler (>= 1.0)
33
- git (>= 1.2.5)
75
+ bundler
76
+ git
34
77
  github_api
35
- highline (>= 1.6.15)
36
- nokogiri (>= 1.5.10)
78
+ highline
79
+ kamelcase (~> 0)
80
+ nokogiri
81
+ psych
37
82
  rake
38
83
  rdoc
39
- jira-ruby (0.1.10)
40
- activesupport
41
- oauth
42
- json (1.8.1)
43
- jwt (1.0.0)
44
- mini_portile (0.6.0)
45
- minitest (5.4.0)
46
- multi_json (1.10.1)
47
- multi_xml (0.5.5)
48
- multipart-post (2.0.0)
49
- nokogiri (1.6.2.1)
50
- mini_portile (= 0.6.0)
51
- oauth (0.4.7)
52
- oauth2 (1.0.0)
53
- faraday (>= 0.8, < 0.10)
54
- jwt (~> 1.0)
84
+ semver2
85
+ jwt (2.2.1)
86
+ kamelcase (0.0.2)
87
+ semver2 (~> 3)
88
+ loofah (2.2.3)
89
+ crass (~> 1.0.2)
90
+ nokogiri (>= 1.5.9)
91
+ mail (2.7.1)
92
+ mini_mime (>= 0.1.1)
93
+ method_source (0.9.2)
94
+ mime-types (3.2.2)
95
+ mime-types-data (~> 3.2015)
96
+ mime-types-data (3.2019.0331)
97
+ mini_mime (1.0.2)
98
+ mini_portile2 (2.4.0)
99
+ minitest (5.11.3)
100
+ multi_json (1.13.1)
101
+ multi_xml (0.6.0)
102
+ multipart-post (2.1.1)
103
+ netrc (0.11.0)
104
+ nokogiri (1.10.3)
105
+ mini_portile2 (~> 2.4.0)
106
+ nokogiri-happymapper (0.8.1)
107
+ nokogiri (~> 1.5)
108
+ oauth (0.5.4)
109
+ oauth2 (1.4.1)
110
+ faraday (>= 0.8, < 0.16.0)
111
+ jwt (>= 1.0, < 3.0)
55
112
  multi_json (~> 1.3)
56
113
  multi_xml (~> 0.5)
57
- rack (~> 1.2)
58
- rack (1.5.2)
59
- rake (10.3.2)
60
- rdoc (3.12.2)
61
- json (~> 1.4)
62
- rspec (3.0.0)
63
- rspec-core (~> 3.0.0)
64
- rspec-expectations (~> 3.0.0)
65
- rspec-mocks (~> 3.0.0)
66
- rspec-core (3.0.2)
67
- rspec-support (~> 3.0.0)
68
- rspec-expectations (3.0.2)
114
+ rack (>= 1.2, < 3)
115
+ parallel (1.17.0)
116
+ parser (2.6.3.0)
117
+ ast (~> 2.4.0)
118
+ pivotal-tracker (0.5.13)
119
+ builder
120
+ crack
121
+ nokogiri (>= 1.5.5)
122
+ nokogiri-happymapper (>= 0.5.4)
123
+ rest-client (>= 1.8.0)
124
+ psych (3.1.0)
125
+ public_suffix (3.1.1)
126
+ rack (2.0.7)
127
+ rack-test (1.1.0)
128
+ rack (>= 1.0, < 3)
129
+ rails-dom-testing (2.0.3)
130
+ activesupport (>= 4.2.0)
131
+ nokogiri (>= 1.6)
132
+ rails-html-sanitizer (1.0.4)
133
+ loofah (~> 2.2, >= 2.2.2)
134
+ railties (5.2.3)
135
+ actionpack (= 5.2.3)
136
+ activesupport (= 5.2.3)
137
+ method_source
138
+ rake (>= 0.8.7)
139
+ thor (>= 0.19.0, < 2.0)
140
+ rainbow (3.0.0)
141
+ rake (12.3.3)
142
+ rdoc (6.1.1)
143
+ rest-client (2.0.2)
144
+ http-cookie (>= 1.0.2, < 2.0)
145
+ mime-types (>= 1.16, < 4.0)
146
+ netrc (~> 0.8)
147
+ rspec (3.8.0)
148
+ rspec-core (~> 3.8.0)
149
+ rspec-expectations (~> 3.8.0)
150
+ rspec-mocks (~> 3.8.0)
151
+ rspec-core (3.8.2)
152
+ rspec-support (~> 3.8.0)
153
+ rspec-expectations (3.8.4)
154
+ diff-lcs (>= 1.2.0, < 2.0)
155
+ rspec-support (~> 3.8.0)
156
+ rspec-mocks (3.8.1)
69
157
  diff-lcs (>= 1.2.0, < 2.0)
70
- rspec-support (~> 3.0.0)
71
- rspec-mocks (3.0.2)
72
- rspec-support (~> 3.0.0)
73
- rspec-support (3.0.2)
74
- shoulda (3.5.0)
75
- shoulda-context (~> 1.0, >= 1.0.1)
76
- shoulda-matchers (>= 1.4.1, < 3.0)
77
- shoulda-context (1.2.1)
78
- shoulda-matchers (2.6.2)
79
- activesupport (>= 3.0.0)
80
- simplecov (0.9.0)
81
- docile (~> 1.1.0)
82
- multi_json
83
- simplecov-html (~> 0.8.0)
84
- simplecov-html (0.8.0)
85
- thread_safe (0.3.4)
86
- tzinfo (1.2.1)
158
+ rspec-support (~> 3.8.0)
159
+ rspec-support (3.8.2)
160
+ rubocop (0.73.0)
161
+ jaro_winkler (~> 1.5.1)
162
+ parallel (~> 1.10)
163
+ parser (>= 2.6)
164
+ rainbow (>= 2.2.2, < 4.0)
165
+ ruby-progressbar (~> 1.7)
166
+ unicode-display_width (>= 1.4.0, < 1.7)
167
+ ruby-progressbar (1.10.1)
168
+ safe_yaml (1.0.5)
169
+ semver2 (3.4.2)
170
+ shoulda (2.11.3)
171
+ shoulda-matchers (4.1.1)
172
+ activesupport (>= 4.2.0)
173
+ sqlite3 (1.4.1)
174
+ thor (0.20.3)
175
+ thread_safe (0.3.6)
176
+ time_difference (0.7.0)
177
+ activesupport (~> 5.1)
178
+ timecop (0.9.1)
179
+ tzinfo (1.2.5)
87
180
  thread_safe (~> 0.1)
181
+ unf (0.1.4)
182
+ unf_ext
183
+ unf_ext (0.0.7.6)
184
+ unicode-display_width (1.6.0)
185
+ whenever (1.0.0)
186
+ chronic (>= 0.6.3)
88
187
 
89
188
  PLATFORMS
90
189
  ruby
91
190
 
92
191
  DEPENDENCIES
93
- bundler (~> 1.0)
94
- jeweler (~> 2.0.1)
95
- jira-ruby
96
- rdoc (~> 3.12)
192
+ actionpack
193
+ actionview
194
+ activerecord
195
+ activesupport
196
+ bundler
197
+ database_cleaner
198
+ factory_bot_rails
199
+ faraday
200
+ gmail
201
+ jbuilder
202
+ juwelier
203
+ pivotal-tracker
204
+ rdoc
97
205
  rspec
206
+ rubocop
98
207
  shoulda
99
- simplecov
208
+ shoulda-matchers
209
+ sqlite3
210
+ time_difference
211
+ timecop
212
+ whenever
213
+
214
+ RUBY VERSION
215
+ ruby 2.6.3p62
216
+
217
+ BUNDLED WITH
218
+ 1.17.3