chef-gen-flavors 0.5.0 → 0.6.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
  SHA1:
3
- metadata.gz: f72906ef7e1128c8a165ff27e2552452e9dff66d
4
- data.tar.gz: 52ff5b57d993cd32c412f05f74ad8f407b308d64
3
+ metadata.gz: add24d646e518bc09136c0a9408a401b5cf2061b
4
+ data.tar.gz: a18a07d894bc08162243b83a3eeffb10721459dc
5
5
  SHA512:
6
- metadata.gz: 44a3d2d8706036b51de5769e26e8746e9a404949d6735563ddc7c23989aeac9dd13041f01fa09fc1a98fe5c1e73e73bed1a1282c381eeccd5227c3ffa4aa938c
7
- data.tar.gz: 9350287247b69bcf12a3a80b7099c9cf965b2ca9cff1956958c80b08ce0cba13133d318a7cb8872a9ce22b80ba7f322c6bbff88d6d82c4b9f2b21a1560cd7ad4
6
+ metadata.gz: 057890d70675eaff78246d63fe20c1e4a3f90407da51c763676a61e42c758068c662eae72c0d5563914a1732609b0bb7e42968435298a5b2d730547d3e8cf48e
7
+ data.tar.gz: b5b3e8661789f468ec57a5c9ba91da998a34bee40be504c5a504625d3ac94a538945ffdd0cc93c5cb371ded68d5559c0f0b5cebb6fe41ab0ce739a5c219c4954
data/History.md CHANGED
@@ -1,4 +1,8 @@
1
- # Changelog for chef-gen-template
1
+ # Changelog for chef-gen-flavors
2
+
3
+ ## 0.6.0
4
+
5
+ * copy the contents of the code generator to a temporary path. This is foundational work for allow snippets to include content as well as resource declarations
2
6
 
3
7
  ## 0.5.0
4
8
 
data/README.md CHANGED
@@ -115,6 +115,12 @@ The directory structure of a plugin looks like this:
115
115
  └── flavor
116
116
  └── example.rb
117
117
 
118
+ It is important that the name of the directory in which your generator
119
+ cookbook lives matches the name in metadata.rb. ChefDK uses the last
120
+ element of the path as the cookbook name, so if you put your cookbook
121
+ in a folder called 'cookbook' but your metadata.rb declares the name
122
+ as 'code_generator', ChefDK won't be able to find your recipe.
123
+
118
124
  ## ALTERNATE code_generator PATHS
119
125
 
120
126
  By default, the code_generator cookbook is assumed to live in a directory
@@ -154,6 +160,21 @@ For compatibility with all platforms supported by ChefDK, plugins should use
154
160
  the methods in the `File` class to construct relative paths rather than
155
161
  assuming what the path separator should be.
156
162
 
163
+ ## GENERATOR PATH COPY
164
+
165
+ When #path is called, chef-gen-flavors makes a copy of the selected
166
+ generator cookbook to a temporary path, which is what gets returned
167
+ and used by ChefDK. This path is cleaned up at exit unless the environment
168
+ variable CHEFGEN_NOCLEANTMP is set.
169
+
170
+ This temporary path is set as an attribute in the ChefDK Generator
171
+ context, and can be retrieved in a flavor by calling
172
+
173
+ ChefDK::Generator.context.generator_path
174
+
175
+ This is foundational work to allow snippets to include content as well
176
+ as declarations of what files they will render.
177
+
157
178
  ## FLAVOR BASE CLASS
158
179
 
159
180
  Inside of your plugin's code_generator cookbook, you can do anything that
@@ -1,3 +1,4 @@
1
+ require 'tmpdir'
1
2
  require 'little-plugger'
2
3
 
3
4
  require 'chef_gen/flavor'
@@ -7,14 +8,14 @@ module ChefGen
7
8
  # a plugin framework for creating ChefDK generator flavors
8
9
  class Flavors
9
10
  # the version of the gem
10
- VERSION = '0.5.0'
11
+ VERSION = '0.6.0'
11
12
 
12
13
  extend LittlePlugger path: 'chef_gen/flavor',
13
14
  module: ChefGen::Flavor
14
15
 
15
16
  class << self
16
- # return the path to to the code_generator cookbook for
17
- # the selected ChefGen Flavor
17
+ # return the path to to the copy of the generator cookbook
18
+ # for the selected ChefGen Flavor
18
19
  # @return [String] the path to the code_generator cookbook
