ripper2ruby 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.markdown +10 -0
- data/lib/core_ext/array/flush.rb +5 -0
- data/lib/core_ext/hash/delete_at.rb +5 -0
- data/lib/core_ext/object/meta_class.rb +5 -0
- data/lib/core_ext/object/try.rb +12 -0
- data/lib/erb/stripper.rb +48 -0
- data/lib/highlighters/ansi.rb +29 -0
- data/lib/ripper/event_log.rb +45 -0
- data/lib/ripper/ruby_builder.rb +168 -0
- data/lib/ripper/ruby_builder/buffer.rb +34 -0
- data/lib/ripper/ruby_builder/events/args.rb +40 -0
- data/lib/ripper/ruby_builder/events/array.rb +71 -0
- data/lib/ripper/ruby_builder/events/assignment.rb +55 -0
- data/lib/ripper/ruby_builder/events/block.rb +80 -0
- data/lib/ripper/ruby_builder/events/call.rb +123 -0
- data/lib/ripper/ruby_builder/events/case.rb +17 -0
- data/lib/ripper/ruby_builder/events/const.rb +47 -0
- data/lib/ripper/ruby_builder/events/for.rb +13 -0
- data/lib/ripper/ruby_builder/events/hash.rb +24 -0
- data/lib/ripper/ruby_builder/events/identifier.rb +41 -0
- data/lib/ripper/ruby_builder/events/if.rb +37 -0
- data/lib/ripper/ruby_builder/events/lexer.rb +159 -0
- data/lib/ripper/ruby_builder/events/literal.rb +47 -0
- data/lib/ripper/ruby_builder/events/method.rb +21 -0
- data/lib/ripper/ruby_builder/events/operator.rb +23 -0
- data/lib/ripper/ruby_builder/events/statements.rb +50 -0
- data/lib/ripper/ruby_builder/events/string.rb +117 -0
- data/lib/ripper/ruby_builder/events/symbol.rb +22 -0
- data/lib/ripper/ruby_builder/events/while.rb +27 -0
- data/lib/ripper/ruby_builder/queue.rb +33 -0
- data/lib/ripper/ruby_builder/stack.rb +125 -0
- data/lib/ripper/ruby_builder/token.rb +91 -0
- data/lib/ripper2ruby.rb +1 -0
- data/lib/ruby.rb +28 -0
- data/lib/ruby/aggregate.rb +71 -0
- data/lib/ruby/alternation/args.rb +25 -0
- data/lib/ruby/alternation/hash.rb +25 -0
- data/lib/ruby/alternation/list.rb +19 -0
- data/lib/ruby/args.rb +36 -0
- data/lib/ruby/array.rb +27 -0
- data/lib/ruby/assignment.rb +32 -0
- data/lib/ruby/assoc.rb +17 -0
- data/lib/ruby/block.rb +42 -0
- data/lib/ruby/call.rb +34 -0
- data/lib/ruby/case.rb +30 -0
- data/lib/ruby/const.rb +49 -0
- data/lib/ruby/for.rb +18 -0
- data/lib/ruby/hash.rb +14 -0
- data/lib/ruby/if.rb +35 -0
- data/lib/ruby/list.rb +40 -0
- data/lib/ruby/literal.rb +45 -0
- data/lib/ruby/method.rb +19 -0
- data/lib/ruby/node.rb +47 -0
- data/lib/ruby/node/composite.rb +68 -0
- data/lib/ruby/node/conversions.rb +66 -0
- data/lib/ruby/node/position.rb +35 -0
- data/lib/ruby/node/source.rb +29 -0
- data/lib/ruby/node/text.rb +121 -0
- data/lib/ruby/node/traversal.rb +82 -0
- data/lib/ruby/operator.rb +49 -0
- data/lib/ruby/params.rb +41 -0
- data/lib/ruby/statements.rb +45 -0
- data/lib/ruby/string.rb +40 -0
- data/lib/ruby/symbol.rb +27 -0
- data/lib/ruby/token.rb +51 -0
- data/lib/ruby/while.rb +32 -0
- data/test/all.rb +3 -0
- data/test/builder/stack_test.rb +67 -0
- data/test/builder/text_test.rb +118 -0
- data/test/context_test.rb +54 -0
- data/test/erb_stripper_test.rb +29 -0
- data/test/fixtures/all.rb.src +150 -0
- data/test/fixtures/source_1.rb +16 -0
- data/test/fixtures/source_2.rb +1 -0
- data/test/fixtures/stuff.rb +371 -0
- data/test/fixtures/template.html.erb +22 -0
- data/test/fixtures/tmp.rb +6 -0
- data/test/lib_test.rb +92 -0
- data/test/lib_test_helper.rb +103 -0
- data/test/libs.txt +227 -0
- data/test/nodes/args_test.rb +100 -0
- data/test/nodes/array_test.rb +141 -0
- data/test/nodes/assignment_test.rb +49 -0
- data/test/nodes/block_test.rb +125 -0
- data/test/nodes/call_test.rb +229 -0
- data/test/nodes/case_test.rb +68 -0
- data/test/nodes/comments_test.rb +25 -0
- data/test/nodes/const_test.rb +46 -0
- data/test/nodes/conversions_test.rb +9 -0
- data/test/nodes/for_test.rb +34 -0
- data/test/nodes/hash_test.rb +71 -0
- data/test/nodes/heredoc_test.rb +202 -0
- data/test/nodes/identifier_test.rb +51 -0
- data/test/nodes/if_test.rb +100 -0
- data/test/nodes/literals_test.rb +63 -0
- data/test/nodes/method_test.rb +92 -0
- data/test/nodes/namespaces_test.rb +65 -0
- data/test/nodes/node_test.rb +74 -0
- data/test/nodes/nodes_test.rb +23 -0
- data/test/nodes/operator_test.rb +241 -0
- data/test/nodes/separators_test.rb +97 -0
- data/test/nodes/statements_test.rb +70 -0
- data/test/nodes/string_test.rb +92 -0
- data/test/nodes/symbol_test.rb +57 -0
- data/test/nodes/unless_test.rb +42 -0
- data/test/nodes/until_test.rb +61 -0
- data/test/nodes/while_test.rb +71 -0
- data/test/test_helper.rb +51 -0
- data/test/traversal_test.rb +53 -0
- metadata +163 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
<html>
|
2
|
+
<ul>
|
3
|
+
<% f.field_set do %>
|
4
|
+
<%% column do %%>
|
5
|
+
<% [:foo].each do |foo| %>
|
6
|
+
<li>
|
7
|
+
|
8
|
+
<span><%= t(:erb_1) %></span>
|
9
|
+
<%#= comment
|
10
|
+
comment
|
11
|
+
comment %>
|
12
|
+
</li>
|
13
|
+
<% end %>
|
14
|
+
<br>
|
15
|
+
|
16
|
+
<%- t(:erb_2) -%>
|
17
|
+
|
18
|
+
<% t(:'foo.erb_3') %> <% bar %>
|
19
|
+
<% end %>
|
20
|
+
<% end %>
|
21
|
+
</ul>
|
22
|
+
</html>
|
data/test/lib_test.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/lib_test_helper'
|
2
|
+
|
3
|
+
TMP_DIR = File.expand_path(File.dirname(__FILE__) + '/../../tmp/libs')
|
4
|
+
|
5
|
+
class BuildTest
|
6
|
+
include LibTestHelper
|
7
|
+
|
8
|
+
def test_library_build(*names)
|
9
|
+
options = names.last.is_a?(Hash) ? names.pop : {}
|
10
|
+
verbose = options[:verbose]
|
11
|
+
names = libs.keys if names.empty?
|
12
|
+
names.delete(:rubinius)
|
13
|
+
|
14
|
+
puts "Going to parse and rebuild Ruby files from the following #{names.size} libraries:\n\n#{names.join(', ')}\n\n"
|
15
|
+
puts "Will report an o if the rebuilt code is not exactly the same as the original source."
|
16
|
+
puts "Will report an x if the code can not be parsed by Ripper (most probably Ruby 1.9 incompatible)."
|
17
|
+
puts "Let's go ...\n"
|
18
|
+
errors = {}
|
19
|
+
|
20
|
+
names.each do |name|
|
21
|
+
# next if name < 'crap4r'
|
22
|
+
puts "\n#{name}"
|
23
|
+
|
24
|
+
lib = libs[name]
|
25
|
+
lib[:exclude] ||= []
|
26
|
+
lib[:exclude] << "/vendor/" << # don't parse various plugins or frozen rails twice
|
27
|
+
"/simple_benches" << # looks like some pseudo code in merb
|
28
|
+
"/test/hoge.rb" << # an erubis file
|
29
|
+
|
30
|
+
errors[name] = []
|
31
|
+
filenames(File.expand_path(lib[:path])).each do |filename|
|
32
|
+
next if excluded?(lib, filename)
|
33
|
+
src = read_src(filename, lib)
|
34
|
+
p filename if verbose
|
35
|
+
begin
|
36
|
+
result = build(src, filename).to_ruby(true)
|
37
|
+
if src == result
|
38
|
+
putc '.'
|
39
|
+
else
|
40
|
+
errors[name] << filename + "\nresult differs from source:\n#{diff(src, result)}\n"
|
41
|
+
verbose ? puts(diff(src, result)) : putc('o')
|
42
|
+
end
|
43
|
+
rescue Exception => e
|
44
|
+
line = e.message
|
45
|
+
line = filename + ': ' + line unless line.index(filename)
|
46
|
+
errors[name] << line + "\n"
|
47
|
+
putc e.is_a?(Ripper::RubyBuilder::ParseError) ? 'x' : 'e'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
puts
|
52
|
+
report(errors, name, lib[:path])
|
53
|
+
end
|
54
|
+
|
55
|
+
# puts
|
56
|
+
# names.each { |name| report(errors, name, libs[name][:path]) }
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_tmp_file
|
60
|
+
filename = File.dirname(__FILE__) + '/fixtures/tmp.rb'
|
61
|
+
src = read_src(filename)
|
62
|
+
result = build(src, filename).to_ruby(true) || ''
|
63
|
+
puts diff(src, result)
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_this
|
67
|
+
src = 'a+ a +a'
|
68
|
+
result = build(src).to_ruby(true) || ''
|
69
|
+
puts diff(src, result)
|
70
|
+
end
|
71
|
+
|
72
|
+
def libs
|
73
|
+
@libs ||= begin
|
74
|
+
Dir["#{TMP_DIR}/*"].inject({}) do |dirs, dir|
|
75
|
+
dirs[File.basename(dir).to_sym] = { :path => dir }
|
76
|
+
dirs
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def clone_libs
|
82
|
+
urls = File.read(File.dirname(__FILE__) + '/libs.txt').split("\n")
|
83
|
+
urls.each do |url|
|
84
|
+
# next if File.dir?(tmp_dir)
|
85
|
+
puts `cd #{TMP_DIR}; git clone #{url}`
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# BuildTest.new.clone_libs
|
91
|
+
BuildTest.new.test_library_build
|
92
|
+
# BuildTest.new.test_tmp_file
|
@@ -0,0 +1,103 @@
|
|
1
|
+
$: << File.expand_path(File.dirname(__FILE__) + '/../lib')
|
2
|
+
|
3
|
+
require 'pp'
|
4
|
+
require 'ripper/ruby_builder'
|
5
|
+
require 'ripper/event_log'
|
6
|
+
require 'highlighters/ansi'
|
7
|
+
require 'erb/stripper'
|
8
|
+
require 'diff/lcs'
|
9
|
+
require 'diff/lcs/hunk'
|
10
|
+
|
11
|
+
module LibTestHelper
|
12
|
+
def build(src, filename = nil)
|
13
|
+
Ripper::RubyBuilder.build(src, filename)
|
14
|
+
end
|
15
|
+
|
16
|
+
def sexp(src)
|
17
|
+
pp Ripper::SexpBuilder.new(src).parse
|
18
|
+
end
|
19
|
+
|
20
|
+
def log(src)
|
21
|
+
Ripper::EventLog.out(src)
|
22
|
+
end
|
23
|
+
|
24
|
+
def filenames(root)
|
25
|
+
Dir["#{root}/**/*.rb"].sort
|
26
|
+
end
|
27
|
+
|
28
|
+
def read_file(filename)
|
29
|
+
src = File.read(filename)
|
30
|
+
src = File.open(filename, 'r:iso-8859-1') { |f| f.read } unless src.valid_encoding?
|
31
|
+
src = File.open(filename, 'r:ascii-8bit') { |f| f.read } unless src.valid_encoding?
|
32
|
+
src || ''
|
33
|
+
end
|
34
|
+
|
35
|
+
def read_src(filename, lib = nil)
|
36
|
+
src = read_file(filename)
|
37
|
+
src = strip_erb(src) if lib && erb?(lib, filename)
|
38
|
+
src || ''
|
39
|
+
end
|
40
|
+
|
41
|
+
def excluded?(lib, filename)
|
42
|
+
lib[:exclude].any? { |exclude| filename.index(exclude) }
|
43
|
+
end
|
44
|
+
|
45
|
+
def erb?(lib, filename)
|
46
|
+
Array(lib[:erb] || %r(/templates/|environment\.rb)).any? { |pattern| filename =~ pattern }
|
47
|
+
end
|
48
|
+
|
49
|
+
def strip_erb(src)
|
50
|
+
Erb::Stripper.new.to_ruby(src)
|
51
|
+
end
|
52
|
+
|
53
|
+
def report(errors, name, path)
|
54
|
+
errors = errors[name]
|
55
|
+
msg = if errors && !errors.empty?
|
56
|
+
# output the broken line
|
57
|
+
# suggest possible fixes
|
58
|
+
"#{errors.count} problems found in #{name}:\n" + errors.map { |e| e.gsub(path, name.to_s) }.join
|
59
|
+
else
|
60
|
+
"no problems found in #{name}"
|
61
|
+
end
|
62
|
+
puts msg
|
63
|
+
end
|
64
|
+
|
65
|
+
def highlight_diff(str)
|
66
|
+
green = Highlighters::Ansi.new(:green)
|
67
|
+
red = Highlighters::Ansi.new(:red)
|
68
|
+
str.split("\n").map do |line|
|
69
|
+
line = green.highlight(line) if line =~ /^\+/
|
70
|
+
line = red.highlight(line) if line =~ /^\-/
|
71
|
+
line
|
72
|
+
end.join("\n")
|
73
|
+
end
|
74
|
+
|
75
|
+
# some ruby cookbook
|
76
|
+
def diff(data_old, data_new, format=:unified, context_lines=3)
|
77
|
+
data_old = data_old.split(/\n/).map! { |e| e.chomp }
|
78
|
+
data_new = data_new.split(/\n/).map! { |e| e.chomp }
|
79
|
+
output = ""
|
80
|
+
diffs = Diff::LCS.diff(data_old, data_new)
|
81
|
+
return output if diffs.empty?
|
82
|
+
oldhunk = hunk = nil
|
83
|
+
file_length_difference = 0
|
84
|
+
diffs.each do |piece|
|
85
|
+
begin
|
86
|
+
hunk = Diff::LCS::Hunk.new(data_old, data_new, piece, context_lines, file_length_difference)
|
87
|
+
file_length_difference = hunk.file_length_difference
|
88
|
+
next unless oldhunk
|
89
|
+
if (context_lines > 0) and hunk.overlaps?(oldhunk)
|
90
|
+
hunk.unshift(oldhunk)
|
91
|
+
else
|
92
|
+
output << oldhunk.diff(format)
|
93
|
+
end
|
94
|
+
ensure
|
95
|
+
oldhunk = hunk
|
96
|
+
output << "\n"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
output << oldhunk.diff(format) << "\n"
|
100
|
+
highlight_diff(output)
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
data/test/libs.txt
ADDED
@@ -0,0 +1,227 @@
|
|
1
|
+
git://github.com/37signals/cached_externals.git
|
2
|
+
git://github.com/activescaffold/active_scaffold.git
|
3
|
+
git://github.com/adamjmurray/cosy.git
|
4
|
+
git://github.com/adamwiggins/rest-client.git
|
5
|
+
git://github.com/adamwiggins/rifgraf.git
|
6
|
+
git://github.com/alexvollmer/daemon-spawn.git
|
7
|
+
git://github.com/aslakhellesoy/cucumber.git
|
8
|
+
git://github.com/aslakhellesoy/cucumber_rails.git
|
9
|
+
git://github.com/azimux/externals.git
|
10
|
+
git://github.com/billymeltdown/looper.git
|
11
|
+
git://github.com/binarylogic/authlogic.git
|
12
|
+
git://github.com/bleything/midiator.git
|
13
|
+
git://github.com/breakpointer/ajax-rdoc.git
|
14
|
+
git://github.com/browsermedia/browsercms.git
|
15
|
+
git://github.com/bryanl/simple-daemon.git
|
16
|
+
git://github.com/brynary/arel.git
|
17
|
+
git://github.com/brynary/cache-money.git
|
18
|
+
git://github.com/brynary/dryopteris.git
|
19
|
+
git://github.com/brynary/graticule.git
|
20
|
+
git://github.com/brynary/merb_cucumber.git
|
21
|
+
git://github.com/brynary/rack-bug.git
|
22
|
+
git://github.com/brynary/rack-test.git
|
23
|
+
git://github.com/brynary/redis-rb.git
|
24
|
+
git://github.com/brynary/webrat.git
|
25
|
+
git://github.com/btakita/rr.git
|
26
|
+
git://github.com/cainlevy/freemium.git
|
27
|
+
git://github.com/chneukirchen/bacon.git
|
28
|
+
git://github.com/chneukirchen/daiquiri.git
|
29
|
+
git://github.com/chneukirchen/ji.git
|
30
|
+
git://github.com/chuyeow/facon.git
|
31
|
+
git://github.com/cloudhead/less.git
|
32
|
+
git://github.com/coatl/rubylexer.git
|
33
|
+
git://github.com/commondream/rcov_plugin.git
|
34
|
+
git://github.com/contrast/exceptional.git
|
35
|
+
git://github.com/courtenay/altered_beast.git
|
36
|
+
git://github.com/cpjolicoeur/cerberus.git
|
37
|
+
git://github.com/craigw/sprinkles.git
|
38
|
+
git://github.com/david/merb_cucumber.git
|
39
|
+
git://github.com/dchelimsky/rspec-rails.git
|
40
|
+
git://github.com/dchelimsky/rspec.git
|
41
|
+
git://github.com/defunkt/cache_fu.git
|
42
|
+
git://github.com/defunkt/diff-lcs.git
|
43
|
+
git://github.com/defunkt/exception_logger.git
|
44
|
+
git://github.com/defunkt/rip.git
|
45
|
+
git://github.com/defunkt/sake.git
|
46
|
+
git://github.com/dougal/daemon_generator.git
|
47
|
+
git://github.com/drnic/newgem.git
|
48
|
+
git://github.com/edavis10/redmine.git
|
49
|
+
git://github.com/elliottcable/highline.git
|
50
|
+
git://github.com/entp/seinfeld.git
|
51
|
+
git://github.com/evanphx/rubinius.git
|
52
|
+
git://github.com/eventmachine/
|
53
|
+
git://github.com/evilchelu/braid.git
|
54
|
+
git://github.com/ezmobius/nanite.git
|
55
|
+
git://github.com/ezmobius/redis-rb.git
|
56
|
+
git://github.com/fabien/im_magick.git
|
57
|
+
git://github.com/fauna/echoe.git
|
58
|
+
git://github.com/fauna/ultrasphinx.git
|
59
|
+
git://github.com/fesplugas/typus.git
|
60
|
+
git://github.com/floehopper/mocha.git
|
61
|
+
git://github.com/flogic/object_daddy.git
|
62
|
+
git://github.com/FooBarWidget/daemon_controller.git
|
63
|
+
git://github.com/FooBarWidget/passenger.git
|
64
|
+
git://github.com/francois/piston.git
|
65
|
+
git://github.com/freelancing-god/thinking-sphinx.git
|
66
|
+
git://github.com/Gabrielg1976/ruby_music_projects.git
|
67
|
+
git://github.com/georgi/git_store.git
|
68
|
+
git://github.com/gilesbowkett/archaeopteryx.git
|
69
|
+
git://github.com/giraffesoft/classy_resources.git
|
70
|
+
git://github.com/grosser/fast_gettext.git
|
71
|
+
git://github.com/hcatlin/sass.git
|
72
|
+
git://github.com/ichverstehe/isaac.git
|
73
|
+
git://github.com/insoshi/insoshi.git
|
74
|
+
git://github.com/integrity/integrity.git
|
75
|
+
git://github.com/iownbey/docbox.git
|
76
|
+
git://github.com/jacius/rubygame.git
|
77
|
+
git://github.com/jamis/capistrano.git
|
78
|
+
git://github.com/janne/model_translations.git
|
79
|
+
git://github.com/jashkenas/ruby-processing.git
|
80
|
+
git://github.com/javan/whenever.git
|
81
|
+
git://github.com/jeremyevans/sequel.git
|
82
|
+
git://github.com/jeremymcanally/context.git
|
83
|
+
git://github.com/jeremymcanally/matchy.git
|
84
|
+
git://github.com/jeremymcanally/rails-templates.git
|
85
|
+
git://github.com/jeremymcanally/stump.git
|
86
|
+
git://github.com/jgarber/redcloth.git
|
87
|
+
git://github.com/jimm/midilib.git
|
88
|
+
git://github.com/jimweirich/flexmock.git
|
89
|
+
git://github.com/jimweirich/rake.git
|
90
|
+
git://github.com/jlnr/gosu.git
|
91
|
+
git://github.com/jnewland/sinatra-rubygems.git
|
92
|
+
git://github.com/jnstq/job_fu.git
|
93
|
+
git://github.com/jnunemaker/httparty.git
|
94
|
+
git://github.com/jnunemaker/twitter.git
|
95
|
+
git://github.com/joshmh/globalize2.git
|
96
|
+
git://github.com/jscruggs/metric_fu.git
|
97
|
+
git://github.com/jsn/rbot.git
|
98
|
+
git://github.com/jvoorhis/music_player.git
|
99
|
+
git://github.com/kennethkalmer/daemon-kit.git
|
100
|
+
git://github.com/kevinrutherford/crap4r.git
|
101
|
+
git://github.com/kevinrutherford/reek.git
|
102
|
+
git://github.com/knewter/ansuz.git
|
103
|
+
git://github.com/kr/beanstalkd.git
|
104
|
+
git://github.com/Lipsiasoft/lipsiadmin.git
|
105
|
+
git://github.com/lsegal/yard.git
|
106
|
+
git://github.com/lstoll/mechanical_github.git
|
107
|
+
git://github.com/macournoyer/thin.git
|
108
|
+
git://github.com/manalang/bdoc.git
|
109
|
+
git://github.com/manveru/innate.git
|
110
|
+
git://github.com/manveru/makura.git
|
111
|
+
git://github.com/manveru/ramaze.git
|
112
|
+
git://github.com/martinjandrews/roodi.git
|
113
|
+
git://github.com/mbleigh/princely.git
|
114
|
+
git://github.com/michaeldv/fat_free_crm.git
|
115
|
+
git://github.com/mislav/bluecloth.git
|
116
|
+
git://github.com/mislav/will_paginate.git
|
117
|
+
git://github.com/mojombo/chronic.git
|
118
|
+
git://github.com/mojombo/fixture-scenarios.git
|
119
|
+
git://github.com/mojombo/god.git
|
120
|
+
git://github.com/mojombo/grit.git
|
121
|
+
git://github.com/mojombo/jekyll.git
|
122
|
+
git://github.com/mongrel/mongrel.git
|
123
|
+
git://github.com/nathansobo/treetop.git
|
124
|
+
git://github.com/nbibler/rubyzip.git
|
125
|
+
git://github.com/ncr/background-fu.git
|
126
|
+
git://github.com/newsdesk/translate.git
|
127
|
+
git://github.com/nex3/haml.git
|
128
|
+
git://github.com/notahat/machinist.git
|
129
|
+
git://github.com/olabini/paipr.git
|
130
|
+
git://github.com/parfait/acts_like_git.git
|
131
|
+
git://github.com/pat-maddox/giternal.git
|
132
|
+
git://github.com/pauldix/typhoeus.git
|
133
|
+
git://github.com/peritor/backdrop.git
|
134
|
+
git://github.com/probablycorey/mini_magick.git
|
135
|
+
git://github.com/quirkey/gembox.git
|
136
|
+
git://github.com/rack/rack-contrib.git
|
137
|
+
git://github.com/rack/rack.git
|
138
|
+
git://github.com/radiant/radiant.git
|
139
|
+
git://github.com/railfrog/railfrog.git
|
140
|
+
git://github.com/rails/exception_notification.git
|
141
|
+
git://github.com/rails/open_id_authentication.git
|
142
|
+
git://github.com/rails/rails.git
|
143
|
+
git://github.com/railsdog/spree.git
|
144
|
+
git://github.com/railsgarden/jazztoolbox.git
|
145
|
+
git://github.com/railsmachine/moonshine.git
|
146
|
+
git://github.com/reagent/simple-gem.git
|
147
|
+
git://github.com/relevance/cap_gun.git
|
148
|
+
git://github.com/relevance/rcov.git
|
149
|
+
git://github.com/relevance/streamlined.git
|
150
|
+
git://github.com/resolve/Refinery.git
|
151
|
+
git://github.com/rgrove/sanitize.git
|
152
|
+
git://github.com/RISCfuture/autumn.git
|
153
|
+
git://github.com/rtomayko/rdiscount.git
|
154
|
+
git://github.com/rtomayko/rpeg-markdown.git
|
155
|
+
git://github.com/rubyist/aasm.git
|
156
|
+
git://github.com/ruport/ruport.git
|
157
|
+
git://github.com/saizai/superdeploy.git
|
158
|
+
git://github.com/sandal/prawn.git
|
159
|
+
git://github.com/sbecker/asset_packager.git
|
160
|
+
git://github.com/seamusabshere/daemons.git
|
161
|
+
git://github.com/seanohalpin/smqueue.git
|
162
|
+
git://github.com/seattlerb/flay.git
|
163
|
+
git://github.com/seattlerb/flog.git
|
164
|
+
git://github.com/seattlerb/heckle.git
|
165
|
+
git://github.com/seattlerb/hoe.git
|
166
|
+
git://github.com/seattlerb/image_science.git
|
167
|
+
git://github.com/seattlerb/parsetree.git
|
168
|
+
git://github.com/seattlerb/ruby2ruby.git
|
169
|
+
git://github.com/seattlerb/ruby_parser.git
|
170
|
+
git://github.com/seattlerb/ruby_to_c.git
|
171
|
+
git://github.com/seattlerb/vlad.git
|
172
|
+
git://github.com/seattlerb/zentest.git
|
173
|
+
git://github.com/shairontoledo/rghost.git
|
174
|
+
git://github.com/shawn42/gamebox.git
|
175
|
+
git://github.com/Shopify/active_fulfillment.git
|
176
|
+
git://github.com/Shopify/active_merchant.git
|
177
|
+
git://github.com/Shopify/active_shipping.git
|
178
|
+
git://github.com/Shopify/cacheable.git
|
179
|
+
git://github.com/sinatra/sinatra.git
|
180
|
+
git://github.com/starling/starling.git
|
181
|
+
git://github.com/svenfuchs/adva_cms.git
|
182
|
+
git://github.com/svenfuchs/i18n.git
|
183
|
+
git://github.com/taf2/curb.git
|
184
|
+
git://github.com/technicalpickles/jeweler.git
|
185
|
+
git://github.com/technoweenie/acts_as_paranoid.git
|
186
|
+
git://github.com/technoweenie/acts_as_versioned.git
|
187
|
+
git://github.com/technoweenie/attachment_fu.git
|
188
|
+
git://github.com/technoweenie/can_search.git
|
189
|
+
git://github.com/technoweenie/mephisto.git
|
190
|
+
git://github.com/technoweenie/permalink_fu.git
|
191
|
+
git://github.com/technoweenie/restful-authentication.git
|
192
|
+
git://github.com/technoweenie/sentry.git
|
193
|
+
git://github.com/technoweenie/viking.git
|
194
|
+
git://github.com/tenderlove/nokogiri.git
|
195
|
+
git://github.com/thorny-sun/prawnto.git
|
196
|
+
git://github.com/thoughtbot/clearance.git
|
197
|
+
git://github.com/thoughtbot/factory_girl.git
|
198
|
+
git://github.com/thoughtbot/hoptoad_notifier.git
|
199
|
+
git://github.com/thoughtbot/paperclip.git
|
200
|
+
git://github.com/thoughtbot/shoulda.git
|
201
|
+
git://github.com/thoughtbot/squirrel.git
|
202
|
+
git://github.com/thoughtworks/cruisecontrol.rb.git
|
203
|
+
git://github.com/timcharper/bundle-fu.git
|
204
|
+
git://github.com/tmm1/amqp.git
|
205
|
+
git://github.com/tobi/delayed_job.git
|
206
|
+
git://github.com/tobi/liquid.git
|
207
|
+
git://github.com/topfunky/gruff.git
|
208
|
+
git://github.com/toretore/zippy.git
|
209
|
+
git://github.com/tra/spawn.git
|
210
|
+
git://github.com/TwP/bones.git
|
211
|
+
git://github.com/TwP/webby.git
|
212
|
+
git://github.com/voloko/sdoc.git
|
213
|
+
git://github.com/vvs/rubygems.git
|
214
|
+
git://github.com/why/hacketyhack.git
|
215
|
+
git://github.com/why/hobix.git
|
216
|
+
git://github.com/why/hpricot.git
|
217
|
+
git://github.com/why/markaby.git
|
218
|
+
git://github.com/why/shoes.git
|
219
|
+
git://github.com/why/unholy.git
|
220
|
+
git://github.com/winton/externals.git
|
221
|
+
git://github.com/wr0ngway/rubber.git
|
222
|
+
git://github.com/wycats/merb-extlib.git
|
223
|
+
git://github.com/wycats/merb-plugins.git
|
224
|
+
git://github.com/wycats/merb.git
|
225
|
+
git://github.com/wycats/merb_dm_rest.git
|
226
|
+
git://github.com/wycats/thor.git
|
227
|
+
git://github.com/xaviershay/enki.git
|