planter-cli 0.0.4 → 3.0.1

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: 5318772de94f6948e72fcf61709d9b0cf42c3518a775e47eaa816e8d432cf0f0
4
- data.tar.gz: fcc04239c8d4c74af78f7da138d862f3a01ee053740cda5ad28e8e1019c11a29
3
+ metadata.gz: 0b4906c83392316be6ac61380bd0d2401a847f4c08f6afc91bdfbd4858980568
4
+ data.tar.gz: 7253e2ec572be45e7543d82ad2b1dde685fc5b8ba7b256ec914b0575e44ad507
5
5
  SHA512:
6
- metadata.gz: 55fd5cdd6bbede37bd171df3c6686fc4ca14c869895cf122f7a38997b46121516e32342ab7f8625b26762fba668cd73611c0edeac101fdf3d2d6ec325460dbfa
7
- data.tar.gz: 865480b6ed5efda83cba2b0314bf1afd685eed88c2c930e6b705e4fb104da3fadc0afd85211ea2a4930370d0c786df342a6dbf7c4f0ab371b9122f6df895150b
6
+ metadata.gz: 98fd1c334e3d2efdcdc10171d7a5b5f81898e9a03890bc08cd65e2f3c8a10941cfe46e5e5b23584f28c87aad3b85471ab544c3665049c5abfd911006b40bfbe8
7
+ data.tar.gz: a7a86edaf7bf49cb65cde877ab4aec8bd92a6f27a90c09f526e50f9f1ddc84c27655e67bfea75b9463c8033601ae1961e4854bce76f4e268bfe87aa3171c7677
data/.gitignore CHANGED
@@ -43,3 +43,5 @@ Gemfile.lock
43
43
  .rvmrc
44
44
  /test
45
45
  .history
46
+ spec/test/
47
+ spec/noop
data/.rubocop.yml CHANGED
@@ -41,7 +41,7 @@ Metrics/BlockLength:
41
41
  Max: 45
42
42
  Exclude:
43
43
  - Rakefile
