sublime_text_kit 10.0.2 → 11.0.0

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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.adoc +18 -48
  4. data/bin/sublime_text_kit +1 -3
  5. data/lib/sublime_text_kit/cli/actions/config.rb +35 -0
  6. data/lib/sublime_text_kit/cli/actions/metadata.rb +63 -0
  7. data/lib/sublime_text_kit/cli/actions/session.rb +26 -0
  8. data/lib/sublime_text_kit/cli/actions/snippets.rb +35 -0
  9. data/lib/sublime_text_kit/cli/actions/update.rb +42 -0
  10. data/lib/sublime_text_kit/cli/configuration/content.rb +45 -0
  11. data/lib/sublime_text_kit/cli/configuration/defaults.yml +3 -0
  12. data/lib/sublime_text_kit/cli/configuration/loader.rb +37 -0
  13. data/lib/sublime_text_kit/cli/parsers/assembler.rb +32 -0
  14. data/lib/sublime_text_kit/cli/parsers/core.rb +96 -0
  15. data/lib/sublime_text_kit/cli/parsers.rb +11 -0
  16. data/lib/sublime_text_kit/cli/shell.rb +58 -0
  17. data/lib/sublime_text_kit/container.rb +37 -0
  18. data/lib/sublime_text_kit/identity.rb +3 -2
  19. data/lib/sublime_text_kit/metadata/handler.rb +43 -0
  20. data/lib/sublime_text_kit/metadata/pathway.rb +19 -0
  21. data/lib/sublime_text_kit/metadata/serializers/project.rb +24 -0
  22. data/lib/sublime_text_kit/metadata/serializers/workspace.rb +27 -0
  23. data/lib/sublime_text_kit/sessions/rebuilder.rb +44 -0
  24. data/lib/sublime_text_kit/snippets/collector.rb +13 -19
  25. data/lib/sublime_text_kit/snippets/model.rb +31 -0
  26. data/lib/sublime_text_kit/snippets/printers/ascii_doc.rb +7 -5
  27. data/lib/sublime_text_kit/snippets/printers/markdown.rb +7 -3
  28. data/lib/sublime_text_kit/snippets/reader.rb +21 -0
  29. data/lib/sublime_text_kit.rb +11 -10
  30. data.tar.gz.sig +0 -0
  31. metadata +56 -14
  32. metadata.gz.sig +0 -0
  33. data/lib/sublime_text_kit/cli.rb +0 -182
  34. data/lib/sublime_text_kit/metadata/base.rb +0 -60
  35. data/lib/sublime_text_kit/metadata/project_metadata.rb +0 -20
  36. data/lib/sublime_text_kit/metadata/workspace_metadata.rb +0 -23
  37. data/lib/sublime_text_kit/session.rb +0 -44
  38. data/lib/sublime_text_kit/snippets/snippet.rb +0 -56
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d65d4263227c190e203860cfd3b94835a13a3449d0b1a1a61abec1c1094e3ef
4
- data.tar.gz: 70da9d856b8a39d0154af8ae65aadf750d67d986c301c3d7047b5d0724c8df27
3
+ metadata.gz: 1edd436349eaa5af3d9a56ba765ba547e42d2a50f512e0e2e58b27fe0727a652
4
+ data.tar.gz: 76c23a4bfc6aa007d0a2f09c7c2ce374d9080ca6c714799a624d22a2aebffbf0
5
5
  SHA512:
