Gem::Command
gem command to “sing” the implementation of a gem.
# File lib/rubygems/commands/sing_command.rb, line 43
43: def execute
44: name = get_one_gem_name
45:
46: base = files = nil
47:
48: if remote? then
49: version = options[:version] || Gem::Requirement.default
50: all = Gem::Requirement.default
51: dep = Gem::Dependency.new name, version
52:
53: specs_and_sources = Gem::SpecFetcher.fetcher.fetch dep
54:
55: spec, source_uri = specs_and_sources.sort_by { |spec,| spec.version }.last
56:
57: alert_error "Could not find #{name} in any repository" unless spec
58:
59: gem_path = File.join "/tmp", spec.file_name
60:
61: unless File.file? gem_path then
62: path = Gem::RemoteFetcher.fetcher.download spec, source_uri
63: FileUtils.mv path, gem_path
64: end
65:
66: dir_path = File.join "/tmp", File.basename(gem_path, '.gem')
67:
68: unless File.directory? dir_path then
69: FileUtils.mkdir_p dir_path
70: Gem::Installer.new(gem_path, :unpack => true).unpack dir_path
71: end
72:
73: Dir.chdir dir_path do
74: files = spec.require_paths.map { |d| Dir["#{d}/**/*.rb"] }.flatten.sort
75: end
76:
77: base = dir_path
78: else
79: dep = Gem::Dependency.new name, options[:version]
80: specs = Gem.source_index.search dep
81:
82: if specs.empty? then
83: alert_error "No installed gem #{dep}"
84: terminate_interaction 1
85: end
86:
87: spec = specs.last
88: base = spec.full_gem_path
89: files = spec.lib_files
90: end
91:
92: $stdout.sync = true
93:
94: ##
95: # Special thanks to Ben Bleything for midiator and help getting
96: # this up and running!
97:
98: midi = MIDIator::Interface.new
99: midi.use :dls_synth
100:
101: # blues scale
102: scale = [ C4, Eb4, F4, Fs4, G4, Bb4,
103: C5, Eb5, F5, Fs5, G5, Bb5,
104: C6, Eb6, F6, Fs6, G6, Bb6 ]
105:
106: midi.control_change 32, 10, 1 # TR-808 is Program 26 in LSB bank 1
107: midi.program_change 10, 26
108:
109: # TODO: eventually add ability to play actual AST
110:
111: files.each do |path|
112: full_path = File.join base, path
113:
114: next unless File.file? full_path # rails is run by MORONS
115:
116: warn path
117:
118: line_number_of_last_end = 0
119: File.foreach full_path do |line|
120: if line =~ /^(\s+)end$/ then
121: distance = $INPUT_LINE_NUMBER - line_number_of_last_end
122: note_character = "♩"
123: duration = case distance
124: when 0 .. 3
125: note_character = "♪"
126: 0.125
127: when 4 .. 10
128: note_character = "♩"
129: 0.25
130: when 11 .. 30
131: note_character = "d"
132: 0.5
133: else
134: note_character = "o"
135: 1.0
136: end
137: line_number_of_last_end = $INPUT_LINE_NUMBER
138: num_spaces = $1.size
139:
140: print "#{note_character} "
141: print line
142: midi.play scale[ num_spaces / 2 ], duration
143: print "\n" * (duration * 4).to_i if Gem.configuration.really_verbose
144: end
145: end
146:
147: [ HighTom1, HighTom2, LowTom1, LowTom2 ].each do |note|
148: midi.play note, 0.067, 10
149: end
150:
151: midi.play CrashCymbal1, 0.25, 10
152: end
153:
154: midi.play CrashCymbal2, 0.25, 10
155: sleep 1.0
156: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.