snibbets 2.0.10 → 2.0.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f07f0d4772b8d611c0e29da125b4e6915d3909479c4384348699eedc2e1baf90
4
- data.tar.gz: e9abdf59d66f3c099c0c25f20a912efc53b690c7c45a5f4ada2b18355c3d473c
3
+ metadata.gz: 730cb0a9e548f9d590fb8eb8088bf279e5848dc7822fd2f7022e0c2c472f31e9
4
+ data.tar.gz: 544dbd0f8de24623ad0c4c4ef56be8ba77bb7b55a2aa6355c39ceaa51fae9519
5
5
  SHA512:
6
- metadata.gz: ac873395a3735c827164f03b497f21f06e8af227b515e299c40eb8a4eeff26c907a5893077e1ee1a528200ef4ef9e6fe7c5ac1c9ddfecf7522ed0d772e6fd6eb
7
- data.tar.gz: ca65c353589adda9fb4af59d390e98e277e5ba1523d746ab3f5cce19119cfa541b2db36045a90ecddd73be7224665dd96dd8642a2d7c010c438e6e9141a79d6a
6
+ metadata.gz: 25175a8f43be5bf5793e1953d570314f558baaa2b2bdb6e7045f2f4e7ae4e081c86033b87f91d567c6f10c9a4ae9ea5e9ceb45117e4a6848a184a35d2e0bc4e9
7
+ data.tar.gz: fb643c8813e3fc6183a484395bc1326d44ebc994615d0b07f9cefc06b5099f40fdbc67b289e6108e54970c751e7f1fda603c3c228607862162d628f11bdd0c96
data/CHANGELOG.md.orig CHANGED
@@ -1,3 +1,22 @@
1
+ ### 2.0.12
2
+
3
+ 2023-04-15 19:28
4
+
5
+ #### FIXED
6
+
7
+ - Lowered minimum ruby version to allow Ruby 2.6
8
+ - Failure to recognize snippet if title is on first line of file
9
+ - Errantly discarding first snippet in file with multiple snippets
10
+
11
+ ### 2.0.11
12
+
13
+ 2023-04-15 19:06
14
+
15
+ #### FIXED
16
+
17
+ - Overactive stripping of newlines within code blocks
18
+ - Syntax definition determination when adding new snippets
19
+
1
20
  ### 2.0.10
2
21
 
3
22
  2023-04-15 16:28
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- snibbets (2.0.10)
4
+ snibbets (2.0.12)
5
5
  tty-which (~> 0.5, >= 0.5.0)
6
6
 
7
7
  GEM
@@ -81,6 +81,7 @@ GEM
81
81
 
82
82
  PLATFORMS
83
83
  arm64-darwin-20
84
+ arm64-darwin-21
84
85
  x86_64-linux
85
86
 
86
87
  DEPENDENCIES
@@ -15,25 +15,21 @@ module Snibbets
15
15
  def remove_leading_empty_elements
16
16
  output = []
17
17
 
18
+ in_leader = true
18
19
  each do |line|
19
- next if line =~ /^\s*$/ || line.empty?
20
-
21
- output << line
20
+ if (line =~ /^\s*$/ || line.empty?) && in_leader
21
+ next
22
+ else
23
+ in_leader = false
24
+ output << line
25
+ end
22
26
  end
23
27
 
24
28
  output
25
29
  end
26
30
 
27
31
  def remove_trailing_empty_elements
28
- output = []
29
-
30
- reverse.each do |line|
31
- next if line =~ /^\s*$/ || line.empty?
32
-
33
- output << line
34
- end
35
-
36
- output.reverse
32
+ reverse.remove_leading_empty_elements.reverse
37
33
  end
38
34
  end
39
35
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Snibbets
4
4
  class Config
5
- attr_accessor :options
5
+ attr_accessor :options, :test_editor, :config_dir, :config_file
6
6
 
7
7
  DEFAULT_OPTIONS = {
8
8
  all: false,
@@ -19,61 +19,58 @@ module Snibbets
19
19
  }.freeze
20
20
 
21
21
  def initialize
22
+ @config_dir = File.expand_path('~/.config/snibbets')
23
+ @config_file = File.join(@config_dir, 'snibbets.yml')
22
24
  custom_config = read_config
