planter-cli 0.0.3 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
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