Class: Walker
- Inherits:
-
Object
- Object
- Walker
- Defined in:
- lib/ember/appkit/rails/walker.rb
Instance Method Summary collapse
- #find_api_namespace(ast) ⇒ Object
- #find_namespace(ast, name) ⇒ Object
- #find_version_namespace(ast, version) ⇒ Object
-
#initialize(resource, path, api_version) ⇒ Walker
constructor
A new instance of Walker.
- #run ⇒ Object
- #walk(ast, &block) ⇒ Object
- #write_api_namespace ⇒ Object
- #write_resource ⇒ Object
- #write_version_namespace ⇒ Object
Constructor Details
#initialize(resource, path, api_version) ⇒ Walker
Returns a new instance of Walker.
4 5 6 7 8 9 10 11 |
# File 'lib/ember/appkit/rails/walker.rb', line 4 def initialize(resource, path, api_version) @resource = resource @file = File.open(path, 'r+') content = @file.read @ast = Ripper.sexp(content) @lines = content.split("\n") @api_version = api_version end |
Instance Method Details
#find_api_namespace(ast) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/ember/appkit/rails/walker.rb', line 54 def find_api_namespace(ast) find_namespace(ast, 'api') do |ast| find_version_namespace(ast, @api_version) if @write_to.nil? @write_to = [:api, ast[1][1][2][0]] end # found the first instance of the namespace # immediately short-circuit return end end |
#find_namespace(ast, name) ⇒ Object
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/ember/appkit/rails/walker.rb', line 80 def find_namespace(ast, name) walk(ast) do |ast, node| if node == :method_add_block flat_ast = ast[1].flatten if flat_ast.include?('namespace') && flat_ast.include?(name) yield(ast) end end end end |
#find_version_namespace(ast, version) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/ember/appkit/rails/walker.rb', line 68 def find_version_namespace(ast, version) find_namespace(ast, "v#{version}") do |ast| @write_to = [:version, ast[1][1][2][0]] # found the first instance of the namespace # immediately short-circuit return end @write_to end |
#run ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/ember/appkit/rails/walker.rb', line 13 def run find_api_namespace(@ast) output = nil line_number = @lines.index { |line| line =~ /routes\.draw do/ } if @write_to if @write_to.first == :version output = write_resource else output = write_version_namespace do write_resource end end line_number = @write_to.last - 1 else output = write_api_namespace do write_version_namespace do write_resource end end end @lines.insert(line_number + 1, output) @file.rewind @file.write(@lines.join("\n")) @file.close end |
#walk(ast, &block) ⇒ Object
91 92 93 94 95 96 97 98 |
# File 'lib/ember/appkit/rails/walker.rb', line 91 def walk(ast, &block) if ast.is_a?(Array) ast.each do |node| yield(ast, node) walk(node, &block) end end end |
#write_api_namespace ⇒ Object
42 43 44 |
# File 'lib/ember/appkit/rails/walker.rb', line 42 def write_api_namespace " namespace :api do\n#{yield}\n end" end |
#write_resource ⇒ Object
50 51 52 |
# File 'lib/ember/appkit/rails/walker.rb', line 50 def write_resource " resources :#{@resource}, except: [:new, :edit]" end |
#write_version_namespace ⇒ Object
46 47 48 |
# File 'lib/ember/appkit/rails/walker.rb', line 46 def write_version_namespace " namespace :v#{@api_version} do\n#{yield}\n end" end |