ripper2ruby 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.markdown +10 -0
  3. data/lib/core_ext/array/flush.rb +5 -0
  4. data/lib/core_ext/hash/delete_at.rb +5 -0
  5. data/lib/core_ext/object/meta_class.rb +5 -0
  6. data/lib/core_ext/object/try.rb +12 -0
  7. data/lib/erb/stripper.rb +48 -0
  8. data/lib/highlighters/ansi.rb +29 -0
  9. data/lib/ripper/event_log.rb +45 -0
  10. data/lib/ripper/ruby_builder.rb +168 -0
  11. data/lib/ripper/ruby_builder/buffer.rb +34 -0
  12. data/lib/ripper/ruby_builder/events/args.rb +40 -0
  13. data/lib/ripper/ruby_builder/events/array.rb +71 -0
  14. data/lib/ripper/ruby_builder/events/assignment.rb +55 -0
  15. data/lib/ripper/ruby_builder/events/block.rb +80 -0
  16. data/lib/ripper/ruby_builder/events/call.rb +123 -0
  17. data/lib/ripper/ruby_builder/events/case.rb +17 -0
  18. data/lib/ripper/ruby_builder/events/const.rb +47 -0
  19. data/lib/ripper/ruby_builder/events/for.rb +13 -0
  20. data/lib/ripper/ruby_builder/events/hash.rb +24 -0
  21. data/lib/ripper/ruby_builder/events/identifier.rb +41 -0
  22. data/lib/ripper/ruby_builder/events/if.rb +37 -0
  23. data/lib/ripper/ruby_builder/events/lexer.rb +159 -0
  24. data/lib/ripper/ruby_builder/events/literal.rb +47 -0
  25. data/lib/ripper/ruby_builder/events/method.rb +21 -0
  26. data/lib/ripper/ruby_builder/events/operator.rb +23 -0
  27. data/lib/ripper/ruby_builder/events/statements.rb +50 -0
  28. data/lib/ripper/ruby_builder/events/string.rb +117 -0
  29. data/lib/ripper/ruby_builder/events/symbol.rb +22 -0
  30. data/lib/ripper/ruby_builder/events/while.rb +27 -0
  31. data/lib/ripper/ruby_builder/queue.rb +33 -0
  32. data/lib/ripper/ruby_builder/stack.rb +125 -0
  33. data/lib/ripper/ruby_builder/token.rb +91 -0
  34. data/lib/ripper2ruby.rb +1 -0
  35. data/lib/ruby.rb +28 -0
  36. data/lib/ruby/aggregate.rb +71 -0
  37. data/lib/ruby/alternation/args.rb +25 -0
  38. data/lib/ruby/alternation/hash.rb +25 -0
  39. data/lib/ruby/alternation/list.rb +19 -0
  40. data/lib/ruby/args.rb +36 -0
  41. data/lib/ruby/array.rb +27 -0
  42. data/lib/ruby/assignment.rb +32 -0
  43. data/lib/ruby/assoc.rb +17 -0
  44. data/lib/ruby/block.rb +42 -0
  45. data/lib/ruby/call.rb +34 -0
  46. data/lib/ruby/case.rb +30 -0
  47. data/lib/ruby/const.rb +49 -0
  48. data/lib/ruby/for.rb +18 -0
  49. data/lib/ruby/hash.rb +14 -0
  50. data/lib/ruby/if.rb +35 -0
  51. data/lib/ruby/list.rb +40 -0
  52. data/lib/ruby/literal.rb +45 -0
  53. data/lib/ruby/method.rb +19 -0
  54. data/lib/ruby/node.rb +47 -0
  55. data/lib/ruby/node/composite.rb +68 -0
  56. data/lib/ruby/node/conversions.rb +66 -0
  57. data/lib/ruby/node/position.rb +35 -0
  58. data/lib/ruby/node/source.rb +29 -0
  59. data/lib/ruby/node/text.rb +121 -0
  60. data/lib/ruby/node/traversal.rb +82 -0
  61. data/lib/ruby/operator.rb +49 -0
  62. data/lib/ruby/params.rb +41 -0
  63. data/lib/ruby/statements.rb +45 -0
  64. data/lib/ruby/string.rb +40 -0
  65. data/lib/ruby/symbol.rb +27 -0
  66. data/lib/ruby/token.rb +51 -0
  67. data/lib/ruby/while.rb +32 -0
  68. data/test/all.rb +3 -0
  69. data/test/builder/stack_test.rb +67 -0
  70. data/test/builder/text_test.rb +118 -0
  71. data/test/context_test.rb +54 -0
  72. data/test/erb_stripper_test.rb +29 -0
  73. data/test/fixtures/all.rb.src +150 -0
  74. data/test/fixtures/source_1.rb +16 -0
  75. data/test/fixtures/source_2.rb +1 -0
  76. data/test/fixtures/stuff.rb +371 -0
  77. data/test/fixtures/template.html.erb +22 -0
  78. data/test/fixtures/tmp.rb +6 -0
  79. data/test/lib_test.rb +92 -0
  80. data/test/lib_test_helper.rb +103 -0
  81. data/test/libs.txt +227 -0
  82. data/test/nodes/args_test.rb +100 -0
  83. data/test/nodes/array_test.rb +141 -0
  84. data/test/nodes/assignment_test.rb +49 -0
  85. data/test/nodes/block_test.rb +125 -0
  86. data/test/nodes/call_test.rb +229 -0
  87. data/test/nodes/case_test.rb +68 -0
  88. data/test/nodes/comments_test.rb +25 -0
  89. data/test/nodes/const_test.rb +46 -0
  90. data/test/nodes/conversions_test.rb +9 -0
  91. data/test/nodes/for_test.rb +34 -0
  92. data/test/nodes/hash_test.rb +71 -0
  93. data/test/nodes/heredoc_test.rb +202 -0
  94. data/test/nodes/identifier_test.rb +51 -0
  95. data/test/nodes/if_test.rb +100 -0
  96. data/test/nodes/literals_test.rb +63 -0
  97. data/test/nodes/method_test.rb +92 -0
  98. data/test/nodes/namespaces_test.rb +65 -0
  99. data/test/nodes/node_test.rb +74 -0
  100. data/test/nodes/nodes_test.rb +23 -0
  101. data/test/nodes/operator_test.rb +241 -0
  102. data/test/nodes/separators_test.rb +97 -0
  103. data/test/nodes/statements_test.rb +70 -0
  104. data/test/nodes/string_test.rb +92 -0
  105. data/test/nodes/symbol_test.rb +57 -0
  106. data/test/nodes/unless_test.rb +42 -0
  107. data/test/nodes/until_test.rb +61 -0
  108. data/test/nodes/while_test.rb +71 -0
  109. data/test/test_helper.rb +51 -0
  110. data/test/traversal_test.rb +53 -0
  111. 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>
@@ -0,0 +1,6 @@
1
+ p(<<stuff+'foobar')\
2
+ +"more stuff"
3
+ some stuff
4
+ stuff
5
+
6
+
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