6
- metadata.gz: faaee8c22661e18157a1c7da416eaf8fc7da39966a3710ee41df8aeb5fae9ef528482a9d5f114b60f719e082f3d9989d4fc62c4400da618079cf6550be9a8d9a
7
- data.tar.gz: 01bcc50593e0b51b056fbb26bd49ddabd5c12302ceaa2367a4ae2cb21525b42409da6ae5fc57f8d3770b696155ee88b8e6d90877b532661ad93a30f28bb70c40
6
+ metadata.gz: 2b72e4c50adce16c70a3d08f2004afe3bca0e2e617127277829990fd666a506c5b89436a46bc64cc697cf4fae9d72502565a04102f9cbbc7787d0c9b790e1fcd
7
+ data.tar.gz: 5d2e45a08e168f6d2377b70496e0b1c64b2cc2472524d793263699a5842a18c8cace41a58ef2f523020240810925ad2df316539e40f7599be4729373ed163052
checksums.yaml.gz.sig CHANGED
Binary file
data/README.adoc CHANGED
@@ -11,7 +11,9 @@ image::https://img.shields.io/badge/code_style-alchemists-brightgreen.svg[Alchem
11
11
  [link=https://circleci.com/gh/bkuhlmann/sublime_text_kit]
12
12
  image::https://circleci.com/gh/bkuhlmann/sublime_text_kit.svg?style=svg[Circle CI Status]
13
13
 
14
- A command line interface for managing Sublime Text metadata.
14
+ Sublime Text Kit is a command line interface for managing Sublime Text metadata for multiple
15
+ projects, sessions, etc. It's also great for generating the metadata you need, while avoiding manual
16
+ labor, from existing projects.
15
17
 
16
18
  toc::[]
17
19
 
@@ -23,11 +25,6 @@ toc::[]
23
25
  metadata is in a directory) so one can easily toggle between up-to-date project information via
24
26
  the `CONTROL+COMMAND+P` shortcut.
25
27
 