44
- - bin/howzit
44
+ - bin/untitled
45
45
  - lib/*.rb
46
46
 
47
47
  Metrics/ClassLength:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ ### 3.0.1
2
+
3
+ 2024-08-31 14:19
4
+
5
+ ### 3.0.0-alpha
6
+
7
+ 2024-08-31 14:18
8
+
9
+ #### NEW
10
+
11
+ - Initial release
12
+ - Preserve Finder tags when planting (config option `preserve_tags: true`)
13
+
14
+ #### IMPROVED
15
+
16
+ - More tests
17
+
18
+ #### FIXED
19
+
20
+ - Code refactoring
21
+
1
22
  ### 0.0.3
2
23
 
3
24
  2024-08-28 09:46
data/README.md CHANGED
@@ -14,7 +14,18 @@ If [Gum](https://github.com/charmbracelet/gum) is available it will be used for
14
14
 
15
15
  ## Configuration
16
16
 
17
- 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.
17
+ 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.
18
+
19
+ Example config (written on first run):
20
+
21
+ ```yaml
22
+ files:
23
+ .DS_Store: ignore
24
+ "*.tmp": ignore
25
+ "*.bak": ignore
26
+ git_init: false
27
+ preserve_tags: true
28
+ ```
18
29
 
19
30
  ### Scripts.
20
31
 
@@ -49,6 +60,10 @@ replacements: # Dictionary of pattern/replacments for regex substitution, see [R
49
60
  repo: # If a repository URL is provided, it will be pulled and duplicated instead of copying a file structure
50
61
  ```
51
62
 
63
+ #### Default values in template strings
64
+
65
+ 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%%`.
66
+
52
67
  ### File-specific handling
53
68
 
54
69
  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):
@@ -67,6 +82,14 @@ Merged content
67
82
  // /merge
68
83
  ```
69
84
 
85
+ Or
86
+
87
+ ```
88
+ # merge
89
+ Merged content
90
+ # /merge
91
+ ```
92
+
70
93
  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.
71
94
 
72
95
  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.
@@ -83,6 +106,10 @@ replacements:
83
106
 
84
107
  Replacements are performed on both file/directory names and file contents.
85
108
 
109
+ ### Finder Tags
110
+
111
+ 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.
112
+
86
113
  ## Usage
87
114
 
88
115
  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.
data/Rakefile CHANGED
@@ -38,17 +38,6 @@ end
38
38
  desc 'Clobber files'
39
39
  task clobber: :clobber_packages
40
40
 
41
- desc 'Development version check'
42
- task :ver do
43
- gver = `git ver`
44
- cver = IO.read(File.join(File.dirname(__FILE__), 'CHANGELOG.md')).match(/^#+ (\d+\.\d+\.\d+(\w+)?)/)[1]
45
- res = `grep VERSION lib/planter/version.rb`
46
- version = res.match(/VERSION *= *['"](\d+\.\d+\.\d+(\w+)?)/)[1]
47
- puts "git tag: #{gver}"
48
- puts "version.rb: #{version}"
49
- puts "changelog: #{cver}"
50
- end
51
-
52
41
  desc 'Get Script Version'
53
42
  task :sver do
54
43
  res = `grep VERSION lib/planter/version.rb`
@@ -56,11 +45,6 @@ task :sver do
56
45
  print version
57
46
  end
58
47
 
59
- desc 'Changelog version check'
60
- task :cver do
61
- puts IO.read(File.join(File.dirname(__FILE__), 'CHANGELOG.md')).match(/^#+ (\d+\.\d+\.\d+(\w+)?)/)[1]
62
- end
63
-
64
48
  desc 'Run tests in Docker'
65
49
  task :dockertest, :version, :login, :attempt do |_, args|
66
50
  args.with_defaults(version: 'all', login: false, attempt: 1)
@@ -78,6 +62,9 @@ task :dockertest, :version, :login, :attempt do |_, args|
78
62
  Rake::Task['dockertest'].invoke(v, false)
79
63
  end
80
64
  Process.exit 0
65
+ when /^3\.?3/
66
+ img = 'plantertest33'
67
+ file = 'docker/Dockerfile-3.3'
81
68
  when /^3/
82
69
  version = '3.0'
83
70
  img = 'plantertest3'
@@ -130,3 +117,52 @@ end
130
117
 
131
118
  desc 'alias for build'
132
119
  task package: :build
120
+
121
+ desc 'Development version check'
122
+ task :ver do
123
+ gver = `git ver`
124
+ cver = IO.read(File.join(File.dirname(__FILE__), 'CHANGELOG.md')).match(/^#+ (\d+\.\d+\.\d+(\w+)?)/)[1]
125
+ res = `grep VERSION lib/untitled/version.rb`
126
+ version = res.match(/VERSION *= *['"](\d+\.\d+\.\d+(\w+)?)/)[1]
127
+ puts "git tag: #{gver}"
128
+ puts "version.rb: #{version}"
129
+ puts "changelog: #{cver}"
130
+ end
131
+
132
+ desc 'Changelog version check'
133
+ task :cver do
134
+ puts IO.read(File.join(File.dirname(__FILE__), 'CHANGELOG.md')).match(/^#+ (\d+\.\d+\.\d+(\w+)?)/)[1]
135
+ end
136
+
137
+ desc 'Alias for build'
138
+ task package: :build
139
+
140
+ desc 'Bump incremental version number'
141
+ task :bump, :type do |_, args|
142
+ args.with_defaults(type: 'inc')
143
+ version_file = 'lib/untitled/version.rb'
144
+ content = IO.read(version_file)
145
+ content.sub!(/VERSION = '(?<major>\d+)\.(?<minor>\d+)\.(?<inc>\d+)(?<pre>\S+)?'/) do
146
+ m = Regexp.last_match
147
+ major = m['major'].to_i
148
+ minor = m['minor'].to_i
149
+ inc = m['inc'].to_i
150
+ pre = m['pre']
151
+
152
+ case args[:type]
153
+ when /^maj/
154
+ major += 1
155
+ minor = 0
156
+ inc = 0
157
+ when /^min/
158
+ minor += 1
159
+ inc = 0
160
+ else
161
+ inc += 1
162
+ end
163
+
164
+ $stdout.puts "At version #{major}.#{minor}.#{inc}#{pre}"
165
+ "VERSION = '#{major}.#{minor}.#{inc}#{pre}'"
166
+ end
167
+ File.open(version_file, 'w+') { |f| f.puts content }
168
+ end
data/bin/plant CHANGED
@@ -54,7 +54,7 @@ opts.on('-o', '--overwrite', 'Overwrite existing files') do
54
54
  Planter.overwrite = true
55
55
  end
56
56
 
57
- opts.on_tail('--base-dir', 'Use an alternate base directory for config and templates') do |opt|
57
+ opts.on_tail('--base-dir DIRECTORY', 'Use an alternate base directory for config and templates') do |opt|
58
58
  Planter.base_dir = opt
59
59
  end
60
60
 
@@ -1,11 +1,11 @@
1
1
  FROM ruby:2.6
2
2
  # RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
3
- RUN mkdir /howzit
4
- WORKDIR /howzit
5
- # COPY ./ /howzit/
3
+ RUN mkdir /planter
4
+ WORKDIR /planter
5
+ # COPY ./ /planter/
6
6
  RUN gem install bundler:2.2.29
7
- RUN apt-get update -y
8
- RUN apt-get install -y less vim
7
+ # RUN apt-get update -y
8
+ # RUN apt-get install -y less vim
9
9
  COPY ./docker/inputrc /root/.inputrc
10
10
  COPY ./docker/bash_profile /root/.bash_profile
11
11
  RUN mkdir -p /root/.config/planter/templates/test
@@ -1,8 +1,8 @@
1
1
  FROM ruby:2.7
2
2
  # RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
3
- RUN mkdir /howzit
4
- WORKDIR /howzit
5
- # COPY ./ /howzit/
3
+ RUN mkdir /planter
4
+ WORKDIR /planter
5
+ # COPY ./ /planter/
6
6
  RUN gem install bundler:2.2.29
7
7
  RUN apt-get update -y
8
8
  RUN apt-get install -y less vim
@@ -1,8 +1,8 @@
1
1
  FROM ruby:3.0.0
2
2
  # RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
3
- RUN mkdir /howzit
4
- WORKDIR /howzit
5
- # COPY ./ /howzit/
3
+ RUN mkdir /planter
4
+ WORKDIR /planter
5
+ # COPY ./ /planter/
6
6
  RUN gem install bundler:2.2.29
7
7
  RUN apt-get update -y
8
8
  RUN apt-get install -y less vim
data/lib/planter/array.rb CHANGED
@@ -58,5 +58,22 @@ module Planter
58
58
  end
59
59
  end
60
60
  end
61
+
62
+ #
63
+ # Destructive version of #symbolize_keys
64
+ #
65
+ # @return [Array] Array with symbolized keys
66
+ #
67
+ def symbolize_keys!
68
+ replace deep_dup.symbolize_keys
69
+ end
70
+
71
+ ## Deep duplicate an array of hashes or arrays
72
+ ##
73
+ ## @return [Array] Deep duplicated array
74
+ ##
75
+ def deep_dup
76
+ map { |v| v.is_a?(Hash) || v.is_a?(Array) ? v.deep_dup : v.dup }
77
+ end
61
78
  end
62
79
  end
@@ -7,7 +7,7 @@ module Planter
7
7
  attr_accessor :operation
8
8
 
9
9
  # File path and target path
10
- attr_reader :file, :target
10
+ attr_reader :file, :target, :tags
11
11
 
12
12
  ##
13
13
  ## Initialize a FileEntry object
@@ -19,10 +19,14 @@ module Planter
19
19
  ## @return [FileEntry] a Hash of parameters
20
20
  ##
21
21
  def initialize(file, target, operation)
22
+ return nil unless File.exist?(file)
23
+
22
24
  @file = file
23
25
  @target = target
24
26
  @operation = operation
25
27
 
28
+ @tags = Tag.get(file)
29
+
26
30
  super()
27
31
  end
28
32
 
@@ -61,6 +61,14 @@ module Planter
61
61
  else
62
62
  copy_file(entry)
63
63
  end
64
+
65
+ apply_tags(entry)
66
+ end
67
+
68
+ def apply_tags(entry)
69
+ return unless Planter.config[:preserve_tags]
70
+
71
+ Tag.copy(entry.file, entry.target) if File.exist?(entry.target)
64
72
  end
65
73
 
66
74
  ##
data/lib/planter/hash.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Hash helpers
4
3
  module Planter
5
4
  ## Hash helpers
6
5
  class ::Hash
@@ -18,6 +17,14 @@ module Planter
18
17
  end
19
18
  end
20
19
 
20
+ ## Destructive version of #stringify_keys
21
+ ##
22
+ ## @return [Hash] Hash with stringified keys
23
+ ##
24
+ def stringify_keys!
25
+ replace stringify_keys
26
+ end
27
+
21
28
  ##
22
29
  ## Turn all keys into symbols
23
30
  ##
@@ -33,6 +40,15 @@ module Planter
33
40
  end
34
41
  end
35
42
 
43
+ ##
44
+ ## Destructive version of #symbolize_keys
45
+ ##
46
+ ## @return [Hash] Hash with symbolized keys
47
+ ##
48
+ def symbolize_keys!
49
+ replace symbolize_keys
50
+ end
51
+
36
52
  ##
37
53
  ## Deep merge a hash
38
54
  ##
data/lib/planter/plant.rb CHANGED
@@ -68,6 +68,8 @@ module Planter
68
68
  ## @example Pass a GitHub-style repo path and get full url
69
69
  ## expand_repo("ttscoff/planter-cli") #=> https://github.com/ttscoff/planter-cli.git
70
70
  ##
71
+ ## @param repo [String] The repo
72
+ ##
71
73
  ## @return { description_of_the_return_value }
72
74
  ##
73
75
  def expand_repo(repo)
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Planter
4
+ module Tag
5
+ class << self
6
+ def set(target, tags)
7
+ tags = [tags] unless tags.is_a?(Array)
8
+
9
+ set_tags(target, tags)
10
+ $? == 0
11
+ end
12
+
13
+ # Add tags to a directory.
14
+ #
15
+ # @param dir [String] The directory to tag.
16
+ # @param tags [Array<String>] The tags to add.
17
+ def add(target, tags)
18
+ tags = [tags] unless tags.is_a?(Array)
19
+ existing_tags = get(target)
20
+ tags.concat(existing_tags).uniq!
21
+
22
+ set_tags(target, tags)
23
+ $? == 0
24
+ end
25
+
26
+ def get(target)
27
+ res = `xattr -p com.apple.metadata:_kMDItemUserTags "#{target}" 2>/dev/null`.clean_encode
28
+ return [] if res =~ /no such xattr/ || res.empty?
29
+
30
+ tags = Plist.parse_xml(res)
31
+
32
+ return false if tags.nil?
33
+
34
+ tags
35
+ end
36
+
37
+ def copy(source, target)
38
+ tags = `xattr -px com.apple.metadata:_kMDItemUserTags "#{source}" 2>/dev/null`
39
+ `xattr -wx com.apple.metadata:_kMDItemUserTags "#{tags}" "#{target}"`
40
+ $? == 0
41
+ end
42
+
43
+ private
44
+
45
+ def set_tags(target, tags)
46
+ tags.map! { |tag| "<string>#{tag}</string>" }
47
+ `xattr -w com.apple.metadata:_kMDItemUserTags '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
48
+ <plist version="1.0">
49
+ <array>#{tags.join}</array>
50
+ </plist>' "#{target}"`
51
+ end
52
+ end
53
+ end
54
+ end
@@ -3,5 +3,5 @@
3
3
  # Primary module for this gem.
4
4
  module Planter
5
5
  # Current Planter version.
6
- VERSION = '0.0.4'
6
+ VERSION = '3.0.1'
7
7
  end
data/lib/planter.rb CHANGED
@@ -6,6 +6,7 @@ require 'json'
6
6
  require 'yaml'
7
7
  require 'fileutils'
8
8
  require 'open3'
9
+ require 'plist'
9
10
 
10
11
  require 'chronic'
11
12
  require 'tty-reader'
@@ -18,6 +19,7 @@ require_relative 'planter/hash'
18
19
  require_relative 'planter/array'
19
20
  require_relative 'planter/symbol'
20
21
  require_relative 'planter/file'
22
+ require_relative 'planter/tag'
21
23
  require_relative 'planter/color'
22
24
  require_relative 'planter/errors'
23
25
  require_relative 'planter/prompt'
@@ -127,7 +129,8 @@ module Planter
127
129
  defaults: false,
128
130
  git_init: false,
129
131
  files: { '_planter.yml' => 'ignore' },
130
- color: true
132
+ color: true,
133
+ preserve_tags: true
131
134
  }
132
135
  begin
133
136
  File.open(base_config, 'w') { |f| f.puts(YAML.dump(default_base_config.stringify_keys)) }
data/planter-cli.gemspec CHANGED
@@ -41,6 +41,7 @@ Gem::Specification.new do |spec|
41
41
  spec.add_development_dependency 'yard', '~> 0.9.5'
42
42
 
43
43
  spec.add_runtime_dependency 'chronic', '~> 0.10'
44
+ spec.add_runtime_dependency 'plist', '~> 3.7.1'
44
45
  spec.add_runtime_dependency 'tty-reader', '~> 0.9'
45
46
  spec.add_runtime_dependency 'tty-screen', '~> 0.8'
46
47
  spec.add_runtime_dependency 'tty-spinner', '~> 0.9'
@@ -80,4 +80,31 @@ describe ::Hash do
80
80
  expect(hash[:b]).not_to be_frozen
81
81
  end
82
82
  end
83
+
84
+ describe '#stringify_keys!' do
85
+ let(:hash) { { key1: 'value1', key2: 'value2', key3: { key4: 'value4' } } }
86
+
87
+ it 'converts symbol keys to strings destructively' do
88
+ hash.stringify_keys!
89
+ expect(hash).to eq({ 'key1' => 'value1', 'key2' => 'value2', 'key3' => { 'key4' => 'value4' } })
90
+ end
91
+
92
+ it 'does not modify the original hash if already string keys' do
93
+ string_hash = { 'key1' => 'value1', 'key2' => 'value2', 'key3' => { 'key4' => 'value4' } }
94
+ string_hash.stringify_keys!
95
+ expect(string_hash).to eq({ 'key1' => 'value1', 'key2' => 'value2', 'key3' => { 'key4' => 'value4' } })
96
+ end
97
+
98
+ it 'handles nested hashes' do
99
+ nested_hash = { key1: { key2: { key3: 'value3' } } }
100
+ nested_hash.stringify_keys!
101
+ expect(nested_hash).to eq({ 'key1' => { 'key2' => { 'key3' => 'value3' } } })
102
+ end
103
+
104
+ it 'handles empty hashes' do
105
+ empty_hash = {}
106
+ empty_hash.stringify_keys!
107
+ expect(empty_hash).to eq({})
108
+ end
109
+ end
83
110
  end
data/spec/planter_spec.rb CHANGED
@@ -29,6 +29,21 @@ RSpec.describe "Planter" do
29
29
  end
30
30
  end
31
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
+
32
47
  describe '.config=' do
33
48
  # it 'sets the config' do
34
49
  # path = File.expand_path('spec/noop')
@@ -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,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ def test
4
+ puts "test"
5
+ end
data/src/_README.md CHANGED
@@ -21,6 +21,17 @@ If [Gum](https://github.com/charmbracelet/gum) is available it will be used for
21
21
 
22
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
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
+ ```
34
+
24
35
  ### Scripts.
25
36
 
26
37
  Scripts for execution after planting can be stored in `~/.config/planter/scripts` and referenced by filename only. Alternatively, scripts may be stored within a template in a `_scritps` subfolder.
@@ -100,6 +111,10 @@ replacements:
100
111
 
101
112
  Replacements are performed on both file/directory names and file contents.
102
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
+
103
118
  ## Usage
104
119
 
105
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.4
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-30 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,6 +375,7 @@ 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
@@ -381,9 +396,12 @@ files:
381
396
  - spec/scripts/test.sh
382
397
  - spec/scripts/test_fail.sh
383
398
  - spec/spec_helper.rb
399
+ - spec/templates/test/%%project:snake%%.rtf
400
+ - spec/templates/test/Rakefile
384
401
  - spec/templates/test/_planter.yml
385
402
  - spec/templates/test/_scripts/test.sh
386
403
  - spec/templates/test/_scripts/test_fail.sh
404
+ - spec/templates/test/test.rb
387
405
  - spec/test_out/image.png
388
406
  - spec/test_out/test2.rb
389
407
  - src/_README.md
@@ -406,7 +424,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
406
424
  - !ruby/object:Gem::Version
407
425
  version: '0'
408
426
  requirements: []
409
- rubygems_version: 3.2.15
427
+ rubygems_version: 3.2.16
410
428
  signing_key:
411
429
  specification_version: 4
412
430
  summary: Plant files and directories using templates
@@ -427,8 +445,11 @@ test_files:
427
445
  - spec/scripts/test.sh
428
446
  - spec/scripts/test_fail.sh
429
447
  - spec/spec_helper.rb
448
+ - spec/templates/test/%%project:snake%%.rtf
449
+ - spec/templates/test/Rakefile
430
450
  - spec/templates/test/_planter.yml
431
451
  - spec/templates/test/_scripts/test.sh
432
452
  - spec/templates/test/_scripts/test_fail.sh
453
+ - spec/templates/test/test.rb
433
454
  - spec/test_out/image.png
434
455
  - spec/test_out/test2.rb