tomo 0.12.0 → 0.13.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3709b7fde6da1f50f3f23f1b002e0ac0a6d674d48b29d3ebe25870aa4fa6c52f
4
- data.tar.gz: ad3f15ea1ce2dd522b3d8db8063d019db71e734433a0423beed4e754ffbe5995
3
+ metadata.gz: 79cfaa19c379a5d143b07102f521a707495a89446b4c08a9048b11ee212585b6
4
+ data.tar.gz: 180a8b7e1a7812e7a71b8c9b0dd1c8c9607ac81a5e025de7e685de86dca534d8
5
5
  SHA512:
6
- metadata.gz: 92e4db85ca0f4c31ccf11f291ba4c1afc1712df118235128e385ff119033f2898f9f1c81e57d961defbbca7cfa9498970811806de50086388a3758d6eda060c9
7
- data.tar.gz: 45c1c79d1167e47591e4cea373b93d06136bb62bf54d1f3e2d8d6d7a6f6c2c20956f38d3c0fb051869f5e27800b8571f9e853dd39e24e7e82f352c345c4f2356
6
+ metadata.gz: 737d43b6ab7ca31529ec9c1c3cc7ea98c87af44cc7c7324c36287e536afc0b95313a77ec989295f7f3998ad4eb7acc9b41e2e128d2dceb78c93e4f3c6d529a71
7
+ data.tar.gz: e704de839bac059e668f0aa43433cddadd46e2bf2978e6f49d135da3c9d9deb5a63e3f5660bdbf286f3b49f7263201d73a8e24c16986f526179bed4574deaef9
@@ -7,75 +7,33 @@ module Tomo
7
7
 
8
8
  def initialize(settings)
9
9
  @settings = symbolize(settings)
10
- @deprecation_warnings = []
11
10
  end
12
11
 
13
12
  def call
14
13
  hash = Hash[settings.keys.map { |name| [name, fetch(name)] }]
15
14
  dump_settings(hash) if Tomo.debug?
16
- print_deprecation_warnings
17
15
  hash
18
16
  end
19
17
 
20
18
  private
21
19
 
22
- attr_reader :settings, :deprecation_warnings
20
+ attr_reader :settings
23
21
 
24
- # rubocop:disable Metrics/AbcSize
25
22
  def fetch(name, stack=[])
26
23
  raise_circular_dependency_error(name, stack) if stack.include?(name)
27
24
  value = settings.fetch(name)
28
25
  return value unless value.is_a?(String)
29
26
 
30
- value.gsub(/%{(\w+)}|%<(\w+)>/) do
31
- token = Regexp.last_match[1] || Regexp.last_match[2]
32
- deprecation_warnings << name if Regexp.last_match[2]
33
-
34
- fetch(token.to_sym, stack + [name])
27
+ value.gsub(/%{(\w+)}/) do
28
+ fetch(Regexp.last_match[1].to_sym, stack + [name])
35
29
  end
36
30
  end
37
- # rubocop:enable Metrics/AbcSize
38
31
 
39
32
  def raise_circular_dependency_error(name, stack)
40
33
  dependencies = [*stack, name].join(" -> ")
41
34
  raise "Circular dependency detected in settings: #{dependencies}"
42
35
  end
43
36
 
44
- # rubocop:disable Metrics/AbcSize
45
- # rubocop:disable Metrics/MethodLength
46
- def print_deprecation_warnings
47
- return if deprecation_warnings.empty?
48
-
49
- examples = ""
50
- deprecation_warnings.uniq.each do |name|
51
- sett = settings[name].inspect
52
- old_syntax = sett.gsub(
53
- /%<(\w+)>/,
54
- Colors.red("%<") + '\1' + Colors.red(">")
55
- )
56
- new_syntax = sett.gsub(
57
- /%<(\w+)>/,
58
- Colors.green("%{") + '\1' + Colors.green("}")
59
- )
60
-
61
- examples << "\n:#{name}\n\n"
62
- examples << " Replace: set #{name}: #{old_syntax}\n"
63
- examples << " with this: set #{name}: #{new_syntax}\n"
64
- end
65
-
66
- Tomo.logger.warn <<~WARNING
67
- There are settings using the deprecated %<...> interpolation syntax.
68
- #{examples}
69
- #{Colors.red('The %<...> syntax will not work in future versions of tomo.')}
70
-
71
- WARNING
72
-
73
- # Make sure people see the warning!
74
- sleep 5
75
- end
76
- # rubocop:enable Metrics/AbcSize
77
- # rubocop:enable Metrics/MethodLength
78
-
79
37
  def symbolize(hash)
80
38
  hash.each_with_object({}) do |(key, value), symbolized|
81
39
  symbolized[key.to_sym] = value
@@ -9,14 +9,27 @@ module Tomo
9
9
  To see a list of all available tasks, run #{blue('tomo tasks')}.
10
10
  ERROR
11
11
 
12
- # TODO: suggest "did you forget to add the <abc> plugin?"
12
+ sugg = spelling_suggestion || missing_plugin_suggestion
13
+ error << sugg if sugg
14
+ error
15
+ end
13
16
 
17
+ private
18
+
19
+ def spelling_suggestion
14
20
  sugg = Error::Suggestions.new(
15
21
  dictionary: known_tasks,
16
22
  word: unknown_task
17
23
  )
18
- error << sugg.to_console if sugg.any?
19
- error
24
+ sugg.to_console if sugg.any?
25
+ end
26
+
27
+ def missing_plugin_suggestion
28
+ unknown_plugin = unknown_task[/\A(.+?):/, 1]
29
+ known_plugins = known_tasks.map { |t| t.split(":").first }.uniq
30
+ return if unknown_plugin.nil? || known_plugins.include?(unknown_plugin)
31
+
32
+ "\nDid you forget to install the #{blue(unknown_plugin)} plugin?"
20
33
  end
21
34
  end
22
35
  end
data/lib/tomo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Tomo
2
- VERSION = "0.12.0".freeze
2
+ VERSION = "0.13.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tomo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Brictson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-13 00:00:00.000000000 Z
11
+ date: 2019-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -150,7 +150,11 @@ dependencies:
150
150
  - - '='
151
151
  - !ruby/object:Gem::Version
152
152
  version: 1.5.1
153
- description:
153
+ description: Tomo is a feature-rich deployment tool that contains everything you need
154
+ to deploy a basic Rails app out of the box. It has an opinionated, production-tested
155
+ set of defaults, but is easily extensible via a well-documented plugin system. Unlike
156
+ other Ruby-based deployment tools, tomo’s friendly command-line interface and task
157
+ system do not rely on Rake.
154
158
  email:
155
159
  - opensource@mattbrictson.com
156
160
  executables: