rbnotes 0.4.19 → 0.4.20

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6b77835e83f5e0d1397d86e19cde13466b02cfb84d211d2521c7180f2e362861
4
- data.tar.gz: 28821a8a8b53df64caf1c06baa83d61ffd63ae4a739199971e9d560111fc709f
3
+ metadata.gz: c983ec2e16d7e384a8b1ba50cd79ed327a1b69cf415c471becfb19dfd71ba5a2
4
+ data.tar.gz: 2147e0b2c7564fc18f664dbd39ee597dbb642a8e6b42575d71078c5cc85cc8c4
5
5
  SHA512:
6
- metadata.gz: 1aad71bb657dd5c3fd9ec40b493fb3290df4e21a4b333bd8c7bb1cfe0368ae226eff1cee04615fc2f7a5cd7054593de20924d1722e88743d9faf686eb8959298
7
- data.tar.gz: 3c4a1631efceb61c11f90cc3c97dcdeeb9a7b8dee3cc5cabb3b5071af9e97ce01296fefba830a346edfdf7fd28a3a6930793b1d09e185c3d0c2615bf73f18d32
6
+ metadata.gz: f2389e447037b2b9a5a9f2136b435c44cc86bc8f1b84da057ffe9b1474132564034baf539e946dc74aeafa7ba609cd81bd32c1036c60991b1959e691523a3ad9
7
+ data.tar.gz: 257fd944e264ae91780b63a9b37bfca1658943e2098ca4a007e49f05b875e4c496d475e10299496c4d397ffaa6cefe23549267bd3a0a07c8a5d6f658a37e2941
@@ -10,7 +10,7 @@ jobs:
10
10
  - name: Set up Ruby
11
11
  uses: ruby/setup-ruby@v1
12
12
  with:
13
- ruby-version: 3.0.0
13
+ ruby-version: 3.1.0
14
14
  - name: Run the default task
15
15
  run: |
16
16
  gem install bundler -v 2.2.3
data/CHANGELOG.md CHANGED
@@ -5,7 +5,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/)
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/).
6
6
 
7
7
  ## [Unreleased]
