Skip to content

Instantly share code, notes, and snippets.

framework 'Cocoa'
# store any new classes created during the requires that follow
LOADED_RUBY_CLASSES = []
class << Object
def inherited(m)
LOADED_RUBY_CLASSES << m
end
end
@kch
kch / gist:602174
Created September 29, 2010 01:53
NSArrays are tricky bastards
#!/usr/bin/env macruby
framework 'Cocoa'
cocoa_array = NSArray.new
ruby_array = []
puts ruby_array.count # => 0
puts ruby_array.count { true } # => 0
puts ruby_array.count("whatever") # => 0
@kch
kch / rb-magic-comment
Created September 27, 2010 20:25
Add the encoding magic comment to the ruby files passed as arguments
#!/usr/bin/env ruby
# encoding: UTF-8
ARGV.reject! { |path| !File.file?(path) }
(puts DATA.read.gsub("$0", File.basename($0)); exit 1) if ARGV.empty?
ARGV.each do |path|
ls = IO.readlines(path)
ix = ls[0] !~ /^#!/ ? 0 : 1
next if ls[ix] =~ /#.*?coding\s*[:=]\s*\S/
@kch
kch / gemfile-from-dotgems.rb
Created September 23, 2010 14:15
Convert a Heroku .gems file to a Bundler Gemfile
#!/usr/bin/env ruby
# encoding: UTF-8
require 'strscan'
(puts DATA.read.gsub(/\$0/, File.basename($0)); exit 1) unless ARGV.empty? # handled -h and anything else since we don't take args
# tokenize lines
lines = STDIN.read.strip.split(/\n+/)
gems = lines.inject({}) do |h, line|
next h if line =~ /^\s*(#.*)?$/
@kch
kch / after.nu
Created August 27, 2010 08:50
after macro for Nu plus a few handy functions
;; drops the first element from a list and returns it
(macro shift! (l)
`(let (e (car ,l))
(set ,l (cdr ,l))
e))
;; drops the first cell from a list if it is equal to e
(macro cond-shift! (l e) `(if (eq (car ,l) ,e) (shift! ,l)))
;; appends e to the list l
@kch
kch / .gitignore
Created August 26, 2010 08:19
Apple Mail plugin that fixes your sender for mailing lists
Contents/MacOS/main
@kch
kch / Info.plist
Created August 19, 2010 04:50
n00b attempt at standalone foundation tool OS X service in MacRuby
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key> <string>English</string>
<key>CFBundleExecutable</key> <string>upcase</string>
<key>CFBundleIdentifier</key> <string>com.caiochassot.services.upcase</string>
<key>CFBundleInfoDictionaryVersion</key> <string>6.0</string>
<key>CFBundlePackageType</key> <string>BNDL</string>
@kch
kch / yaml-to-plist.rb
Created August 4, 2010 14:50
Writes ruby object structures to plists. When called directly, takes a YAML file.
#!/usr/bin/env ruby
# encoding: UTF-8
require 'yaml'
require 'rexml/document'
class PlistWriter
PLIST_STUB_DOC = %q[
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"></plist>]
@kch
kch / Open URLs from Pastboard.rb
Created August 4, 2010 10:20
Script to open URLs from pasteboard. For use with FastScripts.
#!/usr/bin/env ruby
# encoding: UTF-8
# URL regexp from http://daringfireball.net/2010/07/improved_regex_for_matching_urls
# URL regexp adapted to have captures removed
RX_URL = %r[
\b
(?:
[a-z][\w-]+: # URL protocol and colon
@kch
kch / plist-to-yaml.rb
Created August 4, 2010 09:54
converts plist files to really pretty, aligned yaml files with mostly literal utf8 strings
#!/usr/local/bin/ruby
# encoding: UTF-8
require 'yaml'
require "base64"
require 'rexml/document'
class PList < BasicObject
ELEMENT_PROCESSORS = {}
def self.process_element_named(name, &block); ELEMENT_PROCESSORS[name.to_s] = block; end
def self.process_element(elt) ; ELEMENT_PROCESSORS[elt.name][elt]; end