packager-dsl 0.1.2 → 0.1.3

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: 42215c276926e0d4783fa92a7a27c10210f856cf
4
- data.tar.gz: b808a1736416be2e501bc6c9d27037a2624ff3d7
3
+ metadata.gz: 858af8b908494438e9fca696b3c2fcb6ed537bb1
4
+ data.tar.gz: 3bead42fccf5cb4b3c3d2b886a6582e4a49fdc90
5
5
  SHA512:
6
- metadata.gz: 01474c3afa86dff4563647d07e21b0a21755a0a3f34075c7a02bfb082365b78a97d4976b2942c37455f7904faea633e6b288748806437db8f47770163f841fbc
7
- data.tar.gz: 64d0a769989d2828567f8469abc2898fda61843d55a4daa2ce4995d002effcbef8da353d8d174b688f2a7d5aded2f87af95438ac9d562ccdb399b0e210b22df7
6
+ metadata.gz: e567683893133ea032c47a24eafbe4965aeb5b05816be09eb35a64736fffe51da6d160ea142385c4dcaa56ed7f0cc1d9c364dea34acbb10d855d0e2d7f41bd76
7
+ data.tar.gz: a6f8a4664fd0e7ccad28a6cb3c71efa263aa6f15e3272a1072561598a6dbd919b5219586d41d55f2cb689587a5969f8bfbda0237eab325bc154fc09c109318a9
data/Changes CHANGED
@@ -1,5 +1,8 @@
1
1
  Revision history for Packager (ordered by revision number).
2
2
 
3
+ 0.1.3 Dec 01 2018
4
+ - [FEATURE] Add support for symbolic links.
5
+
3
6
  0.1.2 Nov 30 2018
4
7
  - [FEATURE] Add support for the following flags:
5
8
  * --before-install (aliased as --pre-install)
data/README.md CHANGED
@@ -69,6 +69,15 @@ Consider providing helpers for the following:
69
69
  * `file` / `files`
70
70
  * `source` String
71
71
  * `dest` String
72
+ * `link` / `links`
73
+ * `source` String
74
+ * `dest` String
75
+ * `link` Boolean
72
76
  * `requires` Array[String]
73
77
  * `provides` Array[String]
74
78
  * `before_install` Array[String]
79
+
80
+ ### Link
81
+
82
+ If `link` is true in your file, then a symbolic link will be created instead of
83
+ a file being copied.
@@ -34,8 +34,9 @@ class Packager::DSL < DSL::Maker
34
34
  copy_file_dsl = generate_dsl({
35
35
  :source => String,
36
36
  :dest => String,
37
+ :link => Boolean,
37
38
  }) do
38
- Packager::Struct::File.new(source, dest)
39
+ Packager::Struct::File.new(source, dest, link)
39
40
  end
40
41
 
