module ShouldaMatchmakers::Controller::ActionController::Matchmaker::RenderTemplate
Public Instance Methods
render_template_matcher_tests()
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 8 def render_template_matcher_tests render_template_occurrences = get_render_template_occurrences(@app_controller_name) if render_template_occurrences.present? generate_render_template_matcher_tests(render_template_occurrences) else [] end end
Private Instance Methods
compose_render_template_occurrence_hashes(app_controller_name, view_action, view_action_render_occurrences)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 68 def compose_render_template_occurrence_hashes(app_controller_name, view_action, view_action_render_occurrences) render_template_occurrence_hashes = [] app_controller_routes_controller = compose_route_controller(app_controller_name) view_action_routes = get_app_controller_routes_by_action(app_controller_routes_controller, view_action) view_action_routes.each do |view_action_route| view_action_http_method = get_route_http_method(view_action_route) render_template_occurrence_hashes << { view_action: view_action, view_action_http_method: view_action_http_method, view_action_render_occurrences: view_action_render_occurrences } end render_template_occurrence_hashes end
compose_view_action_render_occurrence_hash(app_views_path, view_file_path, view_file_line)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 58 def compose_view_action_render_occurrence_hash(app_views_path, view_file_path, view_file_line) render_view_type, render_view_path = view_file_line.match(/(?:\s+render|=render)(\s+action:\s+|\s+:action\s+=\>\s+|\s+file:\s+|\s+:file\s+=\>\s+|\s+partial:\s+|\s+:partial\s+=\>\s+|\s+template:\s+|\s+:template\s+=\>\s+|\s+)["':]([A-Za-z0-9_\/\.]+)/).captures if render_view_type.present? render_view_type = render_view_type.gsub(/\s+/,"").gsub(":", "").gsub("=>","") else render_view_type = get_render_view_type(app_views_path, view_file_path, render_view_path) end { render_view_type: render_view_type, render_view: render_view_path } end
generate_render_template_matcher_tests(render_template_occurrences)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 79 def generate_render_template_matcher_tests(render_template_occurrences) render_template_tests = [] render_template_occurrences.sort_by!{ |rto| [rto[:view_action], rto[:view_action_http_method]] } render_template_occurrences.each do |render_template_occurrence| render_template_test = generate_render_template_test_initial(render_template_occurrence) render_template_occurrence[:view_action_render_occurrences].sort_by!{ |varo| [varo[:render_view_type], varo[:render_view]] } render_template_occurrence[:view_action_render_occurrences].each do |view_action_render_occurrence| view_action_render_occurrence_test = generate_view_action_render_occurrence_test(view_action_render_occurrence) render_template_test.concat(view_action_render_occurrence_test) end render_template_test.concat(" end") render_template_tests = append_element(render_template_test, render_template_tests) end format_tests(render_template_tests) end
generate_render_template_test_initial(render_template_occurrence)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 95 def generate_render_template_test_initial(render_template_occurrence) render_template_test = " describe '#{ render_template_occurrence[:view_action_http_method] } ##{ render_template_occurrence[:view_action] }' do\n" render_template_test.concat(" before { #{ render_template_occurrence[:view_action_http_method].downcase } :#{ render_template_occurrence[:view_action] } }\n\n") render_template_test.concat(" it { is_expected.to render_template('#{ render_template_occurrence[:view_action] }') }\n") end
generate_view_action_render_occurrence_test(view_action_render_occurrence)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 101 def generate_view_action_render_occurrence_test(view_action_render_occurrence) if view_action_render_occurrence[:render_view_type] == "partial" && view_action_render_occurrence[:render_view].include?("/") || view_action_render_occurrence[:render_view_type] == "file" view_action_render_occurrence_test = " it { is_expected.to render_template(#{ view_action_render_occurrence[:render_view_type] }: '" elsif view_action_render_occurrence[:render_view_type] == "partial" view_action_render_occurrence_test = " it { is_expected.to render_template(#{ view_action_render_occurrence[:render_view_type] }: '_" elsif view_action_render_occurrence[:render_view_type] == "unknown" view_action_render_occurrence_test = " # Unknown view type. Remove 'x' from 'xit' once view type identified (e.g. 'partial:', 'file:', etc.)\n" view_action_render_occurrence_test.concat(" xit { is_expected.to render_template('") else view_action_render_occurrence_test = " it { is_expected.to render_template('" end view_action_render_occurrence_test.concat("#{ view_action_render_occurrence[:render_view] }') }\n") end
get_controller_name_from_view_directory_path(view_directory_path, app_views_path)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 190 def get_controller_name_from_view_directory_path(view_directory_path, app_views_path) view_directory_path.sub(app_views_path, "").sub(/\/$/,"").concat("_controller").camelize end
get_external_render_view_and_directory(render_view_path)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 137 def get_external_render_view_and_directory(render_view_path) render_view_directory = get_view_directory_from_path(render_view_path) render_view = get_view_from_path(render_view_path) { directory: render_view_directory, view: render_view } end
get_internal_render_view_and_directory(app_views_path, view_file_path, render_view_path)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 126 def get_internal_render_view_and_directory(app_views_path, view_file_path, render_view_path) if render_view_path.include?("/") render_view_directory = get_view_directory_prepended(render_view_path,app_views_path) render_view = get_view_from_path(render_view_path).sub(/^\s*_/,"") else render_view_directory = get_view_directory_from_path(view_file_path) render_view = render_view_path.sub(/^\s*_/,"") end { directory: render_view_directory, view: render_view } end
get_render_template_occurrences(app_controller_name)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 20 def get_render_template_occurrences(app_controller_name) render_template_occurrences = [] app_views_path = Rails.root.join("app", "views").to_s + "/" app_controller_views_path = app_views_path + app_controller_name.underscore.sub(/_controller$/, "/") %w(erb haml slim).each do |view_file_format| render_template_occurrences = render_template_occurrences + get_render_template_occurrences_by_file_type(app_controller_name, app_views_path, app_controller_views_path, view_file_format) end render_template_occurrences end
get_render_template_occurrences_by_file_type(app_controller_name, app_views_path, app_controller_views_path, view_file_format)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 30 def get_render_template_occurrences_by_file_type(app_controller_name, app_views_path, app_controller_views_path, view_file_format) render_template_occurrences_by_file_type = [] Dir.glob(app_controller_views_path + "**/*.html." + view_file_format) do |view_file_path| view_action_render_occurrences = parse_controller_for_view_action_render_occurrences(view_file_path, app_views_path) if view_action_render_occurrences.present? view_action = get_view_from_path(view_file_path).sub(".html." + view_file_format, "") if containing_method_is_action(app_controller_name, view_action) render_template_occurrence_hashes = compose_render_template_occurrence_hashes(app_controller_name, view_action, view_action_render_occurrences) render_template_occurrences_by_file_type = render_template_occurrences_by_file_type + render_template_occurrence_hashes end end end render_template_occurrences_by_file_type end
get_render_view_type(app_views_path, view_file_path, render_view_path)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 116 def get_render_view_type(app_views_path, view_file_path, render_view_path) render_view_and_directory = get_internal_render_view_and_directory(app_views_path, view_file_path, render_view_path) render_view_type = identify_internal_render_view_type(render_view_and_directory, app_views_path) if render_view_type == "unknown" && render_view_path.include?("/") render_view_and_directory = get_external_render_view_and_directory(render_view_path) render_view_type = identify_external_render_view_type(render_view_and_directory) end render_view_type end
get_view_directory_from_path(view_path)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 147 def get_view_directory_from_path(view_path) view_path.sub(/\/[a-zA-z0-9.]+$/,"/") end
get_view_directory_prepended(view_path, prepend_path)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 151 def get_view_directory_prepended(view_path, prepend_path) view_path.sub(/\/[a-zA-z0-9.]+$/,"/").prepend(prepend_path) end
get_view_from_path(view_path)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 143 def get_view_from_path(view_path) view_path.scan(/\/([a-zA-z0-9.]+)$/).last.first end
identify_external_render_view_type(render_view_and_directory)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 170 def identify_external_render_view_type(render_view_and_directory) render_view_type = "unknown" if view_partial_exist(render_view_and_directory) || view_exist(render_view_and_directory) render_view_type = "file" end render_view_type end
identify_internal_render_view_type(render_view_and_directory, app_views_path)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 155 def identify_internal_render_view_type(render_view_and_directory, app_views_path) render_view_type = "unknown" if view_partial_exist(render_view_and_directory) render_view_type = "partial" elsif view_exist(render_view_and_directory) render_view_controller_name = get_controller_name_from_view_directory_path(render_view_and_directory[:directory], app_views_path) if render_view_controller_name.present? && containing_method_is_action(render_view_controller_name, render_view_and_directory[:view]) render_view_type = "action" else render_view_type = "template" end end render_view_type end
parse_controller_for_view_action_render_occurrences(view_file_path, app_views_path)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 45 def parse_controller_for_view_action_render_occurrences(view_file_path, app_views_path) view_action_render_occurrences = [] File.open(view_file_path, 'r') do |view_file| view_file.each_line do |view_file_line| if view_file_line =~ /(?:\s+render|=render)(?:\s+action:\s+|\s+:action\s+=\>\s+|\s+file:\s+|\s+:file\s+=\>\s+|\s+partial:\s+|\s+:partial\s+=\>\s+|\s+template:\s+|\s+:template\s+=\>\s+|\s+)["':][A-Za-z0-9_\/\.]+"*'*\s*$/ view_action_render_occurrence = compose_view_action_render_occurrence_hash(app_views_path, view_file_path, view_file_line) view_action_render_occurrences = append_element(view_action_render_occurrence, view_action_render_occurrences) end end end view_action_render_occurrences end
view_exist(render_view_and_directory)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 178 def view_exist(render_view_and_directory) File.exist?(render_view_and_directory[:directory] + render_view_and_directory[:view] + ".html.erb") || File.exist?(render_view_and_directory[:directory] + render_view_and_directory[:view] + ".html.haml") || File.exist?(render_view_and_directory[:directory] + render_view_and_directory[:view] + ".html.slim") end
view_partial_exist(render_view_and_directory)
click to toggle source
# File lib/controller/action_controller/matchmakers/render_template.rb, line 184 def view_partial_exist(render_view_and_directory) File.exist?(render_view_and_directory[:directory] + "_" + render_view_and_directory[:view] + ".html.erb") || File.exist?(render_view_and_directory[:directory] + "_" + render_view_and_directory[:view] + ".html.haml") || File.exist?(render_view_and_directory[:directory] + "_" + render_view_and_directory[:view] + ".html.slim") end