planter-cli 0.0.3 → 3.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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -1
  3. data/.rubocop.yml +5 -7
  4. data/CHANGELOG.md +21 -0
  5. data/README.md +28 -1
  6. data/Rakefile +54 -18
  7. data/bin/plant +6 -0
  8. data/docker/Dockerfile-2.6 +5 -5
  9. data/docker/Dockerfile-2.7 +3 -3
  10. data/docker/Dockerfile-3.0 +3 -3
  11. data/lib/planter/array.rb +51 -0
  12. data/lib/planter/color.rb +1 -1
  13. data/lib/planter/errors.rb +14 -0
  14. data/lib/planter/file.rb +87 -4
  15. data/lib/planter/fileentry.rb +5 -1
  16. data/lib/planter/filelist.rb +43 -7
  17. data/lib/planter/hash.rb +81 -84
  18. data/lib/planter/plant.rb +4 -10
  19. data/lib/planter/prompt.rb +6 -3
  20. data/lib/planter/script.rb +24 -12
  21. data/lib/planter/string.rb +134 -29
  22. data/lib/planter/tag.rb +54 -0
  23. data/lib/planter/version.rb +1 -1
  24. data/lib/planter.rb +60 -34
  25. data/planter-cli.gemspec +1 -0
  26. data/spec/config.yml +2 -0
  27. data/spec/planter/array_spec.rb +28 -0
  28. data/spec/planter/file_entry_spec.rb +40 -0
  29. data/spec/planter/file_spec.rb +19 -0
  30. data/spec/planter/filelist_spec.rb +15 -0
  31. data/spec/planter/hash_spec.rb +110 -0
  32. data/spec/planter/plant_spec.rb +1 -0
  33. data/spec/planter/script_spec.rb +80 -0
  34. data/spec/planter/string_spec.rb +215 -2
  35. data/spec/planter/symbol_spec.rb +23 -0
  36. data/spec/planter.yml +6 -0
  37. data/spec/planter_spec.rb +82 -0
  38. data/spec/scripts/test.sh +3 -0
  39. data/spec/scripts/test_fail.sh +3 -0
  40. data/spec/spec_helper.rb +8 -2
  41. data/spec/templates/test/%%project:snake%%.rtf +10 -0
  42. data/spec/templates/test/Rakefile +6 -0
  43. data/spec/templates/test/_planter.yml +12 -0
  44. data/spec/templates/test/_scripts/test.sh +3 -0
  45. data/spec/templates/test/_scripts/test_fail.sh +3 -0
  46. data/spec/templates/test/test.rb +5 -0
  47. data/spec/test_out/image.png +0 -0
  48. data/spec/test_out/test2.rb +5 -0
  49. data/src/_README.md +28 -1
  50. metadata +57 -2
@@ -9,12 +9,225 @@ describe ::String do
9
9
 
10
10
  describe '.to_slug' do
11
11
  it 'slugifies a string' do
12
- expect('This is a test string'.to_slug).to match /this-is-a-test-string/
12
+ expect('This is a test string'.to_slug).to match(/this-is-a-test-string/)
13
13
  end
14
14
 
15
15
  it 'slugifies bad characters' do
16
- expect('This: #is a test string!'.to_slug).to match /this-colon-hash-is-a-test-string-bang/
16
+ expect('This: #is a test string!'.to_slug).to match(/this-colon-hash-is-a-test-string-bang/)
17
17
  end
18
18
  end
19
19
 