19
20
  def path
20
21
  # then take a copy so we can augment it
@@ -26,7 +27,10 @@ module ChefGen
26
27
  fail('no ChefGen flavors found!')
27
28
  path = generator_path(selected)
28
29
  $stdout.puts "using ChefGen flavor '#{selected}' in #{path}"
29
- path
30
+ copy = copy_generator_dir(path, selected)
31
+ ChefDK::Generator.add_attr_to_context('generator_path', copy)
32
+ $stdout.puts "using copy of generator in #{copy}"
33
+ copy
30
34
  end
31
35
 
32
36
  private
@@ -156,6 +160,23 @@ module ChefGen
156
160
  spec.gem_dir, 'lib', 'chef-dk', 'skeletons', 'code_generator'
157
161
  )
158
162
  end
163
+
164
+ # recursively copies the generator cookbook to a temporary
165
+ # directory. Sets up an at_exit handler to remove the
166
+ # temporary directory unless CHEFGEN_NOCLEANTMP is set
167
+ # in the environment.
168
+ # @param srcdir [String] the path to the generator cookbook
169
+ # @return [String] the temporary path to generate from
170
+ def copy_generator_dir(srcdir, selected)
171
+ dstdir = Dir.mktmpdir('chefgen_flavor.')
172
+ at_exit {
173
+ $stdout.puts "cleaning up generator copy in ${dstdir}"
174
+ FileUtils.rm_rf(dstdir)
175
+ } unless ENV.key?('CHEFGEN_NOCLEANTMP')
176
+ $stdout.puts "copying #{srcdir} to #{dstdir}"
177
+ FileUtils.cp_r(srcdir, dstdir)
178
+ File.join(dstdir, File.basename(srcdir))
179
+ end
159
180
  end
160
181
  end
161
182
  end
@@ -103,14 +103,30 @@ RSpec.describe ChefGen::Flavors do
103
103
  it 'should default the code_generator path' do
104
104
  ChefGen::Flavors.disregard_plugin :baz
105
105
  ENV['CHEFGEN_FLAVOR'] = 'Foo'
106
- expect(ChefGen::Flavors.path)
107
- .to match(%r{spec/support/fixtures/code_generator$})
106
+ expect(FileUtils).to receive(:cp_r).with(
107
+ %r{spec/support/fixtures/code_generator$}, String
108
+ )
109
+ ChefGen::Flavors.path
108
110
  end
109
111
 
110
112
  it 'should respect an overridden code_generator path' do
111
113
  ChefGen::Flavors.disregard_plugin :baz
112
114
  ENV['CHEFGEN_FLAVOR'] = 'Bar'
115
+ expect(FileUtils).to receive(:cp_r).with(
116
+ %r{spec/support/fixtures/code_generator_2$}, String
117
+ )
118
+ ChefGen::Flavors.path
119
+ end
120
+
121
+ it 'should copy the code_generator to a temp directory' do
122
+ ChefGen::Flavors.disregard_plugin :baz
123
+ ENV['CHEFGEN_FLAVOR'] = 'Foo'
124
+ tmpdir = Dir.tmpdir
125
+ expect(FileUtils).to receive(:cp_r).with(
126
+ %r{spec/support/fixtures/code_generator$},
127
+ %r{#{tmpdir}/chefgen_flavor\..+$}
128
+ )
113
129
  expect(ChefGen::Flavors.path)
114
- .to match(%r{spec/support/fixtures/code_generator_2$})
130
+ .to match(%r{#{tmpdir}/chefgen_flavor\..+$})
115
131
  end
116
132
  end
data/spec/spec_helper.rb CHANGED
@@ -49,6 +49,7 @@ module ChefDKGeneratorContext
49
49
  allow(@ctx).to receive(:cookbook_name).and_return('foo')
50
50
  allow(@ctx).to receive(:have_git).and_return(true)
51
51
  allow(@ctx).to receive(:skip_git_init).and_return(false)
52
+ allow(@ctx).to receive(:generator_path=)
52
53
  allow(ChefDK::Generator).to receive(:context).and_return(@ctx)
53
54
  end
54
55
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-gen-flavors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James FitzGibbon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-18 00:00:00.000000000 Z
11
+ date: 2015-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: little-plugger