PageRenderTime 49ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/bundle/ruby/1.9.1/gems/thor-0.14.6/bin/rake2thor

https://bitbucket.org/mulligan/extractext
Ruby | 86 lines | 63 code | 20 blank | 3 comment | 8 complexity | 579292f43973daee4f8189b2d50cef20 MD5 | raw file
Possible License(s): Apache-2.0, MIT, GPL-3.0, GPL-2.0, BSD-3-Clause, MPL-2.0-no-copyleft-exception, BSD-2-Clause, JSON
  1. #!/usr/bin/env ruby
  2. require 'ruby2ruby'
  3. require 'parse_tree'
  4. if Ruby2Ruby::VERSION >= "1.2.0"
  5. require 'parse_tree_extensions'
  6. end
  7. require 'rake'
  8. input = ARGV[0] || 'Rakefile'
  9. output = ARGV[1] || 'Thorfile'
  10. $requires = []
  11. module Kernel
  12. def require_with_record(file)
  13. $requires << file if caller[1] =~ /rake2thor:/
  14. require_without_record file
  15. end
  16. alias_method :require_without_record, :require
  17. alias_method :require, :require_with_record
  18. end
  19. load input
  20. @private_methods = []
  21. def file_task_name(name)
  22. "compile_" + name.gsub('/', '_slash_').gsub('.', '_dot_').gsub(/\W/, '_')
  23. end
  24. def method_for_task(task)
  25. file_task = task.is_a?(Rake::FileTask)
  26. comment = task.instance_variable_get('@comment')
  27. prereqs = task.instance_variable_get('@prerequisites').select(&Rake::Task.method(:task_defined?))
  28. actions = task.instance_variable_get('@actions')
  29. name = task.name.gsub(/^([^:]+:)+/, '')
  30. name = file_task_name(name) if file_task
  31. meth = ''
  32. meth << "desc #{name.inspect}, #{comment.inspect}\n" if comment
  33. meth << "def #{name}\n"
  34. meth << prereqs.map do |pre|
  35. pre = pre.to_s
  36. pre = file_task_name(pre) if Rake::Task[pre].is_a?(Rake::FileTask)
  37. ' ' + pre
  38. end.join("\n")
  39. meth << "\n\n" unless prereqs.empty? || actions.empty?
  40. meth << actions.map do |act|
  41. act = act.to_ruby
  42. unless act.gsub!(/^proc \{ \|(\w+)\|\n/,
  43. " \\1 = Struct.new(:name).new(#{name.inspect}) # A crude mock Rake::Task object\n")
  44. act.gsub!(/^proc \{\n/, '')
  45. end
  46. act.gsub(/\n\}$/, '')
  47. end.join("\n")
  48. meth << "\nend"
  49. if file_task
  50. @private_methods << meth
  51. return
  52. end
  53. meth
  54. end
  55. body = Rake::Task.tasks.map(&method(:method_for_task)).compact.map { |meth| meth.gsub(/^/, ' ') }.join("\n\n")
  56. unless @private_methods.empty?
  57. body << "\n\n private\n\n"
  58. body << @private_methods.map { |meth| meth.gsub(/^/, ' ') }.join("\n\n")
  59. end
  60. requires = $requires.map { |r| "require #{r.inspect}" }.join("\n")
  61. File.open(output, 'w') { |f| f.write(<<END.lstrip) }
  62. #{requires}
  63. class Default < Thor
  64. #{body}
  65. end
  66. END