Class: Transmogrify
- Inherits:
-
SexpProcessor
- Object
- SexpProcessor
- Transmogrify
- Includes:
- Transmogrifiers
- Defined in:
- lib/transmogrify.rb
Constant Summary collapse
- VERSION =
'1.0.0'
Instance Method Summary collapse
-
#initialize(*transmogrifiers) ⇒ Transmogrify
constructor
A new instance of Transmogrify.
- #new_ivar(name) ⇒ Object
- #new_lvar(name) ⇒ Object
- #rewrite_args(exp) ⇒ Object
- #rewrite_false(exp) ⇒ Object
- #rewrite_iasgn(exp) ⇒ Object
- #rewrite_ivar(exp) ⇒ Object
- #rewrite_lasgn(exp) ⇒ Object
- #rewrite_lvar(exp) ⇒ Object
- #rewrite_true(exp) ⇒ Object
- #run(files_and_dirs) ⇒ Object
-
#transmogrify(name) ⇒ Object
TODO: I think this is way too generic a name.
- #transmogrify_file(path) ⇒ Object
- #transmogrify_string(ruby) ⇒ Object
Constructor Details
#initialize(*transmogrifiers) ⇒ Transmogrify
Returns a new instance of Transmogrify.
13 14 15 16 17 18 19 20 |
# File 'lib/transmogrify.rb', line 13 def initialize(*transmogrifiers) transmogrifiers.each {|transmogrifier| extend transmogrifier} super() @r2r = Ruby2Ruby.new @ivars = {} @lvars = {} end |
Instance Method Details
#new_ivar(name) ⇒ Object
22 23 24 |
# File 'lib/transmogrify.rb', line 22 def new_ivar(name) @ivars[name] = :"@#{transmogrify(name)}" # TODO: LAME end |
#new_lvar(name) ⇒ Object
26 27 28 |
# File 'lib/transmogrify.rb', line 26 def new_lvar(name) @lvars[name] = transmogrify(name) end |
#rewrite_args(exp) ⇒ Object
30 31 32 33 34 |
# File 'lib/transmogrify.rb', line 30 def rewrite_args exp name = exp[1] exp[1] = new_lvar(name) exp end |
#rewrite_false(exp) ⇒ Object
36 37 38 |
# File 'lib/transmogrify.rb', line 36 def rewrite_false exp s(:not, s(:not, s(:not, s(:lit, 33)))) end |
#rewrite_iasgn(exp) ⇒ Object
40 41 42 43 44 |
# File 'lib/transmogrify.rb', line 40 def rewrite_iasgn exp name = exp[1] exp[1] = @ivars[name] || new_ivar(name) exp end |
#rewrite_ivar(exp) ⇒ Object
58 59 60 61 62 |
# File 'lib/transmogrify.rb', line 58 def rewrite_ivar exp name = exp[1] exp[1] = @ivars[name] || new_ivar(name) exp end |
#rewrite_lasgn(exp) ⇒ Object
46 47 48 49 50 |
# File 'lib/transmogrify.rb', line 46 def rewrite_lasgn exp name = exp[1] exp[1] = @lvars[name] || new_lvar(name) exp end |
#rewrite_lvar(exp) ⇒ Object
52 53 54 55 56 |
# File 'lib/transmogrify.rb', line 52 def rewrite_lvar exp name = exp[1] exp[1] = @lvars[name] || new_ivar(name) exp end |
#rewrite_true(exp) ⇒ Object
64 65 66 |
# File 'lib/transmogrify.rb', line 64 def rewrite_true exp s(:not, s(:not, s(:lit, 33))) end |
#run(files_and_dirs) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/transmogrify.rb', line 68 def run files_and_dirs files_and_dirs.each do |file_or_dir| if File.file? file_or_dir then transmogrify_file file_or_dir elsif File.directory? file_or_dir then Dir[File.join(file_or_dir, "**/*.rb")].each do |file| transmogrify_file file end else # silently skipping for now end end end |
#transmogrify(name) ⇒ Object
TODO: I think this is way too generic a name
83 84 85 |
# File 'lib/transmogrify.rb', line 83 def transmogrify(name) name end |
#transmogrify_file(path) ⇒ Object
87 88 89 90 91 92 93 94 95 |
# File 'lib/transmogrify.rb', line 87 def transmogrify_file path ruby = transmogrify_string File.read(path) new_path, old_path = "#{path}.new", "#{path}.old" File.open("#{path}.new", 'w') do |f| f.puts ruby end File.rename path, old_path File.rename new_path, path end |
#transmogrify_string(ruby) ⇒ Object
97 98 99 100 101 102 |
# File 'lib/transmogrify.rb', line 97 def transmogrify_string ruby rp = RubyParser.new sexp = rp.process ruby sexp = self.process sexp @r2r.process(sexp) end |