23
25
  @options = DEFAULT_OPTIONS.merge(custom_config)
24
26
  @options[:editor] ||= best_editor
25
27
  @options[:menus] ||= best_menu
28
+ @test_editor = nil
26
29
 
27
30
  write_config unless @options.equal?(custom_config)
28
31
  end
29
32
 
30
33
  def best_menu
31
- return 'fzf' if TTY::Which.exist?('fzf')
32
- return 'gum' if TTY::Which.exist?('gum')
34
+ return 'fzf' if TTY::Which.exist?('fzf') && @test_editor == 'fzf'
35
+
36
+ return 'gum' if TTY::Which.exist?('gum') && @test_editor == 'gum'
37
+
33
38
  'console'
34
39
  end
35
40
 
36
41
  def best_editor
37
- if ENV['EDITOR']
42
+ if ENV['EDITOR'] && @test_editor == 'EDITOR'
38
43
  ENV['EDITOR']
39
- elsif ENV['GIT_EDITOR']
44
+ elsif ENV['GIT_EDITOR'] && @test_editor == 'GIT_EDITOR'
40
45
  ENV['GIT_EDITOR']
41
46
  else
42
- return TTY::Which.which('code') if TTY::Which.exist?('code')
47
+ return TTY::Which.which('code') if TTY::Which.exist?('code') && @test_editor == 'code'
43
48
 
44
- return TTY::Which.which('subl') if TTY::Which.exist?('subl')
49
+ return TTY::Which.which('subl') if TTY::Which.exist?('subl') && @test_editor == 'subl'
45
50
 
46
- return TTY::Which.which('bbedit') if TTY::Which.exist?('bbedit')
51
+ return TTY::Which.which('nano') if TTY::Which.exist?('nano') && @test_editor == 'nano'
47
52
 
48
- return TTY::Which.which('nano') if TTY::Which.exist?('nano')
49
-
50
- return TTY::Which.which('vim') if TTY::Which.exist?('vim')
53
+ return TTY::Which.which('vim') if TTY::Which.exist?('vim') && @test_editor == 'vim'
51
54
 
52
55
  'TextEdit'
53
56
  end
54
57
  end
55
58
 
56
- def config_dir
57
- File.expand_path('~/.config/snibbets')
58
- end
59
-
60
- def config_file
61
- File.join(config_dir, 'snibbets.yml')
62
- end
63
-
64
59
  def read_config
65
- if File.exist?(config_file)
66
- YAML.safe_load(IO.read(config_file)).symbolize_keys
60
+ if File.exist?(@config_file)
61
+ YAML.safe_load(IO.read(@config_file)).symbolize_keys
67
62
  else
68
63
  {}
69
64
  end
70
65
  end
71
66
 
72
67
  def write_config
73
- raise 'Error creating config directory, file exists' if File.exist?(config_dir) && !File.directory?(config_dir)
68
+ raise 'Error creating config directory, file exists' if File.exist?(@config_dir) && !File.directory?(@config_dir)
69
+
70
+ FileUtils.mkdir_p(@config_dir) unless File.directory?(@config_dir)
71
+ File.open(@config_file, 'w') { |f| f.puts(YAML.dump(@options.stringify_keys)) }
74
72
 
75
- FileUtils.mkdir_p(config_dir) unless File.directory?(config_dir)
76
- File.open(config_file, 'w') { |f| f.puts(YAML.dump(@options.stringify_keys)) }
73
+ true
77
74
  end
78
75
  end
79
76
  end
