packager-dsl 0.0.1 → 0.1.0

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.
@@ -1,80 +1,80 @@
1
- require 'packager/version'
2
-
3
- # This exists so that you can pass in a Hash or an Array. While passing an Array
4
- # can be useful, passing in a Hash is far more self-documenting.
5
- class Packager::Struct < Struct
6
- def initialize(*args)
7
- if args.length == 1 and args[0].instance_of?(Hash)
8
- difference = Set.new(args[0].keys) - Set.new(self.class.members)
9
- unless difference.empty?
10
- raise 'Passed in unknown params: ' + difference.to_a.sort.join(', ')
11
- end
12
- super(*args[0].values_at(*self.class.members))
13
- else
14
- super(*args)
15
- end
16
- end
17
-
18
- class Package < Packager::Struct.new(
19
- :name, :version, :type, :files, :requires, :provides,
20
- )
21
- def initialize(*args)
22
- super(*args)
23
- self.files ||= []
24
- self.requires ||= []
25
- self.provides ||= []
26
- end
27
- end
28
-
29
- class File < Packager::Struct.new(
30
- :source, :dest,
31
- )
32
- end
33
-
34
- class Command < Packager::Struct.new(
35
- :executable, :name, :version,
36
- :source, :target, :directories, :requires, :provides,
37
- )
38
- class << self
39
- attr_accessor :default_executable
40
- end
41
-
42
- def initialize(*args)
43
- super(*args)
44
- self.source ||= 'empty'
45
- self.executable ||= self.class.default_executable || 'fpm'
46
- self.directories ||= {}
47
- self.requires ||= []
48
- self.provides ||= []
49
- end
50
-
51
- def add_directory(*items)
52
- self.source = 'dir'
53
- items.each do |item|
54
- directories[item] = true
55
- end
56
- end
57
-
58
- def to_system
59
- cmd = [
60
- executable,
61
- '--name', name,
62
- '--version', version,
63
- ]
64
-
65
- self.requires.uniq.each do |req|
66
- cmd.concat(['--depends', req])
67
- end
68
-
69
- self.provides.uniq.each do |req|
70
- cmd.concat(['--provides', req])
71
- end
72
-
73
- cmd.concat(['-s', source, '-t', target])
74
- cmd.concat(directories.keys)
75
-
76
- return cmd
77
- end
78
- end
79
- end
80
-
1
+ require 'packager/version'
2
+
3
+ # This exists so that you can pass in a Hash or an Array. While passing an Array
4
+ # can be useful, passing in a Hash is far more self-documenting.
5
+ class Packager::Struct < Struct
6
+ def initialize(*args)
7
+ if args.length == 1 and args[0].instance_of?(Hash)
8
+ difference = Set.new(args[0].keys) - Set.new(self.class.members)
9
+ unless difference.empty?
10
+ raise 'Passed in unknown params: ' + difference.to_a.sort.join(', ')
11
+ end
12
+ super(*args[0].values_at(*self.class.members))
13
+ else
14
+ super(*args)
15
+ end
16
+ end
17
+
18
+ class Package < Packager::Struct.new(
19
+ :name, :version, :type, :files, :requires, :provides,
20
+ )
21
+ def initialize(*args)
22
+ super(*args)
23
+ self.files ||= []
24
+ self.requires ||= []
25
+ self.provides ||= []
26
+ end
27
+ end
28
+
29
+ class File < Packager::Struct.new(
30
+ :source, :dest,
31
+ )
32
+ end
33
+
34
+ class Command < Packager::Struct.new(
35
+ :executable, :name, :version,
36
+ :source, :target, :directories, :requires, :provides,
37
+ )
38
+ class << self
39
+ attr_accessor :default_executable
40
+ end
41
+
42
+ def initialize(*args)
43
+ super(*args)
44
+ self.source ||= 'empty'
45
+ self.executable ||= self.class.default_executable || 'fpm'
46
+ self.directories ||= {}
47
+ self.requires ||= []
48
+ self.provides ||= []
49
+ end
50
+
51
+ def add_directory(*items)
52
+ self.source = 'dir'
53
+ items.each do |item|
54
+ directories[item] = true
55
+ end
56
+ end
57
+
58
+ def to_system
59
+ cmd = [
60
+ executable,
61
+ '--name', name,
62
+ '--version', version,
63
+ ]
64
+
65
+ self.requires.uniq.each do |req|
66
+ cmd.concat(['--depends', req])
67
+ end
68
+
69
+ self.provides.uniq.each do |req|
70
+ cmd.concat(['--provides', req])
71
+ end
72
+
73
+ cmd.concat(['-s', source, '-t', target])
74
+ cmd.concat(directories.keys)
75
+
76
+ return cmd
77
+ end
78
+ end
79
+ end
80
+
@@ -1,3 +1,3 @@
1
- class Packager
2
- VERSION = '0.0.1'
3
- end
1
+ class Packager
2
+ VERSION = '0.1.0'
3
+ end
data/on_what.rb CHANGED
@@ -1,15 +1,15 @@
1
- # NOTE: Very simple tests for what system we are on, extracted for sharing
2
- # between Rakefile, gemspec, and spec_helper. Not for use in actual library.
3
- # This is copied from https://github.com/ms-ati/docile/blob/master/on_what.rb
4
-
5
- def on_travis?
6
- ENV['CI'] == 'true'
7
- end
8
-
9
- def on_jruby?
10
- defined?(RUBY_ENGINE) && 'jruby' == RUBY_ENGINE
11
- end
12
-
13
- def on_1_8?
14
- RUBY_VERSION.start_with? '1.8'
15
- end
1
+ # NOTE: Very simple tests for what system we are on, extracted for sharing
2
+ # between Rakefile, gemspec, and spec_helper. Not for use in actual library.
3
+ # This is copied from https://github.com/ms-ati/docile/blob/master/on_what.rb
4
+
5
+ def on_travis?
6
+ ENV['CI'] == 'true'
7
+ end
8
+
9
+ def on_jruby?
10
+ defined?(RUBY_ENGINE) && 'jruby' == RUBY_ENGINE
11
+ end
12
+
13
+ def on_1_8?
14
+ RUBY_VERSION.start_with? '1.8'
15
+ end
data/packager.gemspec CHANGED
@@ -1,44 +1,44 @@
1
- require File.expand_path('on_what', File.dirname(__FILE__))
2
- $:.push File.expand_path('../lib', __FILE__)
3
- require 'packager/version'
4
-
5
- Gem::Specification.new do |s|
6
- s.name = 'packager-dsl'
7
- s.version = Packager::VERSION
8
- s.author = 'Rob Kinyon'
9
- s.email = 'rob.kinyon@gmail.com'
10
- s.summary = 'DSL for creating packages'
11
- s.description = 'DSL for creating a package that is easy to work with.'
12
- s.license = 'GPL2'
13
- s.homepage = 'https://github.com/robkinyon/ruby-packager'
14
-
15
- # Don't tramp along our dot-files, except for .rspec
16
- s.files = `git ls-files`.split("\n").select { |filename|
17
- !filename.match(/^\./) || filename == '.rspec'
18
- }
19
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
- s.executables = `git ls-files -- {bin}/*`.split("\n")
21
- s.require_paths = %w(lib)
22
-
23
- s.required_ruby_version = '>= 1.9.3'
24
-
25
- s.add_dependency 'dsl_maker', '~> 0.1', '>= 0.1.1'
26
- s.add_dependency 'fpm', '~> 1.4', '>= 1.1.0'
27
- s.add_dependency 'thor', '~> 0.0', '>= 0.19.0'
28
-
29
- s.add_development_dependency 'rake', '~> 10'
30
- s.add_development_dependency 'rspec', '~> 3.0.0', '>= 3.0.0'
31
- s.add_development_dependency 'simplecov', '~> 0'
32
- s.add_development_dependency 'rubygems-tasks', '~> 0'
33
- s.add_development_dependency 'json', '~> 1', '>=1.7.7'
34
-
35
- # To limit needed compatibility with versions of dependencies, only configure
36
- # yard doc generation when *not* on Travis, JRuby, or 1.8
37
- if !on_travis? && !on_jruby? && !on_1_8?
38
- # Github flavored markdown in YARD documentation
39
- # http://blog.nikosd.com/2011/11/github-flavored-markdown-in-yard.html
40
- s.add_development_dependency 'yard', '~> 0.8'
41
- s.add_development_dependency 'redcarpet', '~> 3'
42
- s.add_development_dependency 'github-markup', '~> 1.3'
43
- end
44
- end
1
+ require File.expand_path('on_what', File.dirname(__FILE__))
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'packager/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'packager-dsl'
7
+ s.version = Packager::VERSION
8
+ s.author = 'Rob Kinyon'
9
+ s.email = 'rob.kinyon@gmail.com'
10
+ s.summary = 'DSL for creating packages'
11
+ s.description = 'DSL for creating a package that is easy to work with.'
12
+ s.license = 'MIT'
13
+ s.homepage = 'https://github.com/robkinyon/ruby-packager'
14
+
15
+ # Don't tramp along our dot-files, except for .rspec
16
+ s.files = `git ls-files`.split("\n").select { |filename|
17
+ !filename.match(/^\./) || filename == '.rspec'
18
+ }
19
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ s.executables = `git ls-files -- {bin}/*`.split("\n")
21
+ s.require_paths = %w(lib)
22
+
23
+ s.required_ruby_version = '>= 1.9.3'
24
+
25
+ s.add_dependency 'dsl_maker', '~> 1.0', '>= 1.0.0'
26
+ s.add_dependency 'fpm', '~> 1.4', '>= 1.1.0'
27
+ s.add_dependency 'thor', '~> 0.0', '>= 0.19.0'
28
+
29
+ s.add_development_dependency 'rake', '~> 10'
30
+ s.add_development_dependency 'rspec', '~> 3.0.0', '>= 3.0.0'
31
+ s.add_development_dependency 'simplecov', '~> 0'
32
+ s.add_development_dependency 'rubygems-tasks', '~> 0'
33
+ s.add_development_dependency 'json', '~> 1', '>=1.7.7'
34
+
35
+ # To limit needed compatibility with versions of dependencies, only configure
36
+ # yard doc generation when *not* on Travis, JRuby, or 1.8
37
+ if !on_travis? && !on_jruby? && !on_1_8?
38
+ # Github flavored markdown in YARD documentation
39
+ # http://blog.nikosd.com/2011/11/github-flavored-markdown-in-yard.html
40
+ s.add_development_dependency 'yard', '>= 0.9.11'
41
+ s.add_development_dependency 'redcarpet', '~> 3'
42
+ s.add_development_dependency 'github-markup', '~> 1.3'
43
+ end
44
+ end
data/spec/cli/context.rb CHANGED
@@ -1,17 +1,17 @@
1
- # Examine:
2
- # https://gabebw.wordpress.com/2011/03/21/temp-files-in-rspec/
3
-
4
- require 'fileutils'
5
- require 'tmpdir'
6
-
7
- RSpec.shared_context :cli do
8
- subject(:cli) { Packager::CLI.new }
9
-
10
- let(:workdir) { Dir.mktmpdir }
11
- before(:all) { @dir = Dir.pwd }
12
- before(:each) { FileUtils.chdir(workdir) }
13
- after(:each) {
14
- FileUtils.chdir @dir
15
- FileUtils.remove_entry_secure(workdir)
16
- }
17
- end
1
+ # Examine:
2
+ # https://gabebw.wordpress.com/2011/03/21/temp-files-in-rspec/
3
+
4
+ require 'fileutils'
5
+ require 'tmpdir'
6
+
7
+ RSpec.shared_context :cli do
8
+ subject(:cli) { Packager::CLI.new }
9
+
10
+ let(:workdir) { Dir.mktmpdir }
11
+ before(:all) { @dir = Dir.pwd }
12
+ before(:each) { FileUtils.chdir(workdir) }
13
+ after(:each) {
14
+ FileUtils.chdir @dir
15
+ FileUtils.remove_entry_secure(workdir)
16
+ }
17
+ end
@@ -1,79 +1,79 @@
1
- require './spec/cli/context.rb'
2
- describe Packager::CLI do
3
- context '#execute' do
4
- include_context :cli
5
-
6
- it "handles nothing passed" do
7
- expect {
8
- cli.execute
9
- }.to raise_error(Thor::Error, "No filenames provided for execute")
10
- end
11
-
12
- it "handles a non-existent filename" do
13
- expect {
14
- cli.execute('foo')
15
- }.to raise_error(Thor::Error, "'foo' cannot be found")
16
- end
17
-
18
- it "handles an empty file" do
19
- FileUtils.touch('definition')
20
- expect {
21
- cli.execute('definition')
22
- }.to raise_error(Thor::Error, "'definition' produces nothing")
23
- end
24
-
25
- it "handles a bad file" do
26
- append_to_file('definition', 'package {}')
27
-
28
- expect {
29
- cli.execute('definition')
30
- }.to raise_error(Thor::Error, "'definition' has the following errors:\nEvery package must have a name")
31
- end
32
-
33
- context "handles a file that works" do
34
- before {
35
- expect(Packager::DSL).to(
36
- receive(:parse_dsl).
37
- with('contents').
38
- and_return(:stuff)
39
- )
40
-
41
- expect_any_instance_of(Packager::Executor).to(
42
- receive(:execute_on).
43
- with(:stuff).
44
- and_return(['foo'])
45
- )
46
- }
47
-
48
- it {
49
- append_to_file('definition', 'contents')
50
- expect(
51
- capture(:stdout) { cli.execute('definition') }
52
- ).to eq("'definition' executed foo\n")
53
- }
54
- end
55
-
56
- context "handles a file that works with two packages" do
57
- before {
58
- expect(Packager::DSL).to(
59
- receive(:parse_dsl).
60
- with('contents').
61
- and_return(:stuff)
62
- )
63
-
64
- expect_any_instance_of(Packager::Executor).to(
65
- receive(:execute_on).
66
- with(:stuff).
67
- and_return(['foo', 'bar'])
68
- )
69
- }
70
-
71
- it {
72
- append_to_file('definition', 'contents')
73
- expect(
74
- capture(:stdout) { cli.execute('definition') }
75
- ).to eq("'definition' executed foo, bar\n")
76
- }
77
- end
78
- end
79
- end
1
+ require './spec/cli/context.rb'
2
+ describe Packager::CLI do
3
+ context '#execute' do
4
+ include_context :cli
5
+
6
+ it "handles nothing passed" do
7
+ expect {
8
+ cli.execute
9
+ }.to raise_error(Thor::Error, "No filenames provided for execute")
10
+ end
11
+
12
+ it "handles a non-existent filename" do
13
+ expect {
14
+ cli.execute('foo')
15
+ }.to raise_error(Thor::Error, "'foo' cannot be found")
16
+ end
17
+
18
+ it "handles an empty file" do
19
+ FileUtils.touch('definition')
20
+ expect {
21
+ cli.execute('definition')
22
+ }.to raise_error(Thor::Error, "'definition' produces nothing")
23
+ end
24
+
25
+ it "handles a bad file" do
26
+ append_to_file('definition', 'package {}')
27
+
28
+ expect {
29
+ cli.execute('definition')
30
+ }.to raise_error(Thor::Error, "'definition' has the following errors:\nEvery package must have a name")
31
+ end
32
+
33
+ context "handles a file that works" do
34
+ before {
35
+ expect(Packager::DSL).to(
36
+ receive(:parse_dsl).
37
+ with('contents').
38
+ and_return(:stuff)
39
+ )
40
+
41
+ expect_any_instance_of(Packager::Executor).to(
42
+ receive(:execute_on).
43
+ with(:stuff).
44
+ and_return(['foo'])
45
+ )
46
+ }
47
+
48
+ it {
49
+ append_to_file('definition', 'contents')
50
+ expect(
51
+ capture(:stdout) { cli.execute('definition') }
52
+ ).to eq("'definition' executed foo\n")
53
+ }
54
+ end
55
+
56
+ context "handles a file that works with two packages" do
57
+ before {
58
+ expect(Packager::DSL).to(
59
+ receive(:parse_dsl).
60
+ with('contents').
61
+ and_return(:stuff)
62
+ )
63
+
64
+ expect_any_instance_of(Packager::Executor).to(
65
+ receive(:execute_on).
66
+ with(:stuff).
67
+ and_return(['foo', 'bar'])
68
+ )
69
+ }
70
+
71
+ it {
72
+ append_to_file('definition', 'contents')
73
+ expect(
74
+ capture(:stdout) { cli.execute('definition') }
75
+ ).to eq("'definition' executed foo, bar\n")
76
+ }
77
+ end
78
+ end
79
+ end