tomo 0.12.0 → 0.13.0

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: 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: