packager-dsl 0.1.0 → 0.1.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
  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