From e05a88d340fa2d10e5b97a0fa3782b7d7ea79bb9 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Fri, 30 Nov 2012 21:44:02 -0500 Subject: [PATCH 1/5] more cool stuff --- lib/semantic_rails_view_helpers/capybara.rb | 31 ++++++++++++++++++- .../view_helpers.rb | 10 +++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/lib/semantic_rails_view_helpers/capybara.rb b/lib/semantic_rails_view_helpers/capybara.rb index e5f52c5..028457b 100644 --- a/lib/semantic_rails_view_helpers/capybara.rb +++ b/lib/semantic_rails_view_helpers/capybara.rb @@ -67,5 +67,34 @@ def dont_find_object(object) end def find_object(object) - find("[data-id='#{object.id}']") + find(object_matcher(object)) +end + +def within_object(object, &block) + within(object_matcher(object), &block) +end + +def object_matcher(object) + "[data-id='#{object.id}'][data-type='#{object.class}']" +end + +def within_object_of_type(klass, &block) + within("[data-type='#{klass}']", &block) +end + +def within_any(search, &block) + case search + when Class + search = "[data-type='#{search}']" + end + + all(search).each_with_index do |node, index| + begin + within("#{search}:eq(#{index + 1})", &block) + return true + rescue RSpec::Expectations::ExpectationNotMetError + end + end + + false end diff --git a/lib/semantic_rails_view_helpers/view_helpers.rb b/lib/semantic_rails_view_helpers/view_helpers.rb index 7c68702..cd860d9 100644 --- a/lib/semantic_rails_view_helpers/view_helpers.rb +++ b/lib/semantic_rails_view_helpers/view_helpers.rb @@ -42,7 +42,15 @@ module SemanticRailsViewHelpers end def li_for(object, options = {}, &block) - content_tag(:li, capture(&block), options.merge('data-id' => object.id)) + type = begin + if object.respond_to?(:model) + object.model.class + else + object.class + end + end + + content_tag(:li, capture(&block), options.merge('data-type' => type, 'data-id' => object.id)) end end end From 5fb8609dfedacf98666f6b3d2fd955ac40fffadb Mon Sep 17 00:00:00 2001 From: John Bintz Date: Sat, 1 Dec 2012 12:16:14 -0500 Subject: [PATCH 2/5] more coolness --- lib/semantic_rails_view_helpers/capybara.rb | 7 +++++++ lib/semantic_rails_view_helpers/view_helpers.rb | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/lib/semantic_rails_view_helpers/capybara.rb b/lib/semantic_rails_view_helpers/capybara.rb index 028457b..b809bf5 100644 --- a/lib/semantic_rails_view_helpers/capybara.rb +++ b/lib/semantic_rails_view_helpers/capybara.rb @@ -8,6 +8,12 @@ def find_attribute(name, value = nil) attribute end +def has_attribute?(name, value) + attribute = find_attribute(name) + + attribute.text == value +end + def find_input(name) find("[name$='[#{name}]']") end @@ -98,3 +104,4 @@ def within_any(search, &block) false end + diff --git a/lib/semantic_rails_view_helpers/view_helpers.rb b/lib/semantic_rails_view_helpers/view_helpers.rb index cd860d9..fb20a61 100644 --- a/lib/semantic_rails_view_helpers/view_helpers.rb +++ b/lib/semantic_rails_view_helpers/view_helpers.rb @@ -33,6 +33,10 @@ module SemanticRailsViewHelpers action = nil end + if action == :show + action = nil + end + options = Hash[options.collect { |k, v| [ k, CGI.escapeHTML(v.to_s) ] }] route = model From 7192c46c1bdaa3b36c3895ba11368d3fbd97199a Mon Sep 17 00:00:00 2001 From: John Bintz Date: Sun, 2 Dec 2012 19:18:35 -0500 Subject: [PATCH 3/5] more capybara stuff --- lib/semantic_rails_view_helpers/capybara.rb | 22 ++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/semantic_rails_view_helpers/capybara.rb b/lib/semantic_rails_view_helpers/capybara.rb index b809bf5..ecb0bb6 100644 --- a/lib/semantic_rails_view_helpers/capybara.rb +++ b/lib/semantic_rails_view_helpers/capybara.rb @@ -8,6 +8,12 @@ def find_attribute(name, value = nil) attribute end +def dont_find_attribute(name, value = nil, &block) + dont_find_wrap("attribute #{name}") do + find_attribute(name, value, &block) + end +end + def has_attribute?(name, value) attribute = find_attribute(name) @@ -28,7 +34,11 @@ def set_input(name, value) case input.tag_name.downcase when 'select' - input.find("option[value='#{value}']").select_option + begin + input.find("option[value='#{value}']").select_option + rescue Capybara::ElementNotFound + input.find("option[text()='#{value}']").select_option + end else input.set(value) end @@ -60,14 +70,20 @@ module Capybara end end -def dont_find(search) - find(search) +def dont_find_wrap(search) + yield raise Capybara::ElementFound.new(search) rescue Capybara::ElementNotFound true end +def dont_find(search) + dont_find_wrap(search) do + find(search) + end +end + def dont_find_object(object) dont_find("[data-id='#{object.id}']") end From 06e59c26fd21b1740795de2eaef52c89221aba24 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Wed, 5 Dec 2012 21:22:40 -0500 Subject: [PATCH 4/5] add object refinder --- lib/semantic_rails_view_helpers/capybara.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/semantic_rails_view_helpers/capybara.rb b/lib/semantic_rails_view_helpers/capybara.rb index ecb0bb6..9a623dd 100644 --- a/lib/semantic_rails_view_helpers/capybara.rb +++ b/lib/semantic_rails_view_helpers/capybara.rb @@ -121,3 +121,6 @@ def within_any(search, &block) false end +def refind_object(object) + object.class.find(object.id) +end From d0c101f03208dd5f4c0f3b527b42463ca827eab5 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Thu, 6 Dec 2012 08:11:14 -0500 Subject: [PATCH 5/5] another object finder --- lib/semantic_rails_view_helpers/capybara.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/semantic_rails_view_helpers/capybara.rb b/lib/semantic_rails_view_helpers/capybara.rb index 9a623dd..c2507ed 100644 --- a/lib/semantic_rails_view_helpers/capybara.rb +++ b/lib/semantic_rails_view_helpers/capybara.rb @@ -85,7 +85,12 @@ def dont_find(search) end def dont_find_object(object) - dont_find("[data-id='#{object.id}']") + case object + when Class + dont_find("[data-type='#{object}']") + else + dont_find("[data-id='#{object.id}']") + end end def find_object(object)