rb-appscript 0.4.0 → 0.5.0
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 +37 -0
- data/LICENSE +6 -2
- data/README +7 -4
- data/TODO +6 -2
- data/doc/aem-manual/01_introduction.html +1 -1
- data/doc/aem-manual/02_apioverview.html +1 -1
- data/doc/aem-manual/03_packingandunpackingdata.html +3 -3
- data/doc/aem-manual/04_references.html +18 -13
- data/doc/aem-manual/05_targettingapplications.html +33 -13
- data/doc/aem-manual/06_buildingandsendingevents.html +1 -1
- data/doc/aem-manual/07_findapp.html +1 -1
- data/doc/aem-manual/08_examples.html +1 -1
- data/doc/aem-manual/index.html +1 -1
- data/doc/appscript-manual/01_introduction.html +1 -1
- data/doc/appscript-manual/02_aboutappscripting.html +4 -4
- data/doc/appscript-manual/03_quicktutorial.html +1 -1
- data/doc/appscript-manual/04_gettinghelp.html +13 -42
- data/doc/appscript-manual/05_keywordconversion.html +1 -1
- data/doc/appscript-manual/06_classesandenums.html +1 -1
- data/doc/appscript-manual/07_applicationobjects.html +19 -1
- data/doc/appscript-manual/08_realvsgenericreferences.html +1 -1
- data/doc/appscript-manual/09_referenceforms.html +1 -1
- data/doc/appscript-manual/10_referenceexamples.html +1 -1
- data/doc/appscript-manual/11_applicationcommands.html +1 -1
- data/doc/appscript-manual/12_commandexamples.html +1 -1
- data/doc/appscript-manual/13_performanceissues.html +1 -1
- data/doc/appscript-manual/14_notes.html +1 -1
- data/doc/appscript-manual/index.html +1 -1
- data/doc/index.html +1 -1
- data/doc/mactypes-manual/index.html +13 -1
- data/doc/osax-manual/index.html +37 -6
- data/extconf.rb +2 -2
- data/rb-appscript.gemspec +1 -1
- data/sample/AB_export_vcard.rb +31 -0
- data/sample/Add_iCal_event.rb +4 -4
- data/src/lib/_aem/connect.rb +88 -8
- data/src/lib/_aem/mactypes.rb +27 -21
- data/src/lib/_appscript/reservedkeywords.rb +1 -0
- data/src/lib/aem.rb +40 -5
- data/src/lib/appscript.rb +104 -30
- data/src/lib/kae.rb +1 -0
- data/src/lib/osax.rb +35 -19
- data/src/rbae.c +115 -1
- data/test/README +3 -1
- data/test/test_appscriptcommands.rb +5 -4
- data/test/test_codecs.rb +7 -1
- data/test/testall.sh +1 -1
- metadata +24 -23
data/src/rbae.c
CHANGED
@@ -493,6 +493,18 @@ rbAE_psnForApplicationPath(VALUE self, VALUE path)
|
|
493
493
|
}
|
494
494
|
|
495
495
|
|
496
|
+
static VALUE
|
497
|
+
rbAE_psnForPID(VALUE self, VALUE pid)
|
498
|
+
{
|
499
|
+
OSStatus err = noErr;
|
500
|
+
ProcessSerialNumber psn = {0, kNoProcess};
|
501
|
+
|
502
|
+
err = GetProcessForPID(NUM2INT(pid), &psn);
|
503
|
+
if (err != 0) rbAE_raiseMacOSError("Can't get next process.", err); // -600 if process not found
|
504
|
+
return rb_ary_new3(2, INT2NUM(psn.highLongOfPSN), INT2NUM(psn.lowLongOfPSN));
|
505
|
+
}
|
506
|
+
|
507
|
+
|
496
508
|
static VALUE
|
497
509
|
rbAE_launchApplication(VALUE self, VALUE path, VALUE firstEvent, VALUE flags)
|
498
510
|
{
|
@@ -535,6 +547,98 @@ rbAE_launchApplication(VALUE self, VALUE path, VALUE firstEvent, VALUE flags)
|
|
535
547
|
return rb_ary_new3(2, INT2NUM(psn.highLongOfPSN), INT2NUM(psn.lowLongOfPSN));
|
536
548
|
}
|
537
549
|
|
550
|
+
/**********************************************************************/
|
551
|
+
// HFS/POSIX path conversions
|
552
|
+
|
553
|
+
static VALUE
|
554
|
+
rbAE_convertPOSIXPathToURL(VALUE self, VALUE path)
|
555
|
+
{
|
556
|
+
CFURLRef url;
|
557
|
+
UInt8 buffer[PATH_MAX];
|
558
|
+
|
559
|
+
url = CFURLCreateFromFileSystemRepresentation(NULL,
|
560
|
+
(UInt8 *)(RSTRING(path)->ptr),
|
561
|
+
(CFIndex)(RSTRING(path)->len),
|
562
|
+
false);
|
563
|
+
if (url == NULL) rb_raise(rb_eRuntimeError, "Invalid POSIX path string.");
|
564
|
+
buffer[CFURLGetBytes(url, buffer, PATH_MAX - 1)] = '\0';
|
565
|
+
CFRelease(url);
|
566
|
+
return rb_str_new2((char *)buffer);
|
567
|
+
}
|
568
|
+
|
569
|
+
static VALUE
|
570
|
+
rbAE_convertHFSPathToURL(VALUE self, VALUE path)
|
571
|
+
{
|
572
|
+
CFStringRef str;
|
573
|
+
CFURLRef url;
|
574
|
+
UInt8 buffer[PATH_MAX];
|
575
|
+
|
576
|
+
str = CFStringCreateWithBytes(NULL,
|
577
|
+
(UInt8 *)(RSTRING(path)->ptr),
|
578
|
+
(CFIndex)(RSTRING(path)->len),
|
579
|
+
kCFStringEncodingUTF8,
|
580
|
+
false);
|
581
|
+
if (str == NULL) rb_raise(rb_eRuntimeError, "Invalid HFS path string.");
|
582
|
+
url = CFURLCreateWithFileSystemPath(NULL,
|
583
|
+
str,
|
584
|
+
kCFURLHFSPathStyle,
|
585
|
+
false);
|
586
|
+
CFRelease(str);
|
587
|
+
if (url == NULL) rb_raise(rb_eRuntimeError, "Invalid HFS path string.");
|
588
|
+
buffer[CFURLGetBytes(url, buffer, PATH_MAX - 1)] = '\0';
|
589
|
+
CFRelease(url);
|
590
|
+
return rb_str_new2((char *)buffer);
|
591
|
+
}
|
592
|
+
|
593
|
+
static VALUE
|
594
|
+
rbAE_convertURLToPOSIXPath(VALUE self, VALUE urlStr)
|
595
|
+
{
|
596
|
+
Boolean err;
|
597
|
+
CFURLRef url;
|
598
|
+
UInt8 buffer[PATH_MAX];
|
599
|
+
|
600
|
+
url = CFURLCreateWithBytes(NULL,
|
601
|
+
(UInt8 *)(RSTRING(urlStr)->ptr),
|
602
|
+
(CFIndex)(RSTRING(urlStr)->len),
|
603
|
+
kCFStringEncodingUTF8,
|
604
|
+
NULL);
|
605
|
+
if (url == NULL) rb_raise(rb_eRuntimeError, "Invalid URL string.");
|
606
|
+
err = CFURLGetFileSystemRepresentation(url,
|
607
|
+
true,
|
608
|
+
buffer,
|
609
|
+
PATH_MAX);
|
610
|
+
CFRelease(url);
|
611
|
+
if (!err) rb_raise(rb_eRuntimeError, "Can't get POSIX path.");
|
612
|
+
return rb_str_new2((char *)buffer);
|
613
|
+
}
|
614
|
+
|
615
|
+
static VALUE
|
616
|
+
rbAE_convertURLToHFSPath(VALUE self, VALUE urlStr)
|
617
|
+
{
|
618
|
+
Boolean err;
|
619
|
+
CFURLRef url;
|
620
|
+
CFStringRef str;
|
621
|
+
char buffer[PATH_MAX];
|
622
|
+
|
623
|
+
url = CFURLCreateWithBytes(NULL,
|
624
|
+
(UInt8 *)(RSTRING(urlStr)->ptr),
|
625
|
+
(CFIndex)(RSTRING(urlStr)->len),
|
626
|
+
kCFStringEncodingUTF8,
|
627
|
+
NULL);
|
628
|
+
if (url == NULL) rb_raise(rb_eRuntimeError, "Invalid URL string.");
|
629
|
+
str = CFURLCopyFileSystemPath(url, kCFURLHFSPathStyle);
|
630
|
+
CFRelease(url);
|
631
|
+
if (str == NULL) rb_raise(rb_eRuntimeError, "Can't get HFS path.");
|
632
|
+
err = CFStringGetCString(str,
|
633
|
+
buffer,
|
634
|
+
PATH_MAX,
|
635
|
+
kCFStringEncodingUTF8);
|
636
|
+
CFRelease(str);
|
637
|
+
if (!err) rb_raise(rb_eRuntimeError, "Can't get HFS path.");
|
638
|
+
return rb_str_new2(buffer);
|
639
|
+
}
|
640
|
+
|
641
|
+
|
538
642
|
/**********************************************************************/
|
539
643
|
// Date conversion
|
540
644
|
|
@@ -544,7 +648,7 @@ rbAE_convertLongDateTimeToUnixSeconds(VALUE self, VALUE ldt)
|
|
544
648
|
OSStatus err = 0;
|
545
649
|
CFAbsoluteTime cfTime;
|
546
650
|
|
547
|
-
err = UCConvertLongDateTimeToCFAbsoluteTime(
|
651
|
+
err = UCConvertLongDateTimeToCFAbsoluteTime(NUM2LL(ldt), &cfTime);
|
548
652
|
if (err != noErr) rbAE_raiseMacOSError("Can't convert LongDateTime to seconds.", err);
|
549
653
|
return rb_float_new(cfTime + kCFAbsoluteTimeIntervalSince1970);
|
550
654
|
}
|
@@ -844,7 +948,17 @@ Init_ae (void)
|
|
844
948
|
|
845
949
|
rb_define_module_function(mAE, "find_application", rbAE_findApplication, 3);
|
846
950
|
rb_define_module_function(mAE, "psn_for_application_path", rbAE_psnForApplicationPath, 1);
|
951
|
+
rb_define_module_function(mAE, "psn_for_process_id", rbAE_psnForPID, 1);
|
847
952
|
rb_define_module_function(mAE, "launch_application", rbAE_launchApplication, 3);
|
953
|
+
|
954
|
+
rb_define_module_function(mAE, "convert_posix_path_to_url",
|
955
|
+
rbAE_convertPOSIXPathToURL, 1);
|
956
|
+
rb_define_module_function(mAE, "convert_hfs_path_to_url",
|
957
|
+
rbAE_convertHFSPathToURL, 1);
|
958
|
+
rb_define_module_function(mAE, "convert_url_to_posix_path",
|
959
|
+
rbAE_convertURLToPOSIXPath, 1);
|
960
|
+
rb_define_module_function(mAE, "convert_url_to_hfs_path",
|
961
|
+
rbAE_convertURLToHFSPath, 1);
|
848
962
|
|
849
963
|
rb_define_module_function(mAE, "convert_long_date_time_to_unix_seconds",
|
850
964
|
rbAE_convertLongDateTimeToUnixSeconds, 1);
|
data/test/README
CHANGED
@@ -1 +1,3 @@
|
|
1
|
-
Some of the code in these tests may not yet be 100% portable (hardcoded paths, etc) so may currently fail for some users, although they have passed for Ruby 1.8.x on OS X 10.3.9
|
1
|
+
Some of the code in these tests may not yet be 100% portable (hardcoded paths, etc) so may currently fail for some users, although they have passed for Ruby 1.8.x on OS X 10.3.9, OS X 10.4.x (PPC & i386) and OS X 10.5.1 (i386).
|
2
|
+
|
3
|
+
Note that some mactypes unit tests may fail as Alias and FileURL comparisons are rather dumb and don't normalise path strings before comparing/hashing. Future releases may try to remedy this.
|
@@ -3,10 +3,11 @@
|
|
3
3
|
require 'test/unit'
|
4
4
|
require 'appscript'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
6
|
+
# rb-appscript 0.5.0+ should no longer require the following kludge:
|
7
|
+
#class AS_SafeObject
|
8
|
+
# def self.hide(name)
|
9
|
+
# end
|
10
|
+
#end
|
10
11
|
|
11
12
|
class TC_AppscriptNewApp < Test::Unit::TestCase
|
12
13
|
|
data/test/test_codecs.rb
CHANGED
@@ -119,7 +119,7 @@ class TC_Codecs < Test::Unit::TestCase
|
|
119
119
|
end
|
120
120
|
|
121
121
|
def test_file
|
122
|
-
path = '/Applications/TextEdit.app
|
122
|
+
path = '/Applications/TextEdit.app'
|
123
123
|
d = @c.pack(MacTypes::Alias.path(path))
|
124
124
|
assert_equal(path, @c.unpack(d).to_s)
|
125
125
|
|
@@ -169,4 +169,10 @@ class TC_Codecs < Test::Unit::TestCase
|
|
169
169
|
assert_equal(:inches, val2.type)
|
170
170
|
assert_equal(3.3, val2.value)
|
171
171
|
end
|
172
|
+
|
173
|
+
def test_app
|
174
|
+
val = AEM::Application.by_path(FindApp.by_name('TextEdit'))
|
175
|
+
d = @c.pack(val)
|
176
|
+
assert_equal(KAE::TypeProcessSerialNumber, d.type)
|
177
|
+
end
|
172
178
|
end
|
data/test/testall.sh
CHANGED
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.4
|
3
3
|
specification_version: 1
|
4
4
|
name: rb-appscript
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.5.0
|
7
|
+
date: 2007-12-20 00:00:00 +00:00
|
8
8
|
summary: Ruby appscript (rb-appscript) is a high-level, user-friendly Apple event bridge that allows you to control scriptable Mac OS X applications using ordinary Ruby scripts.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -31,19 +31,7 @@ authors:
|
|
31
31
|
files:
|
32
32
|
- CHANGES
|
33
33
|
- doc
|
34
|
-
- extconf.rb
|
35
|
-
- LICENSE
|
36
|
-
- rb-appscript.gemspec
|
37
|
-
- README
|
38
|
-
- sample
|
39
|
-
- src
|
40
|
-
- test
|
41
|
-
- TODO
|
42
34
|
- doc/aem-manual
|
43
|
-
- doc/appscript-manual
|
44
|
-
- doc/index.html
|
45
|
-
- doc/mactypes-manual
|
46
|
-
- doc/osax-manual
|
47
35
|
- doc/aem-manual/01_introduction.html
|
48
36
|
- doc/aem-manual/02_apioverview.html
|
49
37
|
- doc/aem-manual/03_packingandunpackingdata.html
|
@@ -55,6 +43,7 @@ files:
|
|
55
43
|
- doc/aem-manual/aemreferenceinheritance.gif
|
56
44
|
- doc/aem-manual/full.css
|
57
45
|
- doc/aem-manual/index.html
|
46
|
+
- doc/appscript-manual
|
58
47
|
- doc/appscript-manual/01_introduction.html
|
59
48
|
- doc/appscript-manual/02_aboutappscripting.html
|
60
49
|
- doc/appscript-manual/03_quicktutorial.html
|
@@ -76,8 +65,17 @@ files:
|
|
76
65
|
- doc/appscript-manual/index.html
|
77
66
|
- doc/appscript-manual/relationships_example.gif
|
78
67
|
- doc/appscript-manual/ruby_to_itunes_event.gif
|
68
|
+
- doc/index.html
|
69
|
+
- doc/mactypes-manual
|
79
70
|
- doc/mactypes-manual/index.html
|
71
|
+
- doc/osax-manual
|
80
72
|
- doc/osax-manual/index.html
|
73
|
+
- extconf.rb
|
74
|
+
- LICENSE
|
75
|
+
- rb-appscript.gemspec
|
76
|
+
- README
|
77
|
+
- sample
|
78
|
+
- sample/AB_export_vcard.rb
|
81
79
|
- sample/AB_list_people_with_emails.rb
|
82
80
|
- sample/Add_iCal_event.rb
|
83
81
|
- sample/Create_daily_iCal_todos.rb
|
@@ -94,16 +92,9 @@ files:
|
|
94
92
|
- sample/Simple_Finder_GUI_Scripting.rb
|
95
93
|
- sample/Stagger_Finder_windows.rb
|
96
94
|
- sample/TextEdit_demo.rb
|
95
|
+
- src
|
97
96
|
- src/lib
|
98
|
-
- src/rbae.c
|
99
|
-
- src/SendThreadSafe.c
|
100
|
-
- src/SendThreadSafe.h
|
101
97
|
- src/lib/_aem
|
102
|
-
- src/lib/_appscript
|
103
|
-
- src/lib/aem.rb
|
104
|
-
- src/lib/appscript.rb
|
105
|
-
- src/lib/kae.rb
|
106
|
-
- src/lib/osax.rb
|
107
98
|
- src/lib/_aem/aemreference.rb
|
108
99
|
- src/lib/_aem/codecs.rb
|
109
100
|
- src/lib/_aem/connect.rb
|
@@ -111,11 +102,20 @@ files:
|
|
111
102
|
- src/lib/_aem/mactypes.rb
|
112
103
|
- src/lib/_aem/send.rb
|
113
104
|
- src/lib/_aem/typewrappers.rb
|
105
|
+
- src/lib/_appscript
|
114
106
|
- src/lib/_appscript/defaultterminology.rb
|
115
107
|
- src/lib/_appscript/referencerenderer.rb
|
116
108
|
- src/lib/_appscript/reservedkeywords.rb
|
117
109
|
- src/lib/_appscript/safeobject.rb
|
118
110
|
- src/lib/_appscript/terminology.rb
|
111
|
+
- src/lib/aem.rb
|
112
|
+
- src/lib/appscript.rb
|
113
|
+
- src/lib/kae.rb
|
114
|
+
- src/lib/osax.rb
|
115
|
+
- src/rbae.c
|
116
|
+
- src/SendThreadSafe.c
|
117
|
+
- src/SendThreadSafe.h
|
118
|
+
- test
|
119
119
|
- test/README
|
120
120
|
- test/test_aemreference.rb
|
121
121
|
- test/test_appscriptcommands.rb
|
@@ -125,6 +125,7 @@ files:
|
|
125
125
|
- test/test_mactypes.rb
|
126
126
|
- test/test_osax.rb
|
127
127
|
- test/testall.sh
|
128
|
+
- TODO
|
128
129
|
test_files:
|
129
130
|
- test/test_aemreference.rb
|
130
131
|
- test/test_appscriptcommands.rb
|