packager-dsl 0.1.0 → 0.1.1

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: 9260768450b62ac025ad4805f5e2069eeb3a15b2
4
- data.tar.gz: f1bc54a12706ed78056f049c9a67bd924c5c36d3
3
+ metadata.gz: 83e945fadcebe543ffcc791eca75b25c006d98e2
4
+ data.tar.gz: de066bb4cc80308d485bc1e9762ee0d4a3327a77
5
5
  SHA512:
6
- metadata.gz: 4f958d50495b3591a90658209c77f93e28e442adee629b3ba47b1c6484760ab0af402c1c9910d218de8dd82c322744e36f8f4d633e604f99c7e7e92f48e6d4eb
7
- data.tar.gz: 396b4cdc228dbf227d5b96fc8e96647908a3885695729571751d735861b9c1577feaf04dc18256c14f1a04a06e41ede1f0d56d8669c02ba0ff2788fe61f09f1b
6
+ metadata.gz: 117fb6a9bca9d53f124f9e2f7d0140423fa9eea4fa330980a4213989bfba31689cb9bbf9752f22ece959bfc44178132809e01fb5609a14a54d9aafcdccac58ee
7
+ data.tar.gz: 7dd09bd6951ca17bcd53c77e66868c4a1196c469f406b94eb0d2279e213f39e74ca34bb8686b54485e0732704f746795db1a6f199b76b1c27b43b274e4d0a9cd
data/Changes CHANGED
@@ -1,5 +1,9 @@
1
1
  Revision history for Packager (ordered by revision number).
2
2
 
3
+ 0.1.1 Nov 10 2018
4
+ - [FEATURE] Add the ability to provide variables
5
+ - [FEATURE] Add the ability to specify `--dryrun`
6
+
3
7
  0.1.0 Nov 08 2018
4
8
  - Update license to MIT
5
9
  - Update dsl-maker dependency to 1.0.0 for its license to be MIT
data/README.md CHANGED
@@ -37,6 +37,29 @@ $ packager execute <filename>
37
37
  You now have `foo-0.0.1.x86_64.deb` with several files in it wherever you
38
38
  invoked `packager`.
39
39
 
40
+ ## Command-line options
41
+
42
+ You can pass in the following options to the packager:
43
+
44
+ ### --dryrun
45
+
46
+ This is a boolean that, if set, will do everything up to, but not including,
47
+ invoking fpm.
48
+
49
+ ### `--var pkg_name:foo pkg_version:0.0.1`
50
+
51
+ This will set helpers that can be used within the DSL. The example will set
52
+ the helper `pkg_name` to "foo" and the helper `pkg_version` to "0.0.1".
53
+
54
+ Due to how Thor works, you must pass multiple variables at the same time. As
55
+ shown above, Thor requires keys and values to be joined by a colon (":").
56
+
57
+ Consider providing helpers for the following:
58
+
59
+ * Package version
60
+ * A root directory (so that your source files can be relative to something)
61
+ * Package type (you may want to build a deb vs. an rpm at different times)
62
+
40
63
  ## DSL
41
64
 
42
65
  * package <name>
@@ -1,8 +1,8 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift File.expand_path('../../lib', __FILE__)
4
-
5
- require 'rubygems' unless defined? Gem
6
- require 'packager/cli'
7
-
8
- Packager::CLI.start
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.expand_path('../../lib', __FILE__)
4
+
5
+ require 'rubygems' unless defined? Gem
6
+ require 'packager/cli'
7
+
8
+ Packager::CLI.start
@@ -18,12 +18,21 @@ class Packager::CLI < Thor
18
18
  end
19
19
 
20
20
  desc :execute, "Execute one or more package DSL definition(s)"
21
+ option :var, type: :hash
22
+ option :dryrun, type: :boolean
21
23
  default_task :execute
22
24
  def execute(*args)
23
25
  if args.empty?
24
26
  raise Thor::Error, "No filenames provided for execute"
25
27
  end
26
28
 
29
+ (options['var'] || {}).each do |name, value|
30
+ if Packager::DSL.reserved_words.include? name
31
+ raise Thor::Error, "'#{name}' is a reserved word"
32
+ end
33
+ Packager::DSL.add_helper(name.to_sym) { value }
34
+ end
35
+
27
36
  args.each do |filename|
28
37
  unless File.exists? filename
29
38
  raise Thor::Error, "'#{filename}' cannot be found"
@@ -39,7 +48,9 @@ class Packager::CLI < Thor
39
48
  raise Thor::Error, "'#{filename}' produces nothing"
