rbnotes 0.4.19 → 0.4.21

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: 29c624241fbfb8377565617bbb8313a225bcade6dbbad9bc22711b1edc44588e
4
+ data.tar.gz: d91950eeeba599c6807860ebfd0c9dbaab235441bced620c1441abc7dbd710e9
5
5
  SHA512:
6
- metadata.gz: 1aad71bb657dd5c3fd9ec40b493fb3290df4e21a4b333bd8c7bb1cfe0368ae226eff1cee04615fc2f7a5cd7054593de20924d1722e88743d9faf686eb8959298
7
- data.tar.gz: 3c4a1631efceb61c11f90cc3c97dcdeeb9a7b8dee3cc5cabb3b5071af9e97ce01296fefba830a346edfdf7fd28a3a6930793b1d09e185c3d0c2615bf73f18d32
6
+ metadata.gz: 992d4ac0aa2c1cef5413ecf6229569f9e080c38a439e548c7728b7e569f8e4e09521d3278041342edfa4e19a1bda2b2f90ce6597683da177cf25bff16baec04c
7
+ data.tar.gz: f9bc08bf6eab09f7183e9d0a8aeb4708ba660a99ceca3867d037f64f1602258aec01be11e2d71a35a78f2684d8f65074c356fe2a3caae2848f43020cb6d888d5
@@ -6,13 +6,11 @@ jobs:
6
6
  build:
7
7
  runs-on: ubuntu-latest
8
8
  steps:
9
- - uses: actions/checkout@v2
9
+ - uses: actions/checkout@v4
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.3
14
+ bundler-cache: true
14
15
  - name: Run the default task
15
- run: |
16
- gem install bundler -v 2.2.3
17
- bundle install
18
- bundle exec rake
16
+ run: bundle exec rake
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ Gemfile.lock
1
2
  *.gem
2
3
  *.rbc
3
4
  /.config
data/CHANGELOG.md CHANGED
@@ -5,7 +5,18 @@ 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
+ - (nothing)
9
+
10
+ ## [0.4.21] - 2022-11-03
11
+ - Use ruby 3.3.5.
12
+ - Remove the codefactor badge from `README.md`
13
+ - Add copyright year (2024) to `LICENSE`.
14
+ - Fix issue #135: incomplete timestamp patterns are acceptable.
15
+ - Fix issue #133: some tests fail.
16
+
17
+ ## [0.4.20] - 2022-12-03
18
+ ### Added
19
+ - Add a new keyword, `recent`. (#131)
9
20
 
10
21
  ## [0.4.19] - 2021-05-24
11
22
  ### Added
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in rbnotes.gemspec
4
4
  gemspec
5
5
 
6
- gem "rake", "~> 13.0"
7
- gem "minitest", "~> 5.0"
6
+ gem "rake", "~> 13.1"
7
+ gem "minitest", "~> 5.20"
8
8
 
9
- gem 'textrepo', "~> 0.5.8"
9
+ gem 'textrepo', "~> 0.5.10"
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2020, 2021 mnbi
3
+ Copyright (c) 2020, 2021, 2024 mnbi
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # Rbnotes
2
2
 
3
3
  [![Build Status](https://github.com/mnbi/rbnotes/workflows/Build/badge.svg)](https://github.com/mnbi/rbnotes/actions?query=workflow%3A"Build")
4
- [![CodeFactor](https://www.codefactor.io/repository/github/mnbi/rbnotes/badge)](https://www.codefactor.io/repository/github/mnbi/rbnotes)
5
4
 
6
5
  Rbnotes is a simple utility to write a note in the single repository.
7
6
 
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.21"
3
+ RELEASE = "2024-11-03"
4
4
  end
data/rbnotes.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.description = %q{Rbnotes allows you to write a note into a single repository.}
11
11
  spec.homepage = "https://github.com/mnbi/rbnotes"
12
12
  spec.license = "MIT"
13
- spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
13
+ spec.required_ruby_version = Gem::Requirement.new(">= 3.3.0")
14
14
 
15
15
  spec.metadata["homepage_uri"] = spec.homepage
16
16
  spec.metadata["source_code_uri"] = "https://github.com/mnbi/rbnotes"
@@ -25,6 +25,8 @@ 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.10"
29
+ spec.add_dependency "unicode-display_width", "~> 2.6"
30
+
31
+ spec.add_development_dependency "bundler", "~> 2.5"
30
32
  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.21
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: 2024-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: textrepo
@@ -16,28 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.5.8
19
+ version: 0.5.10
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.10
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: '2.6'
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: '2.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.5'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.5'
41
55
  description: Rbnotes allows you to write a note into a single repository.
42
56
  email:
43
57
  - mnbi@users.noreply.github.com
@@ -50,7 +64,6 @@ files:
50
64
  - ".gitignore"
51
65
  - CHANGELOG.md
52
66
  - Gemfile
53
- - Gemfile.lock
54
67
  - LICENSE
55
68
  - README.md
56
69
  - Rakefile
@@ -99,14 +112,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
112
  requirements:
100
113
  - - ">="
101
114
  - !ruby/object:Gem::Version
102
- version: 2.7.0
115
+ version: 3.3.0
103
116
  required_rubygems_version: !ruby/object:Gem::Requirement
104
117
  requirements:
105
118
  - - ">="
106
119
  - !ruby/object:Gem::Version
107
120
  version: '0'
108
121
  requirements: []
109
- rubygems_version: 3.2.15
122
+ rubygems_version: 3.5.18
110
123
  signing_key:
111
124
  specification_version: 4
112
125
  summary: A simple utility to write a note.
data/Gemfile.lock DELETED
@@ -1,26 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- rbnotes (0.4.19)
5
- textrepo (~> 0.5.8)
6
- unicode-display_width (~> 1.7)
7
-
8
- GEM
9
- remote: https://rubygems.org/
10
- specs:
11
- minitest (5.14.4)
12
- rake (13.0.3)
13
- textrepo (0.5.8)
14
- unicode-display_width (1.7.0)
15
-
16
- PLATFORMS
17
- ruby
18
-
19
- DEPENDENCIES
20
- minitest (~> 5.0)
21
- rake (~> 13.0)
22
- rbnotes!
23
- textrepo (~> 0.5.8)
24
-
25
- BUNDLED WITH
26
- 2.2.15