sublime_text_kit 14.2.0 → 15.0.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
- checksums.yaml.gz.sig +1 -2
- data/README.adoc +21 -14
- data/lib/sublime_text_kit/cli/actions/metadata/create.rb +47 -0
- data/lib/sublime_text_kit/cli/actions/metadata/delete.rb +47 -0
- data/lib/sublime_text_kit/cli/actions/metadata/recreate.rb +47 -0
- data/lib/sublime_text_kit/cli/actions/session.rb +9 -3
- data/lib/sublime_text_kit/cli/actions/snippets.rb +13 -5
- data/lib/sublime_text_kit/cli/actions/update.rb +9 -3
- data/lib/sublime_text_kit/cli/shell.rb +29 -31
- data/lib/sublime_text_kit/configuration/contract.rb +18 -0
- data/lib/sublime_text_kit/configuration/defaults.yml +1 -3
- data/lib/sublime_text_kit/configuration/model.rb +28 -0
- data/lib/sublime_text_kit/configuration/transformers/session_path.rb +31 -0
- data/lib/sublime_text_kit/configuration/transformers/user_dir.rb +29 -0
- data/lib/sublime_text_kit/container.rb +17 -1
- data/lib/sublime_text_kit/import.rb +2 -0
- data/sublime_text_kit.gemspec +10 -7
- data.tar.gz.sig +0 -0
- metadata +67 -26
- metadata.gz.sig +0 -0
- data/lib/sublime_text_kit/cli/actions/config.rb +0 -33
- data/lib/sublime_text_kit/cli/actions/container.rb +0 -22
- data/lib/sublime_text_kit/cli/actions/import.rb +0 -11
- data/lib/sublime_text_kit/cli/actions/metadata.rb +0 -61
- data/lib/sublime_text_kit/cli/parser.rb +0 -34
- data/lib/sublime_text_kit/cli/parsers/core.rb +0 -103
- data/lib/sublime_text_kit/configuration/content.rb +0 -45
- data/lib/sublime_text_kit/configuration/loader.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d06ec31815017a26c5a7f3e3817222fd8213303a48264de551b8d34e1cd5f078
|
4
|
+
data.tar.gz: 2a78dcf6449dcda2d668976c702991c5a60404ab2a094939a9a9888864084dab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1b2246c84b2bda7bd08c7d7bd4cae73281f4e919e25c2998c051fc418deb26135d4ed4d0d6d240eedeca06f74e40bdb7e9d4aace80bd4f45fc2109b60f8e95b
|
7
|
+
data.tar.gz: ff67dd342e94e1c0c20311080c5de492efc0f58856c25dab22e4655f3ed0d51de42071a78e2b045147c5624fdd45bec9c1d9330e5d825769956a71b120ee4303
|
checksums.yaml.gz.sig
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
9
|
2
|
-
"�UxK��zyY�\
|
1
|
+
F���"�4c�\�q���#g'������T����jd6�����9o��]�8P�{�!��̪LG��P�05�Ң#0�@�����0�wK X�J1=�- K�H�e$-��b���~�9��Bd������+� �ޭt�B���$4CN)����w�N)��Fy�{{D�S[�~c�ªSha���u��mP¦�9}��oL hG��3D�O֍��l��L%�"�pӼ�7�F4�g��M4��^��c�p�$*�Z�vYu,�6��]��/-�t�����{4�V�`��P�%Gu��%=y�M�݄�I��'����E�P�����1�.�\cΧ�ʃ�K��)�s�jʿ}�~����g�e�����\�̷eZ�z�3̤�N]��Rz���
|
data/README.adoc
CHANGED
@@ -48,14 +48,23 @@ gem install sublime_text_kit
|
|
48
48
|
From the command line, type: `sublime_text_kit`
|
49
49
|
|
50
50
|
....
|
51
|
-
USAGE
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
-
|
57
|
-
-
|
58
|
-
|
51
|
+
USAGE
|
52
|
+
sublime_text_kit [OPTIONS]
|
53
|
+
sublime_text_kit COMMAND [OPTIONS]
|
54
|
+
|
55
|
+
OPTIONS
|
56
|
+
-S, --session Rebuild session metadata.
|
57
|
+
-s, --snippets [FORMAT] View snippets.
|
58
|
+
Use: markdown or ascii_doc.
|
59
|
+
Default: ascii_doc.
|
60
|
+
-u, --update Update project and session metadata based on current settings.
|
61
|
+
-v, --version Show version.
|
62
|
+
-h, --help [COMMAND] Show this message.
|
63
|
+
|
64
|
+
COMMANDS
|
65
|
+
config Manage configuration.
|
66
|
+
Path is dynamic per current directory.
|
67
|
+
metadata Manage project metadata.
|
59
68
|
....
|
60
69
|
|
61
70
|
=== Customization
|
@@ -68,15 +77,13 @@ An example configuration could be:
|
|
68
77
|
|
69
78
|
[source,yaml]
|
70
79
|
----
|
71
|
-
|
80
|
+
project_roots:
|
72
81
|
- "~/Engineering/Organizations"
|
73
82
|
- "~/Engineering/OSS"
|
74
|
-
|
75
|
-
|
83
|
+
metadata_dir: "~/Dropbox/Cache/Sublime"
|
84
|
+
snippets_format: :markdown
|
76
85
|
----
|
77
86
|
|
78
|
-
Feel free to take this configuration, modify, and save as your own.
|
79
|
-
|
80
87
|
The `project_roots` key defines the root level directories where your project folders are located.
|
81
88
|
When project metadata (i.e. `.sublime-project`, `.sublime-workspace`) is generated, the name of the
|
82
89
|
metadata file will be the same name as the project folder. All project metadata, regardless of root
|
@@ -112,7 +119,7 @@ The following demonstrates a default Sublime Text setup:
|
|
112
119
|
2. Shutdown Sublime Text (i.e. `COMMAND+q`).
|
113
120
|
3. Run `sublime_text_kit --update` which will create project metadata and rebuild session metadata
|
114
121
|
so Sublime Text has a complete project history from which to switch between via the
|
115
|
-
`CONTROL+
|
122
|
+
`CONTROL+COMMAND+p` shortcut.
|
116
123
|
4. Launch Sublime Text and use the `CONTROL+COMMAND+p` keyboard shortcut to toggle between projects.
|
117
124
|
Notice that you can (fuzzy type) project names to jump between them.
|
118
125
|
5. Navigate through your project workload with ease. 🎉
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "refinements/pathnames"
|
4
|
+
require "sod"
|
5
|
+
|
6
|
+
module SublimeTextKit
|
7
|
+
module CLI
|
8
|
+
module Actions
|
9
|
+
module Metadata
|
10
|
+
# Creates project metadata.
|
11
|
+
class Create < Sod::Action
|
12
|
+
include Import[:configuration, :logger]
|
13
|
+
|
14
|
+
using Refinements::Pathnames
|
15
|
+
|
16
|
+
description "Create metadata."
|
17
|
+
|
18
|
+
on %w[-c --create]
|
19
|
+
|
20
|
+
def initialize(handler: SublimeTextKit::Metadata::Handler, **)
|
21
|
+
super(**)
|
22
|
+
@handler = handler
|
23
|
+
end
|
24
|
+
|
25
|
+
def call(*)
|
26
|
+
logger.info "Creating metadata in #{metadata_dir}..."
|
27
|
+
process_projects
|
28
|
+
logger.info "Metadata created."
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
attr_reader :handler
|
34
|
+
|
35
|
+
def process_projects
|
36
|
+
configuration.project_dirs.each do |directory|
|
37
|
+
handler.with_project(directory, metadata_dir).create
|
38
|
+
handler.with_workspace(directory, metadata_dir).create
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def metadata_dir = Pathname(configuration.metadata_dir).expand_path
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "refinements/pathnames"
|
4
|
+
require "sod"
|
5
|
+
|
6
|
+
module SublimeTextKit
|
7
|
+
module CLI
|
8
|
+
module Actions
|
9
|
+
module Metadata
|
10
|
+
# Deletes project metadata.
|
11
|
+
class Delete < Sod::Action
|
12
|
+
include Import[:configuration, :logger]
|
13
|
+
|
14
|
+
using Refinements::Pathnames
|
15
|
+
|
16
|
+
description "Delete metadata."
|
17
|
+
|
18
|
+
on %w[-d --delete]
|
19
|
+
|
20
|
+
def initialize(handler: SublimeTextKit::Metadata::Handler, **)
|
21
|
+
super(**)
|
22
|
+
@handler = handler
|
23
|
+
end
|
24
|
+
|
25
|
+
def call(*)
|
26
|
+
logger.info "Deleting metadata in #{metadata_dir}..."
|
27
|
+
process_projects
|
28
|
+
logger.info "Metadata deleted."
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
attr_reader :handler
|
34
|
+
|
35
|
+
def process_projects
|
36
|
+
configuration.project_dirs.each do |directory|
|
37
|
+
handler.with_project(directory, metadata_dir).delete
|
38
|
+
handler.with_workspace(directory, metadata_dir).delete
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def metadata_dir = Pathname(configuration.metadata_dir).expand_path
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "refinements/pathnames"
|
4
|
+
require "sod"
|
5
|
+
|
6
|
+
module SublimeTextKit
|
7
|
+
module CLI
|
8
|
+
module Actions
|
9
|
+
module Metadata
|
10
|
+
# Recreates project metadata.
|
11
|
+
class Recreate < Sod::Action
|
12
|
+
include Import[:configuration, :logger]
|
13
|
+
|
14
|
+
using Refinements::Pathnames
|
15
|
+
|
16
|
+
description "Recreate metadata."
|
17
|
+
|
18
|
+
on %w[-r --recreate]
|
19
|
+
|
20
|
+
def initialize(handler: SublimeTextKit::Metadata::Handler, **)
|
21
|
+
super(**)
|
22
|
+
@handler = handler
|
23
|
+
end
|
24
|
+
|
25
|
+
def call(*)
|
26
|
+
logger.info "Recreating metadata in #{metadata_dir}..."
|
27
|
+
process_projects
|
28
|
+
logger.info "Metadata recreated."
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
attr_reader :handler
|
34
|
+
|
35
|
+
def process_projects
|
36
|
+
configuration.project_dirs.each do |directory|
|
37
|
+
handler.with_project(directory, metadata_dir).recreate
|
38
|
+
handler.with_workspace(directory, metadata_dir).recreate
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def metadata_dir = Pathname(configuration.metadata_dir).expand_path
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -1,18 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "sod"
|
4
|
+
|
3
5
|
module SublimeTextKit
|
4
6
|
module CLI
|
5
7
|
module Actions
|
6
8
|
# Handles session action.
|
7
|
-
class Session
|
8
|
-
include
|
9
|
+
class Session < Sod::Action
|
10
|
+
include Import[:logger]
|
11
|
+
|
12
|
+
description "Rebuild session metadata."
|
13
|
+
|
14
|
+
on %w[-S --session]
|
9
15
|
|
10
16
|
def initialize(rebuilder: Sessions::Rebuilder.new, **)
|
11
17
|
super(**)
|
12
18
|
@rebuilder = rebuilder
|
13
19
|
end
|
14
20
|
|
15
|
-
def call
|
21
|
+
def call(*)
|
16
22
|
rebuilder.call
|
17
23
|
logger.info "Session rebuilt."
|
18
24
|
end
|
@@ -1,21 +1,29 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "sod"
|
4
|
+
|
3
5
|
module SublimeTextKit
|
4
6
|
module CLI
|
5
7
|
module Actions
|
6
8
|
# Handles snippets action.
|
7
|
-
class Snippets
|
8
|
-
include
|
9
|
+
class Snippets < Sod::Action
|
10
|
+
include Import[:configuration, :logger]
|
11
|
+
|
12
|
+
description "View snippets."
|
13
|
+
|
14
|
+
on %w[-s --snippets], argument: "[FORMAT]", allow: %w[markdown ascii_doc]
|
15
|
+
|
16
|
+
default { Container[:configuration].snippets_format }
|
9
17
|
|
10
18
|
def initialize(printer: SublimeTextKit::Snippets::Printer.new, **)
|
11
19
|
super(**)
|
12
20
|
@printer = printer
|
13
21
|
end
|
14
22
|
|
15
|
-
def call kind
|
23
|
+
def call kind = default
|
16
24
|
case kind
|
17
|
-
when
|
18
|
-
when
|
25
|
+
when "ascii_doc" then printer.call "*"
|
26
|
+
when "markdown" then printer.call "-"
|
19
27
|
else logger.error { "Invalid snippet format: #{kind}. Use ascii_doc or markdown." }
|
20
28
|
end
|
21
29
|
end
|
@@ -1,11 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "sod"
|
4
|
+
|
3
5
|
module SublimeTextKit
|
4
6
|
module CLI
|
5
7
|
module Actions
|
6
8
|
# Handles update action.
|
7
|
-
class Update
|
8
|
-
include
|
9
|
+
class Update < Sod::Action
|
10
|
+
include Import[:configuration, :logger]
|
11
|
+
|
12
|
+
description "Update project and session metadata based on current settings."
|
13
|
+
|
14
|
+
on %w[-u --update]
|
9
15
|
|
10
16
|
def initialize(
|
11
17
|
metadata: SublimeTextKit::Metadata::Handler,
|
@@ -17,7 +23,7 @@ module SublimeTextKit
|
|
17
23
|
@session = session
|
18
24
|
end
|
19
25
|
|
20
|
-
def call
|
26
|
+
def call(*)
|
21
27
|
logger.info "Updating metadata and session..."
|
22
28
|
create_metadata
|
23
29
|
session.call
|
@@ -1,50 +1,48 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
3
|
+
require "sod"
|
4
4
|
|
5
5
|
module SublimeTextKit
|
6
6
|
module CLI
|
7
7
|
# The main Command Line Interface (CLI) object.
|
8
8
|
class Shell
|
9
|
-
include
|
10
|
-
|
11
|
-
|
12
|
-
:logger,
|
13
|
-
:metadata,
|
14
|
-
:session,
|
15
|
-
:snippets,
|
16
|
-
:specification,
|
17
|
-
:update
|
18
|
-
]
|
19
|
-
|
20
|
-
def initialize(parser: Parser.new, **)
|
9
|
+
include Import[:defaults_path, :xdg_config, :specification]
|
10
|
+
|
11
|
+
def initialize(context: Sod::Context, dsl: Sod, **)
|
21
12
|
super(**)
|
22
|
-
@
|
13
|
+
@context = context
|
14
|
+
@dsl = dsl
|
23
15
|
end
|
24
16
|
|
25
|
-
def call
|
26
|
-
act_on parser.call(arguments)
|
27
|
-
rescue OptionParser::ParseError, Error => error
|
28
|
-
logger.error { error.message }
|
29
|
-
end
|
17
|
+
def call(...) = cli.call(...)
|
30
18
|
|
31
19
|
private
|
32
20
|
|
33
|
-
attr_reader :
|
34
|
-
|
35
|
-
def
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
21
|
+
attr_reader :context, :dsl
|
22
|
+
|
23
|
+
def cli
|
24
|
+
context = build_context
|
25
|
+
|
26
|
+
dsl.new :sublime_text_kit, banner: specification.banner do
|
27
|
+
on(Sod::Prefabs::Commands::Config, context:)
|
28
|
+
|
29
|
+
on "metadata", "Manage project metadata." do
|
30
|
+
on Actions::Metadata::Create
|
31
|
+
on Actions::Metadata::Delete
|
32
|
+
on Actions::Metadata::Recreate
|
33
|
+
end
|
34
|
+
|
35
|
+
on Actions::Session
|
36
|
+
on Actions::Snippets
|
37
|
+
on Actions::Update
|
38
|
+
on(Sod::Prefabs::Actions::Version, context:)
|
39
|
+
on Sod::Prefabs::Actions::Help, self
|
44
40
|
end
|
45
41
|
end
|
46
42
|
|
47
|
-
def
|
43
|
+
def build_context
|
44
|
+
context[defaults_path:, xdg_config:, version_label: specification.labeled_version]
|
45
|
+
end
|
48
46
|
end
|
49
47
|
end
|
50
48
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "dry/schema"
|
4
|
+
require "etcher"
|
5
|
+
|
6
|
+
Dry::Schema.load_extensions :monads
|
7
|
+
|
8
|
+
module SublimeTextKit
|
9
|
+
module Configuration
|
10
|
+
Contract = Dry::Schema.Params do
|
11
|
+
optional(:project_roots).filled :array
|
12
|
+
optional(:metadata_dir).filled Etcher::Types::Pathname
|
13
|
+
required(:snippets_format).filled :string
|
14
|
+
required(:session_path).filled Etcher::Types::Pathname
|
15
|
+
required(:user_dir).filled Etcher::Types::Pathname
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "refinements/pathnames"
|
4
|
+
|
5
|
+
module SublimeTextKit
|
6
|
+
module Configuration
|
7
|
+
# Models the configuration.
|
8
|
+
Model = Struct.new(
|
9
|
+
:project_roots,
|
10
|
+
:metadata_dir,
|
11
|
+
:snippets_format,
|
12
|
+
:session_path,
|
13
|
+
:user_dir
|
14
|
+
) do
|
15
|
+
using Refinements::Pathnames
|
16
|
+
|
17
|
+
def initialize(**)
|
18
|
+
super
|
19
|
+
freeze
|
20
|
+
end
|
21
|
+
|
22
|
+
def project_dirs
|
23
|
+
Array(project_roots).map { |path| Pathname(path).expand_path }
|
24
|
+
.flat_map(&:directories)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "dry/monads"
|
4
|
+
|
5
|
+
module SublimeTextKit
|
6
|
+
module Configuration
|
7
|
+
module Transformers
|
8
|
+
# Transforms session path into fully qualified path based on home directory.
|
9
|
+
class SessionPath
|
10
|
+
include Dry::Monads[:result]
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
path = "Library/Application Support/Sublime Text/Local/Session.sublime_session"
|
14
|
+
|
15
|
+
@path = path
|
16
|
+
end
|
17
|
+
|
18
|
+
def call content
|
19
|
+
return Success content unless content.key? :home
|
20
|
+
|
21
|
+
Pathname(content[:home]).join(path)
|
22
|
+
.then { |session_path| Success content.merge!(session_path:) }
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
attr_reader :path
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "dry/monads"
|
4
|
+
|
5
|
+
module SublimeTextKit
|
6
|
+
module Configuration
|
7
|
+
module Transformers
|
8
|
+
# Transforms user directory into fully qualified path based on home directory.
|
9
|
+
class UserDir
|
10
|
+
include Dry::Monads[:result]
|
11
|
+
|
12
|
+
def initialize path = "Library/Application Support/Sublime Text/Packages/User"
|
13
|
+
@path = path
|
14
|
+
end
|
15
|
+
|
16
|
+
def call content
|
17
|
+
return Success content unless content.key? :home
|
18
|
+
|
19
|
+
Pathname(content[:home]).join(path)
|
20
|
+
.then { |user_dir| Success content.merge!(user_dir:) }
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
attr_reader :path
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
require "cogger"
|
4
4
|
require "dry/container"
|
5
|
+
require "etcher"
|
6
|
+
require "runcom"
|
5
7
|
require "spek"
|
6
8
|
|
7
9
|
module SublimeTextKit
|
@@ -9,7 +11,21 @@ module SublimeTextKit
|
|
9
11
|
module Container
|
10
12
|
extend Dry::Container::Mixin
|
11
13
|
|
12
|
-
register
|
14
|
+
register :configuration do
|
15
|
+
self[:defaults].add_loader(Etcher::Loaders::Environment.new(%w[HOME]))
|
16
|
+
.add_loader(Etcher::Loaders::YAML.new(self[:xdg_config].active))
|
17
|
+
.add_transformer(Configuration::Transformers::SessionPath.new)
|
18
|
+
.add_transformer(Configuration::Transformers::UserDir.new)
|
19
|
+
.then { |registry| Etcher.call registry }
|
20
|
+
end
|
21
|
+
|
22
|
+
register :defaults do
|
23
|
+
Etcher::Registry.new(contract: Configuration::Contract, model: Configuration::Model)
|
24
|
+
.add_loader(Etcher::Loaders::YAML.new(self[:defaults_path]))
|
25
|
+
end
|
26
|
+
|
27
|
+
register(:defaults_path) { Pathname(__dir__).join("configuration/defaults.yml") }
|
28
|
+
register(:xdg_config) { Runcom::Config.new "sublime_text_kit/configuration.yml" }
|
13
29
|
register(:specification) { Spek::Loader.call "#{__dir__}/../../sublime_text_kit.gemspec" }
|
14
30
|
register(:kernel) { Kernel }
|
15
31
|
register(:logger) { Cogger.new formatter: :emoji }
|
data/sublime_text_kit.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "sublime_text_kit"
|
5
|
-
spec.version = "
|
5
|
+
spec.version = "15.0.1"
|
6
6
|
spec.authors = ["Brooke Kuhlmann"]
|
7
7
|
spec.email = ["brooke@alchemists.io"]
|
8
8
|
spec.homepage = "https://alchemists.io/projects/sublime_text_kit"
|
@@ -23,13 +23,16 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.cert_chain = [Gem.default_cert_path]
|
24
24
|
|
25
25
|
spec.required_ruby_version = "~> 3.2"
|
26
|
-
spec.add_dependency "cogger", "~> 0.
|
27
|
-
spec.add_dependency "core", "~> 0.1"
|
26
|
+
spec.add_dependency "cogger", "~> 0.10"
|
28
27
|
spec.add_dependency "dry-container", "~> 0.11"
|
29
|
-
spec.add_dependency "
|
30
|
-
spec.add_dependency "
|
31
|
-
spec.add_dependency "
|
32
|
-
spec.add_dependency "
|
28
|
+
spec.add_dependency "dry-monads", "~> 1.6"
|
29
|
+
spec.add_dependency "dry-schema", "~> 1.13"
|
30
|
+
spec.add_dependency "etcher", "~> 0.2"
|
31
|
+
spec.add_dependency "infusible", "~> 2.0"
|
32
|
+
spec.add_dependency "refinements", "~> 11.0"
|
33
|
+
spec.add_dependency "runcom", "~> 10.0"
|
34
|
+
spec.add_dependency "sod", "~> 0.0"
|
35
|
+
spec.add_dependency "spek", "~> 2.0"
|
33
36
|
spec.add_dependency "zeitwerk", "~> 2.6"
|
34
37
|
|
35
38
|
spec.bindir = "exe"
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sublime_text_kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 15.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brooke Kuhlmann
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
3n5C8/6Zh9DYTkpcwPSuIfAga6wf4nXc9m6JAw8AuMLaiWN/r/2s4zJsUHYERJEu
|
36
36
|
gZGm4JqtuSg8pYjPeIJxS960owq+SfuC+jxqmRA54BisFCv/0VOJi7tiJVY=
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2023-
|
38
|
+
date: 2023-06-19 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: cogger
|
@@ -43,58 +43,100 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '0.
|
46
|
+
version: '0.10'
|
47
47
|
type: :runtime
|
48
48
|
prerelease: false
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '0.
|
53
|
+
version: '0.10'
|
54
54
|
- !ruby/object:Gem::Dependency
|
55
|
-
name:
|
55
|
+
name: dry-container
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '0.
|
60
|
+
version: '0.11'
|
61
61
|
type: :runtime
|
62
62
|
prerelease: false
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '0.
|
67
|
+
version: '0.11'
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
|
-
name: dry-
|
69
|
+
name: dry-monads
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
74
|
+
version: '1.6'
|
75
75
|
type: :runtime
|
76
76
|
prerelease: false
|
77
77
|
version_requirements: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
79
|
- - "~>"
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
81
|
+
version: '1.6'
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: dry-schema
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '1.13'
|
89
|
+
type: :runtime
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '1.13'
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: etcher
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0.2'
|
103
|
+
type: :runtime
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.2'
|
82
110
|
- !ruby/object:Gem::Dependency
|
83
111
|
name: infusible
|
84
112
|
requirement: !ruby/object:Gem::Requirement
|
85
113
|
requirements:
|
86
114
|
- - "~>"
|
87
115
|
- !ruby/object:Gem::Version
|
88
|
-
version: '
|
116
|
+
version: '2.0'
|
89
117
|
type: :runtime
|
90
118
|
prerelease: false
|
91
119
|
version_requirements: !ruby/object:Gem::Requirement
|
92
120
|
requirements:
|
93
121
|
- - "~>"
|
94
122
|
- !ruby/object:Gem::Version
|
95
|
-
version: '
|
123
|
+
version: '2.0'
|
96
124
|
- !ruby/object:Gem::Dependency
|
97
125
|
name: refinements
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '11.0'
|
131
|
+
type: :runtime
|
132
|
+
prerelease: false
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - "~>"
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '11.0'
|
138
|
+
- !ruby/object:Gem::Dependency
|
139
|
+
name: runcom
|
98
140
|
requirement: !ruby/object:Gem::Requirement
|
99
141
|
requirements:
|
100
142
|
- - "~>"
|
@@ -108,33 +150,33 @@ dependencies:
|
|
108
150
|
- !ruby/object:Gem::Version
|
109
151
|
version: '10.0'
|
110
152
|
- !ruby/object:Gem::Dependency
|
111
|
-
name:
|
153
|
+
name: sod
|
112
154
|
requirement: !ruby/object:Gem::Requirement
|
113
155
|
requirements:
|
114
156
|
- - "~>"
|
115
157
|
- !ruby/object:Gem::Version
|
116
|
-
version: '
|
158
|
+
version: '0.0'
|
117
159
|
type: :runtime
|
118
160
|
prerelease: false
|
119
161
|
version_requirements: !ruby/object:Gem::Requirement
|
120
162
|
requirements:
|
121
163
|
- - "~>"
|
122
164
|
- !ruby/object:Gem::Version
|
123
|
-
version: '
|
165
|
+
version: '0.0'
|
124
166
|
- !ruby/object:Gem::Dependency
|
125
167
|
name: spek
|
126
168
|
requirement: !ruby/object:Gem::Requirement
|
127
169
|
requirements:
|
128
170
|
- - "~>"
|
129
171
|
- !ruby/object:Gem::Version
|
130
|
-
version: '
|
172
|
+
version: '2.0'
|
131
173
|
type: :runtime
|
132
174
|
prerelease: false
|
133
175
|
version_requirements: !ruby/object:Gem::Requirement
|
134
176
|
requirements:
|
135
177
|
- - "~>"
|
136
178
|
- !ruby/object:Gem::Version
|
137
|
-
version: '
|
179
|
+
version: '2.0'
|
138
180
|
- !ruby/object:Gem::Dependency
|
139
181
|
name: zeitwerk
|
140
182
|
requirement: !ruby/object:Gem::Requirement
|
@@ -163,19 +205,18 @@ files:
|
|
163
205
|
- README.adoc
|
164
206
|
- exe/sublime_text_kit
|
165
207
|
- lib/sublime_text_kit.rb
|
166
|
-
- lib/sublime_text_kit/cli/actions/
|
167
|
-
- lib/sublime_text_kit/cli/actions/
|
168
|
-
- lib/sublime_text_kit/cli/actions/
|
169
|
-
- lib/sublime_text_kit/cli/actions/metadata.rb
|
208
|
+
- lib/sublime_text_kit/cli/actions/metadata/create.rb
|
209
|
+
- lib/sublime_text_kit/cli/actions/metadata/delete.rb
|
210
|
+
- lib/sublime_text_kit/cli/actions/metadata/recreate.rb
|
170
211
|
- lib/sublime_text_kit/cli/actions/session.rb
|
171
212
|
- lib/sublime_text_kit/cli/actions/snippets.rb
|
172
213
|
- lib/sublime_text_kit/cli/actions/update.rb
|
173
|
-
- lib/sublime_text_kit/cli/parser.rb
|
174
|
-
- lib/sublime_text_kit/cli/parsers/core.rb
|
175
214
|
- lib/sublime_text_kit/cli/shell.rb
|
176
|
-
- lib/sublime_text_kit/configuration/
|
215
|
+
- lib/sublime_text_kit/configuration/contract.rb
|
177
216
|
- lib/sublime_text_kit/configuration/defaults.yml
|
178
|
-
- lib/sublime_text_kit/configuration/
|
217
|
+
- lib/sublime_text_kit/configuration/model.rb
|
218
|
+
- lib/sublime_text_kit/configuration/transformers/session_path.rb
|
219
|
+
- lib/sublime_text_kit/configuration/transformers/user_dir.rb
|
179
220
|
- lib/sublime_text_kit/container.rb
|
180
221
|
- lib/sublime_text_kit/import.rb
|
181
222
|
- lib/sublime_text_kit/metadata/handler.rb
|
@@ -214,7 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
255
|
- !ruby/object:Gem::Version
|
215
256
|
version: '0'
|
216
257
|
requirements: []
|
217
|
-
rubygems_version: 3.4.
|
258
|
+
rubygems_version: 3.4.14
|
218
259
|
signing_key:
|
219
260
|
specification_version: 4
|
220
261
|
summary: A command line interface for managing Sublime Text metadata.
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module SublimeTextKit
|
4
|
-
module CLI
|
5
|
-
module Actions
|
6
|
-
# Handles gem configuration action.
|
7
|
-
class Config
|
8
|
-
include SublimeTextKit::Import[:kernel, :logger]
|
9
|
-
|
10
|
-
def initialize(configuration: Configuration::Loader::CLIENT, **)
|
11
|
-
super(**)
|
12
|
-
@configuration = configuration
|
13
|
-
end
|
14
|
-
|
15
|
-
def call action
|
16
|
-
case action
|
17
|
-
when :edit then edit
|
18
|
-
when :view then view
|
19
|
-
else logger.error { "Invalid configuration action: #{action}." }
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
attr_reader :configuration
|
26
|
-
|
27
|
-
def edit = kernel.system("$EDITOR #{configuration.current}")
|
28
|
-
|
29
|
-
def view = kernel.system("cat #{configuration.current}")
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "dry/container"
|
4
|
-
|
5
|
-
module SublimeTextKit
|
6
|
-
module CLI
|
7
|
-
module Actions
|
8
|
-
# Provides a single container with application and action specific dependencies.
|
9
|
-
module Container
|
10
|
-
extend Dry::Container::Mixin
|
11
|
-
|
12
|
-
merge SublimeTextKit::Container
|
13
|
-
|
14
|
-
register(:config) { Actions::Config.new }
|
15
|
-
register(:metadata) { Actions::Metadata.new }
|
16
|
-
register(:session) { Actions::Session.new }
|
17
|
-
register(:snippets) { Actions::Snippets.new }
|
18
|
-
register(:update) { Actions::Update.new }
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,61 +0,0 @@
|
|
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
|
-
include SublimeTextKit::Import[:configuration, :logger]
|
11
|
-
|
12
|
-
using Refinements::Pathnames
|
13
|
-
|
14
|
-
def initialize(handler: SublimeTextKit::Metadata::Handler, **)
|
15
|
-
super(**)
|
16
|
-
@handler = handler
|
17
|
-
end
|
18
|
-
|
19
|
-
def call kind
|
20
|
-
case kind
|
21
|
-
when :create then create
|
22
|
-
when :delete then delete
|
23
|
-
when :recreate then recreate
|
24
|
-
else logger.error { "Unknown metadata action: #{kind}." }
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
attr_reader :handler
|
31
|
-
|
32
|
-
def create
|
33
|
-
logger.info "Creating metadata in #{metadata_dir}..."
|
34
|
-
process_projects __method__
|
35
|
-
logger.info "Metadata created."
|
36
|
-
end
|
37
|
-
|
38
|
-
def delete
|
39
|
-
logger.info "Deleting metadata in #{metadata_dir}..."
|
40
|
-
process_projects __method__
|
41
|
-
logger.info "Metadata deleted."
|
42
|
-
end
|
43
|
-
|
44
|
-
def recreate
|
45
|
-
logger.info "Recreating metadata in #{metadata_dir}..."
|
46
|
-
process_projects __method__
|
47
|
-
logger.info "Metadata recreated."
|
48
|
-
end
|
49
|
-
|
50
|
-
def process_projects method
|
51
|
-
configuration.project_dirs.each do |directory|
|
52
|
-
handler.with_project(directory, metadata_dir).public_send method
|
53
|
-
handler.with_workspace(directory, metadata_dir).public_send method
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def metadata_dir = Pathname(configuration.metadata_dir).expand_path
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "core"
|
4
|
-
require "optparse"
|
5
|
-
|
6
|
-
module SublimeTextKit
|
7
|
-
module CLI
|
8
|
-
# Assembles and parses all Command Line Interface (CLI) options.
|
9
|
-
class Parser
|
10
|
-
include Import[:configuration]
|
11
|
-
|
12
|
-
CLIENT = OptionParser.new nil, 40, " "
|
13
|
-
|
14
|
-
def initialize(section: Parsers::Core, client: CLIENT, **)
|
15
|
-
super(**)
|
16
|
-
@section = section
|
17
|
-
@client = client
|
18
|
-
@configuration_duplicate = configuration.dup
|
19
|
-
end
|
20
|
-
|
21
|
-
def call arguments = Core::EMPTY_ARRAY
|
22
|
-
section.call(configuration_duplicate, client:)
|
23
|
-
client.parse arguments
|
24
|
-
configuration_duplicate.freeze
|
25
|
-
end
|
26
|
-
|
27
|
-
def to_s = client.to_s
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
attr_reader :section, :client, :configuration_duplicate
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,103 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "core"
|
4
|
-
require "refinements/structs"
|
5
|
-
|
6
|
-
module SublimeTextKit
|
7
|
-
module CLI
|
8
|
-
module Parsers
|
9
|
-
# Handles parsing of Command Line Interface (CLI) core options.
|
10
|
-
class Core
|
11
|
-
include Import[:specification]
|
12
|
-
|
13
|
-
using Refinements::Structs
|
14
|
-
|
15
|
-
def self.call(...) = new(...).call
|
16
|
-
|
17
|
-
def initialize(configuration = Container[:configuration], client: Parser::CLIENT, **)
|
18
|
-
super(**)
|
19
|
-
@configuration = configuration
|
20
|
-
@client = client
|
21
|
-
end
|
22
|
-
|
23
|
-
def call arguments = ::Core::EMPTY_ARRAY
|
24
|
-
client.banner = specification.labeled_summary
|
25
|
-
client.separator "\nUSAGE:\n"
|
26
|
-
collate
|
27
|
-
client.parse arguments
|
28
|
-
configuration
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
attr_reader :configuration, :client
|
34
|
-
|
35
|
-
def collate = private_methods.sort.grep(/add_/).each { |method| __send__ method }
|
36
|
-
|
37
|
-
def add_config
|
38
|
-
client.on(
|
39
|
-
"-c",
|
40
|
-
"--config ACTION",
|
41
|
-
%i[edit view],
|
42
|
-
"Manage gem configuration. Actions: edit or view."
|
43
|
-
) do |action|
|
44
|
-
configuration.merge! action_config: action
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def add_metadata
|
49
|
-
client.on(
|
50
|
-
"-m",
|
51
|
-
"--metadata ACTION",
|
52
|
-
%i[create delete recreate],
|
53
|
-
"Manage project metadata. Actions: create, delete, or recreate."
|
54
|
-
) do |action|
|
55
|
-
configuration.merge! action_metadata: action
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def add_session
|
60
|
-
client.on "-S", "--session", "Rebuild session metadata." do
|
61
|
-
configuration.merge! action_session: true
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def add_snippets
|
66
|
-
client.on(
|
67
|
-
"-s",
|
68
|
-
"--snippets [FORMAT]",
|
69
|
-
%i[markdown ascii_doc],
|
70
|
-
"View snippets. Formats: markdown or ascii_doc. " \
|
71
|
-
"Default: #{snippets_format}."
|
72
|
-
) do |kind|
|
73
|
-
configuration.merge! action_snippets: true, snippets_format: kind || snippets_format
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def add_update
|
78
|
-
client.on(
|
79
|
-
"-u",
|
80
|
-
"--update",
|
81
|
-
"Update project and session metadata based on current settings."
|
82
|
-
) do
|
83
|
-
configuration.merge! action_update: true
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def add_version
|
88
|
-
client.on "-v", "--version", "Show gem version." do
|
89
|
-
configuration.merge! action_version: true
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def add_help
|
94
|
-
client.on "-h", "--help", "Show this message." do
|
95
|
-
configuration.merge! action_help: true
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
def snippets_format = configuration.snippets_format
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "refinements/pathnames"
|
4
|
-
|
5
|
-
module SublimeTextKit
|
6
|
-
module Configuration
|
7
|
-
# Defines configuration content as the primary source of truth for use throughout the gem.
|
8
|
-
Content = Struct.new(
|
9
|
-
:action_config,
|
10
|
-
:action_help,
|
11
|
-
:action_metadata,
|
12
|
-
:action_session,
|
13
|
-
:action_snippets,
|
14
|
-
:action_update,
|
15
|
-
:action_version,
|
16
|
-
:project_roots,
|
17
|
-
:metadata_dir,
|
18
|
-
:snippets_format,
|
19
|
-
:session_path,
|
20
|
-
:user_dir,
|
21
|
-
keyword_init: true
|
22
|
-
) do
|
23
|
-
using Refinements::Pathnames
|
24
|
-
|
25
|
-
def initialize *arguments
|
26
|
-
super
|
27
|
-
|
28
|
-
home = Pathname ENV.fetch("HOME", "")
|
29
|
-
|
30
|
-
self[:session_path] ||= home.join(
|
31
|
-
"Library/Application Support/Sublime Text/Local/Session.sublime_session"
|
32
|
-
)
|
33
|
-
|
34
|
-
self[:user_dir] ||= home.join "Library/Application Support/Sublime Text/Packages/User"
|
35
|
-
|
36
|
-
freeze
|
37
|
-
end
|
38
|
-
|
39
|
-
def project_dirs
|
40
|
-
Array(project_roots).map { |path| Pathname(path).expand_path }
|
41
|
-
.flat_map(&:directories)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,35 +0,0 @@
|
|
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 Configuration
|
11
|
-
# Represents the fully assembled Command Line Interface (CLI) configuration.
|
12
|
-
class Loader
|
13
|
-
using Refinements::Hashes
|
14
|
-
using Refinements::Structs
|
15
|
-
|
16
|
-
DEFAULTS = YAML.load_file(Pathname(__dir__).join("defaults.yml")).freeze
|
17
|
-
CLIENT = Runcom::Config.new "sublime_text_kit/configuration.yml", defaults: DEFAULTS
|
18
|
-
|
19
|
-
def self.call = new.call
|
20
|
-
|
21
|
-
def self.with_defaults = new(client: DEFAULTS)
|
22
|
-
|
23
|
-
def initialize content: Content.new, client: CLIENT
|
24
|
-
@content = content
|
25
|
-
@client = client
|
26
|
-
end
|
27
|
-
|
28
|
-
def call = content.merge(**client.to_h.flatten_keys)
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
attr_reader :content, :client
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|