packager-dsl 0.1.2 → 0.1.3

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.
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