Class: Synvert::Rewriter
- Inherits:
-
Object
- Object
- Synvert::Rewriter
- Defined in:
- lib/synvert/rewriter.rb
Overview
Rewriter is the top level namespace in a snippet.
One Rewriter can contain one or many [Synvert::Rewriter::Instance], which define the behavior what files and what codes to detect and rewrite to what code.
Synvert::Rewriter.new 'factory_girl_short_syntax', 'use FactoryGirl short syntax' do
if_gem 'factory_girl', {gte: '2.0.0'}
within_files 'spec/**/*.rb' do
with_node type: 'send', receiver: 'FactoryGirl', message: 'create' do
replace_with "create({{arguments}})"
end
end
end
Defined Under Namespace
Classes: Action, AppendAction, Condition, GemSpec, IfExistCondition, IfOnlyExistCondition, InsertAction, InsertAfterAction, Instance, RemoveAction, ReplaceWithAction, Scope, UnlessExistCondition
Instance Attribute Summary collapse
-
#name ⇒ String
readonly
The unique name of rewriter.
-
#sub_snippets ⇒ Object
readonly
Returns the value of attribute sub_snippets.
Class Method Summary collapse
-
.availables ⇒ Array<Synvert::Rewriter>
Get all available rewriters.
-
.call(name) ⇒ Synvert::Rewriter
Get a registered rewriter by name and process that rewriter.
-
.clear ⇒ Object
Clear all registered rewriters.
-
.fetch(name) ⇒ Synvert::Rewriter
Fetch a rewriter by name.
-
.register(name, rewriter) ⇒ Object
Register a rewriter with its name.
Instance Method Summary collapse
-
#add_file(filename, content) ⇒ Object
Parses add_file dsl, it adds a new file.
-
#add_snippet(name) ⇒ Object
Parse add_snippet dsl, it calls anther rewriter.
-
#description(description = nil) ⇒ Object
Parse description dsl, it sets description of the rewrite.
-
#helper_method(name, &block) ⇒ Object
Parse helper_method dsl, it defines helper method for [Synvert::Rewriter::Instance].
-
#if_gem(name, comparator) ⇒ Object
Parse if_gem dsl, it compares version of the specified gem.
-
#initialize(name, &block) ⇒ Synvert::Rewriter
constructor
Initialize a rewriter.
-
#process ⇒ Object
Process the rewriter.
-
#process_with_sandbox ⇒ Object
Process rewriter with sandbox mode.
-
#todo(todo = nil) ⇒ String
Parse todo dsl, it sets todo of the rewriter.
-
#within_files(file_pattern, &block) ⇒ Object
(also: #within_file)
Parse within_files dsl, it finds specified files.
Constructor Details
#initialize(name, &block) ⇒ Synvert::Rewriter
Initialize a rewriter. When a rewriter is initialized, it is also registered.
94 95 96 97 98 99 100 |
# File 'lib/synvert/rewriter.rb', line 94 def initialize(name, &block) @name = name @block = block @helpers = [] @sub_snippets = [] self.class.register(name, self) end |
Instance Attribute Details
#name ⇒ String (readonly)
Returns the unique name of rewriter.
86 87 88 |
# File 'lib/synvert/rewriter.rb', line 86 def name @name end |
#sub_snippets ⇒ Object (readonly)
Returns the value of attribute sub_snippets.
86 |
# File 'lib/synvert/rewriter.rb', line 86 attr_reader :name, :sub_snippets |
Class Method Details
.availables ⇒ Array<Synvert::Rewriter>
Get all available rewriters
72 73 74 |
# File 'lib/synvert/rewriter.rb', line 72 def availables @rewriters.values end |
.call(name) ⇒ Synvert::Rewriter
Get a registered rewriter by name and process that rewriter.
60 61 62 63 64 65 66 67 |
# File 'lib/synvert/rewriter.rb', line 60 def call(name) if (rewriter = @rewriters[name.to_s]) rewriter.process rewriter else raise RewriterNotFound.new "Rewriter #{name} not found" end end |
.clear ⇒ Object
Clear all registered rewriters.
77 78 79 |
# File 'lib/synvert/rewriter.rb', line 77 def clear @rewriters.clear end |
.fetch(name) ⇒ Synvert::Rewriter
Fetch a rewriter by name.
51 52 53 |
# File 'lib/synvert/rewriter.rb', line 51 def fetch(name) @rewriters[name.to_s] end |
.register(name, rewriter) ⇒ Object
Register a rewriter with its name.
42 43 44 45 |
# File 'lib/synvert/rewriter.rb', line 42 def register(name, rewriter) @rewriters ||= {} @rewriters[name.to_s] = rewriter end |
Instance Method Details
#add_file(filename, content) ⇒ Object
Parses add_file dsl, it adds a new file.
164 165 166 167 168 169 170 |
# File 'lib/synvert/rewriter.rb', line 164 def add_file(filename, content) return if @sandbox File.open filename, 'w' do |file| file.write content end end |
#add_snippet(name) ⇒ Object
Parse add_snippet dsl, it calls anther rewriter.
175 176 177 |
# File 'lib/synvert/rewriter.rb', line 175 def add_snippet(name) @sub_snippets << self.class.call(name) end |
#description(description = nil) ⇒ Object
Parse description dsl, it sets description of the rewrite. Or get description.
125 126 127 128 129 130 131 |
# File 'lib/synvert/rewriter.rb', line 125 def description(description=nil) if description @description = description else @description end end |
#helper_method(name, &block) ⇒ Object
Parse helper_method dsl, it defines helper method for [Synvert::Rewriter::Instance].
183 184 185 |
# File 'lib/synvert/rewriter.rb', line 183 def helper_method(name, &block) @helpers << {name: name, block: block} end |
#if_gem(name, comparator) ⇒ Object
Parse if_gem dsl, it compares version of the specified gem.
138 139 140 |
# File 'lib/synvert/rewriter.rb', line 138 def if_gem(name, comparator) @gem_spec = Rewriter::GemSpec.new(name, comparator) end |
#process ⇒ Object
Process the rewriter. It will call the block.
104 105 106 |
# File 'lib/synvert/rewriter.rb', line 104 def process self.instance_eval &@block end |
#process_with_sandbox ⇒ Object
Process rewriter with sandbox mode. It will call the block but doesn’t change any file.
110 111 112 113 114 |
# File 'lib/synvert/rewriter.rb', line 110 def process_with_sandbox @sandbox = true self.process @sandbox = false end |
#todo(todo = nil) ⇒ String
Parse todo dsl, it sets todo of the rewriter. Or get todo.
192 193 194 195 196 197 198 |
# File 'lib/synvert/rewriter.rb', line 192 def todo(todo=nil) if todo @todo = todo else @todo end end |
#within_files(file_pattern, &block) ⇒ Object Also known as: within_file
Parse within_files dsl, it finds specified files. It creates a [Synvert::Rewriter::Instance] to rewrite code.
147 148 149 150 151 152 153 154 155 |
# File 'lib/synvert/rewriter.rb', line 147 def within_files(file_pattern, &block) return if @sandbox if !@gem_spec || @gem_spec.match? instance = Rewriter::Instance.new(file_pattern, &block) @helpers.each { |helper| instance.singleton_class.send(:define_method, helper[:name], &helper[:block]) } instance.process end end |