doing 2.1.83 → 2.1.85
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/CHANGELOG.md +20 -0
- data/Gemfile.lock +14 -14
- data/README.md +1 -1
- data/SECURITY.md +13 -0
- data/docs/doc/Array.html +3 -3
- data/docs/doc/BooleanTermParser/Clause.html +3 -3
- data/docs/doc/BooleanTermParser/Operator.html +3 -3
- data/docs/doc/BooleanTermParser/Query.html +3 -3
- data/docs/doc/BooleanTermParser/QueryParser.html +3 -3
- data/docs/doc/BooleanTermParser/QueryTransformer.html +3 -3
- data/docs/doc/BooleanTermParser.html +3 -3
- data/docs/doc/Doing/ArrayCleanup.html +3 -3
- data/docs/doc/Doing/ArrayNestedHash.html +3 -3
- data/docs/doc/Doing/ArrayTags.html +3 -3
- data/docs/doc/Doing/ByDayExport.html +3 -3
- data/docs/doc/Doing/CSVExport.html +3 -3
- data/docs/doc/Doing/CalendarImport.html +3 -3
- data/docs/doc/Doing/Change.html +3 -3
- data/docs/doc/Doing/Changes.html +3 -3
- data/docs/doc/Doing/ChronifyArray.html +3 -3
- data/docs/doc/Doing/ChronifyNumeric.html +3 -3
- data/docs/doc/Doing/ChronifyString.html +3 -3
- data/docs/doc/Doing/Color.html +3 -3
- data/docs/doc/Doing/Completion/BashCompletions.html +3 -3
- data/docs/doc/Doing/Completion/FigCompletions.html +3 -3
- data/docs/doc/Doing/Completion/FishCompletions.html +3 -3
- data/docs/doc/Doing/Completion/StringUtils.html +3 -3
- data/docs/doc/Doing/Completion/ZshCompletions.html +3 -3
- data/docs/doc/Doing/Completion.html +3 -3
- data/docs/doc/Doing/Configuration.html +14 -5
- data/docs/doc/Doing/DayOneRenderer.html +3 -3
- data/docs/doc/Doing/DayoneExport.html +3 -3
- data/docs/doc/Doing/DoingExport.html +3 -3
- data/docs/doc/Doing/DoingImport.html +3 -3
- data/docs/doc/Doing/Entry.html +3 -3
- data/docs/doc/Doing/Errors/DoingNoTraceError.html +3 -3
- data/docs/doc/Doing/Errors/DoingRuntimeError.html +3 -3
- data/docs/doc/Doing/Errors/DoingStandardError.html +3 -3
- data/docs/doc/Doing/Errors/EmptyInput.html +3 -3
- data/docs/doc/Doing/Errors/HistoryLimitError.html +3 -3
- data/docs/doc/Doing/Errors/InvalidPlugin.html +3 -3
- data/docs/doc/Doing/Errors/MissingBackupFile.html +3 -3
- data/docs/doc/Doing/Errors/NoResults.html +3 -3
- data/docs/doc/Doing/Errors/PluginException.html +3 -3
- data/docs/doc/Doing/Errors/UserCancelled.html +3 -3
- data/docs/doc/Doing/Errors/WrongCommand.html +3 -3
- data/docs/doc/Doing/Errors.html +3 -3
- data/docs/doc/Doing/HTMLExport.html +3 -3
- data/docs/doc/Doing/Hooks.html +3 -3
- data/docs/doc/Doing/Item.html +3 -3
- data/docs/doc/Doing/ItemDates.html +3 -3
- data/docs/doc/Doing/ItemQuery.html +3 -3
- data/docs/doc/Doing/ItemState.html +3 -3
- data/docs/doc/Doing/ItemTags.html +3 -3
- data/docs/doc/Doing/Items.html +3 -3
- data/docs/doc/Doing/JSONExport.html +3 -3
- data/docs/doc/Doing/JSONImport.html +3 -3
- data/docs/doc/Doing/Logger.html +3 -3
- data/docs/doc/Doing/MarkdownExport.html +3 -3
- data/docs/doc/Doing/Note.html +3 -3
- data/docs/doc/Doing/Pager.html +3 -3
- data/docs/doc/Doing/Plugins.html +3 -3
- data/docs/doc/Doing/Prompt.html +3 -3
- data/docs/doc/Doing/PromptChoose.html +3 -3
- data/docs/doc/Doing/PromptFZF.html +3 -3
- data/docs/doc/Doing/PromptInput.html +3 -3
- data/docs/doc/Doing/PromptSTD.html +3 -3
- data/docs/doc/Doing/PromptYN.html +3 -3
- data/docs/doc/Doing/Section.html +3 -3
- data/docs/doc/Doing/StringHighlight.html +3 -3
- data/docs/doc/Doing/StringNormalize.html +3 -3
- data/docs/doc/Doing/StringQuery.html +3 -3
- data/docs/doc/Doing/StringTags.html +3 -3
- data/docs/doc/Doing/StringTransform.html +3 -3
- data/docs/doc/Doing/StringTruncate.html +3 -3
- data/docs/doc/Doing/StringURL.html +3 -3
- data/docs/doc/Doing/SymbolNormalize.html +3 -3
- data/docs/doc/Doing/TaskPaperExport.html +3 -3
- data/docs/doc/Doing/TemplateExport.html +3 -3
- data/docs/doc/Doing/TemplateString.html +3 -3
- data/docs/doc/Doing/TimingImport.html +3 -3
- data/docs/doc/Doing/Types.html +3 -3
- data/docs/doc/Doing/Util/Backup.html +3 -3
- data/docs/doc/Doing/Util.html +3 -3
- data/docs/doc/Doing/Version.html +3 -3
- data/docs/doc/Doing/WWID.html +3 -3
- data/docs/doc/Doing.html +4 -4
- data/docs/doc/FalseClass.html +3 -3
- data/docs/doc/GLI/Commands/Help.html +3 -3
- data/docs/doc/GLI/Commands/MarkdownDocumentListener.html +3 -3
- data/docs/doc/GLI/Commands.html +3 -3
- data/docs/doc/GLI.html +3 -3
- data/docs/doc/Hash.html +3 -3
- data/docs/doc/Numeric.html +3 -3
- data/docs/doc/Object.html +3 -3
- data/docs/doc/PhraseParser/Operator.html +3 -3
- data/docs/doc/PhraseParser/PhraseClause.html +3 -3
- data/docs/doc/PhraseParser/Query.html +3 -3
- data/docs/doc/PhraseParser/QueryParser.html +3 -3
- data/docs/doc/PhraseParser/QueryTransformer.html +3 -3
- data/docs/doc/PhraseParser/TermClause.html +3 -3
- data/docs/doc/PhraseParser.html +3 -3
- data/docs/doc/Status.html +3 -3
- data/docs/doc/String.html +3 -3
- data/docs/doc/Symbol.html +3 -3
- data/docs/doc/Time.html +3 -3
- data/docs/doc/TrueClass.html +3 -3
- data/docs/doc/_index.html +4 -4
- data/docs/doc/file.README.html +4 -4
- data/docs/doc/frames.html +10 -5
- data/docs/doc/index.html +4 -4
- data/docs/doc/top-level-namespace.html +3 -3
- data/doing.gemspec +1 -1
- data/doing.rdoc +1 -1
- data/lib/doing/configuration.rb +15 -2
- data/lib/doing/template_string.rb +2 -1
- data/lib/doing/time.rb +4 -4
- data/lib/doing/version.rb +1 -1
- data/lib/doing/wwid/guess.rb +3 -3
- data/lib/doing.rb +2 -2
- data/lib/examples/commands/todo.rb +29 -0
- data/lib/helpers/fzf/go.mod +3 -4
- data/lib/helpers/fzf/go.sum +26 -7
- metadata +6 -4
|
@@ -116,7 +116,8 @@ module Doing
|
|
|
116
116
|
pad = m['width'].to_i
|
|
117
117
|
mark = m['mchar'] || ''
|
|
118
118
|
if placeholder == 'shortdate' && m['width'].nil?
|
|
119
|
-
|
|
119
|
+
fmt_string = Doing.setting('shortdate_format.older', '%m/%d/%y %_I:%M%P', exact: true)
|
|
120
|
+
pad = Date.today.strftime(fmt_string).length
|
|
120
121
|
end
|
|
121
122
|
indent = nil
|
|
122
123
|
if m['ichar']
|
data/lib/doing/time.rb
CHANGED
|
@@ -12,13 +12,13 @@ module Doing
|
|
|
12
12
|
#
|
|
13
13
|
def relative_date
|
|
14
14
|
if self > Date.today.to_time
|
|
15
|
-
strftime('%_I:%M%P')
|
|
15
|
+
strftime(Doing.setting('shortdate_format.today', '%_I:%M%P', exact: true))
|
|
16
16
|
elsif self > (Date.today - 6).to_time
|
|
17
|
-
strftime('%a %_I:%M%P')
|
|
17
|
+
strftime(Doing.setting('shortdate_format.this_week', '%a %_I:%M%P', exact: true))
|
|
18
18
|
elsif year == Date.today.year || (year + 1 == Date.today.year && month > Date.today.month)
|
|
19
|
-
strftime('%m/%d %_I:%M%P')
|
|
19
|
+
strftime(Doing.setting('shortdate_format.this_month', '%m/%d %_I:%M%P', exact: true))
|
|
20
20
|
else
|
|
21
|
-
strftime('%m/%d/%y %_I:%M%P')
|
|
21
|
+
strftime(Doing.setting('shortdate_format.older', '%m/%d/%y %_I:%M%P', exact: true))
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
24
|
|
data/lib/doing/version.rb
CHANGED
data/lib/doing/wwid/guess.rb
CHANGED
|
@@ -27,8 +27,8 @@ module Doing
|
|
|
27
27
|
|
|
28
28
|
section = found ? found.title : nil
|
|
29
29
|
|
|
30
|
-
if suggest
|
|
31
|
-
Doing.logger.debug('Match:', %(Assuming "#{
|
|
30
|
+
if section && suggest
|
|
31
|
+
Doing.logger.debug('Match:', %(Assuming "#{section}" from "#{frag}"))
|
|
32
32
|
return section
|
|
33
33
|
end
|
|
34
34
|
|
|
@@ -53,7 +53,7 @@ module Doing
|
|
|
53
53
|
|
|
54
54
|
raise Errors::InvalidSection.new("unknown section #{frag.bold.white}", topic: 'Missing:')
|
|
55
55
|
end
|
|
56
|
-
section ? section.cap_first :
|
|
56
|
+
section ? section.cap_first : nil
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
##
|
data/lib/doing.rb
CHANGED
|
@@ -106,14 +106,14 @@ module Doing
|
|
|
106
106
|
## @param default A default value to return if the
|
|
107
107
|
## provided path returns nil result
|
|
108
108
|
##
|
|
109
|
-
def setting(keypath, default = nil)
|
|
109
|
+
def setting(keypath, default = nil, exact: false)
|
|
110
110
|
cfg = config.settings
|
|
111
111
|
case keypath
|
|
112
112
|
when Array
|
|
113
113
|
cfg.dig(*keypath) || default
|
|
114
114
|
when String
|
|
115
115
|
unless keypath =~ /^[.*]?$/
|
|
116
|
-
real_path = config.resolve_key_path(keypath, create: false)
|
|
116
|
+
real_path = config.resolve_key_path(keypath, create: false, distance: 0, exact: exact)
|
|
117
117
|
return default unless real_path&.count&.positive?
|
|
118
118
|
|
|
119
119
|
cfg = cfg.dig(*real_path)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# @@todo
|
|
4
|
+
desc 'Add an item as a Todo'
|
|
5
|
+
long_desc 'Adds an item to a Todo section, and tags it with @todo'
|
|
6
|
+
arg_name 'ENTRY'
|
|
7
|
+
command :todo do |c|
|
|
8
|
+
c.example 'doing todo "Something I\'ll think about tomorrow"', desc: 'Add an entry to the Todo section with tag @todo'
|
|
9
|
+
c.example 'doing later -e', desc: 'Open $EDITOR to create an entry and optional note'
|
|
10
|
+
|
|
11
|
+
c.desc "Edit entry with #{Doing::Util.default_editor}"
|
|
12
|
+
c.switch %i[e editor], negatable: false, default_value: false
|
|
13
|
+
|
|
14
|
+
c.desc 'Note'
|
|
15
|
+
c.arg_name 'TEXT'
|
|
16
|
+
c.flag %i[n note]
|
|
17
|
+
|
|
18
|
+
c.desc 'Prompt for note via multi-line input'
|
|
19
|
+
c.switch %i[ask], negatable: false, default_value: false
|
|
20
|
+
|
|
21
|
+
c.action do |global_options, options, args|
|
|
22
|
+
cmd = commands[:now]
|
|
23
|
+
options[:section] = 'Todo'
|
|
24
|
+
options[:finish_last] = false
|
|
25
|
+
action = cmd.send(:get_action, nil)
|
|
26
|
+
string = args.join(' ').add_tags('todo')
|
|
27
|
+
action.call(global_options, options, [string])
|
|
28
|
+
end
|
|
29
|
+
end
|
data/lib/helpers/fzf/go.mod
CHANGED
|
@@ -8,10 +8,9 @@ require (
|
|
|
8
8
|
github.com/mattn/go-shellwords v1.0.12
|
|
9
9
|
github.com/rivo/uniseg v0.2.0
|
|
10
10
|
github.com/saracen/walker v0.1.2
|
|
11
|
-
golang.org/x/
|
|
12
|
-
golang.org/x/
|
|
13
|
-
golang.org/x/
|
|
14
|
-
golang.org/x/text v0.3.6 // indirect
|
|
11
|
+
golang.org/x/sys v0.1.0
|
|
12
|
+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
|
|
13
|
+
golang.org/x/text v0.3.8 // indirect
|
|
15
14
|
)
|
|
16
15
|
|
|
17
16
|
go 1.13
|
data/lib/helpers/fzf/go.sum
CHANGED
|
@@ -16,16 +16,35 @@ github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
|
|
16
16
|
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
|
17
17
|
github.com/saracen/walker v0.1.2 h1:/o1TxP82n8thLvmL4GpJXduYaRmJ7qXp8u9dSlV0zmo=
|
|
18
18
|
github.com/saracen/walker v0.1.2/go.mod h1:0oKYMsKVhSJ+ful4p/XbjvXbMgLEkLITZaxozsl4CGE=
|
|
19
|
+
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
|
20
|
+
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
|
21
|
+
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
|
22
|
+
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
|
23
|
+
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
24
|
+
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
|
25
|
+
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
|
26
|
+
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
19
27
|
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
20
|
-
golang.org/x/sync v0.0.0-
|
|
21
|
-
golang.org/x/sync v0.0.0-
|
|
28
|
+
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=
|
|
29
|
+
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
30
|
+
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
22
31
|
golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
23
32
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
24
|
-
golang.org/x/sys v0.0.0-
|
|
33
|
+
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
25
34
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
26
|
-
golang.org/x/
|
|
27
|
-
golang.org/x/
|
|
35
|
+
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
36
|
+
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
37
|
+
golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
|
|
38
|
+
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
39
|
+
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
|
40
|
+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
|
41
|
+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
|
28
42
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
|
29
|
-
golang.org/x/text v0.3.
|
|
30
|
-
golang.org/x/text v0.3.
|
|
43
|
+
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|
44
|
+
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
|
45
|
+
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
|
|
46
|
+
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
|
31
47
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
48
|
+
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
|
49
|
+
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
|
50
|
+
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: doing
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.1.
|
|
4
|
+
version: 2.1.85
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brett Terpstra
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2024-03-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: github-markup
|
|
@@ -147,7 +147,7 @@ dependencies:
|
|
|
147
147
|
version: '0.9'
|
|
148
148
|
- - ">="
|
|
149
149
|
- !ruby/object:Gem::Version
|
|
150
|
-
version: 0.9.
|
|
150
|
+
version: 0.9.36
|
|
151
151
|
type: :development
|
|
152
152
|
prerelease: false
|
|
153
153
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -157,7 +157,7 @@ dependencies:
|
|
|
157
157
|
version: '0.9'
|
|
158
158
|
- - ">="
|
|
159
159
|
- !ruby/object:Gem::Version
|
|
160
|
-
version: 0.9.
|
|
160
|
+
version: 0.9.36
|
|
161
161
|
- !ruby/object:Gem::Dependency
|
|
162
162
|
name: chronic
|
|
163
163
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -433,6 +433,7 @@ files:
|
|
|
433
433
|
- LICENSE.txt
|
|
434
434
|
- README.md
|
|
435
435
|
- Rakefile
|
|
436
|
+
- SECURITY.md
|
|
436
437
|
- _config.yml
|
|
437
438
|
- bin/commands/again.rb
|
|
438
439
|
- bin/commands/archive.rb
|
|
@@ -724,6 +725,7 @@ files:
|
|
|
724
725
|
- lib/doing/wwid/wwidutil.rb
|
|
725
726
|
- lib/examples/commands/autotag.rb
|
|
726
727
|
- lib/examples/commands/later.rb
|
|
728
|
+
- lib/examples/commands/todo.rb
|
|
727
729
|
- lib/examples/commands/wiki.rb
|
|
728
730
|
- lib/examples/plugins/capture_thing_import.rb
|
|
729
731
|
- lib/examples/plugins/hooks.rb
|