@@ -1,34 +1,44 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Snibbets
2
- class Lexers
3
- attr_accessor :lexers
4
+ # Lexer definitions
5
+ module Lexers
6
+ class << self
7
+ def lexers
8
+ @lexers ||= build_lexers
9
+ end
10
+
11
+ def build_lexers
12
+ lex = []
13
+ IO.read('lib/snibbets/lexers_db.txt').split(/\n/).each do |line|
14
+ key = line.match(/(?mi)^((, )?[^,]+?)+?(?=\[)/)[0]
15
+ keys = key.split(/,/).map(&:strip)
16
+ value = line.match(/\[(.*?)\]/)[1]
17
+ values = value.split(/,/).map(&:strip)
4
18
 
5
- def build_lexers
6
- IO.read('lexers_db.txt').split(/\n/).each do |line|
7
- key = line.match(/(?mi)^((, )?[^,]+?)+?(?=\[)/)[0]
8
- keys = key.split(/,/).map(&:strip)
9
- value = line.match(/\[(.*?)\]/)[1]
10
- values = value.split(/,/).map(&:strip)
19
+ lex << {
20
+ lexer: keys.shift,
21
+ aliases: keys,
22
+ extensions: values
23
+ }
24
+ end
11
25
 
12
- @lexers << {
13
- lexer: keys.shift,
14
- aliases: keys,
15
- extensions: values
16
- }
26
+ lex
17
27
  end
18
- end
19
28
 
20
- def ext_to_lang(ext)
21
- matches = @lexers.select { |lex| lex[:extensions].map(&:downcase).include?(ext.downcase) }
22
- matches.map { |lex| lex[:lexer] }.first
23
- end
29
+ def ext_to_lang(ext)
30
+ matches = lexers.select { |lex| lex[:extensions].map(&:downcase).include?(ext.downcase) }
31
+ matches.map { |lex| lex[:lexer] }.first
32
+ end
24
33
 
25
- def lang_to_ext(lexer)
26
- matches = @lexers.select { |lex| lex[:lexer] == lexer || lex[:aliases].map(&:downcase).include?(lexer.downcase) }
27
- matches.map { |lex| lex[:extensions].first }.first
28
- end
34
+ def lang_to_ext(lexer)
35
+ matches = lexers.select { |lex| lex[:lexer] == lexer || lex[:aliases].map(&:downcase).include?(lexer.downcase) }
36
+ matches.map { |lex| lex[:extensions].first }.first
37
+ end
29
38
 
30
- def syntax_from_extension(filename)
31
- ext_to_lang(filename.split(/\./)[1])
39
+ def syntax_from_extension(filename)
40
+ ext_to_lang(filename.split(/\./)[1])
41
+ end
32
42
  end
33
43
  end
34
44
  end
@@ -20,8 +20,8 @@ module Snibbets
20
20
  input = dup
21
21
  lines = input.split(/\n/)
22
22
  loop do
23
- line = lines.shift
24
- next if line =~ /^\s*[A-Z\s]+\w:\s*\S+/i || line =~ /^-{3,}\s*$/
23
+ line = lines[0]
24
+ lines.shift if line =~ /^\s*[A-Z\s]+\w:\s*\S+/i || line =~ /^-{3,}\s*$/
25
25
 
26
26
  break
27
27
  end
@@ -133,7 +133,7 @@ module Snibbets
133
133
  parts = sans_blocks.gsub(/\n{2,}/, "\n\n").split(/^#+/)
134
134
  end
135
135
 
136
- parts.shift if parts.count > 1
136
+ # parts.shift if parts.count > 1
137
137
 
138
138
  parts.each do |part|
139
139
  lines = part.split(/\n/).strip_empty
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Snibbets
4
- VERSION = '2.0.10'
4
+ VERSION = '2.0.12'
5
5
  end
@@ -16,8 +16,8 @@ module TTY
16
16
  end
17
17
  module_function :app_bundle
18
18
 
19
- def bundle_id?(cmd)
20
- cmd =~ /^\w+(\.\w+){2,}/
19
+ def bundle_id?(id)
20
+ id =~ /^\w+(\.\w+){2,}/ ? true : false
21
21
  end
22
22
  module_function :bundle_id?
23
23
 
data/lib/snibbets.rb CHANGED
@@ -34,6 +34,10 @@ end
34
34
 
35
35
  module Snibbets
36
36
  class << self
37
+ def change_query(query)
38
+ @query = query
39
+ end
40
+
37
41
  # Search the snippets directory for query using find and grep
38
42
  def search(try: 0)
39
43
  folder = File.expand_path(Snibbets.options[:source])
@@ -139,8 +143,6 @@ module Snibbets
139
143
  exit!
140
144
  end
141
145
 
142
- build_lexers
143
-
144
146
  pb = OS.paste.outdent
145
147
 
146
148
  printf 'What does this snippet do? '
@@ -150,10 +152,10 @@ module Snibbets
150
152
  printf 'What language(s) does it use (separate with spaces, full names or file extensions will work)? '
151
153
  input = $stdin.gets.chomp
152
154
  langs = input.split(/ +/).map(&:strip) unless input.empty?
153
- exts = langs.map { |lang| Snibbets::Lexers.lang_to_ext(lang) }
154
- tags = langs.map { |lang| Snibbets::Lexers.ext_to_lang(lang) }.concat(langs).sort.uniq
155
+ exts = langs.map { |lang| Lexers.lang_to_ext(lang) }
156
+ tags = langs.map { |lang| Lexers.ext_to_lang(lang) }.concat(langs).sort.uniq
155
157
 
156
- filename ="#{title}.#{exts.join('.')}.#{Snibbets.options[:extension]}"
158
+ filename = "#{title}.#{exts.join('.')}.#{Snibbets.options[:extension]}"
157
159
 
158
160
  File.open(File.join(File.expand_path(Snibbets.options[:source]), filename), 'w') do |f|
159
161
  f.puts "tags: #{tags.join(', ')}
@@ -272,7 +274,7 @@ module Snibbets
272
274
  else
273
275
  snippets.push({ 'title' => 'All snippets', 'code' => '' })
274
276
 
275
- answer = Snibbets::Menu.menu(snippets, filename: File.basename(filepath, '.md'), title: 'Select snippet', query: @query)
277
+ answer = Menu.menu(snippets, filename: File.basename(filepath, '.md'), title: 'Select snippet', query: @query)
276
278
 
277
279
  if answer['title'] == 'All snippets'
278
280
  snippets.delete_if { |s| s['title'] == 'All snippets'}
data/snibbets.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = "A plain text code snippet manager"
13
13
  spec.homepage = "https://github.com/ttscoff/snibbets"
14
14
  spec.license = "MIT"
15
- spec.required_ruby_version = ">= 3.0.0"
15
+ spec.required_ruby_version = ">= 2.6.0"
16
16
 
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = spec.homepage
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snibbets
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.10
4
+ version: 2.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Terpstra
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-15 00:00:00.000000000 Z
11
+ date: 2023-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -174,22 +174,22 @@ dependencies:
174
174
  name: tty-which
175
175
  requirement: !ruby/object:Gem::Requirement
176
176
  requirements:
177
- - - "~>"
178
- - !ruby/object:Gem::Version
179
- version: '0.5'
180
177
  - - ">="
181
178
  - !ruby/object:Gem::Version
182
179
  version: 0.5.0
180
+ - - "~>"
181
+ - !ruby/object:Gem::Version
182
+ version: '0.5'
183
183
  type: :runtime
184
184
  prerelease: false
185
185
  version_requirements: !ruby/object:Gem::Requirement
186
186
  requirements:
187
- - - "~>"
188
- - !ruby/object:Gem::Version
189
- version: '0.5'
190
187
  - - ">="
191
188
  - !ruby/object:Gem::Version
192
189
  version: 0.5.0
190
+ - - "~>"
191
+ - !ruby/object:Gem::Version
192
+ version: '0.5'
193
193
  description: A plain text code snippet manager
194
194
  email: me@brettterpstra.com
195
195
  executables:
@@ -230,7 +230,7 @@ metadata:
230
230
  bug_tracker_uri: https://github.com/ttscoff/snibbets/issues
231
231
  changelog_uri: https://github.com/ttscoff/snibbets/blob/main/CHANGELOG.md
232
232
  github_repo: git@github.com:ttscoff/snibbets.git
233
- post_install_message:
233
+ post_install_message:
234
234
  rdoc_options:
235
235
  - "--title"
236
236
  - na
@@ -245,15 +245,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
245
245
  requirements:
246
246
  - - ">="
247
247
  - !ruby/object:Gem::Version
248
- version: 3.0.0
248
+ version: 2.6.0
249
249
  required_rubygems_version: !ruby/object:Gem::Requirement
250
250
  requirements:
251
251
  - - ">="
252
252
  - !ruby/object:Gem::Version
253
253
  version: '0'
254
254
  requirements: []
255
- rubygems_version: 3.2.16
256
- signing_key:
255
+ rubygems_version: 3.0.3.1
256
+ signing_key:
257
257
  specification_version: 4
258
258
  summary: Snibbets
259
259
  test_files: []