40
49
  end
41
50
 
42
- packages = Packager::Executor.new.execute_on(items)
51
+ packages = Packager::Executor.new(
52
+ dryrun: options['dryrun'],
53
+ ).execute_on(items)
43
54
 
44
55
  puts "'#{filename}' executed #{packages.join(', ')}"
45
56
  end
@@ -10,6 +10,14 @@ class Packager::DSL < DSL::Maker
10
10
  @default_type = args[0] unless args.empty?
11
11
  @default_type
12
12
  end
13
+
14
+ def reserved_words
15
+ %w(
16
+ package
17
+ name version type files file requires provides
18
+ source dest
19
+ )
20
+ end
13
21
  end
14
22
 
15
23
  add_type(VersionString = {}) do |attr, *args|
@@ -1,3 +1,3 @@
1
1
  class Packager
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
@@ -75,5 +75,75 @@ describe Packager::CLI do
75
75
  ).to eq("'definition' executed foo, bar\n")
76
76
  }
77
77
  end
78
+
79
+ # NOTE: You (currently) cannot reuse a helper name within the test suite.
80
+ # Otherwise, you run afoul of add_helper() being called twice with the same
81
+ # name.
82
+ context 'variables' do
83
+ it "handles --var a:b" do
84
+ package_name = 'foobar'
85
+ cli.options = {'var' => { 'pkg_name' => package_name } }
86
+ expect_any_instance_of(Packager::Executor).to(
87
+ receive(:execute_on).
88
+ and_return([package_name])
89
+ )
90
+
91
+ append_to_file('definition', '
92
+ package pkg_name do
93
+ type "test"
94
+ version "0.0.1"
95
+ end
96
+ ')
97
+
98
+ expect(
99
+ capture(:stdout) { cli.execute('definition') }
100
+ ).to eq("'definition' executed foobar\n")
101
+ end
102
+
103
+ it "handles --var a:b c:d" do
104
+ cli.options = {
105
+ 'var' => {
106
+ 'pkg_version' => '0.0.3',
107
+ }
108
+ }
109
+ expect_any_instance_of(Packager::Executor).to(
110
+ receive(:execute_on) { |_, items|
111
+ expect(items[0].version).to eq('0.0.3')
112
+ }.
113
+ and_return(['foobar'])
114
+ )
115
+
116
+ append_to_file('definition', '
117
+ package "foobar" do
118
+ type "test"
119
+ version pkg_version
120
+ end
121
+ ')
122
+
123
+ expect(
124
+ capture(:stdout) { cli.execute('definition') }
125
+ ).to eq("'definition' executed foobar\n")
126
+ end
127
+
128
+ # This throws an error
129
+ it "throws an error on --var version:0.0.3" do
130
+ cli.options = {
131
+ 'var' => {
132
+ 'version' => '0.0.3',
133
+ }
134
+ }
135
+
136
+ append_to_file('definition', '
137
+ package "foobar" do
138
+ type "test"
139
+ version version
140
+ end
141
+ ')
142
+
143
+ expect {
144
+ capture(:stdout) { cli.execute('definition') }
145
+ }.to raise_error("'version' is a reserved word")
146
+ end
147
+ end
78
148
  end
79
149
  end
@@ -0,0 +1,23 @@
1
+ require './spec/dsl/context.rb'
2
+ describe Packager::DSL do
3
+ context 'adding a helper' do
4
+ include_context :dsl
5
+
6
+ before(:each) do
7
+ if not subject.class.has_helper? :test_helper
8
+ subject.class.add_helper(:test_helper) { 'testing' }
9
+ end
10
+ end
11
+
12
+ it 'finds the test_helper' do
13
+ items = parse_dsl {
14
+ package do
15
+ name test_helper
16
+ version '0.0.1'
17
+ type 'test'
18
+ end
19
+ }
20
+ expect(items[0].name).to eq('testing')
21
+ end
22
+ end
23
+ 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.0
4
+ version: 0.1.1
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-08 00:00:00.000000000 Z
11
+ date: 2018-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dsl_maker
@@ -219,6 +219,7 @@ files:
219
219
  - spec/cli/execute_spec.rb
220
220
  - spec/cli/validate_spec.rb
221
221
  - spec/cli/version_spec.rb
222
+ - spec/dsl/add_helper_spec.rb
222
223
  - spec/dsl/args_spec.rb
223
224
  - spec/dsl/context.rb
224
225
  - spec/dsl/defaults_spec.rb