rake_dmg 0.0.2

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.
data/LICENSE.rdoc ADDED
@@ -0,0 +1,23 @@
1
+ = LICENSE
2
+
3
+ (The MIT License)
4
+
5
+ Copyright (c) 2008, 2009 Emanuele Vicentini
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ of this software and associated documentation files (the 'Software'), to deal
9
+ in the Software without restriction, including without limitation the rights
10
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ copies of the Software, and to permit persons to whom the Software is
12
+ furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in all
15
+ copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ SOFTWARE.
data/Manifest ADDED
@@ -0,0 +1,9 @@
1
+ lib/rake/dmg.rb
2
+ LICENSE.rdoc
3
+ Manifest
4
+ rake_dmg.gemspec
5
+ Rakefile
6
+ README.rdoc
7
+ spec/dmg_spec.rb
8
+ spec/spec.opts
9
+ spec/spec_helper.rb
data/README.rdoc ADDED
@@ -0,0 +1,120 @@
1
+ = Rake DMG library
2
+
3
+ DmgTask is a Rake library which aims to ease the building of DMG files for
4
+ projects, applications and whatever you throw at it.
5
+
6
+ == Basic usage
7
+
8
+ Firse, install it with:
9
+
10
+ $ sudo gem install rake_dmg
11
+
12
+ Then, write something like the following code in a Rakefile:
13
+
14
+ require 'rake/dmg'
15
+
16
+ Rake::DmgTask.new 'pimpernel', '0.1.2' do |dmg|
17
+ dmg.source_files.include 'build/**/*'
18
+ dmg.source_files.exclude 'pkg'
19
+ dmg.strip = 'build'
20
+ dmg.extra_source_files = {'resources/ds_store' => '/.DS_Store',
21
+ 'resources/background.png' => '/.background/background.png',
22
+ 'doc/quickstart.pdf' => 'guide.pdf'}
23
+ end
24
+
25
+ You can:
26
+
27
+ * specify name and optional version string for the DMG file;
28
+ * specify files to be included using Rake's really flexible FileList;
29
+ * specify extra files to be added to the final DMG file.
30
+
31
+ The last point means you are able to customize the DMG adding documentation,
32
+ licence file, background images, etc.
33
+
34
+ == Motivations
35
+
36
+ Building a DMG is rather simple and every library/framework probably has some
37
+ mechanism to automate the process. For example, RubyCocoa projects and
38
+ Rucola-based projects (and HotCocoa ones, maybe?) provides Rake tasks like the
39
+ following ones:
40
+
41
+ # RubyCocoa
42
+ desc "Package the application"
43
+ task :package => ["xcode:build:#{DEFAULT_TARGET}:#{RELEASE_CONFIGURATION}", "pkg"] do
44
+ name = "#{APPNAME}.#{APPVERSION}"
45
+ mkdir "image"
46
+ sh %{rubycocoa standaloneify "build/#{DEFAULT_CONFIGURATION}/#{APPNAME}.app" "image/#{APPNAME}.app"}
47
+ puts 'Creating Image...'
48
+ sh %{
49
+ hdiutil create -volname '#{name}' -srcfolder image '#{name}'.dmg
50
+ rm -rf image
51
+ mv '#{name}.dmg' pkg
52
+ }
53
+ end
54
+
55
+ # Rucola
56
+ desc "Package the application as a disk image"
57
+ task :package => :pkg do
58
+ FileUtils.rm(PKG) if File.exist?(PKG)
59
+ puts 'Creating Image...'
60
+ sh "hdiutil create -volname '#{DEPLOY_NAME}' -srcfolder 'build/Release/#{TARGET}' '#{PKG}'"
61
+ puts ''
62
+ end
63
+
64
+ Both works flowlessly but you cannot customize the final DMG file. Using Rake
65
+ 0.8.2 or later and this library we can change the situation:
66
+
67
+ # RubyCocoa
68
+ Rake::Task[:package].clear_actions
69
+ task :package => :dmg
70
+ Rake::DmgTask.new APPNAME, APPVERSION do |p|
71
+ p.source_files.include "build/#{DEFAULT_CONFIGURATION}/#{APPNAME}.app/**/*"
72
+ p.strip = "build/#{DEFAULT_CONFIGURATION}"
73
+ p.extra_source_files = {'extra/LICENCE.rtf' => 'LICENCE.rtf'}
74
+ end
75
+
76
+ # Rucola
77
+ Rake::Task['deploy:package'].clear_actions
78
+ namespace :deploy do
79
+ task :package => :dmg
80
+ Rake::DmgTask.new APPNAME, APPVERSION do |p|
81
+ p.source_files.include "build/Release/#{TARGET}/**/*"
82
+ p.strip = 'build/Release'
83
+ p.extra_source_files = {'extra/LICENCE.rtf' => 'LICENCE.rtf'}
84
+ end
85
+ end
86
+
87
+ == Some notes about basic DMG building
88
+
89
+ The simplest way to programmatically create the smallest DMG file is:
90
+
91
+ hdiutil create -srcdir <source directory> \
92
+ -volname <volume name> \
93
+ -uid 99 -gid 99 \
94
+ <image name>
95
+
96
+ This command create a zlib-compressed DMG file (UDZO format) using the same
97
+ filesystem of <em><source directory></em>, if possibile. The final image file
98
+ is the smallest one able to contain all the content of <em><source
99
+ directory></em>.
100
+
101
+ The user and group id values (99 and 99, respectively) map to the "magic"
102
+ +unknown+ user and group which, if I understand the system documentation
103
+ correctly, should be "replaced" at mount time by the disk arbitration with the
104
+ user who mount the DMG.
105
+
106
+ why the lucky stiff, author of Shoes, uses a rather complex, automatic build
107
+ system written in Ruby, based on Rake with a Perl script called
108
+ <tt>pkg-dmg</tt> which handles all the details of DMG creation; this wonderful
109
+ script is complex and makes provision for backward compatibility (which this
110
+ library does not). why uses it in the following way:
111
+
112
+ pkg-dmg --target pkg/#{PKG}.dmg --source dmg --volname '#{APPNAME}' \
113
+ --copy platform/mac/dmg_ds_store:/.DS_Store --mkdir /.background \
114
+ --copy static/shoes-dmg.jpg:/.background
115
+
116
+ Here the application to package is inside the +dmg+ directory. The first
117
+ <tt>--copy</tt> puts a handmade ds_store file into the directory used to build
118
+ the final DMG file; this seems to be the only way to customize DMG's look. The
119
+ last <tt>--copy</tt> puts the image used as background, referenced by the
120
+ custom ds_store file.
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ require 'rubygems'
2
+ require 'echoe'
3
+ require 'lib/rake/dmg'
4
+
5
+ Echoe.new('rake_dmg', Rake::DmgTask::VERSION) do |s|
6
+ s.author = 'Emanuele Vicentini'
7
+ s.email = 'emanuele.vicentini@gmail.com'
8
+ s.summary = 'Rake library to build DMG files'
9
+ s.runtime_dependencies = ['rake']
10
+ s.development_dependencies += ['rake >=0.8.2', 'rspec']
11
+ s.need_tar_gz = false
12
+ s.project = 'rakedmg'
13
+ s.gemspec_format = :yaml
14
+ s.retain_gemspec = true
15
+ s.rdoc_pattern = /^README|^LICENSE/
16
+ s.url = 'http://github.com/baldowl/rake_dmg'
17
+ end
18
+
19
+ require 'spec/rake/spectask'
20
+
21
+ Spec::Rake::SpecTask.new do |t|
22
+ t.spec_opts = %w(-o spec/spec.opts)
23
+ end
24
+
25
+ Rake::Task[:default].clear
26
+ Rake::Task.tasks.each {|t| t.clear if t.name =~ /test/}
27
+ task :default => :spec
data/lib/rake/dmg.rb ADDED
@@ -0,0 +1,164 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Define a DMG task library to automate the creation of disk images.
4
+
5
+ require 'rake'
6
+
7
+ module Rake
8
+ # Create a packaging task that will package the project into a distributable
9
+ # disk image.
10
+ #
11
+ # The DmgTask will create the following targets:
12
+ #
13
+ # [<b>:dmg</b>]
14
+ # Create the requested DMG file.
15
+ #
16
+ # [<b>:clobber_dmg</b>]
17
+ # Delete the disk image. Automatically added to the main clobber target.
18
+ #
19
+ # [<b>:rebuild_dmg</b>]
20
+ # Rebuild the disk image from scratch.
21
+ #
22
+ # Other tasks are created as prerequisites of the main ones and can safely
23
+ # be ignored.
24
+ #
25
+ # Most of the attributes/characteristics of the DmgTask object *must* be set
26
+ # upon creation via the optional block; altering them afterward has no
27
+ # effect.
28
+ #
29
+ # Example:
30
+ #
31
+ # Rake::DmgTask.new("pimpernel", :noversion) do |p|
32
+ # p.source_files.include("lib/**/*.rb")
33
+ # p.extra_source_files = {'resources/ds_store' => '/.DS_Store',
34
+ # 'resources/background.png' => '/.background/background.png'}
35
+ # end
36
+ #
37
+ class DmgTask
38
+ # This library's version number.
39
+ VERSION = '0.0.2'
40
+
41
+ # Name of the disk image (required).
42
+ attr_accessor :name
43
+
44
+ # Version of the DMG (required; use :noversion for unversioned disk images).
45
+ attr_accessor :version
46
+
47
+ # Directory used to store the disk image (default: 'pkg').
48
+ attr_accessor :package_dir
49
+
50
+ # List of files to be included in the DMG file (default: empty).
51
+ attr_accessor :source_files
52
+
53
+ # List of extra files to be included in the DMG file (default: empty).
54
+ # Each item is a couple key/value: key is the source, value is the target
55
+ # inside the DMG.
56
+ attr_accessor :extra_source_files
57
+
58
+ # System utility used to build the DMG file (default: hdiutil).
59
+ attr_accessor :dmg_command
60
+
61
+ # We have administration rights (default: false; this setting is checked
62
+ # only by the +dmg_options+ method).
63
+ attr_accessor :admin_rights
64
+
65
+ # DMG build options (default tailored to hdiutil; see +dmg_options+
66
+ # implementation). Assigning any value to this attribute temporarily
67
+ # switch off the default ones.
68
+ attr_writer :dmg_options
69
+
70
+ # Path prefix to strip from each file name in the final DMG file (default:
71
+ # nil).
72
+ attr_accessor :strip
73
+
74
+ # Create a Package Task with the given name and version.
75
+ def initialize(name=nil, version=nil)
76
+ @name = name
77
+ @version = version
78
+ @package_dir = 'pkg'
79
+ @source_files = Rake::FileList.new
80
+ @extra_source_files = {}
81
+ @dmg_command = 'hdiutil'
82
+ @admin_rights = false
83
+ @dmg_options = nil
84
+ @strip = nil
85
+ yield self if block_given?
86
+ define_tasks unless name.nil?
87
+ end
88
+
89
+ # Create the tasks defined by this task library.
90
+ def define_tasks
91
+ fail "Version required (or :noversion)" if @version.nil?
92
+ @version = nil if :noversion == @version
93
+
94
+ desc "Build the disk image file"
95
+ task :dmg => "#{package_dir}/#{dmg_file}"
96
+
97
+ file "#{package_dir}/#{dmg_file}" => dmg_dir_path do
98
+ chdir package_dir do
99
+ sh "#{dmg_command} create #{dmg_options}"
100
+ end
101
+ end
102
+
103
+ directory package_dir
104
+
105
+ file dmg_dir_path => source_files + extra_source_files.keys do
106
+ prefix_to_strip = /^#{@strip}/ if @strip
107
+ mkdir_p package_dir rescue nil
108
+ source_files.each do |fn|
109
+ fn_stripped = @strip == nil ? fn : fn.sub(prefix_to_strip, '')
110
+ f = File.join(dmg_dir_path, fn_stripped)
111
+ fdir = File.dirname(f)
112
+ mkdir_p(fdir) if !File.exist?(fdir)
113
+ if File.directory?(fn)
114
+ mkdir_p(f)
115
+ else
116
+ rm_f f
117
+ safe_ln(fn, f)
118
+ end
119
+ end
120
+ extra_source_files.each do |k, v|
121
+ f = File.join(dmg_dir_path, v)
122
+ mkdir_p(File.dirname(f)) rescue nil
123
+ rm_f f
124
+ safe_ln k, f
125
+ end
126
+ end
127
+
128
+ desc "Remove the disk image files"
129
+ task :clobber_dmg do
130
+ rm_r package_dir rescue nil
131
+ end
132
+
133
+ task :clobber => :clobber_dmg
134
+
135
+ desc "Force a rebuild of the disk image file"
136
+ task :rebuild_dmg => [:clobber_dmg, :dmg]
137
+
138
+ self
139
+ end
140
+
141
+ # DMG volume name.
142
+ def dmg_name
143
+ @version ? "#{@name}-#{@version}" : @name
144
+ end
145
+
146
+ # DMG file name.
147
+ def dmg_file
148
+ dmg_name + '.dmg'
149
+ end
150
+
151
+ # Build options for +dmg_command+, tailored to hdiutil.
152
+ def dmg_options
153
+ @dmg_options || "-srcdir #{dmg_name} -ov -volname #{name} " +
154
+ "#{admin_rights ? '-uid 99 -gid 99' : '' } " +
155
+ "#{dmg_file}"
156
+ end
157
+
158
+ # Temporary directory used to gather the DMG's content before actual
159
+ # building.
160
+ def dmg_dir_path
161
+ "#{package_dir}/#{dmg_name}"
162
+ end
163
+ end
164
+ end
data/rake_dmg.gemspec ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rake_dmg
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Emanuele Vicentini
8
+ autorequire:
9
+ bindir: bin
10
+
11
+ date: 2009-01-05 00:00:00 +01:00
12
+ default_executable:
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ type: :runtime
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: echoe
26
+ type: :development
27
+ version_requirement:
28
+ version_requirements: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: "0"
33
+ version:
34
+ - !ruby/object:Gem::Dependency
35
+ name: rake
36
+ type: :development
37
+ version_requirement:
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.8.2
43
+ version:
44
+ - !ruby/object:Gem::Dependency
45
+ name: rspec
46
+ type: :development
47
+ version_requirement:
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: "0"
53
+ version:
54
+ description: Rake library to build DMG files
55
+ email: emanuele.vicentini@gmail.com
56
+ executables: []
57
+
58
+ extensions: []
59
+
60
+ extra_rdoc_files:
61
+ - LICENSE.rdoc
62
+ - README.rdoc
63
+ files:
64
+ - lib/rake/dmg.rb
65
+ - LICENSE.rdoc
66
+ - Manifest
67
+ - rake_dmg.gemspec
68
+ - Rakefile
69
+ - README.rdoc
70
+ - spec/dmg_spec.rb
71
+ - spec/spec.opts
72
+ - spec/spec_helper.rb
73
+ has_rdoc: true
74
+ homepage: http://github.com/baldowl/rake_dmg
75
+ post_install_message:
76
+ rdoc_options:
77
+ - --line-numbers
78
+ - --inline-source
79
+ - --title
80
+ - Rake_dmg
81
+ - --main
82
+ - README.rdoc
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: "0"
90
+ version:
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: "1.2"
96
+ version:
97
+ requirements: []
98
+
99
+ rubyforge_project: rakedmg
100
+ rubygems_version: 1.3.1
101
+ specification_version: 2
102
+ summary: Rake library to build DMG files
103
+ test_files: []
data/spec/dmg_spec.rb ADDED
@@ -0,0 +1,210 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe "Rake::DmgTask" do
4
+ it "should build a DmgTask object" do
5
+ dmg = Rake::DmgTask.new 'pimpernel', '0.1'
6
+ dmg.should be_an_instance_of(Rake::DmgTask)
7
+ end
8
+
9
+ it "should build a DmgTask object with an optional block" do
10
+ dmg = Rake::DmgTask.new 'pimpernel', '0.1' do |b|
11
+ # nothing to do here.
12
+ end
13
+ dmg.should be_an_instance_of(Rake::DmgTask)
14
+ end
15
+
16
+ it "should require version" do
17
+ lambda {Rake::DmgTask.new 'pimpernel'}.should raise_error do |err|
18
+ err =~ /^Version required/
19
+ end
20
+ end
21
+
22
+ it "should accept :noversion" do
23
+ lambda {Rake::DmgTask.new 'pimpernel', :noversion}.should_not raise_error
24
+ end
25
+
26
+ describe do
27
+ before do
28
+ Rake::Task.clear
29
+ Rake::DmgTask.new 'pimpernel', :noversion
30
+ end
31
+
32
+ it "should define dmg task" do
33
+ 'dmg'.should be_defined
34
+ end
35
+
36
+ it "should define clobber_dmg task" do
37
+ 'clobber_dmg'.should be_defined
38
+ end
39
+
40
+ it "should add clobber_dmg to clobber" do
41
+ 'clobber'.should be_defined
42
+ 'clobber'.should have_prerequisites('clobber_dmg')
43
+ end
44
+
45
+ it "should define rebuild_dmg task" do
46
+ 'rebuild_dmg'.should be_defined
47
+ 'rebuild_dmg'.should have_prerequisites('clobber_dmg', 'dmg')
48
+ end
49
+ end
50
+ end
51
+
52
+ describe "A Rake::DmgTask object" do
53
+ before do
54
+ Rake::Task.clear
55
+ @rose = Rake::DmgTask.new 'rose', :noversion
56
+ @pimpernel = Rake::DmgTask.new 'pimpernel', '0.1'
57
+ end
58
+
59
+ it "should have a name" do
60
+ @rose.name.should eql('rose')
61
+ end
62
+
63
+ it "should allow changing name on creation via block" do
64
+ custom_pkg_dmg = Rake::DmgTask.new 'cyclamen', :noversion do |p|
65
+ p.name = 'violet'
66
+ end
67
+ custom_pkg_dmg.name.should eql('violet')
68
+ 'pkg/violet.dmg'.should be_defined
69
+ 'pkg/cyclamen.dmg'.should_not be_defined
70
+ end
71
+
72
+ it "should ignore changes to name after creation" do
73
+ @rose.name = 'violet'
74
+ @rose.name.should eql('violet')
75
+ 'pkg/rose.dmg'.should be_defined
76
+ 'pkg/violet.dmg'.should_not be_defined
77
+ end
78
+
79
+ it "should have a version" do
80
+ @rose.version.should be_nil
81
+ @pimpernel.version.should eql('0.1')
82
+ end
83
+
84
+ it "should allow changing version on creation via block" do
85
+ custom_pkg_dmg = Rake::DmgTask.new 'cyclamen', :noversion do |p|
86
+ p.version = '0.1'
87
+ end
88
+ custom_pkg_dmg.version.should eql('0.1')
89
+ 'pkg/cyclamen-0.1.dmg'.should be_defined
90
+ 'pkg/cyclamen.dmg'.should_not be_defined
91
+ end
92
+
93
+ it "should ignore changes to version after creation" do
94
+ @rose.version = '0.1'
95
+ @rose.version.should eql('0.1')
96
+ 'pkg/rose-0.1.dmg'.should_not be_defined
97
+ 'pkg/rose.dmg'.should be_defined
98
+ end
99
+
100
+ it "should default to pkg directory" do
101
+ @rose.package_dir.should eql('pkg')
102
+ 'pkg'.should be_defined
103
+ end
104
+
105
+ it "should allow custom package directory on creationg" do
106
+ custom_pkg_dmg = Rake::DmgTask.new 'cyclamen', :noversion do |p|
107
+ p.package_dir = 'custom_pkg'
108
+ end
109
+ custom_pkg_dmg.package_dir.should eql('custom_pkg')
110
+ 'custom_pkg/cyclamen.dmg'.should be_defined
111
+ 'pkg/cyclamen.dmg'.should_not be_defined
112
+ end
113
+
114
+ it "should ignore changes to package dir after creation" do
115
+ @rose.package_dir = 'custom_pkg'
116
+ @rose.package_dir.should eql('custom_pkg')
117
+ 'pkg/rose.dmg'.should be_defined
118
+ 'custom_pkg/rose.dmg'.should_not be_defined
119
+ end
120
+
121
+ it "should start with empty source lists" do
122
+ @rose.source_files.should be_empty
123
+ @rose.extra_source_files.should be_empty
124
+ Rake::Task[@rose.dmg_dir_path].prerequisites.should be_empty
125
+ end
126
+
127
+ it "should allow custom source lists on creationg" do
128
+ custom_pkg_dmg = Rake::DmgTask.new 'cyclamen', :noversion do |p|
129
+ p.source_files.include 'Rakefile'
130
+ p.extra_source_files = {'test.rb' => '/a/test_with_another_name.rb'}
131
+ end
132
+ custom_pkg_dmg.source_files.should_not be_empty
133
+ custom_pkg_dmg.extra_source_files.should_not be_empty
134
+ custom_pkg_dmg.dmg_dir_path.should have_prerequisites('Rakefile', 'test.rb')
135
+ end
136
+
137
+ it "should ignore changes to source lists after creation" do
138
+ @rose.source_files.include 'Rakefile'
139
+ @rose.source_files.should_not be_empty
140
+ @rose.extra_source_files = {'test.rb' => '/a/test_with_another_name.rb'}
141
+ @rose.extra_source_files.should_not be_empty
142
+ Rake::Task[@rose.dmg_dir_path].prerequisites.should be_empty
143
+ end
144
+
145
+ it "should default to hdiutil" do
146
+ @pimpernel.dmg_command.should eql('hdiutil')
147
+ end
148
+
149
+ it "should allow custom dmg command" do
150
+ @pimpernel.dmg_command = 'whatever_you_want'
151
+ @pimpernel.dmg_command.should eql('whatever_you_want')
152
+ end
153
+
154
+ it "should default to not have administration rights" do
155
+ @rose.admin_rights.should be_false
156
+ end
157
+
158
+ it "should allow setting administration rights on creation" do
159
+ custom_pkg_dmg = Rake::DmgTask.new 'cyclamen', :noversion do |dmg|
160
+ dmg.admin_rights = true
161
+ end
162
+ custom_pkg_dmg.admin_rights.should be_true
163
+ end
164
+
165
+ it "should allow setting administration rights after creation" do
166
+ @rose.admin_rights.should be_false
167
+ @rose.admin_rights = true
168
+ @rose.admin_rights.should be_true
169
+ end
170
+
171
+ it "should change DMG build options based on administration rights presence" do
172
+ old_options = @rose.dmg_options
173
+ @rose.admin_rights = true
174
+ @rose.dmg_options.should_not eql(old_options)
175
+ @rose.admin_rights = false
176
+ @rose.dmg_options.should eql(old_options)
177
+ end
178
+
179
+ it "should allow setting totally new DMG build options any time" do
180
+ old_options = @rose.dmg_options
181
+ new_options = '-not -really -options'
182
+ @rose.dmg_options = new_options
183
+ @rose.dmg_options.should eql(new_options)
184
+ @rose.dmg_options = nil
185
+ @rose.dmg_options.should eql(old_options)
186
+ end
187
+
188
+ it "should default to empty strip prefix" do
189
+ @rose.strip.should be_nil
190
+ end
191
+
192
+ it "should allow setting strip prefix any time" do
193
+ old_strip = @rose.strip
194
+ new_strip = 'path/to/stip/out'
195
+ @rose.strip = new_strip
196
+ @rose.strip.should eql(new_strip)
197
+ @rose.strip = old_strip
198
+ @rose.strip.should eql(old_strip)
199
+ end
200
+
201
+ it "should create the volume name" do
202
+ @rose.dmg_name.should eql('rose')
203
+ @pimpernel.dmg_name.should eql('pimpernel-0.1')
204
+ end
205
+
206
+ it "should create the dmg name" do
207
+ @rose.dmg_file.should eql('rose.dmg')
208
+ @pimpernel.dmg_file.should eql('pimpernel-0.1.dmg')
209
+ end
210
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,2 @@
1
+ -c
2
+ -fn
@@ -0,0 +1,48 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ require File.dirname(__FILE__) + '/../lib/rake/dmg'
4
+
5
+ module RakeTaskMatchers
6
+ class BeDefined
7
+ def matches?(task_name)
8
+ @task_name = task_name
9
+ Rake::Task.task_defined?(task_name)
10
+ end
11
+ def failure_message
12
+ "expected #{@task_name.inspect} to be defined"
13
+ end
14
+ def negative_failure_message
15
+ "expected #{@task_name.inspect} not to be define"
16
+ end
17
+ end
18
+
19
+ def be_defined
20
+ BeDefined.new
21
+ end
22
+
23
+ class HavePrerequisites
24
+ def initialize(prereq_tasks)
25
+ @prereq_tasks = prereq_tasks
26
+ end
27
+ def matches?(task_name)
28
+ @task_name = task_name
29
+ @prereq_tasks.each do |t|
30
+ return false if !Rake::Task[@task_name].prerequisites.include?(t)
31
+ end
32
+ end
33
+ def failure_message
34
+ "expected #{@prereq_tasks.inspect} to be prerequistes of #{@task_name.inspect}"
35
+ end
36
+ def negative_failure_message
37
+ "expected #{@prereq_tasks.inspect} not to be prerequisites of #{@task_name.inspect}"
38
+ end
39
+ end
40
+
41
+ def have_prerequisites(*prereq_tasks)
42
+ HavePrerequisites.new prereq_tasks
43
+ end
44
+ end
45
+
46
+ Spec::Runner.configure do |conf|
47
+ conf.include RakeTaskMatchers
48
+ end
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rake_dmg
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Emanuele Vicentini
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-01-05 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rake
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: echoe
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: rake
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.8.2
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: rspec
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ description: Rake library to build DMG files
56
+ email: emanuele.vicentini@gmail.com
57
+ executables: []
58
+
59
+ extensions: []
60
+
61
+ extra_rdoc_files:
62
+ - LICENSE.rdoc
63
+ - README.rdoc
64
+ files:
65
+ - lib/rake/dmg.rb
66
+ - LICENSE.rdoc
67
+ - Manifest
68
+ - rake_dmg.gemspec
69
+ - Rakefile
70
+ - README.rdoc
71
+ - spec/dmg_spec.rb
72
+ - spec/spec.opts
73
+ - spec/spec_helper.rb
74
+ has_rdoc: true
75
+ homepage: http://github.com/baldowl/rake_dmg
76
+ post_install_message:
77
+ rdoc_options:
78
+ - --line-numbers
79
+ - --inline-source
80
+ - --title
81
+ - Rake_dmg
82
+ - --main
83
+ - README.rdoc
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ version:
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: "1.2"
97
+ version:
98
+ requirements: []
99
+
100
+ rubyforge_project: rakedmg
101
+ rubygems_version: 1.3.1
102
+ signing_key:
103
+ specification_version: 2
104
+ summary: Rake library to build DMG files
105
+ test_files: []
106
+