41
42
  add_entrypoint(:package, {
@@ -4,21 +4,29 @@ require 'tmpdir'
4
4
 
5
5
  class Packager
6
6
  class Executor
7
- attr_accessor :commands, :dryrun
7
+ attr_accessor :commands, :dryrun, :workdir
8
8
 
9
9
  def initialize(opts={})
10
10
  self.dryrun = !!opts[:dryrun]
11
11
  self.commands = []
12
12
  end
13
13
 
14
+ def with_workdir(&block)
15
+ if workdir
16
+ Dir.chdir(workdir, &block)
17
+ else
18
+ Dir.mktmpdir do |dir|
19
+ Dir.chdir(dir, &block)
20
+ end
21
+ end
22
+ end
23
+
14
24
  def execute_on(items)
15
25
  curdir = Dir.pwd
16
26
  items.collect do |item|
17
- Dir.mktmpdir do |tempdir|
18
- Dir.chdir(tempdir) do
19
- path = create_package_for(item)
20
- FileUtils.mv(path, curdir) if path
21
- end
27
+ with_workdir do
28
+ path = create_package_for(item)
29
+ FileUtils.mv(path, curdir) if path
22
30
  end
23
31
  end
24
32
  end
@@ -28,7 +36,11 @@ class Packager
28
36
  item.files.each do |file|
29
37
  dest = (file.dest || '').gsub /^\//, ''
30
38
  FileUtils.mkdir_p File.dirname(dest)
31
- FileUtils.cp_r(file.source, dest)
39
+ if file.link
40
+ FileUtils.ln_s(file.source, dest)
41
+ else
42
+ FileUtils.cp_r(file.source, dest)
43
+ end
32
44
  end
33
45
  end
34
46
 
@@ -36,7 +36,7 @@ class Packager::Struct < Struct
36
36
  end
37
37
 
38
38
  class File < Packager::Struct.new(
39
- :source, :dest,
39
+ :source, :dest, :link,
40
40
  )
41
41
  end
42
42
 
@@ -1,3 +1,3 @@
1
1
  class Packager
2
- VERSION = '0.1.2'
2
+ VERSION = '0.1.3'
3
3
  end
@@ -18,6 +18,7 @@ describe Packager::DSL do
18
18
  expect(items[0].files).to be_instance_of(Array)
19
19
  expect(items[0].files[0].source).to eq('foo')
20
20
  expect(items[0].files[0].dest).to eq('bar')
21
+ expect(items[0].files[0].link).to be_falsey
21
22
  end
22
23
 
23
24
  it "handles two files" do
@@ -42,5 +43,24 @@ describe Packager::DSL do
42
43
  expect(items[0].files[1].source).to eq('foo2')
43
44
  expect(items[0].files[1].dest).to eq('bar2')
44
45
  end
46
+
47
+ it "handles a link" do
48
+ items = parse_dsl {
49
+ package {
50
+ name 'foo'
51
+ version '0.0.1'
52
+ type 'test'
53
+ file {
54
+ source 'foo'
55
+ dest 'bar'
56
+ link true
57
+ }
58
+ }
59
+ }
60
+ expect(items[0].files).to be_instance_of(Array)
61
+ expect(items[0].files[0].source).to eq('foo')
62
+ expect(items[0].files[0].dest).to eq('bar')
63
+ expect(items[0].files[0].link).to be_truthy
64
+ end
45
65
  end
46
66
  end
@@ -1,3 +1,5 @@
1
1
  RSpec.shared_context :executor do
2
- subject(:executor) { Packager::Executor.new(:dryrun => true) }
2
+ subject(:executor) {
3
+ Packager::Executor.new(:dryrun => true)
4
+ }
3
5
  end
@@ -4,6 +4,10 @@ describe Packager::Executor do
4
4
  include_context :executor
5
5
  include_context :workdir
6
6
 
7
+ before(:each) {
8
+ executor.workdir = workdir
9
+ }
10
+
7
11
  it "creates a package with one file" do
8
12
  FileUtils.chdir(sourcedir) do
9
13
  FileUtils.touch('file1')
@@ -17,6 +21,34 @@ describe Packager::Executor do
17
21
  Packager::Struct::File.new(File.join(sourcedir, 'file1'), '/bar/file2'),
18
22
  ]
19
23
  )
24
+
25
+ executor.execute_on([item])
26
+
27
+ expect(executor.commands[0]).to eq(
28
+ Packager::Struct::Command.new({
29
+ :name => 'foo',
30
+ :version => '0.0.1',
31
+ :source => 'dir',
32
+ :target => 'test',
33
+ :directories => { 'bar' => true },
34
+ })
35
+ )
36
+ expect(File.exists?(File.join('bar', 'file2'))).to be_truthy
37
+ end
38
+
39
+ it "creates a package with one link" do
40
+ FileUtils.chdir(sourcedir) do
41
+ FileUtils.touch('file1')
42
+ end
43
+
44
+ item = Packager::Struct::Package.new(
45
+ :name => 'foo',
46
+ :version => '0.0.1',
47
+ :type => 'test',
48
+ :files => [
49
+ Packager::Struct::File.new(File.join(sourcedir, 'file1'), '/bar/file2', true),
50
+ ]
51
+ )
20
52
  FileUtils.chdir(workdir) do
21
53
  executor.execute_on([item])
22
54
  end
@@ -29,5 +61,8 @@ describe Packager::Executor do
29
61
  :directories => { 'bar' => true },
30
62
  })
31
63
  )
64
+
65
+ # Verify that /bar/file2 points to file1 as a symlink
66
+ expect(File.symlink?(File.join(workdir, 'bar', 'file2'))).to be_truthy
32
67
  end
33
68
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: packager-dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Kinyon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-30 00:00:00.000000000 Z
11
+ date: 2018-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dsl_maker