class DeRjs::Rewriter::Erbify

Public Instance Methods

on_send(node) click to toggle source
# File lib/de_rjs/rewriter/erbify.rb, line 6
def on_send(node)
  rewrite_page_calls(node)
end
rewrite_page_calls(node) click to toggle source
# File lib/de_rjs/rewriter/erbify.rb, line 10
def rewrite_page_calls(node)
  receiver_node, method_name, *arg_nodes = *node

  if receiver_node.to_a.last == :page
    case method_name
    when :replace_html, :replace
      rewrite_replace_html(receiver_node, method_name, *arg_nodes)

    when :insert_html
      rewrite_insert_html(receiver_node, method_name, *arg_nodes)

    when :redirect_to
      rewrite_redirect_to(receiver_node, method_name, *arg_nodes)

    when :visual_effect
      rewrite_visual_effect(receiver_node, method_name, *arg_nodes)

    when :[]
      rewrite_square_bracket(receiver_node, method_name, *arg_nodes)

    else
      # All others such as :
      # page.alert
      # page.hide
      # page.redirect_to
      # page.reload
      # page.replace
      # page.select
      # page.show
      rewrite_all_args(receiver_node, method_name, *arg_nodes)
    end
  end

  # page[:html_id].some_method
  if receiver_node.to_a.first.to_a.last == :page && receiver_node.to_a[1] == :[]
    rewrite_square_bracket(*receiver_node.to_a)
    rewrite_square_replace(receiver_node, method_name, *arg_nodes) if [:replace, :replace_html].include?(method_name)
  end
end

Protected Instance Methods

is_dom_id_call?(arg_node) click to toggle source
# File lib/de_rjs/rewriter/erbify.rb, line 105
def is_dom_id_call?(arg_node)
  array = arg_node.to_a
  array[0..1] == [nil, :dom_id] #&& array.size == 3
end
rewrite_all_args(receiver_node, method_name, *arg_nodes) click to toggle source
# File lib/de_rjs/rewriter/erbify.rb, line 56
def rewrite_all_args(receiver_node, method_name, *arg_nodes)
  arg_nodes.each {|arg_node| rewrite_to_erb_unless_static(arg_node) }
end
rewrite_dom_id(id_arg) click to toggle source
# File lib/de_rjs/rewriter/erbify.rb, line 94
def rewrite_dom_id(id_arg)
  return if [:str, :sym].include?(id_arg.type)
  if id_arg.type == :dstr || is_dom_id_call?(id_arg)
    insert_before id_arg.loc.expression, "%q{<%= "
    insert_after  id_arg.loc.expression, " %>}"
  else
    insert_before id_arg.loc.expression, "%q{<%= dom_id_or_string("
    insert_after  id_arg.loc.expression, ") %>}"
  end
end
rewrite_insert_html(receiver_node, method_name, *arg_nodes) click to toggle source

position, id, *options_for_render

# File lib/de_rjs/rewriter/erbify.rb, line 67
def rewrite_insert_html(receiver_node, method_name, *arg_nodes)
  rewrite_to_erb_unless_static(arg_nodes.shift)
  rewrite_to_erb_unless_static(arg_nodes.shift)
  rewrite_options_for_render(arg_nodes)
end
rewrite_options_for_render(arg_nodes) click to toggle source

if Hash, render else assume it's a string

# File lib/de_rjs/rewriter/erbify.rb, line 112
def rewrite_options_for_render(arg_nodes)
  return if arg_nodes.size == 1 && arg_nodes.first.type == :str
  if arg_nodes.first.type == :hash
    insert_before arg_nodes.first.loc.expression, "%q{<%= escape_javascript(render("
    insert_after  arg_nodes.last.loc.expression, ")) %>}"
  else
    insert_before arg_nodes.first.loc.expression, "%q{<%= escape_javascript("
    insert_after  arg_nodes.last.loc.expression, ") %>}"
  end
end
rewrite_redirect_to(receiver_node, method_name, *arg_nodes) click to toggle source

location (string, or url_for compatible options)

# File lib/de_rjs/rewriter/erbify.rb, line 74
def rewrite_redirect_to(receiver_node, method_name, *arg_nodes)
  rewrite_url_for(arg_nodes.first)
end
rewrite_replace_html(receiver_node, method_name, *arg_nodes) click to toggle source

id, *options_for_render

# File lib/de_rjs/rewriter/erbify.rb, line 61
def rewrite_replace_html(receiver_node, method_name, *arg_nodes)
  rewrite_to_erb_unless_static(arg_nodes.shift)
  rewrite_options_for_render(arg_nodes)
end
rewrite_square_bracket(receiver_node, method_name, *arg_nodes) click to toggle source

e.g. page or page

# File lib/de_rjs/rewriter/erbify.rb, line 79
def rewrite_square_bracket(receiver_node, method_name, *arg_nodes)
  rewrite_dom_id(arg_nodes.shift)
end
rewrite_square_replace(receiver_node, method_name, *arg_nodes) click to toggle source

*options_for_render

# File lib/de_rjs/rewriter/erbify.rb, line 84
def rewrite_square_replace(receiver_node, method_name, *arg_nodes)
  rewrite_options_for_render(arg_nodes)
end
rewrite_to_erb_unless_static(id_arg) click to toggle source
# File lib/de_rjs/rewriter/erbify.rb, line 88
def rewrite_to_erb_unless_static(id_arg)
  return if [:str, :sym].include?(id_arg.type)
  insert_before id_arg.loc.expression, "%q{<%= "
  insert_after  id_arg.loc.expression, " %>}"
end
rewrite_url_for(url_arg) click to toggle source
# File lib/de_rjs/rewriter/erbify.rb, line 123
def rewrite_url_for(url_arg)
  return if url_arg.type == :str
  insert_before url_arg.loc.expression, "%q{<%= url_for("
  insert_after  url_arg.loc.expression, ") %>}"
end
rewrite_visual_effect(receiver_node, method_name, *arg_nodes) click to toggle source

name, id=nil, options

# File lib/de_rjs/rewriter/erbify.rb, line 52
def rewrite_visual_effect(receiver_node, method_name, *arg_nodes)
  rewrite_to_erb_unless_static(arg_nodes[1]) if arg_nodes[1]
end