26
- == Screencasts
27
-
28
- [link=https://www.alchemists.io/screencasts/sublime_text_kit]
29
- image::https://www.alchemists.io/images/screencasts/sublime_text_kit/cover.svg[Screencast,600,240,role=focal_point]
30
-
31
28
  == Requirements
32
29
 
33
30
  . link:https://www.ruby-lang.org[Ruby]
@@ -49,41 +46,14 @@ gem install sublime_text_kit
49
46
  From the command line, type: `sublime_text_kit`
50
47
 
51
48
  ....
52
- sublime_text_kit -c, [--config] # Manage gem configuration.
53
- sublime_text_kit -h, [--help=COMMAND] # Show this message or get help for a command.
54
- sublime_text_kit -m, [--metadata] # Manage project/workspace metadata.
55
- sublime_text_kit -p, [--snippets] # Print user defined snippets.
56
- sublime_text_kit -s, [--session] # Manage session metadata.
57
- sublime_text_kit -u, [--update] # Update Sublime Text with current settings.
58
- sublime_text_kit -v, [--version] # Show gem version.
59
- ....
60
-
61
- For configuration options, type: `sublime_text_kit --help --config`
62
-
63
- ....
64
- -e, [--edit], [--no-edit] # Edit gem configuration.
65
- -i, [--info], [--no-info] # Print gem configuration.
66
- ....
67
-
68
- For metadata options, type: `sublime_text_kit --help --metadata`
69
-
70
- ....
71
- -c, [--create], [--no-create] # Create metadata.
72
- -D, [--destroy], [--no-destroy] # Destroy metadata.
73
- -R, [--rebuild], [--no-rebuild] # Rebuild metadata.
74
- ....
75
-
76
- For session options, type: `sublime_text_kit --help --session`
77
-
78
- ....
79
- -R, [--rebuild], [--no-rebuild] # Rebuild session metadata.
80
- ....
81
-
82
- For snippet options, type: `sublime_text_kit --help --snippets`
83
-
84
- ....
85
- -a, [--ascii-doc], [--no-ascii-doc] # Print snippets in ASCII Doc format.
86
- -m, [--markdown], [--no-markdown] # Print snippets in Markdown format.
49
+ USAGE:
50
+ -c, --config ACTION Manage gem configuration. Actions: edit or view.
51
+ -h, --help Show this message.
52
+ -m, --metadata ACTION Manage metadata. Actions: create, delete, or recreate.
53
+ -S, --session Rebuild session.
54
+ -s, --snippets [FORMAT] View snippets. Default: markdown. Formats: markdown or ascii_doc.
55
+ -u, --update Update metadata and session based on current settings.
56
+ -v, --version Show gem version.
87
57
  ....
88
58
 
89
59
  === Customization
@@ -97,10 +67,10 @@ An example configuration could be:
97
67
  [source,yaml]
98
68
  ----
99
69
  :project_roots:
100
- - "~/Dropbox/Development/Misc"
101
- - "~/Dropbox/Development/OSS"
102
- - "~/Dropbox/Development/Work"
70
+ - "~/Engineering/Contributions"
71
+ - "~/Engineering/OSS"
103
72
  :metadata_dir: "~/Dropbox/Cache/Sublime"
73
+ :snippets_format: :ascii_doc
104
74
  ----
105
75
 
106
76
  Feel free to take this configuration, modify, and save as your own custom `+configuration.yml+`.
@@ -112,8 +82,8 @@ location, is written to the same metadata directory. If using the example settin
112
82
  assuming the following directory structure exists…
113
83
 
114
84
  ....
115
- ~/Dropbox/Development/Misc/example
116
- ~/Dropbox/Development/OSS/sublime_text_kit
85
+ ~/Engineering/OSS/example
86
+ ~/Engineering/OSS/sublime_text_kit
117
87
  ....
118
88
 
119
89
  …the project metadata will be created in the workspace directory as follows:
@@ -132,12 +102,12 @@ The following demonstrates a default Sublime Text setup:
132
102
  . Run: `sublime_text_kit --config --edit` (define Sublime Text Kit settings for project roots and
133
103
  metadata directory).
134
104
  . Shutdown Sublime Text (i.e. `CONTROL+Q`).
135
- . Run: `sublime_text_kit --metadata --create` (creates project metadata and rebuilds the session
105
+ . Run: `sublime_text_kit --metadata create` (creates project metadata and rebuilds the session
136
106
  metadata so Sublime Text has a complete project history from which to jump through via the
137
107
  `CONTROL+COMMMAND+P` shortcut).
138
108
  . Launch Sublime Text and use the `CONTROL+COMMAND+P` keyboard shortcut to toggle between
139
109
  projects. Notice that you can (fuzzy type) project names to jump between them.
140
- . Breeze through your project workload with ease. 😉
110
+ . Breeze through your project workload with ease. 🎉
141
111
 
142
112
  === Troubleshooting
143
113
 
data/bin/sublime_text_kit CHANGED
@@ -2,8 +2,6 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "sublime_text_kit"
5
- require "sublime_text_kit/cli"
6
- require "sublime_text_kit/identity"
7
5
 
8
6
  Process.setproctitle SublimeTextKit::Identity::VERSION_LABEL
9
- SublimeTextKit::CLI.start
7
+ SublimeTextKit::CLI::Shell.new.call ARGV
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SublimeTextKit
4
+ module CLI
5
+ module Actions
6
+ # Handles gem configuration action.
7
+ class Config
8
+ def initialize configuration: Configuration::Loader::HANDLER, container: Container
9
+ @configuration = configuration
10
+ @container = container
11
+ end
12
+
13
+ def call action
14
+ case action
15
+ when :edit then edit
16
+ when :view then view
17
+ else logger.error { "Invalid configuration action: #{action}." }
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ attr_reader :configuration, :container
24
+
25
+ def edit = kernel.system("$EDITOR #{configuration.current}")
26
+
27
+ def view = kernel.system("cat #{configuration.current}")
28
+
29
+ def kernel = container[__method__]
30
+
31
+ def logger = container[__method__]
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "refinements/pathnames"
4
+
5
+ module SublimeTextKit
6
+ module CLI
7
+ module Actions
8
+ # Handles metadata action.
9
+ class Metadata
10
+ using Refinements::Pathnames
11
+
12
+ def initialize handler: SublimeTextKit::Metadata::Handler, container: Container
13
+ @handler = handler
14
+ @container = container
15
+ end
16
+
17
+ def call kind
18
+ case kind
19
+ when :create then create
20
+ when :delete then delete
21
+ when :recreate then recreate
22
+ else logger.error "Unknown metadata action: #{kind}."
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ attr_reader :handler, :container
29
+
30
+ def create
31
+ logger.info "Creating metadata in #{metadata_dir}..."
32
+ process_projects __method__
33
+ logger.info "Metadata created."
34
+ end
35
+
36
+ def delete
37
+ logger.info "Deleting metadata in #{metadata_dir}..."
38
+ process_projects __method__
39
+ logger.info "Metadata deleted."
40
+ end
41
+
42
+ def recreate
43
+ logger.info "Recreating metadata in #{metadata_dir}..."
44
+ process_projects __method__
45
+ logger.info "Metadata recreated."
46
+ end
47
+
48
+ def process_projects method
49
+ configuration.project_dirs.each do |directory|
50
+ handler.with_project(directory, metadata_dir).public_send method
51
+ handler.with_workspace(directory, metadata_dir).public_send method
52
+ end
53
+ end
54
+
55
+ def metadata_dir = Pathname(configuration.metadata_dir).expand_path
56
+
57
+ def configuration = container[__method__]
58
+
59
+ def logger = container[__method__]
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SublimeTextKit
4
+ module CLI
5
+ module Actions
6
+ # Handles session action.
7
+ class Session
8
+ def initialize rebuilder: Sessions::Rebuilder.new, container: Container
9
+ @rebuilder = rebuilder
10
+ @container = container
11
+ end
12
+
13
+ def call
14
+ rebuilder.call
15
+ logger.info "Session rebuilt."
16
+ end
17
+
18
+ private
19
+
20
+ attr_reader :rebuilder, :container
21
+
22
+ def logger = container[__method__]
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SublimeTextKit
4
+ module CLI
5
+ module Actions
6
+ # Handles snippets action.
7
+ class Snippets
8
+ PRINTERS = {
9
+ ascii_doc: SublimeTextKit::Snippets::Printers::ASCIIDoc.new,
10
+ markdown: SublimeTextKit::Snippets::Printers::Markdown.new
11
+ }.freeze
12
+
13
+ def initialize printers: PRINTERS, container: Container
14
+ @printers = printers
15
+ @container = container
16
+ end
17
+
18
+ def call
19
+ kind = configuration.snippets_format
20
+ printers.fetch(kind).call
21
+ rescue KeyError
22
+ logger.error { "Invalid snippet format: #{kind}." }
23
+ end
24
+
25
+ private
26
+
27
+ attr_reader :printers, :container
28
+
29
+ def configuration = container[__method__]
30
+
31
+ def logger = container[__method__]
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SublimeTextKit
4
+ module CLI
5
+ module Actions
6
+ # Handles update action.
7
+ class Update
8
+ def initialize metadata: SublimeTextKit::Metadata::Handler,
9
+ session: Sessions::Rebuilder.new,
10
+ container: Container
11
+ @metadata = metadata
12
+ @session = session
13
+ @container = container
14
+ end
15
+
16
+ def call
17
+ logger.info "Updating metadata and session..."
18
+ create_metadata
19
+ session.call
20
+ logger.info "Metadata and session updated."
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :metadata, :session, :container
26
+
27
+ def create_metadata
28
+ configuration.project_dirs.each do |directory|
29
+ metadata.with_project(directory, metadata_dir).create
30
+ metadata.with_workspace(directory, metadata_dir).create
31
+ end
32
+ end
33
+
34
+ def metadata_dir = Pathname(configuration.metadata_dir).expand_path
35
+
36
+ def configuration = container[__method__]
37
+
38
+ def logger = container[__method__]
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "refinements/pathnames"
4
+
5
+ module SublimeTextKit
6
+ module CLI
7
+ module Configuration
8
+ # Defines configuration content as the primary source of truth for use throughout the gem.
9
+ Content = Struct.new(
10
+ :action_config,
11
+ :action_help,
12
+ :action_metadata,
13
+ :action_session,
14
+ :action_snippets,
15
+ :action_update,
16
+ :action_version,
17
+ :project_roots,
18
+ :metadata_dir,
19
+ :snippets_format,
20
+ :session_path,
21
+ :user_dir,
22
+ keyword_init: true
23
+ ) do
24
+ using Refinements::Pathnames
25
+
26
+ def initialize *arguments
27
+ super
28
+
29
+ home = Pathname ENV["HOME"]
30
+
31
+ self[:session_path] ||= home.join(
32
+ "Library/Application Support/Sublime Text/Local/Session.sublime_session"
33
+ )
34
+
35
+ self[:user_dir] ||= home.join "Library/Application Support/Sublime Text/Packages/User"
36
+ end
37
+
38
+ def project_dirs
39
+ Array(project_roots).map { |path| Pathname(path).expand_path }
40
+ .flat_map(&:directories)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,3 @@
1
+ :project_roots:
2
+ :metadata_dir:
3
+ :snippets_format: :markdown
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pathname"
4
+ require "refinements/hashes"
5
+ require "refinements/structs"
6
+ require "runcom"
7
+ require "yaml"
8
+
9
+ module SublimeTextKit
10
+ module CLI
11
+ module Configuration
12
+ # Represents the fully assembled Command Line Interface (CLI) configuration.
13
+ class Loader
14
+ using Refinements::Hashes
15
+ using Refinements::Structs
16
+
17
+ DEFAULTS = YAML.load_file(Pathname(__dir__).join("defaults.yml")).freeze
18
+ HANDLER = Runcom::Config.new "#{Identity::NAME}/configuration.yml", defaults: DEFAULTS
19
+
20
+ def self.call = new.call
21
+
22
+ def self.with_defaults = new(handler: DEFAULTS)
23
+
24
+ def initialize content: Content.new, handler: HANDLER
25
+ @content = content
26
+ @handler = handler
27
+ end
28
+
29
+ def call = content.merge(**handler.to_h.flatten_keys)
30
+
31
+ private
32
+
33
+ attr_reader :content, :handler
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "runcom"
4
+
5
+ module SublimeTextKit
6
+ module CLI
7
+ module Parsers
8
+ # Assembles and parses all Command Line Interface (CLI) options.
9
+ class Assembler
10
+ def initialize section: Core, client: CLIENT, container: Container
11
+ @section = section
12
+ @client = client
13
+ @container = container
14
+ end
15
+
16
+ def call arguments = []
17
+ section.call client: client
18
+ client.parse! arguments
19
+ configuration
20
+ end
21
+
22
+ def to_s = client.to_s
23
+
24
+ private
25
+
26
+ attr_reader :section, :client, :container
27
+
28
+ def configuration = container[__method__]
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "versionaire/extensions/option_parser"
4
+
5
+ module SublimeTextKit
6
+ module CLI
7
+ # Handles parsing of Command Line Interface (CLI) primary options.
8
+ module Parsers
9
+ # Handles parsing of Command Line Interface (CLI) core options.
10
+ class Core
11
+ def self.call(...) = new(...).call
12
+
13
+ def initialize client: CLIENT, container: Container
14
+ @client = client
15
+ @container = container
16
+ end
17
+
18
+ def call arguments = []
19
+ client.banner = "#{Identity::LABEL} - #{Identity::SUMMARY}"
20
+ client.separator "\nUSAGE:\n"
21
+ collate
22
+ arguments.empty? ? arguments : client.parse!(arguments)
23
+ end
24
+
25
+ private
26
+
27
+ attr_reader :client, :container
28
+
29
+ def collate = private_methods.sort.grep(/add_/).each { |method| __send__ method }
30
+
31
+ def add_config
32
+ client.on(
33
+ "-c",
34
+ "--config ACTION",
35
+ %i[edit view],
36
+ "Manage gem configuration. Actions: edit or view."
37
+ ) do |action|
38
+ configuration.action_config = action
39
+ end
40
+ end
41
+
42
+ def add_metadata
43
+ client.on(
44
+ "-m",
45
+ "--metadata ACTION",
46
+ %i[create delete recreate],
47
+ "Manage metadata. Actions: create, delete, or recreate."
48
+ ) do |action|
49
+ configuration.action_metadata = action
50
+ end
51
+ end
52
+
53
+ def add_session
54
+ client.on "-S", "--session", "Rebuild session." do
55
+ configuration.action_session = true
56
+ end
57
+ end
58
+
59
+ def add_snippets
60
+ client.on(
61
+ "-s",
62
+ "--snippets [FORMAT]",
63
+ %i[markdown ascii_doc],
64
+ "View snippets. Default: #{configuration.snippets_format}. " \
65
+ "Formats: markdown or ascii_doc."
66
+ ) do |kind|
67
+ configuration.action_snippets = true
68
+ configuration.snippets_format = kind if kind
69
+ end
70
+ end
71
+
72
+ def add_update
73
+ client.on "-u", "--update", "Update metadata and session based on current settings." do
74
+ configuration.action_update = true
75
+ end
76
+ end
77
+
78
+ def add_version
79
+ client.on "-v", "--version", "Show gem version." do
80
+ configuration.action_version = Identity::VERSION_LABEL
81
+ end
82
+ end
83
+
84
+ def add_help
85
+ client.on "-h", "--help", "Show this message." do
86
+ configuration.action_help = true
87
+ end
88
+ end
89
+
90
+ private_methods
91
+
92
+ def configuration = container[__method__]
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "optparse"
4
+
5
+ module SublimeTextKit
6
+ module CLI
7
+ module Parsers
8
+ CLIENT = OptionParser.new nil, 40, " "
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SublimeTextKit
4
+ module CLI
5
+ # The main Command Line Interface (CLI) object.
6
+ class Shell
7
+ ACTIONS = {
8
+ config: Actions::Config.new,
9
+ metadata: Actions::Metadata.new,
10
+ session: Actions::Session.new,
11
+ snippets: Actions::Snippets.new,
12
+ update: Actions::Update.new
13
+ }.freeze
14
+
15
+ def initialize parser: Parsers::Assembler.new, actions: ACTIONS, container: Container
16
+ @parser = parser
17
+ @actions = actions
18
+ @container = container
19
+ end
20
+
21
+ def call arguments = []
22
+ perform parser.call(arguments)
23
+ rescue OptionParser::ParseError, Error => error
24
+ logger.error { error.message }
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :parser, :actions, :container
30
+
31
+ def perform configuration
32
+ case configuration
33
+ in action_config: Symbol => action then config action
34
+ in action_metadata: Symbol => kind then metadata kind
35
+ in action_session: true then session
36
+ in action_snippets: true then snippets
37
+ in action_update: true then update
38
+ in action_version: String => version then logger.info version
39
+ else usage
40
+ end
41
+ end
42
+
43
+ def config(action) = actions.fetch(__method__).call(action)
44
+
45
+ def metadata(kind) = actions.fetch(__method__).call(kind)
46
+
47
+ def session = actions.fetch(__method__).call
48
+
49
+ def snippets = actions.fetch(__method__).call
50
+
51
+ def update = actions.fetch(__method__).call
52
+
53
+ def usage = logger.unknown { parser.to_s }
54
+
55
+ def logger = container[__method__]
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry-container"
4
+ require "logger"
5
+ require "pastel"
6
+
7
+ module SublimeTextKit
8
+ # Provides a global gem container for injection into other objects.
9
+ module Container
10
+ extend Dry::Container::Mixin
11
+
12
+ register(:configuration, memoize: true) { CLI::Configuration::Loader.call }
13
+ register(:colorizer) { Pastel.new enabled: $stdout.tty? }
14
+ register(:kernel) { Kernel }
15
+
16
+ register :log_colors do
17
+ {
18
+ "DEBUG" => self[:colorizer].white.detach,
19
+ "INFO" => self[:colorizer].green.detach,
20
+ "WARN" => self[:colorizer].yellow.detach,
21
+ "ERROR" => self[:colorizer].red.detach,
22
+ "FATAL" => self[:colorizer].white.bold.on_red.detach,
23
+ "ANY" => self[:colorizer].white.bold.detach
24
+ }
25
+ end
26
+
27
+ register :logger do
28
+ Logger.new $stdout,
29
+ level: Logger.const_get(ENV.fetch("LOG_LEVEL", "INFO")),
30
+ formatter: (
31
+ lambda do |severity, _at, _name, message|
32
+ self[:log_colors][severity].call "#{message}\n"
33
+ end
34
+ )
35
+ end
36
+ end
37
+ end
@@ -5,7 +5,8 @@ module SublimeTextKit
5
5
  module Identity
6
6
  NAME = "sublime_text_kit"
7
7
  LABEL = "Sublime Text Kit"
8
- VERSION = "10.0.2"
9
- VERSION_LABEL = "#{LABEL} #{VERSION}"
8
+ VERSION = "11.0.0"
9
+ VERSION_LABEL = "#{LABEL} #{VERSION}".freeze
10
+ SUMMARY = "A command line interface for managing Sublime Text metadata."
10
11
  end
11
12
  end