From b5854d3172cca480e2675285e69c840300c0c781 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonne=20Ha=C3=9F?= <me@mrzyx.de> Date: Mon, 6 Jan 2014 19:43:00 +0100 Subject: [PATCH] remove outer (deprecated) describe blocks from shared examples --- spec/shared_behaviors/account_deletion.rb | 65 +++-- spec/shared_behaviors/relayable.rb | 190 ++++++++------- spec/shared_behaviors/stream.rb | 78 +++--- spec/shared_behaviors/taggable.rb | 279 +++++++++++----------- 4 files changed, 301 insertions(+), 311 deletions(-) diff --git a/spec/shared_behaviors/account_deletion.rb b/spec/shared_behaviors/account_deletion.rb index d685432e61..50ecf251e7 100644 --- a/spec/shared_behaviors/account_deletion.rb +++ b/spec/shared_behaviors/account_deletion.rb @@ -4,39 +4,36 @@ require 'spec_helper' -describe 'deleteing your account' do - shared_examples_for 'it removes the person associations' do - it "removes all of the person's posts" do - Post.where(:author_id => @person.id).count.should == 0 - end - - it 'deletes all person contacts' do - Contact.where(:person_id => @person.id).should be_empty - end - - it 'deletes all mentions' do - @person.mentions.should be_empty - end - - it "removes all of the person's photos" do - Photo.where(:author_id => @person.id).should be_empty - end - - it 'sets the person object as closed and the profile is cleared' do - @person.reload.closed_account.should be_true - - @person.profile.reload.first_name.should be_blank - @person.profile.reload.last_name.should be_blank - end - - it 'deletes only the converersation visibility for the deleted user' do - ConversationVisibility.where(:person_id => alice.person.id).should_not be_empty - ConversationVisibility.where(:person_id => @person.id).should be_empty - end - - it "deletes the share visibilities on the person's posts" do - ShareVisibility.for_contacts_of_a_person(@person).should be_empty - end +shared_examples_for 'it removes the person associations' do + it "removes all of the person's posts" do + Post.where(:author_id => @person.id).count.should == 0 + end + + it 'deletes all person contacts' do + Contact.where(:person_id => @person.id).should be_empty + end + + it 'deletes all mentions' do + @person.mentions.should be_empty + end + + it "removes all of the person's photos" do + Photo.where(:author_id => @person.id).should be_empty end -end + it 'sets the person object as closed and the profile is cleared' do + @person.reload.closed_account.should be_true + + @person.profile.reload.first_name.should be_blank + @person.profile.reload.last_name.should be_blank + end + + it 'deletes only the converersation visibility for the deleted user' do + ConversationVisibility.where(:person_id => alice.person.id).should_not be_empty + ConversationVisibility.where(:person_id => @person.id).should be_empty + end + + it "deletes the share visibilities on the person's posts" do + ShareVisibility.for_contacts_of_a_person(@person).should be_empty + end +end diff --git a/spec/shared_behaviors/relayable.rb b/spec/shared_behaviors/relayable.rb index ed753e0031..1b3dc9766b 100644 --- a/spec/shared_behaviors/relayable.rb +++ b/spec/shared_behaviors/relayable.rb @@ -4,127 +4,125 @@ require 'spec_helper' -describe Diaspora::Relayable do - shared_examples_for "it is relayable" do - - describe 'interacted_at' do - it 'sets the interacted at of the parent to the created at of the relayable post' do - Timecop.freeze Time.now do - relayable = build_object - relayable.save - if relayable.parent.respond_to?(:interacted_at) #I'm sorry. - relayable.parent.interacted_at.to_i.should == relayable.created_at.to_i - end +shared_examples_for "it is relayable" do + + describe 'interacted_at' do + it 'sets the interacted at of the parent to the created at of the relayable post' do + Timecop.freeze Time.now do + relayable = build_object + relayable.save + if relayable.parent.respond_to?(:interacted_at) #I'm sorry. + relayable.parent.interacted_at.to_i.should == relayable.created_at.to_i end end end + end - describe 'validations' do - describe 'on :author_id' do - context "the author is on the parent object author's ignore list when object is created" do - before do - bob.blocks.create(:person => alice.person) - @relayable = build_object - end - - it "is invalid" do - @relayable.should_not be_valid - @relayable.should have(1).error_on(:author_id) - end - - it "sends a retraction for the object" do - pending 'need to figure out how to test this' - RelayableRetraction.should_receive(:build) - Postzord::Dispatcher.should_receive(:build) - @relayable.valid? - end - - it "works if the object has no parent" do # This can happen if we get a comment for a post that's been deleted - @relayable.parent = nil - expect { @relayable.valid? }.to_not raise_exception - end + describe 'validations' do + describe 'on :author_id' do + context "the author is on the parent object author's ignore list when object is created" do + before do + bob.blocks.create(:person => alice.person) + @relayable = build_object end - context "the author is added to the parent object author's ignore list later" do - it "is valid" do - relayable = build_object - relayable.save! - bob.blocks.create(:person => alice.person) - relayable.should be_valid - end + it "is invalid" do + @relayable.should_not be_valid + @relayable.should have(1).error_on(:author_id) end - end - end - context 'encryption' do - describe '#parent_author_signature' do - it 'should sign the object if the user is the post author' do - @object_by_parent_author.verify_parent_author_signature.should be_true + it "sends a retraction for the object" do + pending 'need to figure out how to test this' + RelayableRetraction.should_receive(:build) + Postzord::Dispatcher.should_receive(:build) + @relayable.valid? end - it 'does not sign as the parent author is not parent' do - @object_by_recipient.author_signature = @object_by_recipient.send(:sign_with_key, @local_leia.encryption_key) - @object_by_recipient.verify_parent_author_signature.should be_false + it "works if the object has no parent" do # This can happen if we get a comment for a post that's been deleted + @relayable.parent = nil + expect { @relayable.valid? }.to_not raise_exception end + end - it 'should verify a object made on a remote post by a different contact' do - @object_by_recipient.author_signature = @object_by_recipient.send(:sign_with_key, @local_leia.encryption_key) - @object_by_recipient.parent_author_signature = @object_by_recipient.send(:sign_with_key, @local_luke.encryption_key) - @object_by_recipient.verify_parent_author_signature.should be_true + context "the author is added to the parent object author's ignore list later" do + it "is valid" do + relayable = build_object + relayable.save! + bob.blocks.create(:person => alice.person) + relayable.should be_valid end end + end + end + + context 'encryption' do + describe '#parent_author_signature' do + it 'should sign the object if the user is the post author' do + @object_by_parent_author.verify_parent_author_signature.should be_true + end - describe '#author_signature' do - it 'should sign as the object author' do - @object_on_remote_parent.signature_valid?.should be_true - @object_by_parent_author.signature_valid?.should be_true - @object_by_recipient.signature_valid?.should be_true - end + it 'does not sign as the parent author is not parent' do + @object_by_recipient.author_signature = @object_by_recipient.send(:sign_with_key, @local_leia.encryption_key) + @object_by_recipient.verify_parent_author_signature.should be_false + end + + it 'should verify a object made on a remote post by a different contact' do + @object_by_recipient.author_signature = @object_by_recipient.send(:sign_with_key, @local_leia.encryption_key) + @object_by_recipient.parent_author_signature = @object_by_recipient.send(:sign_with_key, @local_luke.encryption_key) + @object_by_recipient.verify_parent_author_signature.should be_true end end - context 'propagation' do - describe '#receive' do - it 'does not overwrite a object that is already in the db' do - expect { - @dup_object_by_parent_author.receive(@local_leia, @local_luke.person) - }.to_not change { @dup_object_by_parent_author.class.count } - end + describe '#author_signature' do + it 'should sign as the object author' do + @object_on_remote_parent.signature_valid?.should be_true + @object_by_parent_author.signature_valid?.should be_true + @object_by_recipient.signature_valid?.should be_true + end + end + end - it 'does not process if post_creator_signature is invalid' do - @object_by_parent_author.delete # remove object from db so we set a creator sig - @dup_object_by_parent_author.parent_author_signature = "dsfadsfdsa" - @dup_object_by_parent_author.receive(@local_leia, @local_luke.person).should == nil - end + context 'propagation' do + describe '#receive' do + it 'does not overwrite a object that is already in the db' do + expect { + @dup_object_by_parent_author.receive(@local_leia, @local_luke.person) + }.to_not change { @dup_object_by_parent_author.class.count } + end - it 'signs when the person receiving is the parent author' do - @object_by_recipient.save - @object_by_recipient.receive(@local_luke, @local_leia.person) - @object_by_recipient.reload.parent_author_signature.should_not be_blank - end + it 'does not process if post_creator_signature is invalid' do + @object_by_parent_author.delete # remove object from db so we set a creator sig + @dup_object_by_parent_author.parent_author_signature = "dsfadsfdsa" + @dup_object_by_parent_author.receive(@local_leia, @local_luke.person).should == nil + end - it 'dispatches when the person receiving is the parent author' do - p = Postzord::Dispatcher.build(@local_luke, @object_by_recipient) - p.should_receive(:post) - p.class.stub(:new).and_return(p) - @object_by_recipient.receive(@local_luke, @local_leia.person) - end + it 'signs when the person receiving is the parent author' do + @object_by_recipient.save + @object_by_recipient.receive(@local_luke, @local_leia.person) + @object_by_recipient.reload.parent_author_signature.should_not be_blank + end - it 'calls after_receive callback' do - @object_by_recipient.should_receive(:after_receive) - @object_by_recipient.class.stub(:where).and_return([@object_by_recipient]) - @object_by_recipient.receive(@local_luke, @local_leia.person) - end + it 'dispatches when the person receiving is the parent author' do + p = Postzord::Dispatcher.build(@local_luke, @object_by_recipient) + p.should_receive(:post) + p.class.stub(:new).and_return(p) + @object_by_recipient.receive(@local_luke, @local_leia.person) end - describe '#subscribers' do - it 'returns the posts original audience, if the post is owned by the user' do - @object_by_parent_author.subscribers(@local_luke).map(&:id).should =~ [@local_leia.person, @remote_raphael].map(&:id) - end + it 'calls after_receive callback' do + @object_by_recipient.should_receive(:after_receive) + @object_by_recipient.class.stub(:where).and_return([@object_by_recipient]) + @object_by_recipient.receive(@local_luke, @local_leia.person) + end + end - it 'returns the owner of the original post, if the user owns the object' do - @object_by_recipient.subscribers(@local_leia).map(&:id).should =~ [@local_luke.person].map(&:id) - end + describe '#subscribers' do + it 'returns the posts original audience, if the post is owned by the user' do + @object_by_parent_author.subscribers(@local_luke).map(&:id).should =~ [@local_leia.person, @remote_raphael].map(&:id) + end + + it 'returns the owner of the original post, if the user owns the object' do + @object_by_recipient.subscribers(@local_leia).map(&:id).should =~ [@local_luke.person].map(&:id) end end end diff --git a/spec/shared_behaviors/stream.rb b/spec/shared_behaviors/stream.rb index 9ff20b3957..9207be34e2 100644 --- a/spec/shared_behaviors/stream.rb +++ b/spec/shared_behaviors/stream.rb @@ -1,45 +1,43 @@ require 'spec_helper' -describe 'Streams' do - shared_examples_for 'it is a stream' do - context 'required methods for display' do - it '#title' do - @stream.title.should_not be_nil - end - - it '#posts' do - @stream.posts.should_not be_nil - end - - it '#people' do - @stream.people.should_not be_nil - end - - it '#publisher_opts' do - @stream.send(:publisher_opts).should_not be_nil - end - - it 'has a #contacts title' do - @stream.contacts_title.should_not be_nil - end - - it 'has a contacts link' do - @stream.contacts_link.should_not be_nil - end - - it 'should make the stream a time object' do - @stream.max_time = 123 - @stream.max_time.should be_a(Time) - end - - it 'should always have an order (default created_at)' do - @stream.order=nil - @stream.order.should_not be_nil - end - - it 'initializes a publisher' do - @stream.publisher.should be_a(Publisher) - end +shared_examples_for 'it is a stream' do + context 'required methods for display' do + it '#title' do + @stream.title.should_not be_nil + end + + it '#posts' do + @stream.posts.should_not be_nil + end + + it '#people' do + @stream.people.should_not be_nil + end + + it '#publisher_opts' do + @stream.send(:publisher_opts).should_not be_nil + end + + it 'has a #contacts title' do + @stream.contacts_title.should_not be_nil + end + + it 'has a contacts link' do + @stream.contacts_link.should_not be_nil + end + + it 'should make the stream a time object' do + @stream.max_time = 123 + @stream.max_time.should be_a(Time) + end + + it 'should always have an order (default created_at)' do + @stream.order=nil + @stream.order.should_not be_nil + end + + it 'initializes a publisher' do + @stream.publisher.should be_a(Publisher) end end end diff --git a/spec/shared_behaviors/taggable.rb b/spec/shared_behaviors/taggable.rb index 1d7efcbc5c..339556bf2b 100644 --- a/spec/shared_behaviors/taggable.rb +++ b/spec/shared_behaviors/taggable.rb @@ -5,165 +5,162 @@ require 'spec_helper' -describe Diaspora::Taggable do - shared_examples_for "it is taggable" do - include ActionView::Helpers::UrlHelper +shared_examples_for "it is taggable" do + include ActionView::Helpers::UrlHelper - def tag_link(s) - link_to "##{s}", "/tags/#{s}", :class => 'tag' - end + def tag_link(s) + link_to "##{s}", "/tags/#{s}", :class => 'tag' + end - describe '.format_tags' do - before do - @str = '#what #hey #vöglein' - @object.send(@object.class.field_with_tags_setter, @str) - @object.build_tags - @object.save! - end + describe '.format_tags' do + before do + @str = '#what #hey #vöglein' + @object.send(@object.class.field_with_tags_setter, @str) + @object.build_tags + @object.save! + end - it "supports non-ascii characters" do - @object.tags(true).map(&:name).should include('vöglein') - end + it "supports non-ascii characters" do + @object.tags(true).map(&:name).should include('vöglein') + end - it 'links each tag' do - formatted_string = Diaspora::Taggable.format_tags(@str) - formatted_string.should include(tag_link('what')) - formatted_string.should include(tag_link('hey')) - formatted_string.should include(tag_link('vöglein')) - end + it 'links each tag' do + formatted_string = Diaspora::Taggable.format_tags(@str) + formatted_string.should include(tag_link('what')) + formatted_string.should include(tag_link('hey')) + formatted_string.should include(tag_link('vöglein')) + end - it 'responds to plain_text' do - Diaspora::Taggable.format_tags(@str, :plain_text => true).should == @str - end + it 'responds to plain_text' do + Diaspora::Taggable.format_tags(@str, :plain_text => true).should == @str + end - it "doesn't mangle text when tags are involved" do - expected = { - nil => '', - '' => '', - 'abc' => 'abc', - 'a #b c' => "a #{tag_link('b')} c", - '#' => '#', - '##' => '##', - '###' => '###', - '#a' => tag_link('a'), - '#foobar' => tag_link('foobar'), - '#foocar<br>' => "#{tag_link('foocar')}<br>", - '#fooo@oo' => "#{tag_link('fooo')}@oo", - '#num3ric hash tags' => "#{tag_link('num3ric')} hash tags", - '#12345 tag' => "#{tag_link('12345')} tag", - '#12cde tag' => "#{tag_link('12cde')} tag", - '#abc45 tag' => "#{tag_link('abc45')} tag", - '#<3' => %{<a href="/tags/<3" class="tag">#<3</a>}, - 'i #<3' => %{i <a href="/tags/<3" class="tag">#<3</a>}, - 'i #<3 you' => %{i <a href="/tags/<3" class="tag">#<3</a> you}, - '#<4' => '#<4', - 'test#foo test' => 'test#foo test', - 'test.#joo bar' => 'test.#joo bar', - 'test #foodar test' => "test #{tag_link('foodar')} test", - 'test #foofar<br> test' => "test #{tag_link('foofar')}<br> test", - 'test #gooo@oo test' => "test #{tag_link('gooo')}@oo test", - 'test #foo-test test' => "test #{tag_link('foo-test')} test", - 'test #hoo' => "test #{tag_link('hoo')}", - 'test #two_word tags' => "test #{tag_link('two_word')} tags", - 'test #three_word_tags' => "test #{tag_link('three_word_tags')}", - '#terminal_underscore_' => tag_link('terminal_underscore_'), - '#terminalunderscore_' => tag_link('terminalunderscore_'), - '#_initialunderscore' => tag_link('_initialunderscore'), - '#_initial_underscore' => tag_link('_initial_underscore'), - '#terminalhyphen-' => tag_link('terminalhyphen-'), - '#terminal-hyphen-' => tag_link('terminal-hyphen-'), - '#terminalhyphen- tag' => "#{tag_link('terminalhyphen-')} tag", - '#-initialhyphen' => tag_link('-initialhyphen'), - '#-initialhyphen tag' => "#{tag_link('-initialhyphen')} tag", - '#-initial-hyphen' => tag_link('-initial-hyphen'), - } - - expected.each do |input,output| - Diaspora::Taggable.format_tags(input).should == output - end + it "doesn't mangle text when tags are involved" do + expected = { + nil => '', + '' => '', + 'abc' => 'abc', + 'a #b c' => "a #{tag_link('b')} c", + '#' => '#', + '##' => '##', + '###' => '###', + '#a' => tag_link('a'), + '#foobar' => tag_link('foobar'), + '#foocar<br>' => "#{tag_link('foocar')}<br>", + '#fooo@oo' => "#{tag_link('fooo')}@oo", + '#num3ric hash tags' => "#{tag_link('num3ric')} hash tags", + '#12345 tag' => "#{tag_link('12345')} tag", + '#12cde tag' => "#{tag_link('12cde')} tag", + '#abc45 tag' => "#{tag_link('abc45')} tag", + '#<3' => %{<a href="/tags/<3" class="tag">#<3</a>}, + 'i #<3' => %{i <a href="/tags/<3" class="tag">#<3</a>}, + 'i #<3 you' => %{i <a href="/tags/<3" class="tag">#<3</a> you}, + '#<4' => '#<4', + 'test#foo test' => 'test#foo test', + 'test.#joo bar' => 'test.#joo bar', + 'test #foodar test' => "test #{tag_link('foodar')} test", + 'test #foofar<br> test' => "test #{tag_link('foofar')}<br> test", + 'test #gooo@oo test' => "test #{tag_link('gooo')}@oo test", + 'test #foo-test test' => "test #{tag_link('foo-test')} test", + 'test #hoo' => "test #{tag_link('hoo')}", + 'test #two_word tags' => "test #{tag_link('two_word')} tags", + 'test #three_word_tags' => "test #{tag_link('three_word_tags')}", + '#terminal_underscore_' => tag_link('terminal_underscore_'), + '#terminalunderscore_' => tag_link('terminalunderscore_'), + '#_initialunderscore' => tag_link('_initialunderscore'), + '#_initial_underscore' => tag_link('_initial_underscore'), + '#terminalhyphen-' => tag_link('terminalhyphen-'), + '#terminal-hyphen-' => tag_link('terminal-hyphen-'), + '#terminalhyphen- tag' => "#{tag_link('terminalhyphen-')} tag", + '#-initialhyphen' => tag_link('-initialhyphen'), + '#-initialhyphen tag' => "#{tag_link('-initialhyphen')} tag", + '#-initial-hyphen' => tag_link('-initial-hyphen'), + } + + expected.each do |input,output| + Diaspora::Taggable.format_tags(input).should == output end end + end - describe '#build_tags' do - it 'builds the tags' do - @object.send(@object.class.field_with_tags_setter, '#what') - @object.build_tags - @object.tag_list.should == ['what'] - lambda { - @object.save - }.should change{@object.tags.count}.by(1) - end + describe '#build_tags' do + it 'builds the tags' do + @object.send(@object.class.field_with_tags_setter, '#what') + @object.build_tags + @object.tag_list.should == ['what'] + lambda { + @object.save + }.should change{@object.tags.count}.by(1) end + end - describe '#tag_strings' do - it 'returns a string for every #thing' do - str = '#what #hey #that"smybike. #@hey ##boo # #THATWASMYBIKE #vöglein #hey#there #135440we #abc/23 ### #h!gh #ok? #see: #re:publica' - arr = ['what', 'hey', 'that', 'THATWASMYBIKE', 'vöglein', '135440we', 'abc', 'h', 'ok', 'see', 're'] + describe '#tag_strings' do + it 'returns a string for every #thing' do + str = '#what #hey #that"smybike. #@hey ##boo # #THATWASMYBIKE #vöglein #hey#there #135440we #abc/23 ### #h!gh #ok? #see: #re:publica' + arr = ['what', 'hey', 'that', 'THATWASMYBIKE', 'vöglein', '135440we', 'abc', 'h', 'ok', 'see', 're'] - @object.send(@object.class.field_with_tags_setter, str) - @object.tag_strings.should =~ arr - end + @object.send(@object.class.field_with_tags_setter, str) + @object.tag_strings.should =~ arr + end - it 'extracts tags despite surrounding text' do - expected = { - '' => nil, - '#' => nil, - '##' => nil, - '###' => nil, - '#a' => 'a', - '#foobar' => 'foobar', - '#foocar<br>' => 'foocar', - '#fooo@oo' => 'fooo', - '#num3ric hash tags' => 'num3ric', - '#12345 tag' => '12345', - '#12cde tag' => '12cde', - '#abc45 tag' => 'abc45', - '#<3' => '<3', - '#<4' => nil, - 'test#foo test' => nil, - 'test.#joo bar' => nil, - 'test #foodar test' => 'foodar', - 'test #foofar<br> test' => 'foofar', - 'test #gooo@oo test' => 'gooo', - 'test #<3 test' => '<3', - 'test #foo-test test' => 'foo-test', - 'test #hoo' => 'hoo', - 'test #two_word tags' => 'two_word', - 'test #three_word_tags' => 'three_word_tags', - '#terminal_underscore_' => 'terminal_underscore_', - '#terminalunderscore_' => 'terminalunderscore_', - '#_initialunderscore' => '_initialunderscore', - '#_initial_underscore' => '_initial_underscore', - '#terminalhyphen-' => 'terminalhyphen-', - '#terminal-hyphen-' => 'terminal-hyphen-', - '#terminalhyphen- tag' => 'terminalhyphen-', - '#-initialhyphen' => '-initialhyphen', - '#-initialhyphen tag' => '-initialhyphen', - '#-initial-hyphen' => '-initial-hyphen', - } - - expected.each do |text,hashtag| - @object.send @object.class.field_with_tags_setter, text - @object.tag_strings.should == [hashtag].compact - end + it 'extracts tags despite surrounding text' do + expected = { + '' => nil, + '#' => nil, + '##' => nil, + '###' => nil, + '#a' => 'a', + '#foobar' => 'foobar', + '#foocar<br>' => 'foocar', + '#fooo@oo' => 'fooo', + '#num3ric hash tags' => 'num3ric', + '#12345 tag' => '12345', + '#12cde tag' => '12cde', + '#abc45 tag' => 'abc45', + '#<3' => '<3', + '#<4' => nil, + 'test#foo test' => nil, + 'test.#joo bar' => nil, + 'test #foodar test' => 'foodar', + 'test #foofar<br> test' => 'foofar', + 'test #gooo@oo test' => 'gooo', + 'test #<3 test' => '<3', + 'test #foo-test test' => 'foo-test', + 'test #hoo' => 'hoo', + 'test #two_word tags' => 'two_word', + 'test #three_word_tags' => 'three_word_tags', + '#terminal_underscore_' => 'terminal_underscore_', + '#terminalunderscore_' => 'terminalunderscore_', + '#_initialunderscore' => '_initialunderscore', + '#_initial_underscore' => '_initial_underscore', + '#terminalhyphen-' => 'terminalhyphen-', + '#terminal-hyphen-' => 'terminal-hyphen-', + '#terminalhyphen- tag' => 'terminalhyphen-', + '#-initialhyphen' => '-initialhyphen', + '#-initialhyphen tag' => '-initialhyphen', + '#-initial-hyphen' => '-initial-hyphen', + } + + expected.each do |text,hashtag| + @object.send @object.class.field_with_tags_setter, text + @object.tag_strings.should == [hashtag].compact end + end - it 'returns no duplicates' do - str = '#what #what #what #whaaaaaaaaaat' - arr = ['what','whaaaaaaaaaat'] + it 'returns no duplicates' do + str = '#what #what #what #whaaaaaaaaaat' + arr = ['what','whaaaaaaaaaat'] - @object.send(@object.class.field_with_tags_setter, str) - @object.tag_strings.should =~ arr - end + @object.send(@object.class.field_with_tags_setter, str) + @object.tag_strings.should =~ arr + end - it 'is case insensitive' do - str = '#what #wHaT #WHAT' - arr = ['what'] + it 'is case insensitive' do + str = '#what #wHaT #WHAT' + arr = ['what'] - @object.send(@object.class.field_with_tags_setter, str) - @object.tag_strings.should =~ arr - end + @object.send(@object.class.field_with_tags_setter, str) + @object.tag_strings.should =~ arr end end end - -- GitLab