rbnotes 0.3.0 → 0.3.1
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 +4 -0
- data/Gemfile.lock +2 -2
- data/README.md +18 -4
- data/conf/config.yml +7 -0
- data/conf/config_deve.yml +7 -0
- data/conf/config_test.yml +5 -0
- data/exe/rbnotes +30 -2
- data/lib/rbnotes/commands.rb +43 -22
- data/lib/rbnotes/error.rb +0 -11
- data/lib/rbnotes/utils.rb +1 -5
- data/lib/rbnotes/version.rb +2 -2
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2cb54d2116edee3136979232f749434f0b4c068fa5162321bd02dfc96fcd8ece
|
4
|
+
data.tar.gz: 1d3d61b2cafa2d7a2825deb764ee232729e0a7bc8afa51868dbd98db2b7c016f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07a40884e1f0a73bc4b3d70104d98d56814084ce643b86715cf739ece89124da45236cccc4ba881f78e176b8ee318eceaa5974811e4f990d81dce17a018b8a74
|
7
|
+
data.tar.gz: fd70d8ed8d461610cf0f60fe506588414abbd2f9a6fe9deabe8de49ca7a3146d49efcb799b25bb4f66158afc4298643993f1d2a3a7e21d095efe2e7462d8792f
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
7
7
|
## [Unreleased]
|
8
8
|
Nothing to record here.
|
9
9
|
|
10
|
+
## [0.3.1] - 2020-10-30
|
11
|
+
### Added
|
12
|
+
- Add feature to specify configuration file in the command line. (#21)
|
13
|
+
|
10
14
|
## [0.3.0] - 2020-10-29
|
11
15
|
### Added
|
12
16
|
- Add feature to read argument from the standard input. (#27)
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rbnotes (0.3.
|
4
|
+
rbnotes (0.3.1)
|
5
5
|
textrepo (~> 0.4)
|
6
6
|
unicode-display_width (~> 1.7)
|
7
7
|
|
@@ -10,7 +10,7 @@ GEM
|
|
10
10
|
specs:
|
11
11
|
minitest (5.14.2)
|
12
12
|
rake (13.0.1)
|
13
|
-
textrepo (0.4.
|
13
|
+
textrepo (0.4.5)
|
14
14
|
unicode-display_width (1.7.0)
|
15
15
|
|
16
16
|
PLATFORMS
|
data/README.md
CHANGED
@@ -28,6 +28,11 @@ General syntax is:
|
|
28
28
|
rbnotes [global_opts] [command] [command_opts] [args]
|
29
29
|
```
|
30
30
|
|
31
|
+
### Global options
|
32
|
+
|
33
|
+
- "-c CONF_FILE", "--conf"
|
34
|
+
- specifies a configuration file
|
35
|
+
|
31
36
|
### Commands
|
32
37
|
|
33
38
|
- import
|
@@ -57,6 +62,8 @@ Searches the configuration file in the following order:
|
|
57
62
|
|
58
63
|
None of them is found, then the default configuration is used.
|
59
64
|
|
65
|
+
The global option "-c CONF_FILE" will override the location.
|
66
|
+
|
60
67
|
#### Content
|
61
68
|
|
62
69
|
The format of the configuration file must be written in YAML.
|
@@ -75,14 +82,16 @@ A real example:
|
|
75
82
|
|
76
83
|
``` yaml
|
77
84
|
---
|
78
|
-
:run_mode: :
|
85
|
+
:run_mode: :production
|
79
86
|
:repository_type: :file_system
|
80
87
|
:repository_name: "notes"
|
81
88
|
:repository_base: "~"
|
82
|
-
:pager: "bat"
|
89
|
+
:pager: "bat -l md"
|
83
90
|
:editor: "/usr/local/bin/emacsclient"
|
84
91
|
```
|
85
92
|
|
93
|
+
The content is identical to `conf/config.yml`.
|
94
|
+
|
86
95
|
#### Variables
|
87
96
|
|
88
97
|
##### :run-mode (mandatory)
|
@@ -124,8 +133,13 @@ the `:repository_name` value. It would be:
|
|
124
133
|
|
125
134
|
> :repository_base/:repository_name
|
126
135
|
|
127
|
-
The value
|
128
|
-
|
136
|
+
The value is recommended to be an absolute path in the production
|
137
|
+
time, since relative path will be expanded with the current working
|
138
|
+
directory. However, in the development and testing time, the relative
|
139
|
+
path may be useful. See `conf/config_deve.yml` or
|
140
|
+
`conf/config_test.yml`.
|
141
|
+
|
142
|
+
The short-hand notation of the home directory ("~") is usable.
|
129
143
|
|
130
144
|
##### Miscellaneous variables (optional)
|
131
145
|
|
data/conf/config.yml
ADDED
data/exe/rbnotes
CHANGED
@@ -7,17 +7,45 @@ include Rbnotes
|
|
7
7
|
DEBUG = true
|
8
8
|
|
9
9
|
class App
|
10
|
+
def initialize
|
11
|
+
@gopts = {}
|
12
|
+
end
|
13
|
+
|
14
|
+
def options
|
15
|
+
@gopts
|
16
|
+
end
|
17
|
+
|
18
|
+
def parse_global_options(args)
|
19
|
+
while args.size > 0
|
20
|
+
arg = args.shift
|
21
|
+
case arg
|
22
|
+
when "-c", "--conf"
|
23
|
+
file = args.shift
|
24
|
+
raise ArgumentError, args.unshift(arg) if file.nil?
|
25
|
+
file = File.expand_path(file)
|
26
|
+
raise ArgumentError, "no such file: %s" % file unless FileTest.exist?(file)
|
27
|
+
@gopts[:conf_file] = file
|
28
|
+
else
|
29
|
+
args.unshift(arg)
|
30
|
+
break
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
10
35
|
def run(args)
|
11
36
|
cmd = args.shift
|
12
|
-
Commands.load(cmd).execute(args, Rbnotes.conf)
|
37
|
+
Commands.load(cmd).execute(args, Rbnotes.conf(@gopts[:conf_file]))
|
13
38
|
end
|
14
39
|
end
|
15
40
|
|
16
41
|
app = App.new
|
17
42
|
begin
|
43
|
+
app.parse_global_options(ARGV)
|
18
44
|
app.run(ARGV)
|
19
45
|
rescue MissingArgumentError, MissingTimestampError,
|
20
|
-
|
46
|
+
NoEditorError, ProgramAbortError,
|
47
|
+
Textrepo::InvalidTimestampStringError,
|
48
|
+
ArgumentError => e
|
21
49
|
puts e.message
|
22
50
|
exit 1
|
23
51
|
end
|
data/lib/rbnotes/commands.rb
CHANGED
@@ -2,16 +2,20 @@ module Rbnotes
|
|
2
2
|
##
|
3
3
|
# This module defines all command classes of rbnotes. Each command
|
4
4
|
# class must be derived from Rbnotes::Commands::Command class.
|
5
|
+
|
5
6
|
module Commands
|
6
7
|
##
|
7
8
|
# The base class for a command class.
|
9
|
+
|
8
10
|
class Command
|
11
|
+
|
9
12
|
##
|
10
13
|
# :call-seq:
|
11
|
-
# Array, Hash -> nil
|
14
|
+
# execute(Array, Hash) -> nil
|
15
|
+
#
|
12
16
|
# - Array: arguments for each command
|
13
17
|
# - Hash : rbnotes configuration
|
14
|
-
|
18
|
+
|
15
19
|
def execute(args, conf)
|
16
20
|
Builtins::DEFAULT_CMD.new.execute(args, conf)
|
17
21
|
end
|
@@ -28,22 +32,38 @@ module Rbnotes
|
|
28
32
|
class Help < Command
|
29
33
|
def execute(_, _)
|
30
34
|
puts <<USAGE
|
31
|
-
usage: rbnotes [command] [args]
|
35
|
+
usage: rbnotes [-c|--conf CONF_FILE] [command] [args]
|
32
36
|
|
33
37
|
command:
|
34
|
-
add
|
35
|
-
|
36
|
-
|
37
|
-
list
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
38
|
+
add : create a new note
|
39
|
+
import FILE : import a FILE into the repository
|
40
|
+
|
41
|
+
list PATTERN : list notes those timestamp matches PATTERN
|
42
|
+
|
43
|
+
PATTERN must be:
|
44
|
+
(a) full qualified timestamp (with suffix): "20201030160200"
|
45
|
+
(b) year and date part: "20201030"
|
46
|
+
(c) year part only: "2020"
|
47
|
+
(d) date part only: "1030"
|
48
|
+
|
49
|
+
show STAMP : show the note specified with STAMP
|
50
|
+
update STAMP : edit the note with external editor
|
51
|
+
delete STAMP : delete the note specified with STAMP
|
52
|
+
|
53
|
+
STAMP must be a sequence of digits to represent year, date and
|
54
|
+
time (and suffix), such "20201030160200" or "20201030160200_012".
|
55
|
+
|
56
|
+
show/update/delete reads its argument from the standard input when
|
57
|
+
no argument was passed in the command line.
|
58
|
+
|
59
|
+
version : print version
|
60
|
+
help : show help
|
61
|
+
|
62
|
+
commands for development purpose:
|
63
|
+
conf : print the current configuraitons
|
64
|
+
repo : print the repository path
|
65
|
+
stamp TIME_STR : convert TIME_STR into a timestamp
|
66
|
+
time STAMP : convert STAMP into a time string
|
47
67
|
USAGE
|
48
68
|
end
|
49
69
|
end
|
@@ -64,9 +84,9 @@ USAGE
|
|
64
84
|
|
65
85
|
puts case type
|
66
86
|
when :file_system
|
67
|
-
|
87
|
+
File.expand_path(name, base)
|
68
88
|
else
|
69
|
-
|
89
|
+
File.join(base, name)
|
70
90
|
end
|
71
91
|
end
|
72
92
|
end
|
@@ -113,15 +133,16 @@ USAGE
|
|
113
133
|
# :startdoc:
|
114
134
|
|
115
135
|
class << self
|
136
|
+
|
116
137
|
##
|
117
138
|
# Loads a class to perfom the command, then returns an instance
|
118
139
|
# of the class.
|
119
140
|
#
|
120
141
|
# :call-seq:
|
121
|
-
# "import" ->
|
122
|
-
# "list" ->
|
123
|
-
# "show" ->
|
124
|
-
|
142
|
+
# load("import") -> Rbnotes::Commnads::Import
|
143
|
+
# load("list") -> Rbnotes::Commands::List
|
144
|
+
# load("show") -> Rbnotes::Commands::Show
|
145
|
+
|
125
146
|
def load(cmd_name)
|
126
147
|
cmd_name ||= DEFAULT_CMD_NAME
|
127
148
|
klass_name = cmd_name.capitalize
|
data/lib/rbnotes/error.rb
CHANGED
@@ -9,7 +9,6 @@ module Rbnotes
|
|
9
9
|
module ErrMsg
|
10
10
|
MISSING_ARGUMENT = "missing argument: %s"
|
11
11
|
MISSING_TIMESTAMP = "missing timestamp: %s"
|
12
|
-
INVALID_TIMESTAMP_STRING = "invalid string as timestamp: %s"
|
13
12
|
NO_EDITOR = "No editor is available: %s"
|
14
13
|
PROGRAM_ABORT = "External program was aborted: %s"
|
15
14
|
end
|
@@ -35,16 +34,6 @@ module Rbnotes
|
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
38
|
-
##
|
39
|
-
# An error raised if an argument is invalid to convert a
|
40
|
-
# Textrepo::Timestamp object.
|
41
|
-
|
42
|
-
class InvalidTimestampStringError < Error
|
43
|
-
def initialize(str)
|
44
|
-
super(ErrMsg::INVALID_TIMESTAMP_STRING % str)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
37
|
##
|
49
38
|
# An error raised if no external editor is available to edit a note,
|
50
39
|
# even "nano" or "vi".
|
data/lib/rbnotes/utils.rb
CHANGED
@@ -96,11 +96,7 @@ module Rbnotes
|
|
96
96
|
|
97
97
|
def read_timestamp(args)
|
98
98
|
str = args.shift || read_arg($stdin)
|
99
|
-
|
100
|
-
Textrepo::Timestamp.parse_s(str)
|
101
|
-
rescue ArgumentError => _
|
102
|
-
raise InvalidTimestampStringError, str
|
103
|
-
end
|
99
|
+
Textrepo::Timestamp.parse_s(str)
|
104
100
|
end
|
105
101
|
module_function :read_timestamp
|
106
102
|
|
data/lib/rbnotes/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbnotes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mnbi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: textrepo
|
@@ -56,6 +56,9 @@ files:
|
|
56
56
|
- Rakefile
|
57
57
|
- bin/console
|
58
58
|
- bin/setup
|
59
|
+
- conf/config.yml
|
60
|
+
- conf/config_deve.yml
|
61
|
+
- conf/config_test.yml
|
59
62
|
- exe/rbnotes
|
60
63
|
- lib/rbnotes.rb
|
61
64
|
- lib/rbnotes/commands.rb
|