rb-scpt 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/rb-scpt-1.0.1.gem +0 -0
- data/extconf.rb +12 -12
- data/rb-scpt.gemspec +10 -10
- data/sample/AB_export_vcard.rb +16 -16
- data/sample/AB_list_people_with_emails.rb +4 -4
- data/sample/Add_iCal_event.rb +12 -12
- data/sample/Create_daily_iCal_todos.rb +28 -28
- data/sample/Export_Address_Book_phone_numbers.rb +52 -52
- data/sample/Hello_world.rb +10 -10
- data/sample/List_iTunes_playlist_names.rb +3 -3
- data/sample/Make_Mail_message.rb +24 -24
- data/sample/Open_file_in_TextEdit.rb +5 -5
- data/sample/Organize_Mail_messages.rb +46 -46
- data/sample/Print_folder_tree.rb +5 -5
- data/sample/Select_all_HTML_files.rb +6 -6
- data/sample/Set_iChat_status.rb +12 -12
- data/sample/Simple_Finder_GUI_Scripting.rb +6 -6
- data/sample/Stagger_Finder_windows.rb +9 -9
- data/sample/TextEdit_demo.rb +71 -71
- data/sample/iTunes_top40_to_html.rb +28 -30
- data/src/SendThreadSafe.c +293 -293
- data/src/SendThreadSafe.h +108 -108
- data/src/lib/_aem/aemreference.rb +997 -998
- data/src/lib/_aem/codecs.rb +609 -610
- data/src/lib/_aem/connect.rb +197 -197
- data/src/lib/_aem/encodingsupport.rb +67 -67
- data/src/lib/_aem/findapp.rb +75 -75
- data/src/lib/_aem/mactypes.rb +241 -242
- data/src/lib/_aem/send.rb +268 -268
- data/src/lib/_aem/typewrappers.rb +52 -52
- data/src/lib/_appscript/defaultterminology.rb +266 -266
- data/src/lib/_appscript/referencerenderer.rb +230 -233
- data/src/lib/_appscript/reservedkeywords.rb +106 -106
- data/src/lib/_appscript/safeobject.rb +125 -125
- data/src/lib/_appscript/terminology.rb +448 -449
- data/src/lib/aem.rb +238 -238
- data/src/lib/kae.rb +1487 -1487
- data/src/lib/osax.rb +647 -647
- data/src/lib/rb-scpt.rb +1065 -1065
- data/src/rbae.c +595 -595
- data/test/test_aemreference.rb +104 -107
- data/test/test_appscriptcommands.rb +131 -134
- data/test/test_appscriptreference.rb +96 -99
- data/test/test_codecs.rb +166 -168
- data/test/test_findapp.rb +13 -16
- data/test/test_mactypes.rb +70 -72
- data/test/test_osax.rb +46 -48
- data/test/testall.sh +4 -4
- metadata +8 -7
data/src/lib/_aem/connect.rb
CHANGED
@@ -5,201 +5,201 @@
|
|
5
5
|
#
|
6
6
|
|
7
7
|
module Connect
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
8
|
+
# Creates Apple event descriptor records of typeProcessSerialNumber, typeKernelProcessID and typeApplicationURL, used to specify the target application in Send::Event constructor.
|
9
|
+
|
10
|
+
require "ae"
|
11
|
+
require "kae"
|
12
|
+
require "_aem/codecs"
|
13
|
+
require "_aem/send"
|
14
|
+
require "_aem/encodingsupport"
|
15
|
+
|
16
|
+
@@encoding_support = AEMEncodingSupport.encoding_support
|
17
|
+
|
18
|
+
LSLaunchDefaults = 0x00000001
|
19
|
+
LSLaunchAndPrint = 0x00000002
|
20
|
+
LSLaunchReserved2 = 0x00000004
|
21
|
+
LSLaunchReserved3 = 0x00000008
|
22
|
+
LSLaunchReserved4 = 0x00000010
|
23
|
+
LSLaunchReserved5 = 0x00000020
|
24
|
+
LSLaunchAndDisplayErrors = 0x00000040
|
25
|
+
LSLaunchInhibitBGOnly = 0x00000080
|
26
|
+
LSLaunchDontAddToRecents = 0x00000100
|
27
|
+
LSLaunchDontSwitch = 0x00000200
|
28
|
+
LSLaunchNoParams = 0x00000800
|
29
|
+
LSLaunchAsync = 0x00010000
|
30
|
+
LSLaunchStartClassic = 0x00020000
|
31
|
+
LSLaunchInClassic = 0x00040000
|
32
|
+
LSLaunchNewInstance = 0x00080000
|
33
|
+
LSLaunchAndHide = 0x00100000
|
34
|
+
LSLaunchAndHideOthers = 0x00200000
|
35
|
+
LSLaunchHasUntrustedContents = 0x00400000
|
36
|
+
|
37
|
+
KNoProcess = 0
|
38
|
+
KCurrentProcess = 2
|
39
|
+
|
40
|
+
def Connect.make_address_desc(psn)
|
41
|
+
return AE::AEDesc.new(KAE::TypeProcessSerialNumber, psn.pack('LL'))
|
42
|
+
end
|
43
|
+
|
44
|
+
NullAddress = make_address_desc([0,KNoProcess])
|
45
|
+
LaunchEvent = Send::Event.new(Connect::NullAddress, 'ascrnoop').AEM_event
|
46
|
+
RunEvent = Send::Event.new(Connect::NullAddress, 'aevtoapp').AEM_event
|
47
|
+
|
48
|
+
#######
|
49
|
+
# public
|
50
|
+
|
51
|
+
class CantLaunchApplicationError < RuntimeError
|
52
|
+
|
53
|
+
# Taken from <http://developer.apple.com/documentation/Carbon/Reference/LaunchServicesReference>:
|
54
|
+
LSErrors = {
|
55
|
+
-10660 => "The application cannot be run because it is inside a Trash folder.",
|
56
|
+
-10810 => "An unknown error has occurred.",
|
57
|
+
-10811 => "The item to be registered is not an application.",
|
58
|
+
-10813 => "Data of the desired type is not available (for example, there is no kind string).",
|
59
|
+
-10814 => "No application in the Launch Services database matches the input criteria.",
|
60
|
+
-10817 => "Data is structured improperly (for example, an item's information property list is malformed).",
|
61
|
+
-10818 => "A launch of the application is already in progress.",
|
62
|
+
-10822 => "There is a problem communicating with the server process that maintains the Launch Services database.",
|
63
|
+
-10823 => "The filename extension to be hidden cannot be hidden.",
|
64
|
+
-10825 => "The application to be launched cannot run on the current Mac OS version.",
|
65
|
+
-10826 => "The user does not have permission to launch the application (on a managed network).",
|
66
|
+
-10827 => "The executable file is missing or has an unusable format.",
|
67
|
+
-10828 => "The Classic emulation environment was required but is not available.",
|
68
|
+
-10829 => "The application to be launched cannot run simultaneously in two different user sessions.",
|
69
|
+
}
|
70
|
+
|
71
|
+
def initialize(error_number)
|
72
|
+
@error_number = error_number
|
73
|
+
super("#{ LSErrors.fetch(@error_number, 'OS error') } (#{ @error_number })")
|
74
|
+
end
|
75
|
+
|
76
|
+
def to_i
|
77
|
+
return @error_number
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
##
|
82
|
+
|
83
|
+
def Connect.launch_application(path, event)
|
84
|
+
path = @@encoding_support.to_utf8_string(path)
|
85
|
+
begin
|
86
|
+
return AE.launch_application(path, event,
|
87
|
+
LSLaunchNoParams | LSLaunchStartClassic | LSLaunchDontSwitch)
|
88
|
+
rescue AE::MacOSError => err
|
89
|
+
raise CantLaunchApplicationError, err.to_i
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def Connect.launch_app_with_launch_event(path)
|
94
|
+
# Send a 'launch' event to an application. If application is not already running, it will be launched in background first.
|
95
|
+
path = @@encoding_support.to_utf8_string(path)
|
96
|
+
begin
|
97
|
+
# If app is already running, calling AE.launch_application will send a 'reopen' event, so need to check for this first:
|
98
|
+
psn = AE.psn_for_application_path(path)
|
99
|
+
rescue AE::MacOSError => err
|
100
|
+
if err.to_i == -600 # Application isn't running, so launch it and send it a 'launch' event
|
101
|
+
sleep(1)
|
102
|
+
launch_application(path, LaunchEvent)
|
103
|
+
else
|
104
|
+
raise
|
105
|
+
end
|
106
|
+
else # App is already running, so send it a 'launch' event
|
107
|
+
Send::Event.new(make_address_desc(psn), 'ascrnoop').send(60, KAE::KAENoReply)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
##
|
112
|
+
|
113
|
+
def Connect.process_exists_for_path?(path)
|
114
|
+
path = @@encoding_support.to_utf8_string(path)
|
115
|
+
# Does a local process launched from the specified application file exist?
|
116
|
+
# Note: if path is invalid, an AE::MacOSError is raised.
|
117
|
+
begin
|
118
|
+
AE.psn_for_application_path(path)
|
119
|
+
return true
|
120
|
+
rescue AE::MacOSError => err
|
121
|
+
if err.to_i == -600
|
122
|
+
return false
|
123
|
+
else
|
124
|
+
raise
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def Connect.process_exists_for_pid?(pid)
|
130
|
+
# Is there a local application process with the given unix process id?
|
131
|
+
begin
|
132
|
+
AE.psn_for_process_id(pid)
|
133
|
+
return true
|
134
|
+
rescue AE::MacOSError => err
|
135
|
+
if err.to_i == -600
|
136
|
+
return false
|
137
|
+
else
|
138
|
+
raise
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def Connect.process_exists_for_url?(url)
|
144
|
+
# Does an application process specified by the given eppc:// URL exist?
|
145
|
+
# Note: this will send a 'launch' Apple event to the target application.
|
146
|
+
raise ArgumentError, "Invalid url: #{url}" if not url.include?(':') # workaround: process will crash if no colon in URL (OS bug)
|
147
|
+
return process_exists_for_desc?(AE::AEDesc.new(KAE::TypeApplicationURL, url))
|
148
|
+
end
|
149
|
+
|
150
|
+
def Connect.process_exists_for_desc?(desc)
|
151
|
+
# Does an application process specified by the given AEAddressDesc exist?
|
152
|
+
# Returns false if process doesn't exist OR remote Apple events aren't allowed.
|
153
|
+
# Note: this will send a 'launch' Apple event to the target application.
|
154
|
+
begin
|
155
|
+
# This will usually raise error -1708 if process is running, and various errors
|
156
|
+
# if the process doesn't exist/can't be reached. If app is running but busy,
|
157
|
+
# AESendMessage may return a timeout error (this should be -1712, but
|
158
|
+
# -609 is often returned instead for some reason).
|
159
|
+
Send::Event.new(desc, 'ascrnoop').send
|
160
|
+
rescue Send::EventError => err
|
161
|
+
return (not [-600, -905].include?(err.to_i)) # not running/no network access
|
162
|
+
end
|
163
|
+
return true
|
164
|
+
end
|
165
|
+
|
166
|
+
##
|
167
|
+
|
168
|
+
CurrentApp = make_address_desc([0, KCurrentProcess])
|
169
|
+
|
170
|
+
def Connect.local_app(path)
|
171
|
+
# Make an AEAddressDesc identifying a local application. (Application will be launched if not already running.)
|
172
|
+
# path : string -- full path to application, e.g. '/Applications/TextEdit.app'
|
173
|
+
# Result : AEAddressDesc
|
174
|
+
#
|
175
|
+
# Always creates AEAddressDesc by process serial number; that way there's no confusion if multiple versions of the same app are running.
|
176
|
+
path = @@encoding_support.to_utf8_string(path)
|
177
|
+
begin
|
178
|
+
psn = AE.psn_for_application_path(path)
|
179
|
+
rescue AE::MacOSError => err
|
180
|
+
if err.to_i == -600 # Application isn't running, so launch it in background and send it a standard 'run' event.
|
181
|
+
sleep(1)
|
182
|
+
psn = launch_application(path, RunEvent)
|
183
|
+
else
|
184
|
+
raise
|
185
|
+
end
|
186
|
+
end
|
187
|
+
return make_address_desc(psn)
|
188
|
+
end
|
189
|
+
|
190
|
+
def Connect.local_app_by_pid(pid)
|
191
|
+
# Make an AEAddressDesc identifying a running application by Unix process id.
|
192
|
+
# pid : integer -- unsigned 32-bit integer
|
193
|
+
# Result : AEAddressDesc
|
194
|
+
return AE::AEDesc.new(KAE::TypeKernelProcessID, [pid].pack('L'))
|
195
|
+
end
|
196
|
+
|
197
|
+
def Connect.remote_app(url)
|
198
|
+
url = @@encoding_support.to_utf8_string(url)
|
199
|
+
# Make an AEAddressDesc identifying a running application on another machine.
|
200
|
+
# url : string -- URL for remote application, e.g. 'eppc://user:password@0.0.0.1/TextEdit'
|
201
|
+
# Result : AEAddressDesc
|
202
|
+
raise ArgumentError, "Invalid url: #{url}" if not url.include?(':') # workaround: process will crash if no colon in URL (OS bug)
|
203
|
+
return AE::AEDesc.new(KAE::TypeApplicationURL, url)
|
204
|
+
end
|
205
205
|
end
|
@@ -7,71 +7,71 @@
|
|
7
7
|
|
8
8
|
module AEMEncodingSupport
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
def EnableStringEncodings.to_utf8_string(s)
|
16
|
-
# Call before passing a string to an AE method that expects it to contain UTF-8 encoded data.
|
17
|
-
return s if [Encoding::ASCII_8BIT, Encoding::UTF_8].include?(s.encoding)
|
18
|
-
return s.encode('UTF-8')
|
19
|
-
end
|
20
|
-
|
21
|
-
def EnableStringEncodings.pack_string(s, as_type)
|
22
|
-
begin
|
23
|
-
return AE::AEDesc.new(KAE::TypeUTF8Text, EnableStringEncodings.to_utf8_string(s)).coerce(as_type)
|
24
|
-
rescue AE::MacOSError => e
|
25
|
-
if e.to_i == -1700 # couldn't coerce to TypeUnicodeText
|
26
|
-
raise TypeError, "Not valid UTF8 data or couldn't coerce to type %{as_type}: #{s.inspect}"
|
27
|
-
else
|
28
|
-
raise
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def EnableStringEncodings.unpack_string(desc)
|
34
|
-
# String instances returned by AE methods contain UTF-8 data and ASCII-8BIT encoding,
|
35
|
-
# so change the encoding to match the data
|
36
|
-
return desc.coerce(KAE::TypeUTF8Text).data.force_encoding('UTF-8')
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
|
41
|
-
module DisableStringEncodings
|
42
|
-
# Support for Ruby 1.8 Strings, which do not contain encoding information. User is responsible
|
43
|
-
# for ensuring String instances passed to AE APIs contain UTF-8 encoded data; String instances
|
44
|
-
# returned by unpack_string will always contain contain UTF-8 encoded data.
|
45
|
-
|
46
|
-
def DisableStringEncodings.to_utf8_string(s)
|
47
|
-
return s
|
48
|
-
end
|
49
|
-
|
50
|
-
def DisableStringEncodings.pack_string(s, as_type)
|
51
|
-
begin
|
52
|
-
# Note: while the BOM is optional in typeUnicodeText, it's not included by AS
|
53
|
-
# and some apps, e.g. iTunes 7, will handle it incorrectly, so it's omitted here.)
|
54
|
-
return AE::AEDesc.new(KAE::TypeUTF8Text, s).coerce(as_type)
|
55
|
-
rescue AE::MacOSError => e
|
56
|
-
if e.to_i == -1700 # couldn't coerce to TypeUnicodeText
|
57
|
-
raise TypeError, "Not valid UTF8 data or couldn't coerce to type %{as_type}: #{s.inspect}"
|
58
|
-
else
|
59
|
-
raise
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def DisableStringEncodings.unpack_string(desc)
|
65
|
-
return desc.coerce(KAE::TypeUTF8Text).data
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
|
71
|
-
def AEMEncodingSupport.encoding_support
|
72
|
-
# get the appropriate module for the Ruby version used
|
73
|
-
version, sub_version = RUBY_VERSION.split('.').collect {|n| n.to_i} [0, 2]
|
74
|
-
return (version >= 1 and sub_version >= 9) ? AEMEncodingSupport::EnableStringEncodings : AEMEncodingSupport::DisableStringEncodings
|
75
|
-
end
|
10
|
+
module EnableStringEncodings
|
11
|
+
# AE extension methods consume and return Strings containing UTF-8 encoded data, ignoring
|
12
|
+
# any attached encoding information. This module provides wrappers for AE interactions that
|
13
|
+
# take care of any encoding issues in Ruby 1.9+.
|
76
14
|
|
77
|
-
|
15
|
+
def EnableStringEncodings.to_utf8_string(s)
|
16
|
+
# Call before passing a string to an AE method that expects it to contain UTF-8 encoded data.
|
17
|
+
return s if [Encoding::ASCII_8BIT, Encoding::UTF_8].include?(s.encoding)
|
18
|
+
return s.encode('UTF-8')
|
19
|
+
end
|
20
|
+
|
21
|
+
def EnableStringEncodings.pack_string(s, as_type)
|
22
|
+
begin
|
23
|
+
return AE::AEDesc.new(KAE::TypeUTF8Text, EnableStringEncodings.to_utf8_string(s)).coerce(as_type)
|
24
|
+
rescue AE::MacOSError => e
|
25
|
+
if e.to_i == -1700 # couldn't coerce to TypeUnicodeText
|
26
|
+
raise TypeError, "Not valid UTF8 data or couldn't coerce to type %{as_type}: #{s.inspect}"
|
27
|
+
else
|
28
|
+
raise
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def EnableStringEncodings.unpack_string(desc)
|
34
|
+
# String instances returned by AE methods contain UTF-8 data and ASCII-8BIT encoding,
|
35
|
+
# so change the encoding to match the data
|
36
|
+
return desc.coerce(KAE::TypeUTF8Text).data.force_encoding('UTF-8')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
module DisableStringEncodings
|
42
|
+
# Support for Ruby 1.8 Strings, which do not contain encoding information. User is responsible
|
43
|
+
# for ensuring String instances passed to AE APIs contain UTF-8 encoded data; String instances
|
44
|
+
# returned by unpack_string will always contain contain UTF-8 encoded data.
|
45
|
+
|
46
|
+
def DisableStringEncodings.to_utf8_string(s)
|
47
|
+
return s
|
48
|
+
end
|
49
|
+
|
50
|
+
def DisableStringEncodings.pack_string(s, as_type)
|
51
|
+
begin
|
52
|
+
# Note: while the BOM is optional in typeUnicodeText, it's not included by AS
|
53
|
+
# and some apps, e.g. iTunes 7, will handle it incorrectly, so it's omitted here.)
|
54
|
+
return AE::AEDesc.new(KAE::TypeUTF8Text, s).coerce(as_type)
|
55
|
+
rescue AE::MacOSError => e
|
56
|
+
if e.to_i == -1700 # couldn't coerce to TypeUnicodeText
|
57
|
+
raise TypeError, "Not valid UTF8 data or couldn't coerce to type %{as_type}: #{s.inspect}"
|
58
|
+
else
|
59
|
+
raise
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def DisableStringEncodings.unpack_string(desc)
|
65
|
+
return desc.coerce(KAE::TypeUTF8Text).data
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
def AEMEncodingSupport.encoding_support
|
72
|
+
# get the appropriate module for the Ruby version used
|
73
|
+
version, sub_version = RUBY_VERSION.split('.').collect {|n| n.to_i} [0, 2]
|
74
|
+
return (version >= 1 and sub_version >= 9) ? AEMEncodingSupport::EnableStringEncodings : AEMEncodingSupport::DisableStringEncodings
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|