Women in Technology

Hear us Roar



Article:
  Replacing AppleScript with Ruby
Subject:   passing requests from applescripts to rb-appscripts
Date:   2008-04-08 11:21:34
From:   mattneub
Response to: passing requests from applescripts to rb-appscripts

Hi, gauvins -


I'm not sure why you'd want to do this; the whole point of my article here is that you can just start in Ruby and stay in Ruby, and never use any AppleScript code at all. However, my book explains about calling Perl, Ruby, etc. from AppleScript and vice versa. Here is a simple example.


Ruby file /Users/mattneub/Desktop/test.rb:


puts $*[0].reverse


AppleScript code:


set f to "/Users/mattneub/Desktop/test.rb"
set s to "ruby " & quoted form of f & space & quoted form of "Hello, World!"
do shell script s -- result: "!dlroW ,olleH"


Here is another example.


Ruby file /Users/mattneub/Desktop/test.rb:


require "appscript"
include Appscript
puts app('Finder').name.get


AppleScript code:


set f to "/Users/mattneub/Desktop/test.rb"
set s to "ruby " & quoted form of f
do shell script s -- result: "Finder"
That should get you started.


Full Threads Oldest First

Showing messages 1 through 1 of 1.

  • passing requests from applescripts to rb-appscripts
    2008-04-08 16:23:08  gauvins [View]

    Thanks Matt for the (quick) follow-up

    first snippets work well. Second do not. I get the following error message :

    /Users/gauvins/Desktop/test.rb:1:in `require': no such file to load -- appscript (LoadError)
    from /Users/gauvins/Desktop/test.rb:1

    ---

    I stumbled upon your post searching for a way to do exactly what you did in your example (count instances of words in a list). The (few) applescripts examples I could locate seemed very inefficient. An Applescript based app chokes on the large file I used to test the procedure (close to 1G ...).

    I understand that Rb-script could be immensely superior, but I would rather try to use your code as some kind of external function, for the moment at least. Maybe this summer I can find the time to rewrite.