choctop 0.13.0 → 0.13.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.bundle/environment.rb +4 -4
- data/Gemfile.lock +4 -4
- data/History.txt +4 -0
- data/README.rdoc +4 -0
- data/features/dmg.feature +9 -0
- data/features/step_definitions/dmg_steps.rb +10 -0
- data/features/step_definitions/generator_steps.rb +5 -0
- data/features/support/dmg_helpers.rb +7 -1
- data/lib/choctop.rb +23 -2
- data/lib/choctop/dmg.rb +35 -8
- data/spec/dmg_spec.rb +25 -3
- metadata +4 -4
data/.bundle/environment.rb
CHANGED
@@ -196,10 +196,10 @@ module Bundler
|
|
196
196
|
{:loaded_from=>"/Users/drnic/.bundle/ruby/1.8/specifications/rubigen-1.5.5.gemspec", :name=>"rubigen", :load_paths=>["/Users/drnic/.bundle/ruby/1.8/gems/rubigen-1.5.5/lib"]},
|
197
197
|
{:loaded_from=>"/Library/Ruby/Gems/1.8/specifications/syntax-1.0.0.gemspec", :name=>"syntax", :load_paths=>["/Library/Ruby/Gems/1.8/gems/syntax-1.0.0/lib"]},
|
198
198
|
{:loaded_from=>"/Library/Ruby/Gems/1.8/specifications/newgem-1.5.3.gemspec", :name=>"newgem", :load_paths=>["/Library/Ruby/Gems/1.8/gems/newgem-1.5.3/lib"]},
|
199
|
-
{:loaded_from=>"/
|
200
|
-
{:loaded_from=>"/
|
201
|
-
{:loaded_from=>"/
|
202
|
-
{:loaded_from=>"/
|
199
|
+
{:loaded_from=>"/Library/Ruby/Gems/1.8/specifications/rspec-core-2.0.0.beta.16.gemspec", :name=>"rspec-core", :load_paths=>["/Library/Ruby/Gems/1.8/gems/rspec-core-2.0.0.beta.16/lib"]},
|
200
|
+
{:loaded_from=>"/Library/Ruby/Gems/1.8/specifications/rspec-expectations-2.0.0.beta.16.gemspec", :name=>"rspec-expectations", :load_paths=>["/Library/Ruby/Gems/1.8/gems/rspec-expectations-2.0.0.beta.16/lib"]},
|
201
|
+
{:loaded_from=>"/Library/Ruby/Gems/1.8/specifications/rspec-mocks-2.0.0.beta.16.gemspec", :name=>"rspec-mocks", :load_paths=>["/Library/Ruby/Gems/1.8/gems/rspec-mocks-2.0.0.beta.16/lib"]},
|
202
|
+
{:loaded_from=>"/Library/Ruby/Gems/1.8/specifications/rspec-2.0.0.beta.16.gemspec", :name=>"rspec", :load_paths=>["/Library/Ruby/Gems/1.8/gems/rspec-2.0.0.beta.16/lib"]},
|
203
203
|
].map do |hash|
|
204
204
|
if hash[:virtual_spec]
|
205
205
|
spec = eval(hash[:virtual_spec], TOPLEVEL_BINDING, "<virtual spec for '#{hash[:name]}'>")
|
data/Gemfile.lock
CHANGED
@@ -76,13 +76,13 @@ specs:
|
|
76
76
|
- newgem:
|
77
77
|
version: 1.5.3
|
78
78
|
- rspec-core:
|
79
|
-
version: 2.0.0.beta.
|
79
|
+
version: 2.0.0.beta.16
|
80
80
|
- rspec-expectations:
|
81
|
-
version: 2.0.0.beta.
|
81
|
+
version: 2.0.0.beta.16
|
82
82
|
- rspec-mocks:
|
83
|
-
version: 2.0.0.beta.
|
83
|
+
version: 2.0.0.beta.16
|
84
84
|
- rspec:
|
85
|
-
version: 2.0.0.beta.
|
85
|
+
version: 2.0.0.beta.16
|
86
86
|
hash: 2fa03535b60734ba6b435e984c1a4f65377fddae
|
87
87
|
sources:
|
88
88
|
- Rubygems:
|
data/History.txt
CHANGED
data/README.rdoc
CHANGED
@@ -76,6 +76,10 @@ to the end:
|
|
76
76
|
s.file proc { 'README.txt' }, :position => [50, 100]
|
77
77
|
s.file :position => [50, 100] { 'README.txt' }
|
78
78
|
|
79
|
+
# Link to external URLs
|
80
|
+
s.add_link 'http://github.com/drnic/choctop', 'Choctop', :position => [50, 100]
|
81
|
+
s.link 'http://github.com/drnic/choctop', :name => 'Choctop', :position => [50, 100]
|
82
|
+
|
79
83
|
# Even add the entire project (like a TextMate bundle)
|
80
84
|
s.root :position => [100, 100]
|
81
85
|
s.add_root :position => [100, 100]
|
data/features/dmg.feature
CHANGED
@@ -48,5 +48,14 @@ Feature: Can build a customised DMG image from application build
|
|
48
48
|
And file "MyBundle.tmbundle" in mounted volume is created
|
49
49
|
And file "Applications" in mounted volume is not created
|
50
50
|
|
51
|
+
Scenario: Build a DMG with a URL webloc file
|
52
|
+
Given a TextMate bundle project "MyBundle.tmbundle"
|
53
|
+
And I want a link "GitHub.webloc" to "http://github.com/drnic/choctop" in the DMG
|
54
|
+
When I invoke task "rake dmg"
|
55
|
+
And dmg "appcast/build/MyBundle.tmbundle.dmg" is mounted as "MyBundle.tmbundle"
|
56
|
+
And file "MyBundle.tmbundle" in mounted volume is created
|
57
|
+
And file "Applications" in mounted volume is not created
|
58
|
+
And webloc file "GitHub.webloc" links to "http://github.com/drnic/choctop"
|
59
|
+
|
51
60
|
|
52
61
|
|
@@ -44,3 +44,13 @@ Then /^file "(.*)" in mounted volume (is|is not) invisible$/ do |file, is|
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
+
When /^webloc file "([^"]*)" links to "([^"]*)"$/ do |name, url|
|
48
|
+
in_mounted_volume do
|
49
|
+
File.exists?(name).should be_true
|
50
|
+
|
51
|
+
`cp '#{name}' /tmp/link.plist`
|
52
|
+
webloc_url = `defaults read /tmp/link URL`.strip
|
53
|
+
webloc_url.should == url
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
@@ -5,10 +5,16 @@ module DmgHelper
|
|
5
5
|
end
|
6
6
|
end
|
7
7
|
|
8
|
-
def choctop_add_root(position = [
|
8
|
+
def choctop_add_root(position = [180, 65])
|
9
9
|
in_project_folder do
|
10
10
|
append_to_file "Rakefile", "$choctop.add_root :position=> #{position.inspect}"
|
11
11
|
end
|
12
12
|
end
|
13
|
+
|
14
|
+
def choctop_add_link(name, url, position = [347, 272])
|
15
|
+
in_project_folder do
|
16
|
+
append_to_file "Rakefile", "$choctop.add_link #{url.inspect}, :name => #{name.inspect}, :position=> #{position.inspect}"
|
17
|
+
end
|
18
|
+
end
|
13
19
|
end
|
14
20
|
World(DmgHelper)
|
data/lib/choctop.rb
CHANGED
@@ -18,7 +18,7 @@ module ChocTop
|
|
18
18
|
include Dmg
|
19
19
|
include RakeTasks
|
20
20
|
|
21
|
-
VERSION = '0.13.
|
21
|
+
VERSION = '0.13.1'
|
22
22
|
|
23
23
|
attr_writer :build_opts
|
24
24
|
def build_opts
|
@@ -276,6 +276,27 @@ module ChocTop
|
|
276
276
|
files['.'] = options
|
277
277
|
end
|
278
278
|
alias_method :add_root, :root
|
279
|
+
|
280
|
+
# Add the whole project as a mounted item; e.g. a TextMate bundle
|
281
|
+
# Examples:
|
282
|
+
# add_link "http://github.com/drnic/choctop", :name => 'Github', :position => [50, 100]
|
283
|
+
# add_link "http://github.com/drnic/choctop", 'Github.webloc', :position => [50, 100]
|
284
|
+
# Required option:
|
285
|
+
# +:position+ - two item array [x, y] window position
|
286
|
+
# +:name+ - override the name of the project when mounted in the DMG
|
287
|
+
def link(url, *options)
|
288
|
+
name = options.first if options.first.is_a?(String)
|
289
|
+
options = options.last || {}
|
290
|
+
options[:url] = url
|
291
|
+
options[:name] = name if name
|
292
|
+
throw "add_link :position => [x,y] option is missing" unless options[:position]
|
293
|
+
throw "add_link :name => 'Name' option is missing" unless options[:name]
|
294
|
+
options[:name].gsub!(/(\.webloc|\.url)$/, '')
|
295
|
+
options[:name] += ".webloc"
|
296
|
+
self.files ||= {}
|
297
|
+
files[options[:name]] = options
|
298
|
+
end
|
299
|
+
alias_method :add_link, :link
|
279
300
|
|
280
301
|
def initialize
|
281
302
|
$choctop = $sparkle = self # define a global variable for this object ($sparkle is legacy)
|
@@ -309,4 +330,4 @@ module ChocTop
|
|
309
330
|
define_tasks
|
310
331
|
end
|
311
332
|
end
|
312
|
-
end
|
333
|
+
end
|
data/lib/choctop/dmg.rb
CHANGED
@@ -15,21 +15,23 @@ module ChocTop
|
|
15
15
|
files[path] = options
|
16
16
|
options[:name] ||= File.basename(path)
|
17
17
|
end
|
18
|
+
if path =~ %r{\.webloc$}
|
19
|
+
files[path] = options
|
20
|
+
options[:name] ||= File.basename(path)
|
21
|
+
options[:link] = true
|
22
|
+
end
|
18
23
|
files
|
19
24
|
end
|
20
25
|
end
|
21
26
|
|
22
27
|
# Two-phase copy: first to a tmp folder (to prevent recursion); then tmp folder to +dmg_src_folder+
|
23
28
|
def copy_files
|
24
|
-
require 'tmpdir'
|
25
|
-
tmp_dmg_src_folder = File.join(Dir.tmpdir, Time.now.to_i.to_s) # probably unique folder
|
26
29
|
FileUtils.mkdir_p(tmp_dmg_src_folder)
|
27
30
|
files.each do |path, options|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
exclude_list.each { |exclude| sh ::Escape.shell_command(['rm', '-rf', File.join(target, exclude)]) }
|
31
|
+
if options[:link]
|
32
|
+
add_link_to_dmg_src_folder(path, options)
|
33
|
+
else
|
34
|
+
add_file_to_dmg_src_folder(path, options)
|
33
35
|
end
|
34
36
|
end
|
35
37
|
FileUtils.rm_r(dmg_src_folder) if File.exists? dmg_src_folder
|
@@ -188,7 +190,25 @@ module ChocTop
|
|
188
190
|
# hdiutil flatten $@
|
189
191
|
|
190
192
|
end
|
193
|
+
|
194
|
+
def add_file_to_dmg_src_folder(path, options)
|
195
|
+
target = File.join(tmp_dmg_src_folder, options[:name])
|
196
|
+
sh ::Escape.shell_command(['cp', '-r', path, target])
|
197
|
+
if options[:exclude]
|
198
|
+
exclude_list = options[:exclude].is_a?(Array) ? options[:exclude] : [options[:exclude].to_s]
|
199
|
+
exclude_list.each { |exclude| sh ::Escape.shell_command(['rm', '-rf', File.join(target, exclude)]) }
|
200
|
+
end
|
201
|
+
end
|
191
202
|
|
203
|
+
def add_link_to_dmg_src_folder(path, options)
|
204
|
+
plist_name = options[:name].gsub(/\.webloc$/, '')
|
205
|
+
plist_target = File.join(tmp_dmg_src_folder, plist_name)
|
206
|
+
target = File.join(tmp_dmg_src_folder, options[:name])
|
207
|
+
sh ::Escape.shell_command(['defaults', 'write', plist_target, 'URL', options[:url]])
|
208
|
+
sh ::Escape.shell_command(['plutil', '-convert', 'xml1', '-o', target, "#{plist_target}.plist"])
|
209
|
+
sh ::Escape.shell_command(['rm', "#{plist_target}.plist"])
|
210
|
+
end
|
211
|
+
|
192
212
|
def run_applescript(applescript, tmp_file = "choctop-script")
|
193
213
|
File.open(scriptfile = "/tmp/#{tmp_file}", "w") do |f|
|
194
214
|
f << applescript
|
@@ -202,5 +222,12 @@ module ChocTop
|
|
202
222
|
end
|
203
223
|
applescript
|
204
224
|
end
|
225
|
+
|
226
|
+
def tmp_dmg_src_folder
|
227
|
+
@tmp_dmg_src_folder ||= begin
|
228
|
+
require 'tmpdir'
|
229
|
+
File.join(Dir.tmpdir, Time.now.to_i.to_s) # probably unique folder
|
230
|
+
end
|
231
|
+
end
|
205
232
|
end
|
206
|
-
end
|
233
|
+
end
|
data/spec/dmg_spec.rb
CHANGED
@@ -14,7 +14,7 @@ describe ChocTop::Dmg do
|
|
14
14
|
FileUtils.chdir(@project_path) do
|
15
15
|
@choctop.file :readme, :position=>[175, 65]
|
16
16
|
@choctop.prepare_files
|
17
|
-
@choctop.files['README.txt'].should == {:position=>[175, 65]}
|
17
|
+
@choctop.files['README.txt'].should == {:position=>[175, 65], :name => 'README.txt'}
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -22,7 +22,7 @@ describe ChocTop::Dmg do
|
|
22
22
|
FileUtils.chdir(@project_path) do
|
23
23
|
@choctop.file proc { 'README.txt' }, :position=>[175, 65]
|
24
24
|
@choctop.prepare_files
|
25
|
-
@choctop.files['README.txt'].should == {:position=>[175, 65]}
|
25
|
+
@choctop.files['README.txt'].should == {:position=>[175, 65], :name => 'README.txt'}
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -30,7 +30,29 @@ describe ChocTop::Dmg do
|
|
30
30
|
FileUtils.chdir(@project_path) do
|
31
31
|
@choctop.file(:position => [175, 65]) { 'README.txt' }
|
32
32
|
@choctop.prepare_files
|
33
|
-
@choctop.files['README.txt'].should == {:position=>[175, 65]}
|
33
|
+
@choctop.files['README.txt'].should == {:position=>[175, 65], :name => 'README.txt'}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "#link" do
|
39
|
+
it "should take args: .link(url, name, :position => [x,y])" do
|
40
|
+
FileUtils.chdir(@project_path) do
|
41
|
+
@choctop.link('http://github.com', 'Fork me', :position => [175, 65])
|
42
|
+
@choctop.prepare_files
|
43
|
+
@choctop.files['Fork me.webloc'].should == {
|
44
|
+
:position=>[175, 65], :url => 'http://github.com', :name => 'Fork me.webloc', :link => true
|
45
|
+
}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should take args: .link(url, :name => 'Name.webloc', :position => [x,y])" do
|
50
|
+
FileUtils.chdir(@project_path) do
|
51
|
+
@choctop.link('http://github.com', :name => 'Fork me.webloc', :position => [175, 65])
|
52
|
+
@choctop.prepare_files
|
53
|
+
@choctop.files['Fork me.webloc'].should == {
|
54
|
+
:position=>[175, 65], :url => 'http://github.com', :name => 'Fork me.webloc', :link => true
|
55
|
+
}
|
34
56
|
end
|
35
57
|
end
|
36
58
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: choctop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 41
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 13
|
9
|
-
-
|
10
|
-
version: 0.13.
|
9
|
+
- 1
|
10
|
+
version: 0.13.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Dr Nic Williams
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2010-07-
|
20
|
+
date: 2010-07-07 00:00:00 +10:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|