hotcocoa 0.5 → 0.5.1
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/lib/hotcocoa/application_builder.rb +9 -35
- data/lib/hotcocoa/graphics/color.rb +5 -2
- data/lib/hotcocoa/graphics/image.rb +4 -7
- data/lib/hotcocoa/mappings/toolbar.rb +6 -3
- data/lib/hotcocoa/mappings.rb +7 -1
- data/lib/hotcocoa/standard_rake_tasks.rb +4 -0
- metadata +3 -4
- data/lib/hotcocoa/virtual_file_system.rb +0 -172
@@ -21,17 +21,12 @@ module HotCocoa
|
|
21
21
|
@sources = yml["sources"] || []
|
22
22
|
@resources = yml["resources"] || []
|
23
23
|
@overwrite = yml["overwrite"] == true ? true : false
|
24
|
-
@secure = yml["secure"] == true ? true : false
|
25
24
|
end
|
26
25
|
|
27
26
|
def overwrite?
|
28
27
|
@overwrite
|
29
28
|
end
|
30
29
|
|
31
|
-
def secure?
|
32
|
-
@secure
|
33
|
-
end
|
34
|
-
|
35
30
|
def icon_exist?
|
36
31
|
@icon ? File.exist?(@icon) : false
|
37
32
|
end
|
@@ -40,7 +35,7 @@ module HotCocoa
|
|
40
35
|
|
41
36
|
ApplicationBundlePackage = "APPL????"
|
42
37
|
|
43
|
-
attr_accessor :name, :load_file, :sources, :overwrite, :icon, :version, :info_string, :
|
38
|
+
attr_accessor :name, :load_file, :sources, :overwrite, :icon, :version, :info_string, :resources, :deploy
|
44
39
|
|
45
40
|
def self.build(config, options={:deploy => false})
|
46
41
|
if !config.kind_of?(Configuration) || !$LOADED_FEATURES.detect {|f| f.include?("standard_rake_tasks")}
|
@@ -51,7 +46,6 @@ module HotCocoa
|
|
51
46
|
end
|
52
47
|
builder = new
|
53
48
|
builder.deploy = options[:deploy] == true ? true : false
|
54
|
-
builder.secure = config.secure?
|
55
49
|
builder.name = config.name
|
56
50
|
builder.load_file = config.load
|
57
51
|
builder.icon = config.icon if config.icon_exist?
|
@@ -117,10 +111,6 @@ module HotCocoa
|
|
117
111
|
end
|
118
112
|
end
|
119
113
|
|
120
|
-
def secure?
|
121
|
-
secure
|
122
|
-
end
|
123
|
-
|
124
114
|
private
|
125
115
|
|
126
116
|
def check_for_bundle_root
|
@@ -153,22 +143,11 @@ module HotCocoa
|
|
153
143
|
end
|
154
144
|
|
155
145
|
def copy_sources
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
end
|
162
|
-
File.open(File.join(resources_root, "vfs.db"), "wb") do |db|
|
163
|
-
db.write Marshal.dump(data)
|
164
|
-
end
|
165
|
-
else
|
166
|
-
FileUtils.cp_r load_file, resources_root unless sources.include?(load_file)
|
167
|
-
sources.each do |source|
|
168
|
-
destination = File.join(resources_root, source)
|
169
|
-
FileUtils.mkdir_p(File.dirname(destination)) unless File.exist?(File.dirname(destination))
|
170
|
-
FileUtils.cp_r source, destination
|
171
|
-
end
|
146
|
+
FileUtils.cp_r load_file, resources_root unless sources.include?(load_file)
|
147
|
+
sources.each do |source|
|
148
|
+
destination = File.join(resources_root, source)
|
149
|
+
FileUtils.mkdir_p(File.dirname(destination)) unless File.exist?(File.dirname(destination))
|
150
|
+
FileUtils.cp_r source, destination
|
172
151
|
end
|
173
152
|
end
|
174
153
|
|
@@ -240,14 +219,9 @@ module HotCocoa
|
|
240
219
|
|
241
220
|
def write_ruby_main
|
242
221
|
File.open(main_ruby_source_file, "wb") do |f|
|
243
|
-
if
|
244
|
-
|
245
|
-
|
246
|
-
else
|
247
|
-
f.puts "$:.map! { |x| x.sub(/^\\/Library\\/Frameworks/, NSBundle.mainBundle.privateFrameworksPath) }" if deploy?
|
248
|
-
f.puts "$:.unshift NSBundle.mainBundle.resourcePath.fileSystemRepresentation"
|
249
|
-
f.puts "load '#{load_file}'"
|
250
|
-
end
|
222
|
+
f.puts "$:.map! { |x| x.sub(/^\\/Library\\/Frameworks/, NSBundle.mainBundle.privateFrameworksPath) }" if deploy?
|
223
|
+
f.puts "$:.unshift NSBundle.mainBundle.resourcePath.fileSystemRepresentation"
|
224
|
+
f.puts "load '#{load_file}'"
|
251
225
|
end
|
252
226
|
end
|
253
227
|
|
@@ -196,8 +196,11 @@ module HotCocoa::Graphics
|
|
196
196
|
]
|
197
197
|
|
198
198
|
COLORNAMES.each_key do |name|
|
199
|
-
(class << self; self; end)
|
200
|
-
|
199
|
+
metaclass = (class << self; self; end)
|
200
|
+
metaclass.instance_eval do
|
201
|
+
define_method(name) do
|
202
|
+
named(name)
|
203
|
+
end
|
201
204
|
end
|
202
205
|
end
|
203
206
|
|
@@ -57,12 +57,9 @@ module HotCocoa::Graphics
|
|
57
57
|
# if it's the path to an image file, load as a CGImage
|
58
58
|
@path = img
|
59
59
|
File.exists?(@path) or raise "ERROR: file not found: #{@path}"
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
@nsbitmapimage = NSBitmapImageRep.imageRepWithData(nsdata)
|
64
|
-
# cgimagesource = CGImageSourceCreateWithData(nsdata) # argh, doesn't work
|
65
|
-
@ciimage = CIImage.alloc.initWithBitmapImageRep(@nsbitmapimage)
|
60
|
+
image_source = CGImageSourceCreateWithURL(NSURL.fileURLWithPath(@path), nil)
|
61
|
+
@cgimage = CGImageSourceCreateImageAtIndex(image_source, 0, nil)
|
62
|
+
@ciimage = CIImage.imageWithCGImage(@cgimage)
|
66
63
|
when Canvas
|
67
64
|
puts "Image.new with canvas" if @verbose
|
68
65
|
@path = 'canvas'
|
@@ -80,7 +77,7 @@ module HotCocoa::Graphics
|
|
80
77
|
|
81
78
|
# reload the bitmap image
|
82
79
|
def reset
|
83
|
-
@ciimage = CIImage.
|
80
|
+
@ciimage = CIImage.imageWithCGImage(@cgimage)
|
84
81
|
self
|
85
82
|
end
|
86
83
|
|
@@ -51,11 +51,13 @@ HotCocoa::Mappings.map :toolbar => :NSToolbar do
|
|
51
51
|
def build_custom_items
|
52
52
|
if @allowed && @default
|
53
53
|
ary = @default.select { |x| x.is_a?(NSToolbarItem) }
|
54
|
-
|
54
|
+
|
55
|
+
@default.map! { |x| x.is_a?(NSToolbarItem) ? x.itemIdentifier : x }
|
56
|
+
@allowed.map! { |x| x.is_a?(NSToolbarItem) ? x.itemIdentifier : x }
|
57
|
+
|
55
58
|
@custom_items = {}
|
56
|
-
ary.each { |x| @custom_items[x.itemIdentifier] = x }
|
59
|
+
ary.each { |x| @custom_items[x.itemIdentifier] = x }
|
57
60
|
@allowed.concat(@custom_items.keys)
|
58
|
-
@default.concat(@custom_items.keys)
|
59
61
|
|
60
62
|
[@allowed, @default].each do |a|
|
61
63
|
a.map! do |i|
|
@@ -81,6 +83,7 @@ HotCocoa::Mappings.map :toolbar => :NSToolbar do
|
|
81
83
|
end
|
82
84
|
allowed_items { @allowed }
|
83
85
|
default_items { @default }
|
86
|
+
|
84
87
|
item_for_identifier { |identifier, will_be_inserted| @custom_items[identifier] }
|
85
88
|
end
|
86
89
|
end
|
data/lib/hotcocoa/mappings.rb
CHANGED
@@ -101,7 +101,13 @@ module HotCocoa
|
|
101
101
|
|
102
102
|
# Returns whether or not the framework has been loaded yet.
|
103
103
|
def self.loaded_framework?(name)
|
104
|
-
NSBundle.allFrameworks.map {|bundle|
|
104
|
+
NSBundle.allFrameworks.map { |bundle|
|
105
|
+
bundle.bundlePath.split("/").last
|
106
|
+
}.select { |framework|
|
107
|
+
framework.split(".")[1] == 'framework'
|
108
|
+
}.map { |framework|
|
109
|
+
framework.split(".")[0]
|
110
|
+
}.include?(name.to_s)
|
105
111
|
end
|
106
112
|
|
107
113
|
end
|
@@ -1,17 +1,21 @@
|
|
1
1
|
AppConfig = HotCocoa::ApplicationBuilder::Configuration.new("config/build.yml")
|
2
2
|
|
3
|
+
desc "Build a deployable version of the application"
|
3
4
|
task :deploy => [:clean] do
|
4
5
|
HotCocoa::ApplicationBuilder.build(AppConfig, :deploy => true)
|
5
6
|
end
|
6
7
|
|
8
|
+
desc "Build the application"
|
7
9
|
task :build do
|
8
10
|
HotCocoa::ApplicationBuilder.build(AppConfig)
|
9
11
|
end
|
10
12
|
|
13
|
+
desc "Build and execute the application"
|
11
14
|
task :run => [:build] do
|
12
15
|
`"./#{AppConfig.name}.app/Contents/MacOS/#{AppConfig.name.gsub(/ /, '')}"`
|
13
16
|
end
|
14
17
|
|
18
|
+
desc "Cleanup build files"
|
15
19
|
task :clean do
|
16
20
|
`/bin/rm -rf "#{AppConfig.name}.app"`
|
17
21
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hotcocoa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Kilmer
|
@@ -9,11 +9,11 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-25 00:00:00 -05:00
|
13
13
|
default_executable: hotcocoa
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description: HotCocoa is a
|
16
|
+
description: HotCocoa is a Cocoa mapping library for MacRuby. It simplifies the use of complex Cocoa classes using DSL techniques.
|
17
17
|
email: rich@infoether.com
|
18
18
|
executables:
|
19
19
|
- hotcocoa
|
@@ -94,7 +94,6 @@ files:
|
|
94
94
|
- lib/hotcocoa/plist.rb
|
95
95
|
- lib/hotcocoa/standard_rake_tasks.rb
|
96
96
|
- lib/hotcocoa/template.rb
|
97
|
-
- lib/hotcocoa/virtual_file_system.rb
|
98
97
|
- lib/hotcocoa.rb
|
99
98
|
- template/config/build.yml
|
100
99
|
- template/lib/application.rb
|
@@ -1,172 +0,0 @@
|
|
1
|
-
class VirtualFileSystem
|
2
|
-
|
3
|
-
def self.code_to_load(main_file, password = "\320\302\354\024\215\360P\235\2244\261\214\276:'\274%\270<\350t\212\003\340\t'\004\345\334\256\315\277")
|
4
|
-
<<-VFS
|
5
|
-
module DatabaseRuntime
|
6
|
-
|
7
|
-
class VirtualFilesystem
|
8
|
-
|
9
|
-
attr_reader :password, :encryption_method
|
10
|
-
|
11
|
-
def initialize(password, encryption_method="aes256")
|
12
|
-
@password = password
|
13
|
-
@encryption_method = encryption_method
|
14
|
-
end
|
15
|
-
|
16
|
-
def open_database(main_database)
|
17
|
-
@main_database = main_database
|
18
|
-
begin
|
19
|
-
@db = Marshal.load(File.open(main_database, "rb") {|f| f.read})
|
20
|
-
rescue
|
21
|
-
puts $!
|
22
|
-
puts $!.backtrace.join("\\n")
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def read_file_and_key(filename)
|
27
|
-
data, key = read_file_using_path(filename)
|
28
|
-
if data.nil? && filename[0,1] != "/"
|
29
|
-
$:.each do |loadpath|
|
30
|
-
data, key = read_file_using_path(filename, expand_path(loadpath))
|
31
|
-
break if data
|
32
|
-
end
|
33
|
-
end
|
34
|
-
[data, key]
|
35
|
-
end
|
36
|
-
|
37
|
-
def read_file_using_path(filename, pathname="/")
|
38
|
-
path = expand_path(File.join(pathname, filename))
|
39
|
-
rb_ext = false
|
40
|
-
if has_key?(path)
|
41
|
-
key = filename
|
42
|
-
elsif self.has_key?(path+".rb")
|
43
|
-
key = filename+".rb"
|
44
|
-
rb_ext = true
|
45
|
-
end
|
46
|
-
if key
|
47
|
-
result = rb_ext ? self[path+".rb"] : self[path]
|
48
|
-
if result
|
49
|
-
result.gsub!(/__FILE__/, "'\#{path + (rb_ext ? ".rb" : '')}'")
|
50
|
-
return result, key
|
51
|
-
end
|
52
|
-
end
|
53
|
-
nil
|
54
|
-
end
|
55
|
-
|
56
|
-
def has_key?(key)
|
57
|
-
@db.has_key?(key)
|
58
|
-
end
|
59
|
-
|
60
|
-
def delete(key)
|
61
|
-
end
|
62
|
-
|
63
|
-
def [](key)
|
64
|
-
read(@db, key)
|
65
|
-
end
|
66
|
-
|
67
|
-
def close
|
68
|
-
end
|
69
|
-
|
70
|
-
def keys
|
71
|
-
@db.keys
|
72
|
-
end
|
73
|
-
|
74
|
-
def []=(key, value)
|
75
|
-
end
|
76
|
-
|
77
|
-
def normalize(filename)
|
78
|
-
f = filename.split(File::Separator)
|
79
|
-
f.delete(".")
|
80
|
-
while f.include?("..")
|
81
|
-
f[f.index("..")-1,2] = []
|
82
|
-
end
|
83
|
-
f.join(File::Separator)
|
84
|
-
end
|
85
|
-
|
86
|
-
private
|
87
|
-
|
88
|
-
def expand_path(filename, dirstring=nil)
|
89
|
-
filename = File.join(dirstring, filename) if dirstring
|
90
|
-
f = filename.split(File::Separator)
|
91
|
-
f.delete(".")
|
92
|
-
f.delete("")
|
93
|
-
while f.include?("..")
|
94
|
-
f[f.index("..")-1,2] = []
|
95
|
-
end
|
96
|
-
"/"+f.join(File::Separator)
|
97
|
-
end
|
98
|
-
|
99
|
-
|
100
|
-
def read(db, key)
|
101
|
-
if db.has_key?(key)
|
102
|
-
#decrypt = OpenSSL::Cipher::Cipher.new(encryption_method)
|
103
|
-
#decrypt.decrypt
|
104
|
-
#decrypt.key = password
|
105
|
-
#data = decrypt.update(db[key])
|
106
|
-
#data << decrypt.final
|
107
|
-
#::Zlib::Inflate.inflate(data)
|
108
|
-
db[key]
|
109
|
-
else
|
110
|
-
nil
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
end
|
115
|
-
|
116
|
-
end
|
117
|
-
|
118
|
-
$ROOT_BINDING = binding
|
119
|
-
|
120
|
-
module Kernel
|
121
|
-
|
122
|
-
def virtual_filesystems(options)
|
123
|
-
vfs = DatabaseRuntime::VirtualFilesystem.new(options["password"])
|
124
|
-
vfs.open_database(options["database"])
|
125
|
-
Kernel.const_set("VIRTUAL_FILESYSTEM", vfs)
|
126
|
-
vfs
|
127
|
-
end
|
128
|
-
|
129
|
-
alias_method :original_require, :require
|
130
|
-
|
131
|
-
def require(path)
|
132
|
-
path = VIRTUAL_FILESYSTEM.normalize(path)
|
133
|
-
path_loaded = $".include?(path) || $".include?(path+".rb") || $".include?(path+".so")
|
134
|
-
unless path_loaded
|
135
|
-
data, key = VIRTUAL_FILESYSTEM.read_file_and_key(path)
|
136
|
-
if data
|
137
|
-
$" << key
|
138
|
-
eval(data, $ROOT_BINDING, key, 0)
|
139
|
-
return true
|
140
|
-
else
|
141
|
-
original_require(path)
|
142
|
-
end
|
143
|
-
else
|
144
|
-
return false
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
alias_method :original_load, :load
|
149
|
-
|
150
|
-
def load(path)
|
151
|
-
path = VIRTUAL_FILESYSTEM.normalize(path)
|
152
|
-
data, key = VIRTUAL_FILESYSTEM.read_file_and_key(path)
|
153
|
-
if data
|
154
|
-
eval(data, $ROOT_BINDING, key, 0)
|
155
|
-
return true
|
156
|
-
else
|
157
|
-
begin
|
158
|
-
original_load(path)
|
159
|
-
rescue LoadError => e
|
160
|
-
raise e
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
end
|
166
|
-
|
167
|
-
virtual_filesystems("database"=>File.join(NSBundle.mainBundle.resourcePath.fileSystemRepresentation, 'vfs.db'), "password"=>#{password.inspect})
|
168
|
-
$:.unshift "/lib"
|
169
|
-
load '#{main_file}'
|
170
|
-
VFS
|
171
|
-
end
|
172
|
-
end
|