diff --git a/lib/semantic_rails_view_helpers/capybara.rb b/lib/semantic_rails_view_helpers/capybara.rb index c2507ed..050eee5 100644 --- a/lib/semantic_rails_view_helpers/capybara.rb +++ b/lib/semantic_rails_view_helpers/capybara.rb @@ -58,6 +58,10 @@ def find_action(action) find("[data-action='#{action}']") end +def find_object_action(object, action) + find("[data-type='#{object}'][data-action='#{action}']") +end + module Capybara class ElementFound < StandardError def initialize(search) @@ -115,11 +119,15 @@ def within_any(search, &block) search = "[data-type='#{search}']" end - all(search).each_with_index do |node, index| + nodes = all(search) + + raise Capybara::ElementNotFound if nodes.empty? + + nodes.each_with_index do |node, index| begin within("#{search}:eq(#{index + 1})", &block) return true - rescue RSpec::Expectations::ExpectationNotMetError + rescue RSpec::Expectations::ExpectationNotMetError, Capybara::ElementNotFound end end diff --git a/lib/semantic_rails_view_helpers/view_helpers.rb b/lib/semantic_rails_view_helpers/view_helpers.rb index a15fa9b..a7d9d6e 100644 --- a/lib/semantic_rails_view_helpers/view_helpers.rb +++ b/lib/semantic_rails_view_helpers/view_helpers.rb @@ -36,7 +36,7 @@ module SemanticRailsViewHelpers def link_to_model_action(model, action = :show, options = {}) target_action = action - label = options.delete(:label) || t(".#{action}") + label = options.delete(:label) || t(".#{model.class.name.underscore}.#{action}") if action == :destroy options = options.merge(:method => :delete, 'data-skip-pjax' => 'true') @@ -52,7 +52,7 @@ module SemanticRailsViewHelpers route = model route = route.to_route if route.respond_to?(:to_route) - link_to label, polymorphic_url(route, :action => action), options.merge(semantic_action_data(target_action)) + link_to label, polymorphic_url(route, :action => action), options.merge(semantic_action_data(target_action).merge(semantic_model_data(model))) end def li_for(object, options = {}, &block)