rb-appscript 0.5.0 → 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/CHANGES +19 -0
- data/LICENSE +1 -1
- data/README +5 -5
- data/TODO +3 -1
- data/doc/aem-manual/01_introduction.html +2 -2
- data/doc/aem-manual/02_apioverview.html +2 -2
- data/doc/aem-manual/03_packingandunpackingdata.html +2 -2
- data/doc/aem-manual/04_references.html +9 -21
- data/doc/aem-manual/05_targettingapplications.html +3 -3
- data/doc/aem-manual/06_buildingandsendingevents.html +2 -2
- data/doc/aem-manual/07_findapp.html +2 -2
- data/doc/aem-manual/08_examples.html +3 -3
- data/doc/aem-manual/index.html +2 -2
- data/doc/appscript-manual/01_introduction.html +2 -2
- data/doc/appscript-manual/02_aboutappscripting.html +2 -2
- data/doc/appscript-manual/03_quicktutorial.html +2 -2
- data/doc/appscript-manual/04_gettinghelp.html +2 -2
- data/doc/appscript-manual/05_keywordconversion.html +2 -2
- data/doc/appscript-manual/06_classesandenums.html +2 -2
- data/doc/appscript-manual/07_applicationobjects.html +2 -2
- data/doc/appscript-manual/08_realvsgenericreferences.html +2 -2
- data/doc/appscript-manual/09_referenceforms.html +3 -3
- data/doc/appscript-manual/10_referenceexamples.html +2 -2
- data/doc/appscript-manual/11_applicationcommands.html +2 -2
- data/doc/appscript-manual/12_commandexamples.html +2 -2
- data/doc/appscript-manual/13_performanceissues.html +2 -2
- data/doc/appscript-manual/14_notes.html +2 -2
- data/doc/appscript-manual/index.html +2 -2
- data/doc/{appscript-manual/full.css → full.css} +0 -0
- data/doc/index.html +2 -2
- data/doc/mactypes-manual/index.html +2 -2
- data/doc/osax-manual/index.html +6 -6
- data/extconf.rb +13 -3
- data/rb-appscript.gemspec +2 -1
- data/src/lib/_aem/aemreference.rb +22 -31
- data/src/lib/_aem/codecs.rb +21 -19
- data/src/lib/_aem/connect.rb +7 -3
- data/src/lib/_aem/findapp.rb +7 -3
- data/src/lib/_aem/mactypes.rb +22 -14
- data/src/lib/_aem/send.rb +7 -3
- data/src/lib/_aem/typewrappers.rb +7 -3
- data/src/lib/_appscript/defaultterminology.rb +7 -3
- data/src/lib/_appscript/referencerenderer.rb +7 -3
- data/src/lib/_appscript/reservedkeywords.rb +8 -3
- data/src/lib/_appscript/safeobject.rb +12 -2
- data/src/lib/_appscript/terminology.rb +31 -15
- data/src/lib/aem.rb +8 -3
- data/src/lib/appscript.rb +74 -46
- data/src/lib/osax.rb +7 -6
- data/src/rbae.c +46 -77
- data/test/test_aemreference.rb +10 -4
- data/test/test_appscriptcommands.rb +3 -1
- data/test/test_appscriptreference.rb +5 -3
- data/test/test_codecs.rb +3 -1
- data/test/test_findapp.rb +3 -1
- data/test/test_mactypes.rb +12 -6
- data/test/test_osax.rb +3 -6
- metadata +44 -38
- data/doc/aem-manual/full.css +0 -21
@@ -5,7 +5,7 @@
|
|
5
5
|
<title>appscript | 10. Reference Examples</title>
|
6
6
|
|
7
7
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
8
|
-
<style type="text/css" media="all"><!--@import url(full.css);--></style>
|
8
|
+
<style type="text/css" media="all"><!--@import url(../full.css);--></style>
|
9
9
|
|
10
10
|
</head>
|
11
11
|
<body>
|
@@ -138,6 +138,6 @@ app('TextEdit').documents[1].text.paragraphs[1].before</code></pre>
|
|
138
138
|
</div>
|
139
139
|
|
140
140
|
<!--footer-->
|
141
|
-
<p class="footer">©
|
141
|
+
<p class="footer">© 2006-2008 HAS</p>
|
142
142
|
</body>
|
143
143
|
</html>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<title>appscript | 11. Application Commands</title>
|
6
6
|
|
7
7
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
8
|
-
<style type="text/css" media="all"><!--@import url(full.css);--></style>
|
8
|
+
<style type="text/css" media="all"><!--@import url(../full.css);--></style>
|
9
9
|
|
10
10
|
</head>
|
11
11
|
<body>
|
@@ -201,6 +201,6 @@ print d
|
|
201
201
|
</div>
|
202
202
|
|
203
203
|
<!--footer-->
|
204
|
-
<p class="footer">©
|
204
|
+
<p class="footer">© 2006-2008 HAS</p>
|
205
205
|
</body>
|
206
206
|
</html>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<title>appscript | 12. Command Examples</title>
|
6
6
|
|
7
7
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
8
|
-
<style type="text/css" media="all"><!--@import url(full.css);--></style>
|
8
|
+
<style type="text/css" media="all"><!--@import url(../full.css);--></style>
|
9
9
|
|
10
10
|
</head>
|
11
11
|
<body>
|
@@ -124,6 +124,6 @@ app('Address Book').people[
|
|
124
124
|
</div>
|
125
125
|
|
126
126
|
<!--footer-->
|
127
|
-
<p class="footer">©
|
127
|
+
<p class="footer">© 2006-2008 HAS</p>
|
128
128
|
</body>
|
129
129
|
</html>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<title>appscript | 13. Performance Issues</title>
|
6
6
|
|
7
7
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
8
|
-
<style type="text/css" media="all"><!--@import url(full.css);--></style>
|
8
|
+
<style type="text/css" media="all"><!--@import url(../full.css);--></style>
|
9
9
|
|
10
10
|
</head>
|
11
11
|
<body>
|
@@ -113,6 +113,6 @@ p result</code></pre>
|
|
113
113
|
</div>
|
114
114
|
|
115
115
|
<!--footer-->
|
116
|
-
<p class="footer">©
|
116
|
+
<p class="footer">© 2006-2008 HAS</p>
|
117
117
|
</body>
|
118
118
|
</html>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<title>appscript | 14. Notes</title>
|
6
6
|
|
7
7
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
8
|
-
<style type="text/css" media="all"><!--@import url(full.css);--></style>
|
8
|
+
<style type="text/css" media="all"><!--@import url(../full.css);--></style>
|
9
9
|
|
10
10
|
</head>
|
11
11
|
<body>
|
@@ -84,6 +84,6 @@ require 'appscript'
|
|
84
84
|
</div>
|
85
85
|
|
86
86
|
<!--footer-->
|
87
|
-
<p class="footer">©
|
87
|
+
<p class="footer">© 2006-2008 HAS</p>
|
88
88
|
</body>
|
89
89
|
</html>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<title>appscript | Contents</title>
|
6
6
|
|
7
7
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
8
|
-
<style type="text/css" media="all"><!--@import url(full.css);--></style>
|
8
|
+
<style type="text/css" media="all"><!--@import url(../full.css);--></style>
|
9
9
|
|
10
10
|
</head>
|
11
11
|
<body>
|
@@ -43,6 +43,6 @@
|
|
43
43
|
</div>
|
44
44
|
|
45
45
|
<!--footer-->
|
46
|
-
<p class="footer">©
|
46
|
+
<p class="footer">© 2006-2008 HAS</p>
|
47
47
|
</body>
|
48
48
|
</html>
|
File without changes
|
data/doc/index.html
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
<title>Appscript Documentation</title>
|
6
6
|
|
7
7
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
8
|
-
<style type="text/css" media="all"><!--@import url(
|
8
|
+
<style type="text/css" media="all"><!--@import url(full.css);--></style>
|
9
9
|
|
10
10
|
</head>
|
11
11
|
<body>
|
@@ -26,6 +26,6 @@
|
|
26
26
|
</div>
|
27
27
|
|
28
28
|
<!--footer-->
|
29
|
-
<p class="footer">©
|
29
|
+
<p class="footer">© 2006-2008 HAS</p>
|
30
30
|
</body>
|
31
31
|
</html>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<title>mactypes</title>
|
6
6
|
|
7
7
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
8
|
-
<style type="text/css" media="all"><!--@import url(../
|
8
|
+
<style type="text/css" media="all"><!--@import url(../full.css);--></style>
|
9
9
|
|
10
10
|
</head>
|
11
11
|
<body>
|
@@ -251,6 +251,6 @@ MacTypes::Alias.path('/some/non/existent/location')
|
|
251
251
|
</div>
|
252
252
|
|
253
253
|
<!--footer-->
|
254
|
-
<p class="footer">©
|
254
|
+
<p class="footer">© 2006-2008 HAS</p>
|
255
255
|
</body>
|
256
256
|
</html>
|
data/doc/osax-manual/index.html
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
<title>osax</title>
|
6
6
|
|
7
7
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
8
|
-
<style type="text/css" media="all"><!--@import url(../
|
8
|
+
<style type="text/css" media="all"><!--@import url(../full.css);--></style>
|
9
9
|
|
10
10
|
</head>
|
11
11
|
<body>
|
@@ -37,7 +37,7 @@ sa.say("Hello world", :using=>"Victoria")</code></pre>
|
|
37
37
|
|
38
38
|
<p>The default application commands (<code>run</code>, <code>activate</code>, <code>quit</code>, etc.) are also available; see the appscript manual for details on those.</p>
|
39
39
|
|
40
|
-
<p>By default, <code>ScriptingAddition</code> objects are
|
40
|
+
<p>By default, <code>ScriptingAddition</code> objects are targeted at the current application. You can obtain a <code>ScriptingAddition</code> object targeted at another application by calling one of its <code>by...</code> methods.</p>
|
41
41
|
|
42
42
|
|
43
43
|
|
@@ -108,7 +108,7 @@ osax.another_command</code></pre>
|
|
108
108
|
Constructors:
|
109
109
|
|
110
110
|
ScriptingAddition.new(name, terms=nil) -- make a ScriptingAddition
|
111
|
-
object for the specified scripting addition,
|
111
|
+
object for the specified scripting addition, targeted
|
112
112
|
at the current application
|
113
113
|
|
114
114
|
name: string -- a scripting addition's name,
|
@@ -131,7 +131,7 @@ osax.another_command</code></pre>
|
|
131
131
|
# Specifying a different target application:
|
132
132
|
|
133
133
|
# Each of the following methods returns a new ScriptingAddition
|
134
|
-
# instance
|
134
|
+
# instance targeted at the specified application. The arguments
|
135
135
|
# are the same as for the by_name, by_creator, etc. methods in
|
136
136
|
# appscript.
|
137
137
|
|
@@ -178,7 +178,7 @@ p sa.display_dialog("Ruby says hello!",
|
|
178
178
|
|
179
179
|
<h3>GUI interaction</h3>
|
180
180
|
|
181
|
-
<p>When using scripting addition commands that require GUI access (e.g. <code>display_dialog</code>)
|
181
|
+
<p>When using scripting addition commands that require GUI access (e.g. <code>display_dialog</code>) targeted at the command-line Ruby interpreter, the osax module will automatically convert the non-GUI interpreter process into a full GUI process to allow these commands to operate correctly. If you want to avoid this, target these commands at a faceless GUI application such as System Events instead:</p>
|
182
182
|
|
183
183
|
<pre><code>sa = OSAX.osax("StandardAdditions", "System Events")
|
184
184
|
sa.activate # give focus to System Events
|
@@ -219,6 +219,6 @@ sa = OSAX::ScriptingAddition.new('StandardAdditions', StandardAdditions)</code><
|
|
219
219
|
</div>
|
220
220
|
|
221
221
|
<!--footer-->
|
222
|
-
<p class="footer">©
|
222
|
+
<p class="footer">© 2006-2008 HAS</p>
|
223
223
|
</body>
|
224
224
|
</html>
|
data/extconf.rb
CHANGED
@@ -35,9 +35,18 @@ $LDFLAGS << ' -framework Carbon -framework ApplicationServices'
|
|
35
35
|
|
36
36
|
# Avoid `ID' and `T_DATA' symbol collisions between Ruby and Carbon.
|
37
37
|
# (adapted code from RubyAEOSA - FUJIMOTO Hisakuni <hisa -at- fobj - com>)
|
38
|
-
|
39
|
-
|
38
|
+
|
39
|
+
maj, min, rev = RUBY_VERSION.split('.')
|
40
|
+
is_ruby_18 = (maj == '1' and min.to_i < 9)
|
41
|
+
if is_ruby_18
|
42
|
+
header_path = Config::CONFIG['archdir']
|
43
|
+
else
|
44
|
+
header_path = File.join(Config::CONFIG['rubyhdrdir'], 'ruby')
|
45
|
+
end
|
46
|
+
ruby_h = File.join(header_path, 'ruby.h')
|
47
|
+
intern_h = File.join(header_path, 'intern.h')
|
40
48
|
new_filename_prefix = 'osx_'
|
49
|
+
|
41
50
|
[ ruby_h, intern_h ].each do |src_path|
|
42
51
|
dst_fname = File.join('./src', new_filename_prefix + File.basename(src_path))
|
43
52
|
$stderr.puts "create #{File.expand_path(dst_fname)} ..."
|
@@ -45,7 +54,8 @@ new_filename_prefix = 'osx_'
|
|
45
54
|
IO.foreach(src_path) do |line|
|
46
55
|
line = line.gsub(/\bID\b/, 'RB_ID')
|
47
56
|
line = line.gsub(/\bT_DATA\b/, 'RB_T_DATA')
|
48
|
-
line = line.gsub(/\
|
57
|
+
line = line.gsub(/\b(?:ruby\/)?intern.h\b/, "#{new_filename_prefix}intern.h")
|
58
|
+
line = line.gsub('#include "defines.h"', '#include "ruby/defines.h"') if not is_ruby_18
|
49
59
|
dstfile.puts line
|
50
60
|
end
|
51
61
|
end
|
data/rb-appscript.gemspec
CHANGED
@@ -2,7 +2,7 @@ require "rubygems"
|
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |s|
|
4
4
|
s.name = "rb-appscript"
|
5
|
-
s.version = "0.5.
|
5
|
+
s.version = "0.5.1"
|
6
6
|
s.author = "HAS"
|
7
7
|
s.homepage = "http://rb-appscript.rubyforge.org/"
|
8
8
|
s.rubyforge_project="rb-appscript"
|
@@ -10,6 +10,7 @@ spec = Gem::Specification.new do |s|
|
|
10
10
|
s.files = Dir["**/*"].delete_if { |name| ["MakeFile", "ae.bundle", "mkmf.log", "rbae.o", "SendThreadSafe.o", "src/osx_ruby.h", "src/osx_intern.h"].include?(name) }
|
11
11
|
s.extensions = "extconf.rb"
|
12
12
|
s.test_files = Dir["test/test_*.rb"]
|
13
|
+
# s.platform = Gem::Platform::CURRENT
|
13
14
|
s.required_ruby_version = ">= 1.8"
|
14
15
|
end
|
15
16
|
|
@@ -1,6 +1,10 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
#
|
1
|
+
#
|
2
|
+
# rb-appscript
|
3
|
+
#
|
4
|
+
# aemreference -- an object-oriented API for constructing object specifier AEDescs
|
5
|
+
#
|
6
|
+
# Copyright (C) 2006-2008 HAS. Released under MIT License.
|
7
|
+
#
|
4
8
|
|
5
9
|
######################################################################
|
6
10
|
# Endianness support
|
@@ -277,25 +281,6 @@ module AEMReference
|
|
277
281
|
def is_in(val)
|
278
282
|
return IsIn.new(self, val)
|
279
283
|
end
|
280
|
-
|
281
|
-
# Logic tests; these should only be used on its-based references:
|
282
|
-
|
283
|
-
# Note: these are convenience methods allowing boolean tests to be written in shorthand form;
|
284
|
-
# e.g. AEM.its.visible.and(...) will automatically expand to AEM.its.visible.eq(true).and(...)
|
285
|
-
# The Test class implements the actual logic test methods
|
286
|
-
|
287
|
-
def and(*operands)
|
288
|
-
return Equals.new(self, true).and(*operands)
|
289
|
-
end
|
290
|
-
|
291
|
-
def or(*operands)
|
292
|
-
return Equals.new(self, true).or(*operands)
|
293
|
-
end
|
294
|
-
|
295
|
-
def not
|
296
|
-
return Equals.new(self, true).not
|
297
|
-
end
|
298
|
-
|
299
284
|
|
300
285
|
# Insertion references:
|
301
286
|
|
@@ -566,11 +551,6 @@ module AEMReference
|
|
566
551
|
KeyForm = AEMReference.pack_enum(KAE::FormRange)
|
567
552
|
|
568
553
|
def initialize(wantcode, container, key)
|
569
|
-
key.each do |item|
|
570
|
-
if not (item.is_a?(Specifier) and item.AEM_root != Its)
|
571
|
-
raise TypeError, "Bad selector: not an application (app) or container (con) based reference: #{item.inspect}"
|
572
|
-
end
|
573
|
-
end
|
574
554
|
super(wantcode, container.AEM_true_self, key)
|
575
555
|
end
|
576
556
|
|
@@ -579,10 +559,21 @@ module AEMReference
|
|
579
559
|
end
|
580
560
|
|
581
561
|
def _pack_key(codecs)
|
582
|
-
|
583
|
-
[KAE::KeyAERangeStart,
|
584
|
-
[KAE::KeyAERangeStop,
|
585
|
-
|
562
|
+
range_selectors = [
|
563
|
+
[KAE::KeyAERangeStart, @_key[0]],
|
564
|
+
[KAE::KeyAERangeStop, @_key[1]]
|
565
|
+
].collect do |key, selector|
|
566
|
+
case selector
|
567
|
+
when Specifier
|
568
|
+
# use selector as-is (note: its-based roots aren't appropriate, but this isn't checked for)
|
569
|
+
when String
|
570
|
+
selector = AEMReference::Con.elements(@AEM_want).by_name(selector)
|
571
|
+
else
|
572
|
+
selector = AEMReference::Con.elements(@AEM_want).by_index(selector)
|
573
|
+
end
|
574
|
+
[key, codecs.pack(selector)]
|
575
|
+
end
|
576
|
+
return AEMReference.pack_list_as(KAE::TypeRangeDescriptor, range_selectors)
|
586
577
|
end
|
587
578
|
|
588
579
|
def AEM_resolve(obj)
|
data/src/lib/_aem/codecs.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
#
|
1
|
+
#
|
2
|
+
# rb-appscript
|
3
|
+
#
|
4
|
+
# codecs -- convert native Ruby objects to AEDescs, and vice-versa
|
5
|
+
#
|
6
|
+
# Copyright (C) 2006-2008 HAS. Released under MIT License.
|
7
|
+
#
|
4
8
|
|
5
9
|
require "ae"
|
6
10
|
require "kae"
|
@@ -80,7 +84,7 @@ class UnitTypeCodecs
|
|
80
84
|
|
81
85
|
def pack(val)
|
82
86
|
if val.is_a?(MacTypes::Units)
|
83
|
-
code, packer = @type_by_name.fetch(val.type) { |
|
87
|
+
code, packer = @type_by_name.fetch(val.type) { |v| raise IndexError, "Unknown unit type: #{v.inspect}" }
|
84
88
|
return [true, packer.call(val, code)]
|
85
89
|
else
|
86
90
|
return [false, val]
|
@@ -88,7 +92,7 @@ class UnitTypeCodecs
|
|
88
92
|
end
|
89
93
|
|
90
94
|
def unpack(desc)
|
91
|
-
name, unpacker = @type_by_code.fetch(desc.type) { |
|
95
|
+
name, unpacker = @type_by_code.fetch(desc.type) { |d| return [false, d] }
|
92
96
|
return [true, unpacker.call(desc, name)]
|
93
97
|
end
|
94
98
|
end
|
@@ -168,7 +172,16 @@ class Codecs
|
|
168
172
|
case val
|
169
173
|
when AEMReference::Base then val.AEM_pack_self(self)
|
170
174
|
|
171
|
-
when Fixnum then
|
175
|
+
when Fixnum, Bignum then
|
176
|
+
if SInt32Bounds === val
|
177
|
+
AE::AEDesc.new(KAE::TypeSInt32, [val].pack('l'))
|
178
|
+
elsif SInt64Bounds === val
|
179
|
+
AE::AEDesc.new(KAE::TypeSInt64, [val].pack('q'))
|
180
|
+
elsif UInt64Bounds === val
|
181
|
+
pack_uint64(val)
|
182
|
+
else
|
183
|
+
AE::AEDesc.new(KAE::TypeFloat, [val.to_f].pack('d'))
|
184
|
+
end
|
172
185
|
|
173
186
|
when String then
|
174
187
|
begin
|
@@ -213,17 +226,6 @@ class Codecs
|
|
213
226
|
AE::AEDesc.new(KAE::TypeKeyword, Codecs.four_char_code(val.code))
|
214
227
|
|
215
228
|
when AE::AEDesc then val
|
216
|
-
|
217
|
-
when Bignum
|
218
|
-
if SInt32Bounds === val
|
219
|
-
AE::AEDesc.new(KAE::TypeSInt32, [val].pack('l'))
|
220
|
-
elsif SInt64Bounds === val
|
221
|
-
AE::AEDesc.new(KAE::TypeSInt64, [val].pack('q'))
|
222
|
-
elsif UInt64Bounds === val
|
223
|
-
pack_uint64(val)
|
224
|
-
else
|
225
|
-
AE::AEDesc.new(KAE::TypeFloat, [val.to_f].pack('d'))
|
226
|
-
end
|
227
229
|
|
228
230
|
when NilClass then NullDesc
|
229
231
|
else
|
@@ -394,8 +396,8 @@ class Codecs
|
|
394
396
|
key, value = desc.get_item(i + 1, KAE::TypeWildCard)
|
395
397
|
if key == KAE::KeyASUserRecordFields
|
396
398
|
lst = unpack_aelist(value)
|
397
|
-
(lst.length / 2).times do |
|
398
|
-
dct[lst[
|
399
|
+
(lst.length / 2).times do |j|
|
400
|
+
dct[lst[j * 2]] = lst[j * 2 + 1]
|
399
401
|
end
|
400
402
|
else
|
401
403
|
dct[TypeWrappers::AEType.new(key)] = unpack(value)
|
data/src/lib/_aem/connect.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
#
|
1
|
+
#
|
2
|
+
# rb-appscript
|
3
|
+
#
|
4
|
+
# connect -- launch applications and create AEAddressDescs
|
5
|
+
#
|
6
|
+
# Copyright (C) 2006-2008 HAS. Released under MIT License.
|
7
|
+
#
|
4
8
|
|
5
9
|
module Connect
|
6
10
|
# Creates Apple event descriptor records of typeProcessSerialNumber, typeKernelProcessID and typeApplicationURL, used to specify the target application in Send::Event constructor.
|
data/src/lib/_aem/findapp.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
#
|
1
|
+
#
|
2
|
+
# rb-appscript
|
3
|
+
#
|
4
|
+
# findapp -- locate an application by name, bundle ID or creator code
|
5
|
+
#
|
6
|
+
# Copyright (C) 2006-2008 HAS. Released under MIT License.
|
7
|
+
#
|
4
8
|
|
5
9
|
module FindApp
|
6
10
|
# Support module for obtaining the full path to a local application given its name, bundle id or creator type. If application isn't found, an ApplicationNotFoundError exception is raised.
|
data/src/lib/_aem/mactypes.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
#
|
1
|
+
#
|
2
|
+
# rb-appscript
|
3
|
+
#
|
4
|
+
# mactypes -- Ruby classes representing Alias, FileURL and unit type AEDescs
|
5
|
+
#
|
6
|
+
# Copyright (C) 2006-2008 HAS. Released under MIT License.
|
7
|
+
#
|
4
8
|
|
5
9
|
module MacTypes
|
6
10
|
# Defines wrapper classes for Mac OS datatypes that don't have a suitable Ruby equivalent.
|
@@ -10,6 +14,10 @@ module MacTypes
|
|
10
14
|
require "ae"
|
11
15
|
require "kae"
|
12
16
|
|
17
|
+
KCFURLPOSIXPathStyle = 0
|
18
|
+
KCFURLHFSPathStyle = 1
|
19
|
+
KCFURLWindowsPathStyle = 2
|
20
|
+
|
13
21
|
class FileBase
|
14
22
|
|
15
23
|
def FileBase._coerce(desc, type, path=nil)
|
@@ -57,20 +65,20 @@ module MacTypes
|
|
57
65
|
def Alias.path(path)
|
58
66
|
# Make Alias object from POSIX path.
|
59
67
|
return new(FileBase._coerce(
|
60
|
-
AE::AEDesc.new(KAE::TypeFileURL, AE.
|
68
|
+
AE::AEDesc.new(KAE::TypeFileURL, AE.convert_path_to_url(path, KCFURLPOSIXPathStyle)),
|
61
69
|
KAE::TypeAlias, path))
|
62
70
|
end
|
63
71
|
|
64
72
|
def Alias.hfs_path(path)
|
65
73
|
# Make Alias object from HFS path.
|
66
74
|
return new(FileBase._coerce(
|
67
|
-
AE::AEDesc.new(KAE::TypeFileURL, AE.
|
75
|
+
AE::AEDesc.new(KAE::TypeFileURL, AE.convert_path_to_url(path, KCFURLHFSPathStyle)),
|
68
76
|
KAE::TypeAlias, path))
|
69
77
|
end
|
70
78
|
|
71
79
|
def Alias.url(url)
|
72
80
|
# Make Alias object from file URL. Note: only the path portion of the URL is used; the domain will always be localhost.
|
73
|
-
return Alias.path(AE.
|
81
|
+
return Alias.path(AE.convert_url_to_path(url, KCFURLPOSIXPathStyle))
|
74
82
|
end
|
75
83
|
|
76
84
|
def Alias.desc(desc)
|
@@ -89,12 +97,12 @@ module MacTypes
|
|
89
97
|
|
90
98
|
def path
|
91
99
|
# Get as POSIX path.
|
92
|
-
return AE.
|
100
|
+
return AE.convert_url_to_path(FileBase._coerce(@desc, KAE::TypeFileURL).data, KCFURLPOSIXPathStyle)
|
93
101
|
end
|
94
102
|
|
95
103
|
def hfs_path
|
96
104
|
# Get as HFS path.
|
97
|
-
return AE.
|
105
|
+
return AE.convert_url_to_path(FileBase._coerce(@desc, KAE::TypeFileURL).data, KCFURLHFSPathStyle)
|
98
106
|
end
|
99
107
|
|
100
108
|
alias_method :to_s, :path
|
@@ -135,12 +143,12 @@ module MacTypes
|
|
135
143
|
|
136
144
|
def FileURL.hfs_path(path)
|
137
145
|
# Make FileURL object from HFS path.
|
138
|
-
return new(AE.
|
146
|
+
return new(AE.convert_url_to_path(AE.convert_path_to_url(path, KCFURLHFSPathStyle), KCFURLPOSIXPathStyle), nil)
|
139
147
|
end
|
140
148
|
|
141
149
|
def FileURL.url(url)
|
142
150
|
# Make FileURL object from file URL. Note: only the path portion of the URL is used; the domain will always be localhost.
|
143
|
-
return FileURL.path(AE.
|
151
|
+
return FileURL.path(AE.convert_url_to_path(url, KCFURLPOSIXPathStyle))
|
144
152
|
end
|
145
153
|
|
146
154
|
def FileURL.desc(desc)
|
@@ -151,9 +159,9 @@ module MacTypes
|
|
151
159
|
# Methods
|
152
160
|
|
153
161
|
def desc
|
154
|
-
# Get as AEDesc. If constructed from Ruby, descriptor's type is always typeFileURL; if returned by aem, its type
|
162
|
+
# Get as AEDesc. If constructed from Ruby, descriptor's type is always typeFileURL; if returned by aem, its type may be typeFSS, typeFSRef or typeFileURL.
|
155
163
|
if not @desc
|
156
|
-
@desc = AE::AEDesc.new(KAE::TypeFileURL, AE.
|
164
|
+
@desc = AE::AEDesc.new(KAE::TypeFileURL, AE.convert_path_to_url(@path, KCFURLPOSIXPathStyle))
|
157
165
|
end
|
158
166
|
return @desc
|
159
167
|
end
|
@@ -166,13 +174,13 @@ module MacTypes
|
|
166
174
|
def path
|
167
175
|
# Get as POSIX path.
|
168
176
|
if not @path
|
169
|
-
@path = AE.
|
177
|
+
@path = AE.convert_url_to_path(FileBase._coerce(@desc, KAE::TypeFileURL).data, KCFURLPOSIXPathStyle)
|
170
178
|
end
|
171
179
|
return @path
|
172
180
|
end
|
173
181
|
|
174
182
|
def hfs_path
|
175
|
-
return AE.
|
183
|
+
return AE.convert_url_to_path(AE.convert_path_to_url(path, KCFURLPOSIXPathStyle), KCFURLHFSPathStyle)
|
176
184
|
end
|
177
185
|
|
178
186
|
alias_method :to_s, :path
|