traker 0.0.1 → 0.1.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 -0
- data/.rubocop.yml +41 -0
- data/.travis.yml +6 -0
- data/Gemfile +13 -1
- data/Gemfile.lock +177 -0
- data/README.md +14 -0
- data/Rakefile +5 -3
- data/bin/console +4 -3
- data/exe/traker +8 -0
- data/lib/generators/traker/models_generator.rb +3 -1
- data/lib/generators/traker/rspec_generator.rb +17 -0
- data/lib/generators/traker/templates/{migration.rb → migrations/20200930011917_add_traker_tasks.rb} +3 -1
- data/lib/generators/traker/templates/spec/lib/traker_spec.rb +11 -0
- data/lib/traker.rb +3 -0
- data/lib/traker/cli.rb +57 -0
- data/lib/traker/config.rb +44 -0
- data/lib/traker/instrumenter.rb +8 -15
- data/lib/traker/override.rake +0 -2
- data/lib/traker/service.rb +34 -0
- data/lib/traker/task.rb +4 -1
- data/lib/traker/version.rb +1 -1
- data/traker.gemspec +18 -16
- metadata +16 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 735a833c35207ee136c8b17c5bbc484010fa935339bc79b6ea588ea01aa1716e
|
4
|
+
data.tar.gz: 695f64cbed4772da1e490993f32b4a428ae2c0b217198ac49fd8be36c7cf1d1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23741590737e76e0dcf618a9e8040b2b27520c1892f07cf32cf43981cfe9ba781ff03b78358e11c928e25516f1894ae168bc1a1cefdda0ace9d8fcb931904498
|
7
|
+
data.tar.gz: 8c5370219ca462e8679708b581358809bc046cc8e0b9eb3900c34d23653910eaf9f93c769e7c39f4d87a974c50e4ad42dd69025fb4963c64e7272386f9cd79b8
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
AllCops:
|
2
|
+
NewCops: enable
|
3
|
+
TargetRubyVersion: 2.4.0
|
4
|
+
|
5
|
+
Layout/MultilineMethodCallIndentation:
|
6
|
+
Enabled: false
|
7
|
+
|
8
|
+
Lint/InheritException:
|
9
|
+
Enabled: false
|
10
|
+
|
11
|
+
Style/MultilineTernaryOperator:
|
12
|
+
Enabled: false
|
13
|
+
|
14
|
+
Style/GuardClause:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Style/ClassAndModuleChildren:
|
18
|
+
Enabled: false
|
19
|
+
|
20
|
+
Style/ParallelAssignment:
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
Style/IfUnlessModifier:
|
24
|
+
Enabled: false
|
25
|
+
|
26
|
+
Metrics:
|
27
|
+
Enabled: false
|
28
|
+
|
29
|
+
Naming/PredicateName:
|
30
|
+
Enabled: false
|
31
|
+
|
32
|
+
Layout/LineLength:
|
33
|
+
Max: 170
|
34
|
+
|
35
|
+
Layout/EmptyLineBetweenDefs:
|
36
|
+
Enabled: false
|
37
|
+
|
38
|
+
Style/Documentation:
|
39
|
+
Enabled: true
|
40
|
+
Exclude:
|
41
|
+
- lib/traker.rb
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -1,4 +1,16 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source 'https://rubygems.org'
|
2
4
|
|
3
5
|
# Specify your gem's dependencies in traker.gemspec
|
4
6
|
gemspec
|
7
|
+
|
8
|
+
group :test do
|
9
|
+
gem 'climate_control'
|
10
|
+
gem 'database_cleaner'
|
11
|
+
gem 'pry'
|
12
|
+
gem 'rb-readline'
|
13
|
+
gem 'rspec'
|
14
|
+
gem 'rubocop', '~> 0.62'
|
15
|
+
gem 'sqlite3', '~> 1.3', '< 1.4'
|
16
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
traker (0.0.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
actioncable (5.2.4.4)
|
10
|
+
actionpack (= 5.2.4.4)
|
11
|
+
nio4r (~> 2.0)
|
12
|
+
websocket-driver (>= 0.6.1)
|
13
|
+
actionmailer (5.2.4.4)
|
14
|
+
actionpack (= 5.2.4.4)
|
15
|
+
actionview (= 5.2.4.4)
|
16
|
+
activejob (= 5.2.4.4)
|
17
|
+
mail (~> 2.5, >= 2.5.4)
|
18
|
+
rails-dom-testing (~> 2.0)
|
19
|
+
actionpack (5.2.4.4)
|
20
|
+
actionview (= 5.2.4.4)
|
21
|
+
activesupport (= 5.2.4.4)
|
22
|
+
rack (~> 2.0, >= 2.0.8)
|
23
|
+
rack-test (>= 0.6.3)
|
24
|
+
rails-dom-testing (~> 2.0)
|
25
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
26
|
+
actionview (5.2.4.4)
|
27
|
+
activesupport (= 5.2.4.4)
|
28
|
+
builder (~> 3.1)
|
29
|
+
erubi (~> 1.4)
|
30
|
+
rails-dom-testing (~> 2.0)
|
31
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
32
|
+
activejob (5.2.4.4)
|
33
|
+
activesupport (= 5.2.4.4)
|
34
|
+
globalid (>= 0.3.6)
|
35
|
+
activemodel (5.2.4.4)
|
36
|
+
activesupport (= 5.2.4.4)
|
37
|
+
activerecord (5.2.4.4)
|
38
|
+
activemodel (= 5.2.4.4)
|
39
|
+
activesupport (= 5.2.4.4)
|
40
|
+
arel (>= 9.0)
|
41
|
+
activestorage (5.2.4.4)
|
42
|
+
actionpack (= 5.2.4.4)
|
43
|
+
activerecord (= 5.2.4.4)
|
44
|
+
marcel (~> 0.3.1)
|
45
|
+
activesupport (5.2.4.4)
|
46
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
47
|
+
i18n (>= 0.7, < 2)
|
48
|
+
minitest (~> 5.1)
|
49
|
+
tzinfo (~> 1.1)
|
50
|
+
arel (9.0.0)
|
51
|
+
ast (2.4.1)
|
52
|
+
builder (3.2.4)
|
53
|
+
climate_control (0.2.0)
|
54
|
+
coderay (1.1.3)
|
55
|
+
concurrent-ruby (1.1.7)
|
56
|
+
crass (1.0.6)
|
57
|
+
database_cleaner (1.8.5)
|
58
|
+
diff-lcs (1.4.4)
|
59
|
+
erubi (1.9.0)
|
60
|
+
globalid (0.4.2)
|
61
|
+
activesupport (>= 4.2.0)
|
62
|
+
i18n (1.8.5)
|
63
|
+
concurrent-ruby (~> 1.0)
|
64
|
+
loofah (2.7.0)
|
65
|
+
crass (~> 1.0.2)
|
66
|
+
nokogiri (>= 1.5.9)
|
67
|
+
mail (2.7.1)
|
68
|
+
mini_mime (>= 0.1.1)
|
69
|
+
marcel (0.3.3)
|
70
|
+
mimemagic (~> 0.3.2)
|
71
|
+
method_source (1.0.0)
|
72
|
+
mimemagic (0.3.5)
|
73
|
+
mini_mime (1.0.2)
|
74
|
+
mini_portile2 (2.4.0)
|
75
|
+
minitest (5.14.2)
|
76
|
+
nio4r (2.5.4)
|
77
|
+
nokogiri (1.10.10)
|
78
|
+
mini_portile2 (~> 2.4.0)
|
79
|
+
parallel (1.19.2)
|
80
|
+
parser (2.7.1.5)
|
81
|
+
ast (~> 2.4.1)
|
82
|
+
pry (0.13.1)
|
83
|
+
coderay (~> 1.1)
|
84
|
+
method_source (~> 1.0)
|
85
|
+
rack (2.2.3)
|
86
|
+
rack-test (1.1.0)
|
87
|
+
rack (>= 1.0, < 3)
|
88
|
+
rails (5.2.4.4)
|
89
|
+
actioncable (= 5.2.4.4)
|
90
|
+
actionmailer (= 5.2.4.4)
|
91
|
+
actionpack (= 5.2.4.4)
|
92
|
+
actionview (= 5.2.4.4)
|
93
|
+
activejob (= 5.2.4.4)
|
94
|
+
activemodel (= 5.2.4.4)
|
95
|
+
activerecord (= 5.2.4.4)
|
96
|
+
activestorage (= 5.2.4.4)
|
97
|
+
activesupport (= 5.2.4.4)
|
98
|
+
bundler (>= 1.3.0)
|
99
|
+
railties (= 5.2.4.4)
|
100
|
+
sprockets-rails (>= 2.0.0)
|
101
|
+
rails-dom-testing (2.0.3)
|
102
|
+
activesupport (>= 4.2.0)
|
103
|
+
nokogiri (>= 1.6)
|
104
|
+
rails-html-sanitizer (1.3.0)
|
105
|
+
loofah (~> 2.3)
|
106
|
+
railties (5.2.4.4)
|
107
|
+
actionpack (= 5.2.4.4)
|
108
|
+
activesupport (= 5.2.4.4)
|
109
|
+
method_source
|
110
|
+
rake (>= 0.8.7)
|
111
|
+
thor (>= 0.19.0, < 2.0)
|
112
|
+
rainbow (3.0.0)
|
113
|
+
rake (12.3.3)
|
114
|
+
rb-readline (0.5.5)
|
115
|
+
regexp_parser (1.8.1)
|
116
|
+
rexml (3.2.4)
|
117
|
+
rspec (3.9.0)
|
118
|
+
rspec-core (~> 3.9.0)
|
119
|
+
rspec-expectations (~> 3.9.0)
|
120
|
+
rspec-mocks (~> 3.9.0)
|
121
|
+
rspec-core (3.9.2)
|
122
|
+
rspec-support (~> 3.9.3)
|
123
|
+
rspec-expectations (3.9.2)
|
124
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
125
|
+
rspec-support (~> 3.9.0)
|
126
|
+
rspec-mocks (3.9.1)
|
127
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
128
|
+
rspec-support (~> 3.9.0)
|
129
|
+
rspec-support (3.9.3)
|
130
|
+
rubocop (0.92.0)
|
131
|
+
parallel (~> 1.10)
|
132
|
+
parser (>= 2.7.1.5)
|
133
|
+
rainbow (>= 2.2.2, < 4.0)
|
134
|
+
regexp_parser (>= 1.7)
|
135
|
+
rexml
|
136
|
+
rubocop-ast (>= 0.5.0)
|
137
|
+
ruby-progressbar (~> 1.7)
|
138
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
139
|
+
rubocop-ast (0.7.1)
|
140
|
+
parser (>= 2.7.1.5)
|
141
|
+
ruby-progressbar (1.10.1)
|
142
|
+
sprockets (4.0.2)
|
143
|
+
concurrent-ruby (~> 1.0)
|
144
|
+
rack (> 1, < 3)
|
145
|
+
sprockets-rails (3.2.2)
|
146
|
+
actionpack (>= 4.0)
|
147
|
+
activesupport (>= 4.0)
|
148
|
+
sprockets (>= 3.0.0)
|
149
|
+
sqlite3 (1.3.13)
|
150
|
+
thor (1.0.1)
|
151
|
+
thread_safe (0.3.6)
|
152
|
+
tzinfo (1.2.7)
|
153
|
+
thread_safe (~> 0.1)
|
154
|
+
unicode-display_width (1.7.0)
|
155
|
+
websocket-driver (0.7.3)
|
156
|
+
websocket-extensions (>= 0.1.0)
|
157
|
+
websocket-extensions (0.1.5)
|
158
|
+
|
159
|
+
PLATFORMS
|
160
|
+
ruby
|
161
|
+
|
162
|
+
DEPENDENCIES
|
163
|
+
activerecord (>= 4.1)
|
164
|
+
bundler (~> 2.0)
|
165
|
+
climate_control
|
166
|
+
database_cleaner
|
167
|
+
pry
|
168
|
+
rails (~> 5.0)
|
169
|
+
rake (~> 12.3.3)
|
170
|
+
rb-readline
|
171
|
+
rspec
|
172
|
+
rubocop (~> 0.62)
|
173
|
+
sqlite3 (~> 1.3, < 1.4)
|
174
|
+
traker!
|
175
|
+
|
176
|
+
BUNDLED WITH
|
177
|
+
2.0.1
|
data/README.md
CHANGED
@@ -52,6 +52,20 @@ Schema breakdown:
|
|
52
52
|
* `environments.<key>.name` - the name of the rake task in namespace:name format
|
53
53
|
* `environments.<key>.notes` - some information that might be important when the task is run (should be different from rake task's description)
|
54
54
|
|
55
|
+
### Testing
|
56
|
+
|
57
|
+
Traker allows to keep your `.traker.yml` configuration file consistent and valid. Run a generator to install rspec related files:
|
58
|
+
|
59
|
+
``` ruby
|
60
|
+
rails g traker:rspec test
|
61
|
+
```
|
62
|
+
|
63
|
+
### CLI
|
64
|
+
Traker exposes a command line interface. Commands implemented so far:
|
65
|
+
|
66
|
+
1) `traker list` - lists pending (those that haven't been run in the current environment) tasks. Available options:
|
67
|
+
* `-a, --all` - list all tasks in the current environment
|
68
|
+
|
55
69
|
## Development
|
56
70
|
|
57
71
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
require
|
4
|
-
require
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'traker'
|
5
6
|
|
6
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
8
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -10,5 +11,5 @@ require "traker"
|
|
10
11
|
# require "pry"
|
11
12
|
# Pry.start
|
12
13
|
|
13
|
-
require
|
14
|
+
require 'irb'
|
14
15
|
IRB.start(__FILE__)
|
data/exe/traker
ADDED
@@ -4,11 +4,13 @@ require 'rails/generators/active_record'
|
|
4
4
|
|
5
5
|
module Traker
|
6
6
|
module Generators
|
7
|
+
# A rails generator that generates model-related files in the host
|
8
|
+
# Ruby On Rails project
|
7
9
|
class ModelsGenerator < ActiveRecord::Generators::Base
|
8
10
|
source_root File.expand_path('templates', __dir__)
|
9
11
|
|
10
12
|
def generate_model
|
11
|
-
migration_template '
|
13
|
+
migration_template 'migrations/20200930011917_add_traker_tasks.rb', 'db/migrate/add_traker_tasks.rb'
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators/active_record'
|
4
|
+
|
5
|
+
module Traker
|
6
|
+
module Generators
|
7
|
+
# A rails generator that generates rspec-related files in the host
|
8
|
+
# Ruby On Rails project
|
9
|
+
class RspecGenerator < ActiveRecord::Generators::Base
|
10
|
+
source_root File.expand_path('templates', __dir__)
|
11
|
+
|
12
|
+
def generate_spec
|
13
|
+
template 'spec/lib/traker_spec.rb', 'spec/lib/traker_spec.rb'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/generators/traker/templates/{migration.rb → migrations/20200930011917_add_traker_tasks.rb}
RENAMED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# ActiveRecord migration that creates Traker::Task
|
4
|
+
# table
|
3
5
|
class AddTrakerTasks < ActiveRecord::Migration[5.2]
|
4
6
|
def change
|
5
7
|
create_table :traker_tasks do |t|
|
@@ -12,6 +14,6 @@ class AddTrakerTasks < ActiveRecord::Migration[5.2]
|
|
12
14
|
t.datetime :finished_at, null: false
|
13
15
|
end
|
14
16
|
|
15
|
-
add_index :traker_tasks, %i
|
17
|
+
add_index :traker_tasks, %i[name environment]
|
16
18
|
end
|
17
19
|
end
|
data/lib/traker.rb
CHANGED
data/lib/traker/cli.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
module Traker
|
6
|
+
# Traker's CLI interfase
|
7
|
+
class CLI
|
8
|
+
SUBTEXT = <<HELP
|
9
|
+
Possible commands are:
|
10
|
+
list: lists rake tasks known to Traker (shows list of pending tasks by default)
|
11
|
+
See 'traker COMMAND --help' for more information on a specific command.
|
12
|
+
HELP
|
13
|
+
SUBCOMMANDS = {
|
14
|
+
list: 'list'
|
15
|
+
}.freeze
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
@main = OptionParser.new do |opts|
|
19
|
+
opts.banner = 'Usage: traker [options] [subcommand] [options]'
|
20
|
+
opts.on('-v', '--version', 'Show version')
|
21
|
+
opts.separator ''
|
22
|
+
opts.separator SUBTEXT
|
23
|
+
end
|
24
|
+
|
25
|
+
@subcommands = {
|
26
|
+
SUBCOMMANDS[:list] => OptionParser.new do |opts|
|
27
|
+
opts.banner = 'Usage: list [options]'
|
28
|
+
opts.on('-a', '--all', 'list all tasks')
|
29
|
+
end
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def run(argv)
|
34
|
+
options = {}
|
35
|
+
@main.order!(argv, into: options)
|
36
|
+
if options[:version]
|
37
|
+
puts Traker::VERSION
|
38
|
+
return
|
39
|
+
end
|
40
|
+
|
41
|
+
subcommand = argv.shift
|
42
|
+
subcommand_options = {}
|
43
|
+
@subcommands[subcommand]&.order!(argv, into: subcommand_options)
|
44
|
+
|
45
|
+
service = Traker::Service.new
|
46
|
+
|
47
|
+
case subcommand
|
48
|
+
when SUBCOMMANDS[:list]
|
49
|
+
if subcommand_options[:all]
|
50
|
+
print service.tasks.join("\n")
|
51
|
+
else
|
52
|
+
print service.pending_tasks.join("\n")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
require 'rails'
|
5
|
+
|
6
|
+
module Traker
|
7
|
+
# Represents Traker configuration.
|
8
|
+
class Config
|
9
|
+
PATH = '.traker.yml'
|
10
|
+
|
11
|
+
class InvalidTasks < StandardError
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.load
|
15
|
+
Config.new(File.join(::Rails.root, PATH))
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(file)
|
19
|
+
yml = YAML.safe_load(File.read(file))
|
20
|
+
@environments = yml['environments']
|
21
|
+
end
|
22
|
+
|
23
|
+
def env
|
24
|
+
@env ||= ENV.fetch('TRAKER_ENV', 'default')
|
25
|
+
end
|
26
|
+
|
27
|
+
def tasks
|
28
|
+
@environments[env] || []
|
29
|
+
end
|
30
|
+
|
31
|
+
def validate!(available_tasks)
|
32
|
+
available_task_names = available_tasks.map(&:name)
|
33
|
+
|
34
|
+
@environments.each do |_, tasks|
|
35
|
+
task_names = (tasks || []).map { |t| t['name'] }
|
36
|
+
invalid_tasks = task_names - available_task_names
|
37
|
+
|
38
|
+
if invalid_tasks.any?
|
39
|
+
raise InvalidTasks, "#{PATH} contains invalid tasks: #{invalid_tasks.join(',')}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/traker/instrumenter.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'yaml'
|
4
|
-
|
5
3
|
module Traker
|
4
|
+
# Wraps array of rake tasks, and auguments each one of them
|
5
|
+
# with Traker features
|
6
6
|
class Instrumenter
|
7
|
-
attr_accessor :tasks, :
|
7
|
+
attr_accessor :tasks, :config
|
8
8
|
|
9
9
|
def initialize(tasks)
|
10
10
|
@tasks = tasks
|
11
|
+
@config = Traker::Config.load
|
11
12
|
end
|
12
13
|
|
13
14
|
def instrument
|
@@ -17,19 +18,19 @@ module Traker
|
|
17
18
|
next unless tasks_to_be_run.map { |task| task['name'] }.include?(task_name)
|
18
19
|
|
19
20
|
handler = proc do |&block|
|
20
|
-
record = Traker::Task.find_or_initialize_by(name: task_name, environment: env)
|
21
|
+
record = Traker::Task.find_or_initialize_by(name: task_name, environment: config.env)
|
21
22
|
|
22
23
|
record.started_at = DateTime.now
|
23
24
|
record.is_success = true
|
24
25
|
|
25
26
|
begin
|
26
27
|
block.call
|
27
|
-
|
28
|
+
record.run_count += 1
|
29
|
+
rescue StandardError => e
|
28
30
|
record.is_success = false
|
29
31
|
record.error = e.backtrace.first
|
30
32
|
raise e
|
31
33
|
ensure
|
32
|
-
record.run_count += 1
|
33
34
|
record.finished_at = DateTime.now
|
34
35
|
record.save!
|
35
36
|
end
|
@@ -41,16 +42,8 @@ module Traker
|
|
41
42
|
|
42
43
|
private
|
43
44
|
|
44
|
-
def config
|
45
|
-
@config ||= YAML.safe_load(File.read(File.join(Rails.root, '.traker.yml')))
|
46
|
-
end
|
47
|
-
|
48
|
-
def env
|
49
|
-
@env ||= ENV.fetch('TRAKER_ENV', 'default')
|
50
|
-
end
|
51
|
-
|
52
45
|
def tasks_to_be_run
|
53
|
-
config
|
46
|
+
config.tasks
|
54
47
|
end
|
55
48
|
end
|
56
49
|
end
|
data/lib/traker/override.rake
CHANGED
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
require_relative '../traker'
|
4
4
|
|
5
|
-
Traker::Instrumenter.new(Rake::Task.tasks)
|
6
|
-
|
7
5
|
Traker::Instrumenter.new(Rake::Task.tasks).instrument do |task_name, handle_task|
|
8
6
|
original_task = Rake.application.instance_variable_get('@tasks').delete(task_name)
|
9
7
|
task_prerequisites = original_task.prerequisites | ['environment']
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'traker/task'
|
4
|
+
|
5
|
+
module Traker
|
6
|
+
# Service that encapsulates main Traker API
|
7
|
+
class Service
|
8
|
+
def initialize
|
9
|
+
@config = Traker::Config.load
|
10
|
+
end
|
11
|
+
|
12
|
+
def pending_tasks
|
13
|
+
records = Traker::Task.where(name: tasks, environment: @config.env)
|
14
|
+
actual = tasks.each_with_object({}) do |name, hash|
|
15
|
+
record = records.find { |r| r.name == name }
|
16
|
+
hash[name] = record ? record.run_count : 0
|
17
|
+
end
|
18
|
+
|
19
|
+
pending = []
|
20
|
+
tasks.each do |name|
|
21
|
+
actual[name] -= 1
|
22
|
+
next if actual[name] >= 0
|
23
|
+
|
24
|
+
pending << name
|
25
|
+
end
|
26
|
+
|
27
|
+
pending
|
28
|
+
end
|
29
|
+
|
30
|
+
def tasks
|
31
|
+
@tasks ||= @config.tasks.map { |t| t['name'] }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/traker/task.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'active_record'
|
4
|
+
|
3
5
|
module Traker
|
4
|
-
|
6
|
+
# Represents a rake task that have been run and logged by Traker
|
7
|
+
class Task < ::ActiveRecord::Base
|
5
8
|
self.table_name_prefix = 'traker_'
|
6
9
|
end
|
7
10
|
end
|
data/lib/traker/version.rb
CHANGED
data/traker.gemspec
CHANGED
@@ -1,18 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
|
-
lib = File.expand_path(
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
5
|
+
require 'traker/version'
|
5
6
|
|
6
7
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
8
|
+
spec.name = 'traker'
|
8
9
|
spec.version = Traker::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
10
|
+
spec.authors = ['pavloo']
|
11
|
+
spec.email = ['posadchiy@gmail.com']
|
11
12
|
|
12
|
-
spec.summary =
|
13
|
-
spec.description =
|
14
|
-
spec.homepage =
|
15
|
-
spec.license =
|
13
|
+
spec.summary = 'Rake tasks tracker, Traker'
|
14
|
+
spec.description = 'Track rake tasks in your Rails application.'
|
15
|
+
spec.homepage = 'https://github.com/pavloo/traker'
|
16
|
+
spec.license = 'MIT'
|
16
17
|
|
17
18
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
19
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
@@ -29,17 +30,18 @@ Gem::Specification.new do |spec|
|
|
29
30
|
|
30
31
|
# Specify which files should be added to the gem when it is released.
|
31
32
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
32
|
-
spec.files = Dir.chdir(File.expand_path(
|
33
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
33
34
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
34
35
|
end
|
35
|
-
spec.bindir =
|
36
|
+
spec.bindir = 'exe'
|
36
37
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
37
|
-
spec.require_paths = [
|
38
|
+
spec.require_paths = ['lib']
|
39
|
+
spec.required_ruby_version = '>=2.4'
|
38
40
|
|
39
|
-
spec.add_development_dependency
|
40
|
-
spec.add_development_dependency
|
41
|
-
spec.add_development_dependency
|
41
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
42
|
+
spec.add_development_dependency 'rake', '~> 12.3.3'
|
43
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
42
44
|
|
43
|
-
spec.add_development_dependency
|
45
|
+
spec.add_development_dependency 'activerecord', '>= 4.1'
|
44
46
|
spec.add_development_dependency 'rails', '~> 5.0'
|
45
47
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: traker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pavloo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 12.3.3
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 12.3.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,25 +83,34 @@ dependencies:
|
|
83
83
|
description: Track rake tasks in your Rails application.
|
84
84
|
email:
|
85
85
|
- posadchiy@gmail.com
|
86
|
-
executables:
|
86
|
+
executables:
|
87
|
+
- traker
|
87
88
|
extensions: []
|
88
89
|
extra_rdoc_files: []
|
89
90
|
files:
|
90
91
|
- ".gitignore"
|
91
92
|
- ".rspec"
|
93
|
+
- ".rubocop.yml"
|
92
94
|
- ".travis.yml"
|
93
95
|
- CODE_OF_CONDUCT.md
|
94
96
|
- Gemfile
|
97
|
+
- Gemfile.lock
|
95
98
|
- LICENSE.txt
|
96
99
|
- README.md
|
97
100
|
- Rakefile
|
98
101
|
- bin/console
|
99
102
|
- bin/setup
|
103
|
+
- exe/traker
|
100
104
|
- lib/generators/traker/models_generator.rb
|
101
|
-
- lib/generators/traker/
|
105
|
+
- lib/generators/traker/rspec_generator.rb
|
106
|
+
- lib/generators/traker/templates/migrations/20200930011917_add_traker_tasks.rb
|
107
|
+
- lib/generators/traker/templates/spec/lib/traker_spec.rb
|
102
108
|
- lib/traker.rb
|
109
|
+
- lib/traker/cli.rb
|
110
|
+
- lib/traker/config.rb
|
103
111
|
- lib/traker/instrumenter.rb
|
104
112
|
- lib/traker/override.rake
|
113
|
+
- lib/traker/service.rb
|
105
114
|
- lib/traker/task.rb
|
106
115
|
- lib/traker/version.rb
|
107
116
|
- traker.gemspec
|
@@ -117,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
117
126
|
requirements:
|
118
127
|
- - ">="
|
119
128
|
- !ruby/object:Gem::Version
|
120
|
-
version: '
|
129
|
+
version: '2.4'
|
121
130
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
131
|
requirements:
|
123
132
|
- - ">="
|