8
- - (nothing to record here)
8
+ - Fix issue #133: some tests fail.
9
+
10
+ ## [0.4.20] - 2022-12-03
11
+ ### Added
12
+ - Add a new keyword, `recent`. (#131)
9
13
 
10
14
  ## [0.4.19] - 2021-05-24
11
15
  ### Added
data/Gemfile CHANGED
@@ -6,4 +6,4 @@ gemspec
6
6
  gem "rake", "~> 13.0"
7
7
  gem "minitest", "~> 5.0"
8
8
 
9
- gem 'textrepo', "~> 0.5.8"
9
+ gem 'textrepo', "~> 0.5.9"
data/Gemfile.lock CHANGED
@@ -1,26 +1,26 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rbnotes (0.4.19)
5
- textrepo (~> 0.5.8)
6
- unicode-display_width (~> 1.7)
4
+ rbnotes (0.4.20)
5
+ textrepo (~> 0.5.9)
6
+ unicode-display_width (~> 1.8)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- minitest (5.14.4)
12
- rake (13.0.3)
13
- textrepo (0.5.8)
14
- unicode-display_width (1.7.0)
11
+ minitest (5.16.3)
12
+ rake (13.0.6)
13
+ textrepo (0.5.9)
14
+ unicode-display_width (1.8.0)
15
15
 
16
16
  PLATFORMS
17
- ruby
17
+ x86_64-darwin-22
18
18
 
19
19
  DEPENDENCIES
20
20
  minitest (~> 5.0)
21
21
  rake (~> 13.0)
22
22
  rbnotes!
23
- textrepo (~> 0.5.8)
23
+ textrepo (~> 0.5.9)
24
24
 
25
25
  BUNDLED WITH
26
- 2.2.15
26
+ 2.3.11
data/exe/rbnotes CHANGED
@@ -66,6 +66,7 @@ rescue MissingArgumentError, MissingTimestampError,
66
66
  InvalidTimestampPatternAsDateError,
67
67
  NoConfFileError,
68
68
  NoTemplateFileError,
69
+ UnknownKeywordError,
69
70
  ArgumentError,
70
71
  Errno::EACCES => e
71
72
  puts e.message
@@ -22,6 +22,7 @@ module Rbnotes::Commands
22
22
 
23
23
  def execute(args, conf)
24
24
  stamp = Rbnotes.utils.read_timestamp(args)
25
+ args.shift # drop the 1st argument
25
26
 
26
27
  repo = Textrepo.init(conf)
27
28
  begin
@@ -33,6 +33,7 @@ module Rbnotes::Commands
33
33
  # - "last_week" (or "lw")
34
34
  # - "this_month" (or "tm")
35
35
  # - "last_month" (or "lm")
36
+ # - "recent" (or "re")
36
37
  # - "all"
37
38
  #
38
39
  # Here is several examples of timestamp patterns.
@@ -67,9 +68,11 @@ module Rbnotes::Commands
67
68
 
68
69
  utils = Rbnotes.utils
69
70
  patterns = utils.read_timestamp_patterns(args, enum_week: @opts[:enum_week])
70
-
71
71
  repo = Textrepo.init(conf)
72
- stamps = utils.find_notes(patterns, repo)
72
+
73
+ num_of_notes = utils.specified_recent?(args) ? conf[:number_of_recent_notes] : 0
74
+ stamps = utils.find_notes(patterns, repo, num_of_notes)
75
+
73
76
  output = []
74
77
  if @opts[:verbose]
75
78
  collect_timestamps_by_date(stamps).each { |date, timestamps|
@@ -146,9 +149,12 @@ KEYWORD:
146
149
  - "last_week" (or "lw")
147
150
  - "this_month" (or "tm")
148
151
  - "last_month" (or "lm")
152
+ - "recent" (or "re")
149
153
  - "all"
150
154
 
151
- The keyword, "all" specifies to enumerate all notes in the repository.
155
+ The keyword, "recent" specifies to enumerate recent notes in the
156
+ repository. The keyword, "all" specifies to enumerate all notes in
157
+ the repository.
152
158
 
153
159
  HELP
154
160
  end
@@ -25,7 +25,8 @@ module Rbnotes::Commands
25
25
 
26
26
  repo = Textrepo.init(conf)
27
27
 
28
- stamps = utils.find_notes(patterns, repo)
28
+ num_of_notes = utils.specified_recent?(args) ? conf[:number_of_recent_notes] : 0
29
+ stamps = utils.find_notes(patterns, repo, num_of_notes)
29
30
  return if stamps.empty?
30
31
 
31
32
  list = []
@@ -22,7 +22,7 @@ module Rbnotes::Commands
22
22
  parse_opts(args)
23
23
 
24
24
  repo = Textrepo.init(conf)
25
- stamps = read_timestamps(args, repo)
25
+ stamps = read_timestamps(args, repo, conf)
26
26
  return if stamps.empty?
27
27
 
28
28
  content = stamps.map { |stamp|
@@ -98,13 +98,14 @@ HELP
98
98
  end
99
99
  end
100
100
 
101
- def read_timestamps(args, repo)
101
+ def read_timestamps(args, repo, conf)
102
102
  utils = Rbnotes.utils
103
103
  if args.empty?
104
104
  stamps = utils.read_multiple_timestamps(args)
105
105
  else
106
106
  patterns = utils.read_timestamp_patterns(args)
107
- stamps = utils.find_notes(patterns, repo)
107
+ num_of_notes = utils.specified_recent?(args) ? conf[:number_of_recent_notes] : 0
108
+ stamps = utils.find_notes(patterns, repo, num_of_notes)
108
109
  end
109
110
  stamps
110
111
  end
data/lib/rbnotes/conf.rb CHANGED
@@ -31,6 +31,12 @@ module Rbnotes
31
31
 
32
32
  DIRNAME_COMMON_CONF = ".config"
33
33
 
34
+ ##
35
+ # Name of the number of notes to enumerate. The values is
36
+ # referred only to enumerate the recent notes.
37
+
38
+ NUMBER_OF_RECENT_NOTES = 10
39
+
34
40
  def initialize(path = nil) # :nodoc:
35
41
  @conf = {}
36
42
 
@@ -90,6 +96,7 @@ module Rbnotes
90
96
  :repository_type => :file_system,
91
97
  :repository_name => "notes",
92
98
  :repository_base => "~",
99
+ :number_of_recent_notes => 10,
93
100
  }
94
101
 
95
102
  MODE_POSTFIX = {
data/lib/rbnotes/utils.rb CHANGED
@@ -125,6 +125,8 @@ module Rbnotes
125
125
  # read_timestamp(args) -> String
126
126
 
127
127
  def read_timestamp(args)
128
+ args = args.dup
129
+
128
130
  str = args.shift || read_arg($stdin)
129
131
  raise NoArgumentError if str.nil?
130
132
 
@@ -163,6 +165,9 @@ module Rbnotes
163
165
  # Commands::Pick#execute.
164
166
  #
165
167
  def read_timestamp_patterns(args, enum_week: false)
168
+ args = args.dup
169
+
170
+ validate_arguments(args)
166
171
  patterns = nil
167
172
  if enum_week
168
173
  args.unshift(Time.now.strftime("%Y%m%d")) if args.size == 0
@@ -254,12 +259,13 @@ module Rbnotes
254
259
  # expand_keyword_in_args(Array of Strings) -> Array of Strings
255
260
  #
256
261
  def expand_keyword_in_args(args)
262
+ args = args.dup
257
263
  patterns = []
258
264
  while args.size > 0
259
265
  arg = args.shift
260
- if arg == "all"
266
+ if arg == "all" or arg == "recent" or arg == "re"
261
267
  return [nil]
262
- elsif KEYWORDS.include?(arg)
268
+ elsif valid_keyword?(arg)
263
269
  patterns.concat(expand_keyword(arg))
264
270
  else
265
271
  patterns << arg
@@ -304,13 +310,27 @@ module Rbnotes
304
310
  # given repository. Returns an Array contains Timestamp objects.
305
311
  # The returned Array is sorted by Timestamp.
306
312
  #
313
+ # When a positive number was specified as the 3rd argument, the
314
+ # number was used as the limitation count of enumerated notes.
315
+ #
307
316
  # :call-seq:
308
- # find_notes(Array of timestamp patterns, Textrepo::Repository)
317
+ # find_notes(Array of timestamp patterns, Textrepo::Repository, Integer)
309
318
 
310
- def find_notes(timestamp_patterns, repo)
311
- timestamp_patterns.map { |pat|
319
+ def find_notes(timestamp_patterns, repo, num_of_notes = 0)
320
+ notes = timestamp_patterns.map { |pat|
312
321
  repo.entries(pat)
313
322
  }.flatten.sort{ |a, b| b <=> a }.uniq
323
+
324
+ if num_of_notes > 0
325
+ notes[0,num_of_notes]
326
+ else
327
+ notes
328
+ end
329
+ end
330
+
331
+ def specified_recent?(args)
332
+ validate_arguments(args)
333
+ args.include?("recent") or args.include?("re")
314
334
  end
315
335
 
316
336
  # :stopdoc:
@@ -360,6 +380,30 @@ module Rbnotes
360
380
  str
361
381
  end
362
382
 
383
+ ##
384
+ # Validates arguments as timestamp strings or keywords. If all
385
+ # arguments are valid as timestamp strings or keywords, do
386
+ # nothing. Otherwise, raise an error.
387
+ #
388
+ # :call-seq:
389
+ # validate_arguments(an array of strings) -> nil
390
+ #
391
+ def validate_arguments(args)
392
+ args.each { |arg|
393
+ unless valid_keyword?(arg) or valid_timestamp_pattern?(arg)
394
+ raise InvalidTimestampPatternError, arg
395
+ end
396
+ }
397
+ end
398
+
399
+ def valid_keyword?(arg)
400
+ KEYWORDS.include?(arg)
401
+ end
402
+
403
+ def valid_timestamp_pattern?(arg)
404
+ !/[^_\d]/.match(arg)
405
+ end
406
+
363
407
  ##
364
408
  # Expands a keyword to timestamp strings.
365
409
  #
@@ -388,6 +432,8 @@ module Rbnotes
388
432
  end
389
433
 
390
434
  KEYWORDS = %w(
435
+ all
436
+ recent re
391
437
  today to yesterday ye
392
438
  this_week tw last_week lw
393
439
  this_month tm last_month lm
@@ -1,4 +1,4 @@
1
1
  module Rbnotes
2
- VERSION = "0.4.19"
3
- RELEASE = "2021-05-24"
2
+ VERSION = "0.4.20"
3
+ RELEASE = "2022-12-03"
4
4
  end
data/rbnotes.gemspec CHANGED
@@ -25,6 +25,6 @@ Gem::Specification.new do |spec|
25
25
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
26
  spec.require_paths = ["lib"]
27
27
 
28
- spec.add_dependency "textrepo", "~> 0.5.8"
29
- spec.add_dependency "unicode-display_width", "~> 1.7"
28
+ spec.add_dependency "textrepo", "~> 0.5.9"
29
+ spec.add_dependency "unicode-display_width", "~> 1.8"
30
30
  end
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.4.19
4
+ version: 0.4.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - mnbi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-23 00:00:00.000000000 Z
11
+ date: 2022-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: textrepo
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.5.8
19
+ version: 0.5.9
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.5.8
26
+ version: 0.5.9
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: unicode-display_width
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.7'
33
+ version: '1.8'
34
34
  type: :runtime
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: '1.7'
40
+ version: '1.8'
41
41
  description: Rbnotes allows you to write a note into a single repository.
42
42
  email:
43
43
  - mnbi@users.noreply.github.com
@@ -106,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  - !ruby/object:Gem::Version
107
107
  version: '0'
108
108
  requirements: []
109
- rubygems_version: 3.2.15
109
+ rubygems_version: 3.3.11
110
110
  signing_key:
111
111
  specification_version: 4
112
112
  summary: A simple utility to write a note.