20
+ describe '.to_class_name' do
21
+ it 'converts string to CamelCase' do
22
+ expect('this is a test string'.to_class_name).to eq 'ThisIsATestString'
23
+ end
24
+
25
+ it 'handles special characters' do
26
+ expect('this: #is a test string!'.to_class_name).to eq 'ThisIsATestString'
27
+ end
28
+ end
29
+
30
+ describe '.snake_case' do
31
+ it 'converts CamelCase to snake_case' do
32
+ expect('ThisIsATestString'.snake_case).to eq 'this_is_a_test_string'
33
+ end
34
+
35
+ it 'handles strings with spaces' do
36
+ expect('This is a test string'.snake_case).to eq 'this_is_a_test_string'
37
+ end
38
+
39
+ it 'handles strings with special characters' do
40
+ expect('This: #is a test string!'.snake_case).to eq 'this_is_a_test_string'
41
+ end
42
+ end
43
+
44
+ describe '.camel_case' do
45
+ it 'converts snake_case to CamelCase' do
46
+ expect('this_is_a_test_string'.camel_case).to eq 'thisIsATestString'
47
+ end
48
+
49
+ it 'handles strings with spaces' do
50
+ expect('this is a test string'.camel_case).to eq 'thisIsATestString'
51
+ end
52
+
53
+ it 'handles strings with special characters' do
54
+ expect('this: #is a test string!'.camel_case).to eq 'thisIsATestString'
55
+ end
56
+ end
57
+
58
+ describe '.title_case' do
59
+ it 'converts a string to Title Case' do
60
+ expect('this is a test string'.title_case).to eq 'This Is A Test String'
61
+ end
62
+
63
+ it 'handles strings with special characters' do
64
+ expect('this: #is a test string!'.title_case).to eq 'This: #Is A Test String!'
65
+ end
66
+
67
+ it 'handles mixed case strings' do
68
+ expect('ThIs Is A TeSt StRiNg'.title_case).to eq 'This Is A Test String'
69
+ end
70
+ end
71
+
72
+ describe '.apply_variables' do
73
+ it 'replaces placeholders with variable values' do
74
+ template = 'Hello, %%name%%!'
75
+ variables = { name: 'World' }
76
+ expect(template.apply_variables(variables: variables)).to eq 'Hello, World!'
77
+ end
78
+
79
+ it 'handles multiple variables' do
80
+ template = 'Hello, %%first_name%% %%last_name%%!'
81
+ variables = { first_name: 'John', last_name: 'Doe' }
82
+ expect(template.apply_variables(variables: variables)).to eq 'Hello, John Doe!'
83
+ end
84
+
85
+ it 'handles missing variables gracefully' do
86
+ template = 'Hello, %%name%%!'
87
+ variables = {}
88
+ expect(template.apply_variables(variables: variables)).to eq 'Hello, %%name%%!'
89
+ end
90
+
91
+ it 'handles variables with special characters' do
92
+ template = 'Hello, %%name%%!'
93
+ variables = { name: 'John #Doe' }
94
+ expect(template.apply_variables(variables: variables)).to eq 'Hello, John #Doe!'
95
+ end
96
+
97
+ it 'handles modifiers' do
98
+ template = 'Hello, %%title:upper%% %%name:title%%!'
99
+ variables = { title: 'Mr.', name: 'john do' }
100
+ expect(template.apply_variables(variables: variables)).to eq 'Hello, MR. John Do!'
101
+ end
102
+
103
+ it 'operates in place' do
104
+ template = 'Hello, %%title:upper%% %%name:title%%!'
105
+ variables = { title: 'Mr.', name: 'john do' }
106
+ template.apply_variables!(variables: variables)
107
+ expect(template).to eq 'Hello, MR. John Do!'
108
+ end
109
+
110
+ it 'handles last_only' do
111
+ template = 'Hello, %%title%% %%title:upper%%!'
112
+ variables = { title: 'project title' }
113
+ expect(template.apply_variables(variables: variables, last_only: true)).to eq 'Hello, %%title%% PROJECT TITLE!'
114
+ end
115
+ end
116
+
117
+ describe '.apply_regexes' do
118
+ it 'applies a single regex replacement' do
119
+ template = 'Hello, World!'
120
+ regexes = { /World/ => 'Universe' }
121
+ expect(template.apply_regexes(regexes)).to eq 'Hello, Universe!'
122
+ end
123
+
124
+ it 'applies multiple regex replacements' do
125
+ template = 'Hello, World! Welcome to the World!'
126
+ regexes = { /World/ => 'Universe', /Welcome/ => 'Greetings' }
127
+ expect(template.apply_regexes(regexes)).to eq 'Hello, Universe! Greetings to the Universe!'
128
+ end
129
+
130
+ it 'handles no regex replacements' do
131
+ template = 'Hello, World!'
132
+ regexes = {}
133
+ expect(template.apply_regexes(regexes)).to eq 'Hello, World!'
134
+ end
135
+
136
+ it 'handles special characters in regex' do
137
+ template = 'Hello, World! #Welcome to the World!'
138
+ regexes = { /#Welcome/ => 'Greetings' }
139
+ expect(template.apply_regexes(regexes)).to eq 'Hello, World! Greetings to the World!'
140
+ end
141
+
142
+ it 'Operates in place' do
143
+ template = 'Hello, World! #Welcome to the World!'
144
+ regexes = { /#Welcome/ => 'Greetings' }
145
+ template.apply_regexes!(regexes)
146
+ expect(template).to eq 'Hello, World! Greetings to the World!'
147
+ end
148
+ end
149
+
150
+ describe '.ext' do
151
+ it 'applies an extension' do
152
+ expect("filename.rb".ext('txt')).to eq 'filename.txt'
153
+ end
154
+
155
+ it 'ignores an existing extension' do
156
+ expect("filename.rb".ext('rb')).to eq 'filename.rb'
157
+ end
158
+ end
159
+
160
+ describe '.normalize_type' do
161
+ it 'normalizes a date type' do
162
+ expect("da".normalize_type.to_s).to eq "date"
163
+ end
164
+
165
+ it 'normalizes an integer type' do
166
+ expect("int".normalize_type.to_s).to eq "integer"
167
+ end
168
+
169
+ it 'normalizes a float type' do
170
+ expect("f".normalize_type.to_s).to eq "float"
171
+ end
172
+
173
+ it 'normalizes a multiline type' do
174
+ expect("multi".normalize_type.to_s).to eq "multiline"
175
+ end
176
+
177
+ it 'normalizes a class type' do
178
+ expect("c".normalize_type.to_s).to eq "class"
179
+ end
180
+
181
+ it 'normalizes a module type' do
182
+ expect("m".normalize_type.to_s).to eq "module"
183
+ end
184
+ end
185
+
186
+ describe '.normalize_operator' do
187
+ it 'normalizes a copy operator' do
188
+ expect("copy".normalize_operator.to_s).to eq "copy"
189
+ end
190
+ end
191
+
192
+ describe '.coerce' do
193
+ it 'coerces a date type' do
194
+ expect("now".coerce(:date)).to match(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}/)
195
+ end
196
+
197
+ it 'coerces an integer type' do
198
+ expect("10".coerce(:integer)).to eq 10
199
+ end
200
+
201
+ it 'coerces a float type' do
202
+ expect("10.0".coerce(:float)).to eq 10.0
203
+ end
204
+
205
+ it 'coerces a multiline type' do
206
+ expect("multi\nline".coerce(:multiline)).to eq "multi\nline"
207
+ end
208
+
209
+ it 'coerces a class type' do
210
+ expect("Some class".coerce(:class)).to eq "SomeClass"
211
+ end
212
+ end
213
+
214
+ describe '.clean_encode!' do
215
+ it 'cleans an encoded string' do
216
+ s = "This is a test string"
217
+ s.clean_encode!
218
+ expect(s).to eq "This is a test string"
219
+ end
220
+ end
221
+
222
+ describe '.highlight_character' do
223
+ it 'highlights characters' do
224
+ s = "(o)ption 1 (s)econd option"
225
+ expect(s.highlight_character).to eq "{dw}({xbw}o{dw}){xw}ption 1 {dw}({xbw}s{dw}){xw}econd option"
226
+ end
227
+
228
+ it 'highlights characters with default option' do
229
+ s = "(o)ption 1 (s)econd option"
230
+ expect(s.highlight_character(default: 's')).to eq "{dw}({xbw}o{dw}){xw}ption 1 {dw}({xbc}s{dw}){xw}econd option"
231
+ end
232
+ end
20
233
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe ::Symbol do
6
+ describe '.to_var' do
7
+ it 'turns a symbol into a string with _ instead of :' do
8
+ expect(:var_name.to_var).to eq :var_name
9
+ end
10
+ end
11
+
12
+ describe '.normalize_type' do
13
+ it 'normalizes a type symbol' do
14
+ expect(:string.normalize_type).to eq :string
15
+ end
16
+ end
17
+
18
+ describe '.normalize_operator' do
19
+ it 'normalizes an operator symbol' do
20
+ expect(:copy.normalize_operator).to eq :copy
21
+ end
22
+ end
23
+ end
data/spec/planter.yml ADDED
@@ -0,0 +1,6 @@
1
+ ---
2
+ defaults: false
3
+ git_init: false
4
+ files:
5
+ _planter.yml: ignore
6
+ color: true
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe "Planter" do
6
+ describe '.notify' do
7
+ it 'prints a warning message stderr' do
8
+ expect(Planter.notify('hello world', :warn)).to be true
9
+ end
10
+
11
+ it 'prints an info message stderr' do
12
+ expect(Planter.notify('hello world', :info)).to be true
13
+ end
14
+
15
+ it 'prints a debug message to stderr' do
16
+ Planter.debug = true
17
+ expect(Planter.notify('hello world', :debug)).to be true
18
+ end
19
+
20
+ it 'does not print a debug message to stderr' do
21
+ Planter.debug = false
22
+ expect(Planter.notify('hello world', :debug)).to be false
23
+ end
24
+
25
+ it 'prints an error message and exits' do
26
+ expect do
27
+ Planter.notify('Error', :error, exit_code: 10)
28
+ end.to raise_error(SystemExit)
29
+ end
30
+ end
31
+
32
+ describe '.spinner' do
33
+ it 'initializes a new TTY::Spinner object if not already initialized' do
34
+ Planter.instance_variable_set(:@spinner, nil) # Ensure spinner is not initialized
35
+ spinner = Planter.spinner
36
+ expect(spinner).to be_a(TTY::Spinner)
37
+ end
38
+
39
+ it 'returns the existing TTY::Spinner object if already initialized' do
40
+ existing_spinner = TTY::Spinner.new
41
+ Planter.instance_variable_set(:@spinner, existing_spinner)
42
+ spinner = Planter.spinner
43
+ expect(spinner).to eq(existing_spinner)
44
+ end
45
+ end
46
+
47
+ describe '.config=' do
48
+ # it 'sets the config' do
49
+ # path = File.expand_path('spec/noop')
50
+ # FileUtils.mkdir_p(path)
51
+ # Planter.base_dir = File.expand_path('spec/noop')
52
+ # allow(File).to receive(:open).with(File.join(Planter.base_dir, "config.yml"), 'w')
53
+ # allow(File).to receive(:open).with(File.join(Planter.base_dir, 'templates', 'test', '_planter.yml'),
54
+ # 'w')
55
+ # Planter.config = 'test'
56
+ # expect(File.exist?('spec/noop/config.yml')).to be true
57
+ # FileUtils.remove_entry_secure(path)
58
+ # end
59
+ #
60
+ # it 'creates a new configuration file if it does not exist' do
61
+ # path = File.expand_path('spec/noop')
62
+ # FileUtils.mkdir_p(path)
63
+ # Planter.base_dir = File.expand_path('spec/noop')
64
+ # allow(File).to receive(:exist?).with(File.join(Planter.base_dir, 'config.yml')).and_return(false)
65
+ # expect(File).to receive(:open).with(File.join(Planter.base_dir, 'config.yml'), 'w')
66
+ # Planter.config = 'test'
67
+ # FileUtils.remove_entry_secure(path)
68
+ # end
69
+
70
+ # it 'creates a new template directory if it does not exist' do
71
+ # path = File.expand_path('spec/noop')
72
+ # FileUtils.mkdir_p(path)
73
+ # Planter.base_dir = File.expand_path('spec/noop')
74
+ # allow(File).to receive(:exist?).with(File.join(Planter.base_dir, 'templates', 'test',
75
+ # '_planter.yml')).and_return(false)
76
+ # allow(File).to receive(:directory?).with(File.join(Planter.base_dir, 'templates', 'test')).and_return(false)
77
+ # expect(FileUtils).to receive(:mkdir_p).with(File.join(Planter.base_dir, 'templates', 'test'))
78
+ # Planter.config = 'test'
79
+ # FileUtils.remove_entry_secure(path)
80
+ # end
81
+ end
82
+ end
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ echo "Oops"
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ exit 128
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  require 'simplecov'
2
+ require 'cli-test'
3
+ require 'fileutils'
2
4
 
3
5
  SimpleCov.start
4
6
 
@@ -13,8 +15,12 @@ require 'planter'
13
15
 
14
16
  RSpec.configure do |c|
15
17
  c.expect_with(:rspec) { |e| e.syntax = :expect }
16
- c.before(:each) do
18
+ c.before do
19
+ ENV["RUBYOPT"] = '-W1'
20
+ ENV['PLANTER_DEBUG'] = 'true'
21
+ Planter.base_dir = File.expand_path('spec')
17
22
  allow(FileUtils).to receive(:remove_entry_secure).with(anything)
23
+ allow(FileUtils).to receive(:mkdir_p).with(anything)
18
24
  end
19
- c.add_formatter 'Fuubar'
25
+ c.add_formatter 'd'
20
26
  end
@@ -0,0 +1,10 @@
1
+ {\rtf1\ansi\ansicpg1252\cocoartf2761
2
+ \cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
3
+ {\colortbl;\red255\green255\blue255;}
4
+ {\*\expandedcolortbl;;}
5
+ \margl1440\margr1440\vieww11520\viewh8400\viewkind0
6
+ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
7
+
8
+ \f0\fs24 \cf0 Planter\
9
+ \
10
+ %%project:title%%}
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
@@ -0,0 +1,12 @@
1
+ ---
2
+ variables:
3
+ - key: var_key
4
+ prompt: CLI Prompt
5
+ type: "[string, float, integer, number, date]"
6
+ value: "(optional, for date type can be today, time, now, etc., empty to prompt)"
7
+ default: "(optional default value, leave empty or remove key for no default)"
8
+ min: "(optional, for number type set a minimum value)"
9
+ max: "(optional, for number type set a maximum value)"
10
+ git_init: false
11
+ files:
12
+ "*.tmp": ignore
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ echo "Oops"
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ exit 128
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ def test
4
+ puts "test"
5
+ end
Binary file
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ def test
4
+ puts "test"
5
+ end
data/src/_README.md CHANGED
@@ -19,7 +19,18 @@ If [Gum](https://github.com/charmbracelet/gum) is available it will be used for
19
19
 
20
20
  ## Configuration
21
21
 
22
- Planter's base configuration is in `~/.config/planter/config.yml`. This file can contain any of the keys used in templates (see below) and will serve as a base configuration for all templates. Any key defined in this file will be overridden if it exists in a template.
22
+ Planter's base configuration is in `~/.config/planter/planter.yml`. This file can contain any of the keys used in templates (see below) and will serve as a base configuration for all templates. Any key defined in this file will be overridden if it exists in a template.
23
+
24
+ Example config (written on first run):
25
+
26
+ ```yaml
27
+ files:
28
+ .DS_Store: ignore
29
+ "*.tmp": ignore
30
+ "*.bak": ignore
31
+ git_init: false
32
+ preserve_tags: true
33
+ ```
23
34
 
24
35
  ### Scripts.
25
36
 
@@ -54,6 +65,10 @@ replacements: # Dictionary of pattern/replacments for regex substitution, see [R
54
65
  repo: # If a repository URL is provided, it will be pulled and duplicated instead of copying a file structure
55
66
  ```
56
67
 
68
+ #### Default values in template strings
69
+
70
+ In a template you can add a default value for a placholder by adding `%default value` to it. For example, `%%project%Default Project%%` will set the placeholder to `Default Project` if the variable value matches the default value in the configuration. This allows you to accept the default on the command line but have a different value inserted in the template. To use another variable in its place, use `$KEY` in the placeholder, e.g. `%%project%$title%%` will replace the `project` key with the value of `title` if the default is selected. Modifiers can be used on either side of the `%`, e.g. `%%project%$title:snake%%`.
71
+
57
72
  ### File-specific handling
58
73
 
59
74
  A `files` dictionary can specify how to handle specific files. Options are `copy`, `overwrite`, `merge`, or `ask`. The key for each entry is a filename or glob that matches the source filename (accounting for template variables if applicable):
@@ -72,6 +87,14 @@ Merged content
72
87
  // /merge
73
88
  ```
74
89
 
90
+ Or
91
+
92
+ ```
93
+ # merge
94
+ Merged content
95
+ # /merge
96
+ ```
97
+
75
98
  By default files that already exist in the destination directory are not overwritten, and merging allows you to add missing parts to a Rakefile or Makefile, for example.
76
99
 
77
100
  If `ask` is specified, a memu will be provided on the command line asking how to handle a file. If the file doesn't already exist, you will be asked only whether to copy the file or not. If it does exist, `overwrite` and `merge` options will be added.
@@ -88,6 +111,10 @@ replacements:
88
111
 
89
112
  Replacements are performed on both file/directory names and file contents.
90
113
 
114
+ ### Finder Tags
115
+
116
+ If `preserve_tags` is set to `true` in the config (either base or template), then existing Finder tags on the file or folder will be copied to the new file when a template is planted.
117
+
91
118
  ## Usage
92
119
 
93
120
  The executable for Planter is `plant`. You can run `plant TEMPLATE` in any directory and TEMPLATE will be planted in the current directory. You can also use `--in PATH` to plant in another directory.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: planter-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Terpstra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-28 00:00:00.000000000 Z
11
+ date: 2024-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bump
@@ -262,6 +262,20 @@ dependencies:
262
262
  - - "~>"
263
263
  - !ruby/object:Gem::Version
264
264
  version: '0.10'
265
+ - !ruby/object:Gem::Dependency
266
+ name: plist
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - "~>"
270
+ - !ruby/object:Gem::Version
271
+ version: 3.7.1
272
+ type: :runtime
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - "~>"
277
+ - !ruby/object:Gem::Version
278
+ version: 3.7.1
265
279
  - !ruby/object:Gem::Dependency
266
280
  name: tty-reader
267
281
  requirement: !ruby/object:Gem::Requirement
@@ -361,14 +375,35 @@ files:
361
375
  - lib/planter/script.rb
362
376
  - lib/planter/string.rb
363
377
  - lib/planter/symbol.rb
378
+ - lib/planter/tag.rb
364
379
  - lib/planter/version.rb
365
380
  - planter-cli.gemspec
366
381
  - scripts/deploy.rb
367
382
  - scripts/runtests.sh
368
383
  - spec/.rubocop.yml
384
+ - spec/config.yml
385
+ - spec/planter.yml
386
+ - spec/planter/array_spec.rb
387
+ - spec/planter/file_entry_spec.rb
388
+ - spec/planter/file_spec.rb
389
+ - spec/planter/filelist_spec.rb
390
+ - spec/planter/hash_spec.rb
369
391
  - spec/planter/plant_spec.rb
392
+ - spec/planter/script_spec.rb
370
393
  - spec/planter/string_spec.rb
394
+ - spec/planter/symbol_spec.rb
395
+ - spec/planter_spec.rb
396
+ - spec/scripts/test.sh
397
+ - spec/scripts/test_fail.sh
371
398
  - spec/spec_helper.rb
399
+ - spec/templates/test/%%project:snake%%.rtf
400
+ - spec/templates/test/Rakefile
401
+ - spec/templates/test/_planter.yml
402
+ - spec/templates/test/_scripts/test.sh
403
+ - spec/templates/test/_scripts/test_fail.sh
404
+ - spec/templates/test/test.rb
405
+ - spec/test_out/image.png
406
+ - spec/test_out/test2.rb
372
407
  - src/_README.md
373
408
  homepage: https://github.com/ttscoff/planter-cli
374
409
  licenses:
@@ -395,6 +430,26 @@ specification_version: 4
395
430
  summary: Plant files and directories using templates
396
431
  test_files:
397
432
  - spec/.rubocop.yml
433
+ - spec/config.yml
434
+ - spec/planter.yml
435
+ - spec/planter/array_spec.rb
436
+ - spec/planter/file_entry_spec.rb
437
+ - spec/planter/file_spec.rb
438
+ - spec/planter/filelist_spec.rb
439
+ - spec/planter/hash_spec.rb
398
440
  - spec/planter/plant_spec.rb
441
+ - spec/planter/script_spec.rb
399
442
  - spec/planter/string_spec.rb
443
+ - spec/planter/symbol_spec.rb
444
+ - spec/planter_spec.rb
445
+ - spec/scripts/test.sh
446
+ - spec/scripts/test_fail.sh
400
447
  - spec/spec_helper.rb
448
+ - spec/templates/test/%%project:snake%%.rtf
449
+ - spec/templates/test/Rakefile
450
+ - spec/templates/test/_planter.yml
451
+ - spec/templates/test/_scripts/test.sh
452
+ - spec/templates/test/_scripts/test_fail.sh
453
+ - spec/templates/test/test.rb
454
+ - spec/test_out/image.png
455
+ - spec/test_out/test2.rb