mvz-dnote 1.7.2 → 1.8.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 +5 -5
- data/HISTORY.rdoc +5 -0
- data/README.md +119 -0
- data/bin/dnote +11 -2
- data/lib/dnote.rb +2 -0
- data/lib/dnote/core_ext.rb +11 -67
- data/lib/dnote/format.rb +35 -51
- data/lib/dnote/note.rb +17 -42
- data/lib/dnote/notes.rb +60 -101
- data/lib/dnote/rake/dnotetask.rb +22 -38
- data/lib/dnote/session.rb +49 -70
- data/lib/dnote/version.rb +3 -15
- metadata +22 -13
- data/README.rdoc +0 -113
- data/lib/dnote.yml +0 -1
- data/try/sample.bas +0 -7
- data/try/sample.js +0 -11
- data/try/sample.rb +0 -11
data/lib/dnote/rake/dnotetask.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rspec/core/rake_task'
|
2
4
|
|
5
|
+
module DNote
|
3
6
|
# = Developmer's Notes Rake Task
|
4
7
|
#
|
5
8
|
class RakeTask < Rake::TaskLib
|
6
|
-
|
7
9
|
require 'rake/clean'
|
8
10
|
|
9
11
|
# Default note labels to looked for in source code.
|
10
|
-
DEFAULT_LABELS =
|
12
|
+
DEFAULT_LABELS = %w(TODO FIXME OPTIMIZE DEPRECATE).freeze
|
11
13
|
|
12
14
|
# File paths to search.
|
13
15
|
attr_accessor :files
|
@@ -26,27 +28,24 @@ module DNote
|
|
26
28
|
|
27
29
|
# Output directory to save notes file. Defaults to <tt>dnote/</tt> under
|
28
30
|
# the project log directory (eg. <tt>log/dnote/</tt>).
|
29
|
-
|
31
|
+
attr_reader :output
|
30
32
|
|
31
33
|
# Title to use if temaplte can use it.
|
32
34
|
attr_accessor :title
|
33
35
|
|
34
|
-
#
|
35
36
|
def output=(path)
|
36
37
|
@output = Pathname.new(path)
|
37
38
|
end
|
38
39
|
|
39
|
-
#
|
40
40
|
def init
|
41
41
|
require 'dnote'
|
42
42
|
require 'dnote/format'
|
43
|
-
@files =
|
43
|
+
@files = '**/*.rb'
|
44
44
|
@output = 'log/dnote'
|
45
45
|
@formats = ['index']
|
46
|
-
@labels = nil
|
46
|
+
@labels = nil
|
47
47
|
end
|
48
48
|
|
49
|
-
#
|
50
49
|
def define
|
51
50
|
desc "Collect Developer's Notes"
|
52
51
|
task 'dnote' do
|
@@ -55,7 +54,7 @@ module DNote
|
|
55
54
|
task 'dnote:clobber' do
|
56
55
|
clean
|
57
56
|
end
|
58
|
-
task :
|
57
|
+
task clobber: ['dnote:clobber']
|
59
58
|
end
|
60
59
|
|
61
60
|
# Generate notes document(s).
|
@@ -66,51 +65,36 @@ module DNote
|
|
66
65
|
s.paths = files
|
67
66
|
s.exclude = exclude
|
68
67
|
s.ignore = ignore
|
69
|
-
s.labels = labels
|
68
|
+
s.labels = labels
|
70
69
|
s.title = title
|
71
70
|
s.output = output
|
72
|
-
s.dryrun = application.options.dryrun #trial?
|
71
|
+
s.dryrun = application.options.dryrun # trial?
|
73
72
|
end
|
74
73
|
|
75
74
|
formats.each do |format|
|
76
75
|
if format == 'index'
|
77
76
|
session.format = 'html'
|
78
|
-
session.output = File.join(
|
77
|
+
session.output = File.join(output, 'index.html')
|
79
78
|
else
|
80
79
|
session.format = format
|
81
80
|
end
|
82
81
|
session.run
|
83
|
-
report "Updated #{output.to_s.sub(Dir.pwd+'/','')}" unless trial?
|
82
|
+
report "Updated #{output.to_s.sub(Dir.pwd + '/', '')}" unless trial?
|
84
83
|
end
|
85
84
|
end
|
86
85
|
|
87
|
-
# Reset output directory, marking it as out-of-date.
|
88
|
-
def reset
|
89
|
-
#if File.directory?(output)
|
90
|
-
File.utime(0,0,output) unless $NOOP
|
91
|
-
puts "Marked #{output} as out-of-date"
|
92
|
-
#end
|
93
|
-
end
|
94
|
-
|
95
86
|
# Remove output files.
|
96
87
|
def clean
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
file = (output + "notes.#{ext}").to_s
|
104
|
-
end
|
105
|
-
rm(file)
|
106
|
-
report "Removed #{output}"
|
88
|
+
formats.each do |format|
|
89
|
+
if format == 'index'
|
90
|
+
file = (output + 'index.html').to_s
|
91
|
+
else
|
92
|
+
ext = ::DNote::Format::EXTENSIONS[format] || format
|
93
|
+
file = (output + "notes.#{ext}").to_s
|
107
94
|
end
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
#end
|
95
|
+
rm(file)
|
96
|
+
report "Removed #{output}"
|
97
|
+
end
|
112
98
|
end
|
113
|
-
|
114
99
|
end
|
115
|
-
|
116
100
|
end
|
data/lib/dnote/session.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
require 'dnote/core_ext'
|
4
|
+
require 'dnote/notes'
|
5
|
+
require 'dnote/format'
|
6
6
|
|
7
|
+
module DNote
|
7
8
|
# User session which is used by commandline interface.
|
8
9
|
#
|
9
10
|
# By making this a class it makes it easy for external
|
@@ -11,13 +12,12 @@ module DNote
|
|
11
12
|
# calling the commandline, but without the need to shellout.
|
12
13
|
#
|
13
14
|
class Session
|
14
|
-
|
15
15
|
# Directory relative to this script. This is used
|
16
16
|
# to lookup the available format templates.
|
17
17
|
DIR = File.dirname(__FILE__)
|
18
18
|
|
19
19
|
# Default format.
|
20
|
-
DEFAULT_FORMAT
|
20
|
+
DEFAULT_FORMAT = 'text'
|
21
21
|
|
22
22
|
# Default title.
|
23
23
|
DEFAULT_TITLE = "Developer's Notes"
|
@@ -59,7 +59,7 @@ module DNote
|
|
59
59
|
|
60
60
|
# String template for line URLs (mainly for HTML format). For example,
|
61
61
|
# DNote uses GitHub so we could use a link template:
|
62
|
-
#
|
62
|
+
#
|
63
63
|
# "https://github.com/rubyworks/dnote/blob/master/%s#L%s"
|
64
64
|
#
|
65
65
|
attr_accessor :url
|
@@ -67,13 +67,13 @@ module DNote
|
|
67
67
|
# Number of lines of context to display. The default is zero.
|
68
68
|
attr_accessor :context
|
69
69
|
|
70
|
-
|
70
|
+
private
|
71
71
|
|
72
72
|
# New Session.
|
73
|
-
def initialize(options={})
|
73
|
+
def initialize(options = {})
|
74
74
|
options ||= {}
|
75
75
|
initialize_defaults
|
76
|
-
options.each{ |k,v| __send__("#{k}=", v) }
|
76
|
+
options.each { |k, v| __send__("#{k}=", v) }
|
77
77
|
yield(self) if block_given?
|
78
78
|
end
|
79
79
|
|
@@ -91,7 +91,7 @@ module DNote
|
|
91
91
|
@context = 0
|
92
92
|
end
|
93
93
|
|
94
|
-
|
94
|
+
public
|
95
95
|
|
96
96
|
# Set exclude list ensuring that the value is an array.
|
97
97
|
def exclude=(list)
|
@@ -105,7 +105,7 @@ module DNote
|
|
105
105
|
|
106
106
|
# Run session.
|
107
107
|
def run
|
108
|
-
notes = Notes.new(files, :labels
|
108
|
+
notes = Notes.new(files, labels: labels, colon: colon, marker: marker, url: url, context: context)
|
109
109
|
formatter = Format.new(notes) do |f|
|
110
110
|
f.format = format
|
111
111
|
f.template = template
|
@@ -122,13 +122,13 @@ module DNote
|
|
122
122
|
list = [paths].flatten.compact
|
123
123
|
list = ['**/*.rb'] if list.empty?
|
124
124
|
list = glob(list)
|
125
|
-
list
|
125
|
+
list -= glob(exclude)
|
126
126
|
list.reject do |path|
|
127
|
-
path.split('/').any?{ |part| ignore.any?{ |ig| File.fnmatch?(ig, part) } }
|
127
|
+
path.split('/').any? { |part| ignore.any? { |ig| File.fnmatch?(ig, part) } }
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
131
|
-
# Collect the file glob of each path given. If
|
131
|
+
# Collect the file glob of each path given. If
|
132
132
|
# a path is a directory, inclue all content.
|
133
133
|
def glob(paths)
|
134
134
|
paths.map do |path|
|
@@ -140,18 +140,6 @@ module DNote
|
|
140
140
|
end.flatten.uniq
|
141
141
|
end
|
142
142
|
|
143
|
-
# Set special labels.
|
144
|
-
#def labels=(labels)
|
145
|
-
# @labels = (
|
146
|
-
# case labels
|
147
|
-
# when String
|
148
|
-
# labels.split(/[:;,]/)
|
149
|
-
# else
|
150
|
-
# labels = [labels].flatten.compact.uniq.map{ |s| s.to_s }
|
151
|
-
# end
|
152
|
-
# )
|
153
|
-
#end
|
154
|
-
|
155
143
|
# Commandline interface.
|
156
144
|
def self.main(*argv)
|
157
145
|
require 'optparse'
|
@@ -161,109 +149,100 @@ module DNote
|
|
161
149
|
opts = OptionParser.new do |opt|
|
162
150
|
opt.banner = "DNote v#{DNote::VERSION}"
|
163
151
|
|
164
|
-
opt.separator(
|
152
|
+
opt.separator(' ')
|
165
153
|
opt.separator("USAGE:\n dnote [OPTIONS] path1 [path2 ...]")
|
166
154
|
|
167
|
-
opt.separator(
|
168
|
-
opt.separator(
|
155
|
+
opt.separator(' ')
|
156
|
+
opt.separator('OUTPUT FORMAT: (choose one)')
|
169
157
|
|
170
|
-
opt.on(
|
158
|
+
opt.on('--format', '-f NAME', 'select a format [text]') do |format|
|
171
159
|
session.format = format
|
172
160
|
end
|
173
161
|
|
174
|
-
opt.on(
|
162
|
+
opt.on('--custom', '-C FILE', 'use a custom ERB template') do |file|
|
175
163
|
session.format = 'custom'
|
176
164
|
session.template = file
|
177
165
|
end
|
178
166
|
|
179
|
-
opt.on(
|
167
|
+
opt.on('--file', 'shortcut for text/file format') do
|
180
168
|
session.format = 'text/file'
|
181
169
|
end
|
182
170
|
|
183
|
-
opt.on(
|
171
|
+
opt.on('--list', 'shortcut for text/list format') do
|
184
172
|
session.format = 'text/list'
|
185
173
|
end
|
186
174
|
|
187
|
-
opt.separator(
|
188
|
-
opt.separator(
|
175
|
+
opt.separator(' ')
|
176
|
+
opt.separator('OTHER OPTIONS:')
|
189
177
|
|
190
|
-
opt.on(
|
178
|
+
opt.on('--label', '-l LABEL', 'labels to collect') do |lbl|
|
191
179
|
session.labels.concat(lbl.split(':'))
|
192
180
|
end
|
193
181
|
|
194
|
-
opt.on(
|
182
|
+
opt.on('--[no-]colon', 'match labels with/without colon suffix') do |val|
|
195
183
|
session.colon = val
|
196
184
|
end
|
197
185
|
|
198
|
-
opt.on(
|
199
|
-
|
186
|
+
opt.on('--marker', '-m MARK', 'alternative remark marker') do |mark|
|
187
|
+
session.marker = mark
|
200
188
|
end
|
201
189
|
|
202
|
-
opt.on(
|
203
|
-
|
190
|
+
opt.on('--url', '-u TEMPLATE', 'url template for line entries (for HTML)') do |url|
|
191
|
+
session.url = url
|
204
192
|
end
|
205
193
|
|
206
|
-
opt.on(
|
207
|
-
|
194
|
+
opt.on('--context', '-c INTEGER', 'number of lines of context to display') do |int|
|
195
|
+
session.context = int.to_i
|
208
196
|
end
|
209
197
|
|
210
|
-
opt.on(
|
198
|
+
opt.on('--exclude', '-x PATH', 'exclude file or directory') do |path|
|
211
199
|
session.exclude << path
|
212
200
|
end
|
213
201
|
|
214
|
-
opt.on(
|
202
|
+
opt.on('--ignore', '-i NAME', 'ignore file based on any part of pathname') do |name|
|
215
203
|
session.ignore << name
|
216
204
|
end
|
217
205
|
|
218
|
-
opt.on(
|
206
|
+
opt.on('--title', '-t TITLE', 'title to use in header') do |title|
|
219
207
|
session.title = title
|
220
208
|
end
|
221
209
|
|
222
|
-
opt.on(
|
210
|
+
opt.on('--output', '-o PATH', 'save to file or directory') do |path|
|
223
211
|
session.output = path
|
224
212
|
end
|
225
213
|
|
226
|
-
opt.on(
|
214
|
+
opt.on('--dryrun', '-n', 'do not actually write to disk') do
|
227
215
|
session.dryrun = true
|
228
216
|
end
|
229
217
|
|
230
|
-
opt.on(
|
218
|
+
opt.on('--debug', 'debug mode') do
|
231
219
|
$DEBUG = true
|
232
220
|
$VERBOSE = true
|
233
221
|
end
|
234
222
|
|
235
|
-
opt.separator(
|
236
|
-
opt.separator(
|
223
|
+
opt.separator(' ')
|
224
|
+
opt.separator('COMMAND OPTIONS:')
|
237
225
|
|
238
|
-
opt.on_tail('--templates',
|
226
|
+
opt.on_tail('--templates', '-T', 'list available format templates') do
|
239
227
|
tdir = File.join(DIR, 'templates')
|
240
228
|
tfiles = Dir[File.join(tdir, '**/*.erb')]
|
241
|
-
tnames = tfiles.map{ |tname| tname.sub(tdir+'/', '').chomp('.erb') }
|
242
|
-
groups = tnames.group_by{ |tname| tname.split('/').first }
|
243
|
-
groups.sort.each do |(
|
244
|
-
puts(
|
229
|
+
tnames = tfiles.map { |tname| tname.sub(tdir + '/', '').chomp('.erb') }
|
230
|
+
groups = tnames.group_by { |tname| tname.split('/').first }
|
231
|
+
groups.sort.each do |(_type, names)|
|
232
|
+
puts('%-18s ' * names.size % names.sort)
|
245
233
|
end
|
246
234
|
exit
|
247
235
|
end
|
248
236
|
|
249
|
-
opt.on_tail('--help', '-h',
|
237
|
+
opt.on_tail('--help', '-h', 'show this help information') do
|
250
238
|
puts opt
|
251
239
|
exit
|
252
240
|
end
|
253
241
|
end
|
254
242
|
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
session.run
|
259
|
-
rescue => err
|
260
|
-
raise err if $DEBUG
|
261
|
-
puts err
|
262
|
-
exit 1
|
263
|
-
end
|
243
|
+
opts.parse!(argv)
|
244
|
+
session.paths.replace(argv)
|
245
|
+
session.run
|
264
246
|
end
|
265
|
-
|
266
247
|
end
|
267
|
-
|
268
248
|
end
|
269
|
-
|
data/lib/dnote/version.rb
CHANGED
@@ -1,17 +1,5 @@
|
|
1
|
-
|
2
|
-
VERSION = '1.7.2'
|
3
|
-
|
4
|
-
#
|
5
|
-
def self.metadata
|
6
|
-
@metadata ||= (
|
7
|
-
require 'yaml'
|
8
|
-
YAML.load_file(File.dirname(__FILE__) + '/../dnote.yml')
|
9
|
-
)
|
10
|
-
end
|
11
|
-
|
12
|
-
#
|
13
|
-
def self.const_missing(name)
|
14
|
-
metadata[name.to_s.downcase] || super(name)
|
15
|
-
end
|
1
|
+
# frozen_string_literal: true
|
16
2
|
|
3
|
+
module DNote
|
4
|
+
VERSION = '1.8.0'
|
17
5
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mvz-dnote
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Sawyer
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2018-12-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aruba
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '3.0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
41
|
+
version: '3.0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rake
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,6 +67,20 @@ dependencies:
|
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '3.5'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: simplecov
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 0.16.1
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 0.16.1
|
70
84
|
description: |2
|
71
85
|
DNote makes it easy to extract developer's notes from source code,
|
72
86
|
and supports almost any language.
|
@@ -77,15 +91,14 @@ executables:
|
|
77
91
|
extensions: []
|
78
92
|
extra_rdoc_files:
|
79
93
|
- HISTORY.rdoc
|
80
|
-
- README.
|
94
|
+
- README.md
|
81
95
|
- COPYING.rdoc
|
82
96
|
files:
|
83
97
|
- COPYING.rdoc
|
84
98
|
- HISTORY.rdoc
|
85
|
-
- README.
|
99
|
+
- README.md
|
86
100
|
- bin/dnote
|
87
101
|
- lib/dnote.rb
|
88
|
-
- lib/dnote.yml
|
89
102
|
- lib/dnote/core_ext.rb
|
90
103
|
- lib/dnote/format.rb
|
91
104
|
- lib/dnote/note.rb
|
@@ -129,9 +142,6 @@ files:
|
|
129
142
|
- lib/dnote/templates/yaml/label.erb
|
130
143
|
- lib/dnote/templates/yaml/list.erb
|
131
144
|
- lib/dnote/version.rb
|
132
|
-
- try/sample.bas
|
133
|
-
- try/sample.js
|
134
|
-
- try/sample.rb
|
135
145
|
homepage: https://github.com/mvz/dnote
|
136
146
|
licenses: []
|
137
147
|
metadata: {}
|
@@ -143,15 +153,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
143
153
|
requirements:
|
144
154
|
- - ">="
|
145
155
|
- !ruby/object:Gem::Version
|
146
|
-
version:
|
156
|
+
version: 2.3.0
|
147
157
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
158
|
requirements:
|
149
159
|
- - ">="
|
150
160
|
- !ruby/object:Gem::Version
|
151
161
|
version: '0'
|
152
162
|
requirements: []
|
153
|
-
|
154
|
-
rubygems_version: 2.6.8
|
163
|
+
rubygems_version: 3.0.1
|
155
164
|
signing_key:
|
156
165
|
specification_version: 4
|
157
166
|
summary: Extract developer's notes from source code.
|