trop 0.4.27 → 0.5.33
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +7 -2
- data/Rakefile +4 -83
- data/VERSION +1 -1
- data/bin/setup +3 -1
- data/lib/trop/gem_tasks.rb +24 -0
- data/lib/trop/shell_deb_verb.rb +65 -9
- data/lib/trop/version.rb +4 -1
- data/rakelib/envrc.rake +2 -0
- data/rakelib/gem_version.rake +46 -0
- data/rakelib/raven.rake +51 -0
- data/rakelib/source_annotation.rake +46 -0
- data/rakelib/source_annotation_extractor.rb +141 -0
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13ae332650b6d142dfdf98e3de802130d2d4e62daa0ccfe43bbc93cbc954ba64
|
4
|
+
data.tar.gz: ccab3a9d0a5c0c9ae17d938afe034cdd3b7a84a33578d53c2a229197dd2fcd1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4c2748eddd5efa8a082287d5a172293c376a8f319180768a71c1366b575d25bc98acc8b27b733db7d6dec717a5db05970ffe21ec3332b9ee010d8e0007cdd01
|
7
|
+
data.tar.gz: ac435121e471c62f3c306b82583a729bbcb28d9f459c0571579ecc76eeb82526198f6a3677b975dcaf5fb28e96c6b04c03a866517f721a8f9104c28acfad21b2
|
data/Gemfile
CHANGED
@@ -23,9 +23,14 @@ end
|
|
23
23
|
|
24
24
|
gem 'dotenv'
|
25
25
|
gem 'bundler', '~> 2.0.1'
|
26
|
-
gem "bundler_geminabox"
|
27
26
|
|
28
27
|
gem 'sentry-raven'
|
29
28
|
gem 'colorize'
|
30
29
|
|
31
|
-
gem "bundler-geminabox", "
|
30
|
+
gem "bundler-geminabox", "1.0"
|
31
|
+
|
32
|
+
gem "git-version-bump", "~> 0.16.0"
|
33
|
+
|
34
|
+
gem "gem-release", "~> 2.0"
|
35
|
+
|
36
|
+
gem "faraday", "0.15.4"
|
data/Rakefile
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require 'bundler/gem_tasks'
|
3
|
-
require 'bundler/endpoint_specification'
|
4
2
|
require 'rake'
|
5
|
-
require 'bump'
|
6
3
|
require 'fileutils'
|
7
|
-
|
4
|
+
|
5
|
+
require_relative './lib/trop'
|
6
|
+
|
8
7
|
|
9
8
|
begin
|
10
9
|
Bundler.setup(:default, :development)
|
@@ -14,61 +13,6 @@ rescue Bundler::BundlerError => e
|
|
14
13
|
exit e.status_code
|
15
14
|
end
|
16
15
|
|
17
|
-
desc 'Generate a gemspecx file.'
|
18
|
-
task :gemspecx do
|
19
|
-
spec_dir = File.join( FileUtils.getwd,"*.gemspec")
|
20
|
-
spec_path = Dir.glob( spec_dir ).first
|
21
|
-
spec_gem = Gem::Specification::load(spec_path)
|
22
|
-
spec_str = pp spec_gem
|
23
|
-
puts spec_str
|
24
|
-
puts spec_path
|
25
|
-
File.open("gemspecx.gemspecx", 'w') do |f|
|
26
|
-
f.write spec_gem.to_ruby
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
desc 'Generate a gemspec file.'
|
31
|
-
task :gemspec do
|
32
|
-
spec_dir = File.join( FileUtils.getwd,"*.gemspec")
|
33
|
-
spec_path = Dir.glob( spec_dir ).first
|
34
|
-
spec_gem = Gem::Specification::load(spec_path) do |s|
|
35
|
-
s.version = Trop::VERSION
|
36
|
-
end
|
37
|
-
File.open(spec_path, 'w') do |f|
|
38
|
-
f.write spec_gem.to_ruby
|
39
|
-
end
|
40
|
-
GemVersion.increment_version
|
41
|
-
GemVersion.commit_and_push
|
42
|
-
GemVersion.next_version
|
43
|
-
end
|
44
|
-
|
45
|
-
task :patch do
|
46
|
-
system 'bump patch --replace-in trop.gemspec --replace-in ./lib/trop/version.rb --replace-in next_gem_version'
|
47
|
-
end
|
48
|
-
task :min do
|
49
|
-
system 'bump minor --replace-in trop.gemspec --replace-in ./lib/trop/version.rb --replace-in next_gem_version'
|
50
|
-
end
|
51
|
-
|
52
|
-
task gembox: :build do
|
53
|
-
Dir.chdir('./pkg') do
|
54
|
-
system 'gem inabox *.gem --host=http://localhost:9292 -o '
|
55
|
-
end
|
56
|
-
end
|
57
|
-
#Jeweler::Tasks.new do |gem|
|
58
|
-
# gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
|
59
|
-
# gem.name = 'trop'
|
60
|
-
# gem.homepage = 'http://gitlab.wfschmitt.net/rails/trop'
|
61
|
-
# gem.license = 'MIT'
|
62
|
-
# gem.summary = %(trop is troppuS)
|
63
|
-
# gem.description = %(trop is support)
|
64
|
-
# gem.email = 'wfschmittx@gmail.com'
|
65
|
-
# gem.authors = ['werner'gcaa
|
66
|
-
# gem.files = %w[LICENSE.txt README.md README.rakes.md Gemfile Rakefile TODO.md VERSION lib/trop/config.bundler.tpl lib/trop/core-ext.rb lib/trop/file_finder.rb lib/trop/filefind.rb lib/trop/infogit.rb lib/trop/os.rb lib/trop/shell_deb_verb.rb lib/trop/version.rb]
|
67
|
-
#end
|
68
|
-
#$SAFE = 0
|
69
|
-
#Jeweler::RubygemsDotOrgTasks.new
|
70
|
-
|
71
|
-
|
72
16
|
require 'rake/testtask'
|
73
17
|
Rake::TestTask.new(:test) do |test|
|
74
18
|
test.libs << 'lib' << 'test'
|
@@ -76,34 +20,11 @@ Rake::TestTask.new(:test) do |test|
|
|
76
20
|
test.verbose = true
|
77
21
|
end
|
78
22
|
|
79
|
-
task :nexta do
|
80
|
-
puts 'hallo nexta'
|
81
|
-
puts `rake patch`
|
82
|
-
puts `rake gemspec`
|
83
|
-
puts `git add --all`
|
84
|
-
puts `git commit -m"save" --all`
|
85
|
-
puts `git save`
|
86
|
-
puts `git push`
|
87
|
-
# puts `git commit -m"save"`
|
88
|
-
end
|
89
|
-
|
90
|
-
task next: %i[test build] do
|
91
|
-
Rake::Task['nexta'].execute
|
92
|
-
Rake::Task['build'].execute
|
93
|
-
Rake::Task['install'].execute
|
94
|
-
puts `gem inabox`
|
95
|
-
end
|
96
|
-
|
97
|
-
desc 'prepare deployment in public'
|
98
|
-
task :deploy do
|
99
|
-
`mkdir -p ./public`
|
100
|
-
FileUtils.cp(%w[LICENSE.txt README.md README.rakes.md TODO.md], 'public', verbose: true)
|
101
|
-
end
|
102
|
-
|
103
23
|
desc 'Code coverage detail'
|
104
24
|
task :simplecov do
|
105
25
|
ENV['COVERAGE'] = 'true'
|
106
26
|
Rake::Task['test'].execute
|
107
27
|
end
|
108
28
|
|
29
|
+
|
109
30
|
task default: :test
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.0
|
data/bin/setup
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/bin/bash
|
2
2
|
|
3
|
-
IFS
|
3
|
+
IFS=$/
|
4
4
|
|
5
5
|
if [[ -f .envrc.example ]] && ! [[ -f .envrc ]]; then
|
6
6
|
cp -v .envrc.example .envrc
|
@@ -10,6 +10,8 @@ if [[ -f .envrc.local.example ]] && ! [[ -f .envrc.local ]]; then
|
|
10
10
|
cp -v .envrc.local.example .envrc.local
|
11
11
|
fi
|
12
12
|
|
13
|
+
gem inabox --host=http://localhost:9292
|
14
|
+
|
13
15
|
touch .envrc .envrc.local
|
14
16
|
# Do any other automated setup that you need to do here
|
15
17
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
#require 'bundler-geminabox/gem_tasks'
|
4
|
+
require 'bundler/endpoint_specification'
|
5
|
+
require 'bump'
|
6
|
+
require 'gem_version'
|
7
|
+
require 'git-version-bump/rake-tasks'
|
8
|
+
|
9
|
+
|
10
|
+
module GemHelper
|
11
|
+
|
12
|
+
def self.rewrite_gemspec
|
13
|
+
spec_path = FileUtils.getwd + '/' + Trop::GEMSPEC_NAME
|
14
|
+
spec_gem = Gem::Specification::load(spec_path)
|
15
|
+
spec_gem.version = GemVersion.next_version
|
16
|
+
File.open(spec_path, 'w') {|f| f.write spec_gem.to_ruby }
|
17
|
+
unless Trop::Sh::silent?
|
18
|
+
File.open("gemspecx.gemspecx", 'w') {|f| f.write spec_gem.to_ruby }
|
19
|
+
end
|
20
|
+
|
21
|
+
return spec_gem.version
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/lib/trop/shell_deb_verb.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'rake/file_utils_ext'
|
3
3
|
require_relative 'core-ext'
|
4
4
|
|
5
|
+
|
5
6
|
#def bash_cmd(cmd)
|
6
7
|
# # sh <<-EOS.strip_heredoc, {verbose: false}
|
7
8
|
# sh <<-EOS << cmd
|
@@ -24,18 +25,32 @@ module Trop
|
|
24
25
|
return !!@@verbose
|
25
26
|
end
|
26
27
|
|
27
|
-
def self.verbose!
|
28
|
-
|
29
|
-
|
30
|
-
ENV['VERBOSE'] = nil
|
31
|
-
else
|
32
|
-
@@verbose = true
|
33
|
-
end
|
28
|
+
def self.verbose!
|
29
|
+
@@verbose = true
|
30
|
+
ENV['VERBOSE'] = "true"
|
34
31
|
return !!@@verbose
|
35
32
|
end
|
36
33
|
|
37
|
-
def self.
|
38
|
-
|
34
|
+
def self.silence_streams(*streams)
|
35
|
+
@@on_hold = streams.collect { |stream| stream.dup }
|
36
|
+
streams.each do |stream|
|
37
|
+
stream.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')
|
38
|
+
stream.sync = true
|
39
|
+
end
|
40
|
+
yield
|
41
|
+
ensure
|
42
|
+
streams.each_with_index do |stream, i|
|
43
|
+
stream.reopen(@@on_hold[i])
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
def self.silent!
|
49
|
+
@@verbose = false
|
50
|
+
@@debug = false
|
51
|
+
ENV['VERBOSE'] = nil
|
52
|
+
ENV['DEBUG'] = nil
|
53
|
+
return !!@@verbose && !!@@debug
|
39
54
|
end
|
40
55
|
|
41
56
|
def self.silent?
|
@@ -57,5 +72,46 @@ module Trop
|
|
57
72
|
end
|
58
73
|
return @@debug
|
59
74
|
end
|
75
|
+
|
76
|
+
|
77
|
+
def self.systemlocal(cmds)
|
78
|
+
cmd = ''
|
79
|
+
return [-1, ''] if cmds.nil? || cmds.blank?
|
80
|
+
|
81
|
+
if cmds.is_a? Array
|
82
|
+
cmds.each {|s| cmd = cmd + s.to_s + ' ' unless s.blank?}
|
83
|
+
else
|
84
|
+
cmd = cmds.to_s
|
85
|
+
end
|
86
|
+
puts "commands: #{cmd} " if Trop::Sh::debug?
|
87
|
+
return [-1, ''] if cmd.blank?
|
88
|
+
puts " #{cmd} ".colorize(:green) if Trop::Sh::verbose?
|
89
|
+
|
90
|
+
# execute system call with return in stdout
|
91
|
+
stdout = `#{cmd}`
|
92
|
+
# silent if successful or not verbose
|
93
|
+
if $CHILD_STATUS.success?
|
94
|
+
puts stdout.to_s.colorize(:green) if Trop::Sh::verbose?
|
95
|
+
return [0, stdout]
|
96
|
+
end
|
97
|
+
# error case
|
98
|
+
puts " #{cmd} ".colorize(:red)
|
99
|
+
puts " #{stdout}".colorize(:red)
|
100
|
+
[-1, stdout]
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.cwd(*cmds)
|
104
|
+
wd = Pathname.new(RAKE_RUN_DIR).join('output')
|
105
|
+
Dir.chdir(wd) do
|
106
|
+
ret, out = systemlocal(cmds)
|
107
|
+
return [ret, out]
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def self.sh(*cmds)
|
112
|
+
ret, out = systemlocal(cmds)
|
113
|
+
return [ret, out]
|
114
|
+
end
|
60
115
|
end
|
61
116
|
end
|
117
|
+
|
data/lib/trop/version.rb
CHANGED
data/rakelib/envrc.rake
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
|
2
|
+
require_relative '../lib/trop'
|
3
|
+
|
4
|
+
namespace :gem do
|
5
|
+
Trop::Sh::silent!
|
6
|
+
DEVNULL = Gem.win_platform? ? "NUL" : "/dev/null"
|
7
|
+
task :gembox do
|
8
|
+
Dir.chdir('./pkg') do
|
9
|
+
Trop::Sh::systemlocal 'gem inabox *.gem --host=http://localhost:9292 -o '
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
task :next do
|
14
|
+
# self.dirty_tree?
|
15
|
+
# Are we in a dirty, dirty tree?
|
16
|
+
Trop::Sh::silent!
|
17
|
+
status,msg = Trop::Sh::systemlocal("git diff --no-ext-diff HEAD 2> #{DEVNULL}" )
|
18
|
+
stat2,msg2 = Trop::Sh::systemlocal("git diff-index --cached HEAD 2> #{DEVNULL}")
|
19
|
+
clean = (!status && !stat2) && msg.empty? && msg2.empty?
|
20
|
+
clean = msg.empty? && msg2.empty?
|
21
|
+
|
22
|
+
if !clean
|
23
|
+
Trop::Sh::verbose!
|
24
|
+
puts msg
|
25
|
+
puts " repo is not clean please stash or commit"
|
26
|
+
else
|
27
|
+
vers1 = vers2 = nil
|
28
|
+
Trop::Sh::silence_streams(STDOUT) {
|
29
|
+
vers1 = GemVersion.increment_version
|
30
|
+
vers2 = GemHelper.rewrite_gemspec
|
31
|
+
GemVersion.commit_and_push {|g| g.add(Trop::VERSION_FILE) && g.add(Trop::GEMSPEC_NAME)}
|
32
|
+
}
|
33
|
+
|
34
|
+
puts "incr. version build and push #{vers1} #{vers2}"
|
35
|
+
Trop::Sh::systemlocal('rake build')
|
36
|
+
Trop::Sh::systemlocal('rake release')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
desc 'prepare deployment in public'
|
41
|
+
task :deploy do
|
42
|
+
`mkdir -p ./public`
|
43
|
+
FileUtils.cp(%w[LICENSE.txt README.md README.rakes.md TODO.md], 'public', verbose: true)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
data/rakelib/raven.rake
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
|
2
|
+
require_relative '../lib/trop'
|
3
|
+
|
4
|
+
|
5
|
+
if ENV['CI'].nil?
|
6
|
+
require 'sentry-raven'
|
7
|
+
Raven.configure do |config| #
|
8
|
+
config.silence_ready = true # unless Shell.cwd
|
9
|
+
envtest = ENV['SENTRY_DSN'] || 'https://1119c5fd4e7e47b7948c62b22b182fdf@sentry.io/1448013'
|
10
|
+
config.dsn = envtest
|
11
|
+
config.release = Trop::InfoGit::GitProject.commit_id
|
12
|
+
config.ssl_verification = false
|
13
|
+
puts "Using dsn #{envtest}".yellow #if Shell.verbose?
|
14
|
+
# puts "with comit-id: #{InfoGit::GitProject.commit_id}".yellow if Shell.verbose?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
namespace :raven do
|
20
|
+
desc 'trigger a dummy event on sentry'
|
21
|
+
task :trigger do
|
22
|
+
return 1 / 0
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
# desc 'register a version to sentry'
|
28
|
+
# task :deploy do
|
29
|
+
# curl http://worker.hbi.ad.harman.com:9000/api/hooks/release/builtin/2/1947c904f6a75a932b0110940151fb12460b699ae1cbb5079c095675197d47e4/
|
30
|
+
# commit_id = InfoGit::GitProject.commit_id
|
31
|
+
# cmd = <<-EOF.tr!("\n", ' ')
|
32
|
+
# curl https://sentry.io/api/hooks/release/builtin/1272992/43a5fce123b9c2f2b8f799489ff49f07ffb615d79e37114e3f29fb03f1e06150/
|
33
|
+
# -X POST
|
34
|
+
# -H 'Content-Type: application/json'
|
35
|
+
# -d '{"version": "#{commit_id}"}'
|
36
|
+
# EOF
|
37
|
+
# puts cmd
|
38
|
+
# system cmd#
|
39
|
+
|
40
|
+
# sh ('
|
41
|
+
# ACCESS_TOKEN=0e63f4a39ce44cf48fb1cc94c75b0ea8
|
42
|
+
# ENVIRONMENT=production
|
43
|
+
# LOCAL_USERNAME=`whoami`
|
44
|
+
# REVISION=`git log -n 1 --pretty=format:"%H"`
|
45
|
+
# curl https://api.rollbar.com/api/1/deploy/ \
|
46
|
+
# -F access_token=$ACCESS_TOKEN \
|
47
|
+
# -F environment=$ENVIRONMENT \
|
48
|
+
# -F revision=$REVISION \
|
49
|
+
# -F local_username=$LOCAL_USERNAME')
|
50
|
+
# end
|
51
|
+
#end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
IDIR = 'doc/internal/'.freeze
|
2
|
+
# frozen_string_literal: false
|
3
|
+
|
4
|
+
desc 'tad (test and docs)'
|
5
|
+
task :tad do
|
6
|
+
puts 'Working in: ' + Dir.getwd.to_str
|
7
|
+
#`cd #{IDIR}; git add *; git commit -m"safe old logs" -a; rm *.log; cd -`
|
8
|
+
#`rake routes | tee #{IDIR}routes.log `
|
9
|
+
# `rake initializers | tee #{IDIR}initializers.log`
|
10
|
+
`rake notes:rb | tee #{IDIR}notes.todo.log`
|
11
|
+
`rake notes:md | tee #{IDIR}notes.md.log`
|
12
|
+
`rake notes:all | tee #{IDIR}notes.log`
|
13
|
+
#`rake stats | tee #{IDIR}stats.log`
|
14
|
+
#`rake test 2>&1 | tee #{IDIR}rake_test.log`
|
15
|
+
#`rake spec 2>&1 | tee #{IDIR}rake_spec.log`
|
16
|
+
#`git add *; git commit -m"safe old logs" -a`
|
17
|
+
end
|
18
|
+
|
19
|
+
namespace :notes do
|
20
|
+
require File.dirname(__FILE__) + '/source_annotation_extractor'
|
21
|
+
|
22
|
+
desc 'Enumerate a custom annotation, specify with ANNOTATION=CUSTOM'
|
23
|
+
task :custom do
|
24
|
+
SourceAnnotationExtractor.enumerate ENV['ANNOTATION']
|
25
|
+
end
|
26
|
+
|
27
|
+
desc 'Enumerate all annotations (use notes:optimize, :fixme, :todo for focus)'
|
28
|
+
task :css do
|
29
|
+
SourceAnnotationExtractor::Annotation.register_extensions('css', 'scss', 'sass', 'less', 'js') { |tag| %r{\/\/\s*(#{tag}):?\s*(.*)$} }
|
30
|
+
SourceAnnotationExtractor.enumerate 'OPTIMIZE|FIXME|TODO', tag: true
|
31
|
+
SourceAnnotationExtractor.enumerate 'TODO|LATER', dirs: %w[doc,lib], tag: true
|
32
|
+
end
|
33
|
+
desc 'Enumerate all markdowns' ## custom annotation, specify with ANNOTATION=CUSTOM
|
34
|
+
task :md do
|
35
|
+
SourceAnnotationExtractor::Annotation.register_extensions('md') { |tag| /(#{tag}):?\s*(.*)$/ }
|
36
|
+
SourceAnnotationExtractor.enumerate 'TODO|LATER|FIXME', dirs: %w(. ../biosonlinux)
|
37
|
+
# dirs: ['.','doc','lib','test','artefacts','../biosonlinux'], tag: true
|
38
|
+
end
|
39
|
+
desc 'Enumerate all rubies' ## custom annotation, specify with ANNOTATION=CUSTOM
|
40
|
+
task :rb do
|
41
|
+
SourceAnnotationExtractor::Annotation.register_extensions('erb') { |tag| /<%\s*#\s*(#{tag}):?\s*(.*?)\s*%>/ }
|
42
|
+
SourceAnnotationExtractor::Annotation.register_extensions('builder', 'rb', 'rake', 'yml', 'yaml', 'ruby') { |tag| /#\s*(#{tag}):?\s*(.*)$/ }
|
43
|
+
SourceAnnotationExtractor.enumerate 'OPTIMIZE|FIXME|TODO|LATER', dirs: %w[app/admin app/controllers bin/lib db config test spec .], tag: true
|
44
|
+
end
|
45
|
+
#
|
46
|
+
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
# Implements the logic behind the rake tasks for annotations like
|
2
|
+
#
|
3
|
+
# rails notes
|
4
|
+
# rails notes:optimize
|
5
|
+
#
|
6
|
+
# and friends. See <tt>rails -T notes</tt> and <tt>railties/lib/rails/tasks/annotations.rake</tt>.
|
7
|
+
#
|
8
|
+
# Annotation objects are triplets <tt>:line</tt>, <tt>:tag</tt>, <tt>:text</tt> that
|
9
|
+
# represent the line where the annotation lives, its tag, and its text. Note
|
10
|
+
# the filename is not stored.
|
11
|
+
#
|
12
|
+
# Annotations are looked for in comments and modulus whitespace they have to
|
13
|
+
# start with the tag optionally followed by a colon. Everything up to the end
|
14
|
+
# of the line (or closing ERB comment tag) is considered to be their text.
|
15
|
+
# noinspection RubyClassVariableUsageInspection
|
16
|
+
class SourceAnnotationExtractor
|
17
|
+
Annotation = Struct.new(:line, :tag, :text) do
|
18
|
+
def self.directories
|
19
|
+
@directories ||= %w[bin doc filter lib templates test] + (ENV['SOURCE_ANNOTATION_DIRECTORIES'] || '').split(',')
|
20
|
+
end
|
21
|
+
|
22
|
+
# Registers additional directories to be included
|
23
|
+
# SourceAnnotationExtractor::Annotation.register_directories("spec","another")
|
24
|
+
def self.register_directories(*dirs)
|
25
|
+
directories.push(*dirs)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.extensions
|
29
|
+
@extensions ||= {}
|
30
|
+
end
|
31
|
+
|
32
|
+
# Registers new Annotations File Extensions
|
33
|
+
# SourceAnnotationExtractor::Annotation.register_extensions("css", "scss", "sass", "less", "js") { |tag| /\/\/\s*(#{tag}):?\s*(.*)$/ }
|
34
|
+
def self.register_extensions(*exts, &block)
|
35
|
+
extensions[/\.(#{exts.join('|')})$/] = block
|
36
|
+
end
|
37
|
+
|
38
|
+
#register_extensions('builder', 'rb', 'rake', 'yml', 'yaml', 'ruby') { |tag| /#\s*(#{tag}):?\s*(.*)$/ }
|
39
|
+
#register_extensions('css', 'js') { |tag| /\/\/\s*(#{tag}):?\s*(.*)$/ }
|
40
|
+
#register_extensions('erb') { |tag| /<%\s*#\s*(#{tag}):?\s*(.*?)\s*%>/ }
|
41
|
+
|
42
|
+
# Returns a representation of the annotation that looks like this:
|
43
|
+
#
|
44
|
+
# [126] [TODO] This algorithm is simple and clearly correct, make it faster.
|
45
|
+
#
|
46
|
+
# If +options+ has a flag <tt>:tag</tt> the tag is shown as in the example above.
|
47
|
+
# Otherwise the string contains just line and text.
|
48
|
+
def to_s(options = {})
|
49
|
+
s = "[#{line.to_s.rjust(options[:indent])}] "
|
50
|
+
s << "[#{tag}] " if options[:tag]
|
51
|
+
s << text
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Prints all annotations with tag +tag+ under the root directories +app+,
|
56
|
+
# +config+, +db+, +lib+, and +test+ (recursively).
|
57
|
+
#
|
58
|
+
# Additional directories may be added using a comma-delimited list set using
|
59
|
+
# <tt>ENV['SOURCE_ANNOTATION_DIRECTORIES']</tt>.
|
60
|
+
#
|
61
|
+
# Directories may also be explicitly set using the <tt>:dirs</tt> key in +options+.
|
62
|
+
#
|
63
|
+
# SourceAnnotationExtractor.enumerate 'TODO|FIXME', dirs: %w(app lib), tag: true
|
64
|
+
#
|
65
|
+
# If +options+ has a <tt>:tag</tt> flag, it will be passed to each annotation's +to_s+.
|
66
|
+
#
|
67
|
+
# See <tt>#find_in</tt> for a list of file extensions that will be taken into account.
|
68
|
+
#
|
69
|
+
# This class method is the single entry point for the rake tasks.
|
70
|
+
def self.enumerate(tag, options = {})
|
71
|
+
extractor = new(tag)
|
72
|
+
dirs = options.delete(:dirs) || Annotation.directories
|
73
|
+
puts dirs.to_s
|
74
|
+
extractor.display(extractor.find(dirs), options)
|
75
|
+
end
|
76
|
+
|
77
|
+
attr_reader :tag
|
78
|
+
|
79
|
+
def initialize(tag)
|
80
|
+
@tag = tag
|
81
|
+
end
|
82
|
+
|
83
|
+
# Returns a hash that maps filenames under +dirs+ (recursively) to arrays
|
84
|
+
# with their annotations.
|
85
|
+
def find(dirs)
|
86
|
+
dirs.inject({}) { |h, dir| h.update(find_in(dir)) }
|
87
|
+
end
|
88
|
+
|
89
|
+
# Returns a hash that maps filenames under +dir+ (recursively) to arrays
|
90
|
+
# with their annotations. Only files with annotations are included. Files
|
91
|
+
# with extension +.builder+, +.rb+, +.rake+, +.yml+, +.yaml+, +.ruby+,
|
92
|
+
# +.css+, +.js+ and +.erb+ are taken into account.
|
93
|
+
def find_in(dir)
|
94
|
+
results = {}
|
95
|
+
|
96
|
+
Dir.glob("#{dir}/*") do |item|
|
97
|
+
next if File.basename(item)[0] == '.'
|
98
|
+
|
99
|
+
if File.directory?(item)
|
100
|
+
results.update(find_in(item))
|
101
|
+
else
|
102
|
+
extension = Annotation.extensions.detect do |regexp, _block|
|
103
|
+
regexp.match(item)
|
104
|
+
end
|
105
|
+
|
106
|
+
if extension
|
107
|
+
pattern = extension.last.call(tag)
|
108
|
+
results.update(extract_annotations_from(item, pattern)) if pattern
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
results
|
114
|
+
end
|
115
|
+
|
116
|
+
# If +file+ is the filename of a file that contains annotations this method returns
|
117
|
+
# a hash with a single entry that maps +file+ to an array of its annotations.
|
118
|
+
# Otherwise it returns an empty hash.
|
119
|
+
def extract_annotations_from(file, pattern)
|
120
|
+
lineno = 0
|
121
|
+
result = File.readlines(file, encoding: Encoding::BINARY).inject([]) do |list, line|
|
122
|
+
lineno += 1
|
123
|
+
next list unless line =~ pattern
|
124
|
+
list << Annotation.new(lineno, Regexp.last_match(1), Regexp.last_match(2))
|
125
|
+
end
|
126
|
+
result.empty? ? {} : { file => result }
|
127
|
+
end
|
128
|
+
|
129
|
+
# Prints the mapping from filenames to annotations in +results+ ordered by filename.
|
130
|
+
# The +options+ hash is passed to each annotation's +to_s+.
|
131
|
+
def display(results, options = {})
|
132
|
+
options[:indent] = results.flat_map { |f, a| a.map(&:line) }.max.to_s.size
|
133
|
+
results.keys.sort.each do |file|
|
134
|
+
puts "#{file}:"
|
135
|
+
results[file].each do |note|
|
136
|
+
puts " * #{note.to_s(options)}"
|
137
|
+
end
|
138
|
+
puts
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.33
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- werner
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
47
|
+
version: '1.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1.
|
54
|
+
version: '1.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: sentry-raven
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -216,10 +216,16 @@ files:
|
|
216
216
|
- lib/trop/core-ext.rb
|
217
217
|
- lib/trop/file_finder.rb
|
218
218
|
- lib/trop/filefind.rb
|
219
|
+
- lib/trop/gem_tasks.rb
|
219
220
|
- lib/trop/infogit.rb
|
220
221
|
- lib/trop/os.rb
|
221
222
|
- lib/trop/shell_deb_verb.rb
|
222
223
|
- lib/trop/version.rb
|
224
|
+
- rakelib/envrc.rake
|
225
|
+
- rakelib/gem_version.rake
|
226
|
+
- rakelib/raven.rake
|
227
|
+
- rakelib/source_annotation.rake
|
228
|
+
- rakelib/source_annotation_extractor.rb
|
223
229
|
homepage: http://gitlab.wfschmitt.net/rails/trop
|
224
230
|
licenses:
|
225
231
|
- MIT
|