newcocoa 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +0 -0
- data/README +3 -0
- data/Rakefile +86 -0
- data/bin/newcocoa +83 -0
- data/lib/newcocoa.rb +3 -0
- data/templates/English.lproj/Main.nib/classes.nib +4 -0
- data/templates/English.lproj/Main.nib/info.nib +12 -0
- data/templates/English.lproj/Main.nib/keyedobjects.nib +0 -0
- data/templates/Info.plist.erb +27 -0
- data/templates/README +9 -0
- data/templates/Rakefile +81 -0
- data/templates/class.erb +18 -0
- data/templates/main.m +7 -0
- data/templates/main.rb +28 -0
- data/test/TestHeader.h +19 -0
- data/test/newcocoa_test.rb +57 -0
- data/test/test_helper.rb +3 -0
- metadata +72 -0
data/CHANGELOG
ADDED
File without changes
|
data/README
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/testtask'
|
5
|
+
require 'rake/packagetask'
|
6
|
+
require 'rake/gempackagetask'
|
7
|
+
require 'rake/rdoctask'
|
8
|
+
require 'rake/contrib/rubyforgepublisher'
|
9
|
+
require 'fileutils'
|
10
|
+
include FileUtils
|
11
|
+
|
12
|
+
AUTHOR = "cho45"
|
13
|
+
EMAIL = "cho45@lowreal.net"
|
14
|
+
DESCRIPTION = "Generate new Ruby/Cocoa Application skelton."
|
15
|
+
RUBYFORGE_PROJECT = "newcocoa"
|
16
|
+
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
17
|
+
BIN_FILES = %w( newcocoa )
|
18
|
+
#REV = `svn info`[/Revision: (\d+)/, 1]
|
19
|
+
#VERS = '0.0.1' + (REV ? ".#{REV}" : '')
|
20
|
+
VERS = '0.0.1'
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
NAME = "newcocoa"
|
25
|
+
CLEAN.include ['**/.*.sw?', '*.gem', '.config']
|
26
|
+
RDOC_OPTS = ['--quiet', '--title', "newcocoa documentation",
|
27
|
+
"--opname", "index.html",
|
28
|
+
"--line-numbers",
|
29
|
+
"--main", "README",
|
30
|
+
"--inline-source"]
|
31
|
+
|
32
|
+
desc "Packages up newcocoa gem."
|
33
|
+
task :default => [:test]
|
34
|
+
task :package => [:clean]
|
35
|
+
|
36
|
+
Rake::TestTask.new("test") { |t|
|
37
|
+
t.libs << "test"
|
38
|
+
t.pattern = "test/**/*_test.rb"
|
39
|
+
t.verbose = true
|
40
|
+
}
|
41
|
+
|
42
|
+
spec =
|
43
|
+
Gem::Specification.new do |s|
|
44
|
+
s.name = NAME
|
45
|
+
s.version = VERS
|
46
|
+
s.platform = Gem::Platform::RUBY
|
47
|
+
s.has_rdoc = true
|
48
|
+
s.extra_rdoc_files = ["README", "CHANGELOG"]
|
49
|
+
s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
|
50
|
+
s.summary = DESCRIPTION
|
51
|
+
s.description = DESCRIPTION
|
52
|
+
s.author = AUTHOR
|
53
|
+
s.email = EMAIL
|
54
|
+
s.homepage = HOMEPATH
|
55
|
+
s.executables = BIN_FILES
|
56
|
+
s.rubyforge_project = RUBYFORGE_PROJECT
|
57
|
+
s.bindir = "bin"
|
58
|
+
s.require_path = "lib"
|
59
|
+
s.autorequire = "newcocoa"
|
60
|
+
|
61
|
+
#s.add_dependency('activesupport', '>=1.3.1')
|
62
|
+
#s.required_ruby_version = '>= 1.8.2'
|
63
|
+
|
64
|
+
s.files = %w(README CHANGELOG Rakefile) +
|
65
|
+
Dir.glob("{bin,doc,test,lib,templates,generator,extras,website,script}/**/*") +
|
66
|
+
Dir.glob("ext/**/*.{h,c,rb}") +
|
67
|
+
Dir.glob("examples/**/*.rb") +
|
68
|
+
Dir.glob("tools/*.rb")
|
69
|
+
|
70
|
+
# s.extensions = FileList["ext/**/extconf.rb"].to_a
|
71
|
+
end
|
72
|
+
|
73
|
+
Rake::GemPackageTask.new(spec) do |p|
|
74
|
+
p.need_tar = true
|
75
|
+
p.gem_spec = spec
|
76
|
+
end
|
77
|
+
|
78
|
+
task :install do
|
79
|
+
name = "#{NAME}-#{VERS}.gem"
|
80
|
+
sh %{rake package}
|
81
|
+
sh %{sudo gem install pkg/#{name}}
|
82
|
+
end
|
83
|
+
|
84
|
+
task :uninstall => [:clean] do
|
85
|
+
sh %{sudo gem uninstall #{NAME}}
|
86
|
+
end
|
data/bin/newcocoa
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'pathname'
|
5
|
+
require 'erb'
|
6
|
+
require 'ostruct'
|
7
|
+
require 'fileutils'
|
8
|
+
include FileUtils
|
9
|
+
|
10
|
+
# get templates directory
|
11
|
+
@templates = Pathname.new(File.dirname(__FILE__)).realpath + '../templates'
|
12
|
+
|
13
|
+
o = OpenStruct.new
|
14
|
+
OptionParser.new do |opts|
|
15
|
+
opts.on('-c', '--convert [FILE]') {|v|
|
16
|
+
o.convert = true
|
17
|
+
(o.convert_files ||= []) << v if v
|
18
|
+
}
|
19
|
+
opts.parse!(ARGV)
|
20
|
+
end
|
21
|
+
appname = ARGV.shift
|
22
|
+
|
23
|
+
def convert(header)
|
24
|
+
_, class_name, super_class = */@interface ([^\s]+) : ([^\s]+)/.match(header)
|
25
|
+
|
26
|
+
outlets = header.scan(/IBOutlet id (.*?);/)
|
27
|
+
actions = header.scan(/^- \(IBAction\)(.*?):\(id\)sender;/)
|
28
|
+
|
29
|
+
result = ERB.new((@templates + 'class.erb').read, $SAFE, '-').result(binding)
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
if o.convert
|
34
|
+
if o.convert_files
|
35
|
+
# convert specific *.h
|
36
|
+
o.convert_files.each do |f|
|
37
|
+
f = Pathname.new f
|
38
|
+
target = Pathname.new "#{f.basename(".h")}.rb"
|
39
|
+
puts "Converting #{f} to #{target}..."
|
40
|
+
|
41
|
+
result = convert(f.read)
|
42
|
+
target.open("w") do |f|
|
43
|
+
f.puts result
|
44
|
+
end
|
45
|
+
end
|
46
|
+
else
|
47
|
+
# convert all *.h
|
48
|
+
Pathname.glob('*.h') do |f|
|
49
|
+
target = Pathname.new "#{f.basename(".h")}.rb"
|
50
|
+
if target.exist?
|
51
|
+
"#{target} is already exists. skip.."
|
52
|
+
next
|
53
|
+
end
|
54
|
+
|
55
|
+
puts "Converting #{f} to #{target}..."
|
56
|
+
|
57
|
+
result = convert(f.read)
|
58
|
+
target.open("w") do |f|
|
59
|
+
f.puts result
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
if appname
|
66
|
+
puts "Creating #{appname} directory..."
|
67
|
+
mkdir appname
|
68
|
+
puts "Entering #{appname}"
|
69
|
+
cd appname do
|
70
|
+
appname = appname.capitalize
|
71
|
+
|
72
|
+
%w(Rakefile README).each do |file|
|
73
|
+
puts "Creating #{file} from templates."
|
74
|
+
File.open(file, 'w') do |f|
|
75
|
+
f.write ERB.new((@templates + 'Rakefile').read).result(binding)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
puts "Copying other templates"
|
79
|
+
cp_r %w(Info.plist.erb main.rb main.m English.lproj).map{|f| @templates + f}, '.'
|
80
|
+
|
81
|
+
mkdir 'html'
|
82
|
+
end
|
83
|
+
end
|
data/lib/newcocoa.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>IBDocumentLocation</key>
|
6
|
+
<string>69 10 356 240 0 0 1280 778 </string>
|
7
|
+
<key>IBFramework Version</key>
|
8
|
+
<string>443.0</string>
|
9
|
+
<key>IBSystem Version</key>
|
10
|
+
<string>8L2127</string>
|
11
|
+
</dict>
|
12
|
+
</plist>
|
Binary file
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
|
3
|
+
<plist version="0.9">
|
4
|
+
<dict>
|
5
|
+
<key>CFBundleExecutable</key>
|
6
|
+
<string><%=APPNAME%></string>
|
7
|
+
<key>CFBundleIdentifier</key>
|
8
|
+
<string><%=BUNDLEID%></string>
|
9
|
+
<key>CFBundlePackageType</key>
|
10
|
+
<string>APPL</string>
|
11
|
+
<key>CFBundleSignature</key>
|
12
|
+
<string>????</string>
|
13
|
+
|
14
|
+
<key>CFBundleIconFile</key>
|
15
|
+
<string>icon</string>
|
16
|
+
|
17
|
+
<key>NSMainNibFile</key>
|
18
|
+
<string>Main</string>
|
19
|
+
<key>NSPrincipalClass</key>
|
20
|
+
<string>NSApplication</string>
|
21
|
+
|
22
|
+
<!-- Not Show in Dock
|
23
|
+
<key>LSUIElement</key>
|
24
|
+
<string>1</string>
|
25
|
+
-->
|
26
|
+
</dict>
|
27
|
+
</plist>
|
data/templates/README
ADDED
data/templates/Rakefile
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'osx/cocoa' # dummy
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rake'
|
4
|
+
require 'rake/clean'
|
5
|
+
require 'rake/testtask'
|
6
|
+
require 'erb'
|
7
|
+
require 'pathname'
|
8
|
+
|
9
|
+
# Application own Settings
|
10
|
+
APPNAME = "<%=appname%>"
|
11
|
+
TARGET = "#{APPNAME}.app"
|
12
|
+
VERSION = "rev#{`svn info`[/Revision: (\d+)/, 1]}"
|
13
|
+
RESOURCES = ['*.rb', '*.lproj', 'Credits.*', '*.icns']
|
14
|
+
PKGINC = [TARGET, 'README', 'html', 'client']
|
15
|
+
PUBLISH = 'yourname@yourhost:path'
|
16
|
+
|
17
|
+
BUNDLEID = "rubyapp.#{APPNAME}"
|
18
|
+
|
19
|
+
CLEAN.include ['**/.*.sw?', '*.dmg', TARGET, 'image', 'a.out']
|
20
|
+
|
21
|
+
# Tasks
|
22
|
+
task :default => [:test]
|
23
|
+
|
24
|
+
desc 'Create Application Budle and Run it.'
|
25
|
+
task :test => [TARGET] do
|
26
|
+
sh %{open #{TARGET}}
|
27
|
+
end
|
28
|
+
|
29
|
+
desc 'Create .dmg file for Publish'
|
30
|
+
task :package => [:clean, 'pkg', TARGET] do
|
31
|
+
name = "#{APPNAME}.#{VERSION}"
|
32
|
+
sh %{
|
33
|
+
mkdir image
|
34
|
+
cp -r #{PKGINC.join(' ')} image
|
35
|
+
ln -s html/index.html image/index.html
|
36
|
+
}
|
37
|
+
puts 'Creating Image...'
|
38
|
+
sh %{
|
39
|
+
hdiutil create -volname #{name} -srcfolder image #{name}.dmg
|
40
|
+
rm -rf image
|
41
|
+
mv #{name}.dmg pkg
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
desc 'Publish .dmg file to specific server.'
|
46
|
+
task :publish => [:package] do
|
47
|
+
sh %{
|
48
|
+
svn log > CHANGES
|
49
|
+
}
|
50
|
+
_, host, path = */^([^\s]+):(.+)$/.match(PUBLISH)
|
51
|
+
path = Pathname.new path
|
52
|
+
puts "Publish: Host: %s, Path: %s" % [host, path]
|
53
|
+
sh %{
|
54
|
+
scp pkg/IIrcv.#{VERSION}.dmg #{PUBLISH}/pkg
|
55
|
+
scp CHANGES #{PUBLISH}/pkg
|
56
|
+
scp -r html/* #{PUBLISH}
|
57
|
+
}
|
58
|
+
end
|
59
|
+
|
60
|
+
# File tasks
|
61
|
+
file TARGET => [:clean, APPNAME] do
|
62
|
+
sh %{
|
63
|
+
mkdir -p "#{APPNAME}.app/Contents/MacOS"
|
64
|
+
mkdir "#{APPNAME}.app/Contents/Resources"
|
65
|
+
cp -rp #{RESOURCES.join(' ')} "#{APPNAME}.app/Contents/Resources"
|
66
|
+
cp #{APPNAME} "#{APPNAME}.app/Contents/MacOS"
|
67
|
+
echo -n "APPL????" > "#{APPNAME}.app/Contents/PkgInfo"
|
68
|
+
echo -n #{VERSION} > "#{APPNAME}.app/Contents/Resources/VERSION"
|
69
|
+
}
|
70
|
+
File.open("#{APPNAME}.app/Contents/Info.plist", "w") do |f|
|
71
|
+
f.puts ERB.new(File.read("Info.plist.erb")).result
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
file APPNAME => ['main.m'] do
|
76
|
+
# Universal Binary
|
77
|
+
sh %{gcc -arch ppc -arch i386 -Wall -lobjc -framework RubyCocoa main.m -o #{APPNAME}}
|
78
|
+
end
|
79
|
+
|
80
|
+
directory 'pkg'
|
81
|
+
|
data/templates/class.erb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'osx/cocoa'
|
2
|
+
include OSX
|
3
|
+
|
4
|
+
class <%=class_name%> < <%=super_class%>
|
5
|
+
<%- outlets.each do |outlet| -%>
|
6
|
+
ib_outlets :<%=outlet%>
|
7
|
+
<%- end %>
|
8
|
+
<%- actions.each do |action| -%>
|
9
|
+
|
10
|
+
def <%=action%>(sender)
|
11
|
+
end
|
12
|
+
<%- end %>
|
13
|
+
|
14
|
+
def awakeFromNib
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
data/templates/main.m
ADDED
data/templates/main.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
begin
|
3
|
+
require 'rubygems'
|
4
|
+
rescue LoadError
|
5
|
+
end
|
6
|
+
require 'osx/cocoa'
|
7
|
+
require 'osx/hotkey'
|
8
|
+
require 'pathname'
|
9
|
+
|
10
|
+
def log(*args)
|
11
|
+
args.each do |m|
|
12
|
+
OSX.NSLog m.inspect
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def _(key)
|
17
|
+
NSLocalizedString(key, '').to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
path = Pathname.new OSX::NSBundle.mainBundle.resourcePath.fileSystemRepresentation
|
21
|
+
Pathname.glob(path + '*.rb') do |file|
|
22
|
+
next if file.to_s == __FILE__
|
23
|
+
require(file)
|
24
|
+
end
|
25
|
+
OSX::NSApplicationWithHotKey.sharedApplication
|
26
|
+
OSX.NSApplicationMain(0, nil)
|
27
|
+
|
28
|
+
|
data/test/TestHeader.h
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
/* AppController */
|
2
|
+
|
3
|
+
#import <Cocoa/Cocoa.h>
|
4
|
+
|
5
|
+
@interface TestHeader : NSObject
|
6
|
+
{
|
7
|
+
IBOutlet id configController;
|
8
|
+
IBOutlet id menu;
|
9
|
+
IBOutlet id menuToggleHide;
|
10
|
+
IBOutlet id menuToggleIgnoreMouseEvent;
|
11
|
+
IBOutlet id menuToggleTimeout;
|
12
|
+
IBOutlet id winConfig;
|
13
|
+
}
|
14
|
+
- (IBAction)about:(id)sender;
|
15
|
+
- (IBAction)quit:(id)sender;
|
16
|
+
- (IBAction)toggleHide:(id)sender;
|
17
|
+
- (IBAction)toggleIgnoreMouseEvent:(id)sender;
|
18
|
+
- (IBAction)toggleTimeout:(id)sender;
|
19
|
+
@end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'pp'
|
4
|
+
require 'pathname'
|
5
|
+
include FileUtils
|
6
|
+
|
7
|
+
class NewCocoaTest < Test::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
@testdir = Pathname.new(File.dirname(__FILE__)).realpath
|
10
|
+
@newgem = @testdir + '../bin/newcocoa'
|
11
|
+
system(@newgem, 'testcocoa')
|
12
|
+
end
|
13
|
+
|
14
|
+
def teardown
|
15
|
+
rm_rf 'testcocoa'
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_load
|
19
|
+
assert true
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_create
|
23
|
+
cd 'testcocoa' do
|
24
|
+
assert_equal(Dir['**/*'], [
|
25
|
+
"English.lproj",
|
26
|
+
"html",
|
27
|
+
"Info.plist.erb",
|
28
|
+
"main.m",
|
29
|
+
"main.rb",
|
30
|
+
"Rakefile",
|
31
|
+
"README",
|
32
|
+
"English.lproj/Main.nib",
|
33
|
+
"English.lproj/Main.nib/classes.nib",
|
34
|
+
"English.lproj/Main.nib/info.nib",
|
35
|
+
"English.lproj/Main.nib/keyedobjects.nib"
|
36
|
+
])
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_convert
|
41
|
+
cd 'testcocoa' do
|
42
|
+
cp @testdir + 'TestHeader.h', '.'
|
43
|
+
system(@newgem, '-c')
|
44
|
+
res = Pathname.new 'TestHeader.rb'
|
45
|
+
assert res.exist?, 'Create Converted .rb'
|
46
|
+
|
47
|
+
time = res.mtime
|
48
|
+
system(@newgem, '-c')
|
49
|
+
assert_equal time, res.mtime, 'No overwrite existed .rb'
|
50
|
+
|
51
|
+
res.unlink
|
52
|
+
|
53
|
+
system(@newgem, '-c', 'TestHeader.h')
|
54
|
+
assert res.exist?, 'Create Converted .rb, -c'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.0
|
3
|
+
specification_version: 1
|
4
|
+
name: newcocoa
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.0.1
|
7
|
+
date: 2006-11-19 00:00:00 +09:00
|
8
|
+
summary: Generate new Ruby/Cocoa Application skelton.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: cho45@lowreal.net
|
12
|
+
homepage: http://newcocoa.rubyforge.org
|
13
|
+
rubyforge_project: newcocoa
|
14
|
+
description: Generate new Ruby/Cocoa Application skelton.
|
15
|
+
autorequire: newcocoa
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
-
|
22
|
+
- ">"
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.0.0
|
25
|
+
version:
|
26
|
+
platform: ruby
|
27
|
+
signing_key:
|
28
|
+
cert_chain:
|
29
|
+
post_install_message:
|
30
|
+
authors:
|
31
|
+
- cho45
|
32
|
+
files:
|
33
|
+
- README
|
34
|
+
- CHANGELOG
|
35
|
+
- Rakefile
|
36
|
+
- bin/newcocoa
|
37
|
+
- test/newcocoa_test.rb
|
38
|
+
- test/test_helper.rb
|
39
|
+
- test/TestHeader.h
|
40
|
+
- lib/newcocoa.rb
|
41
|
+
- templates/class.erb
|
42
|
+
- templates/English.lproj
|
43
|
+
- templates/Info.plist.erb
|
44
|
+
- templates/main.m
|
45
|
+
- templates/main.rb
|
46
|
+
- templates/Rakefile
|
47
|
+
- templates/README
|
48
|
+
- templates/English.lproj/Main.nib
|
49
|
+
- templates/English.lproj/Main.nib/classes.nib
|
50
|
+
- templates/English.lproj/Main.nib/info.nib
|
51
|
+
- templates/English.lproj/Main.nib/keyedobjects.nib
|
52
|
+
test_files: []
|
53
|
+
rdoc_options:
|
54
|
+
- "--quiet"
|
55
|
+
- "--title"
|
56
|
+
- newcocoa documentation
|
57
|
+
- "--opname"
|
58
|
+
- index.html
|
59
|
+
- "--line-numbers"
|
60
|
+
- "--main"
|
61
|
+
- README
|
62
|
+
- "--inline-source"
|
63
|
+
- "--exclude"
|
64
|
+
- "^(examples|extras)/"
|
65
|
+
extra_rdoc_files:
|
66
|
+
- README
|
67
|
+
- CHANGELOG
|
68
|
+
executables:
|
69
|
+
- newcocoa
|
70
|
+
extensions: []
|
71
|
+
requirements: []
|
72
|
+
dependencies: []
|