seanhussey-woulda 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
5
5
 
6
6
  spec = Gem::Specification.new do |s|
7
7
  s.name = "woulda"
8
- s.version = "0.1.4"
8
+ s.version = "0.1.5"
9
9
  s.summary = "woulda is a home for shoulda macros that don't belong in the main shoulda library"
10
10
  s.homepage = "http://github.com/seanhussey/woulda"
11
11
  s.rubyforge_project = "woulda"
@@ -33,3 +33,11 @@ task :gemspec do
33
33
  f.write spec.to_ruby
34
34
  end
35
35
  end
36
+
37
+ desc "Run all tests"
38
+ Rake::TestTask.new(:test) do |t|
39
+ t.pattern = 'test/**/*_test.rb'
40
+ t.verbose = true
41
+ end
42
+
43
+ task :default => :test
data/lib/woulda.rb CHANGED
@@ -1,10 +1,12 @@
1
- require 'woulda/acts_as_ferret' if defined? ActsAsFerret
2
- require 'woulda/acts_as_list' if defined? ActiveRecord::Acts::List
3
- require 'woulda/acts_as_paranoid' if defined? Caboose::Acts::Paranoid
4
- require 'woulda/acts_as_taggable_on_steroids' if defined? ActiveRecord::Acts::Taggable
5
- require 'woulda/attachment_fu' if defined? Technoweenie::AttachmentFu
6
- require 'woulda/enumerations_mixin' if defined? ActiveRecord::Acts::Enumerated
7
- require 'woulda/paperclip' if defined? Paperclip
8
- require 'woulda/will_paginate' if defined? WillPaginate
9
- require 'woulda/acts_as_solr' if defined? ActsAsSolr
10
- require 'woulda/acts_as_state_machine' if defined? ScottBarron::Acts::StateMachine
1
+ woulda_dir = File.expand_path(File.dirname(__FILE__)) + '/woulda'
2
+ require "#{woulda_dir}/should_raise"
3
+ require "#{woulda_dir}/acts_as_ferret" if defined? ActsAsFerret
4
+ require "#{woulda_dir}/acts_as_list" if defined? ActiveRecord::Acts::List
5
+ require "#{woulda_dir}/acts_as_paranoid" if defined? Caboose::Acts::Paranoid
6
+ require "#{woulda_dir}/acts_as_taggable_on_steroids" if defined? ActiveRecord::Acts::Taggable
7
+ require "#{woulda_dir}/attachment_fu" if defined? Technoweenie::AttachmentFu
8
+ require "#{woulda_dir}/enumerations_mixin" if defined? ActiveRecord::Acts::Enumerated
9
+ require "#{woulda_dir}/paperclip" if defined? Paperclip
10
+ require "#{woulda_dir}/will_paginate" if defined? WillPaginate
11
+ require "#{woulda_dir}/acts_as_solr" if defined? ActsAsSolr
12
+ require "#{woulda_dir}/acts_as_state_machine" if defined? ScottBarron::Acts::StateMachine
@@ -1,5 +1,5 @@
1
1
  require 'shoulda'
2
- require 'woulda/acts_as_ferret/macros'
2
+ require File.dirname(__FILE__) + '/acts_as_ferret/macros'
3
3
 
4
4
  Test::Unit::TestCase.class_eval do
5
5
  extend Woulda::ActsAsFerret::Macros
@@ -1,5 +1,5 @@
1
1
  require 'shoulda'
2
- require 'woulda/acts_as_list/macros'
2
+ require File.dirname(__FILE__) + '/acts_as_list/macros'
3
3
 
4
4
  Test::Unit::TestCase.class_eval do
5
5
  extend Woulda::ActsAsList::Macros
@@ -1,5 +1,5 @@
1
1
  require 'shoulda'
2
- require 'woulda/acts_as_paranoid/macros'
2
+ require File.dirname(__FILE__) + '/acts_as_paranoid/macros'
3
3
 
4
4
  Test::Unit::TestCase.class_eval do
5
5
  extend Woulda::ActsAsParanoid::Macros
@@ -1,5 +1,5 @@
1
1
  require 'shoulda'
2
- require 'woulda/acts_as_solr/macros'
2
+ require File.dirname(__FILE__) + '/acts_as_solr/macros'
3
3
 
4
4
  Test::Unit::TestCase.class_eval do
5
5
  extend Woulda::ActsAsSolr::Macros
@@ -1,24 +1,43 @@
1
1
  module Woulda
2
2
  module ActsAsSolr
3
3
  module Macros
4
- def self.should_act_as_solr(*included_associations)
4
+ def should_act_as_solr(opts={})
5
5
  klass = model_class
6
+
7
+ associations = get_options!([opts], :associations)
8
+
9
+ associations ||= []
6
10
 
7
11
  context "A #{klass.name}" do
8
- should "include the acts_as_solr modules" do
9
- assert klass.included_modules.include?(ActsAsSolr::ParserMethods)
10
- assert klass.included_modules.include?(ActsAsSolr::CommonMethods)
11
- assert klass.included_modules.include?(ActsAsSolr::InstanceMethods)
12
- end
13
-
14
- should "be extended by the acts_as_solr modules" do
15
- assert klass.extended_by.include?(ActsAsSolr::ClassMethods)
16
- assert klass.extended_by.include?(ActsAsSolr::ParserMethods)
17
- assert klass.extended_by.include?(ActsAsSolr::CommonMethods)
18
- assert klass.extended_by.include?(ActsAsSolr::PaginationExtension)
19
- end
12
+ # should "include the ActsAsSolr::ParserMethods module" do
13
+ # assert klass.included_modules.include?(ActsAsSolr::ParserMethods)
14
+ # end
15
+ #
16
+ # should "include the ActsAsSolr::CommonMethods module" do
17
+ # assert klass.included_modules.include?(ActsAsSolr::CommonMethods)
18
+ # end
19
+ #
20
+ # should "include the ActsAsSolr::InstanceMethods module" do
21
+ # assert klass.included_modules.include?(ActsAsSolr::InstanceMethods)
22
+ # end
23
+ #
24
+ # should "be extended by the ActsAsSolr::ClassMethods module" do
25
+ # assert klass.extended_by.include?(ActsAsSolr::ClassMethods)
26
+ # end
27
+ #
28
+ # should "be extended by the ActsAsSolr::ParserMethods module" do
29
+ # assert klass.extended_by.include?(ActsAsSolr::ParserMethods)
30
+ # end
31
+ #
32
+ # should "be extended by the ActsAsSolr::CommonMethods module" do
33
+ # assert klass.extended_by.include?(ActsAsSolr::CommonMethods)
34
+ # end
35
+ #
36
+ # should "be extended by the ActsAsSolr::PaginationExtension module" do
37
+ # assert klass.extended_by.include?(ActsAsSolr::PaginationExtension)
38
+ # end
20
39
 
21
- included_associations.each do |association|
40
+ associations.each do |association|
22
41
  should "include the #{association.to_s} association in solr indexing" do
23
42
  klass.configuration[:include].include?(association)
24
43
  end
@@ -27,4 +46,4 @@ module Woulda
27
46
  end
28
47
  end
29
48
  end
30
- end
49
+ end
@@ -1,5 +1,5 @@
1
1
  require 'shoulda'
2
- require 'woulda/acts_as_state_machine/macros'
2
+ require File.dirname(__FILE__) + '/acts_as_state_machine/macros'
3
3
 
4
4
  Test::Unit::TestCase.class_eval do
5
5
  extend Woulda::ActsAsStateMachine::Macros
@@ -69,12 +69,14 @@ module Woulda
69
69
  assert klass.transition_table.has_key?(event), "#{klass} does not define event #{event}"
70
70
  end
71
71
 
72
- to = transition[:to]
73
- from = transition[:from]
72
+ to = transition[:to]
73
+ from = transition[:from].is_a?(Symbol) ? [transition[:from]] : transition[:from]
74
74
 
75
- should "transition to #{to} from #{from} on event #{event}" do
76
- assert_not_nil klass.transition_table[event].detect { |t| t.to == to && t.from == from }, "#{event} does not transition to #{to} from #{from}"
77
- end
75
+ from.each do |from_state|
76
+ should "transition to #{to} from #{from_state} on event #{event}" do
77
+ assert_not_nil klass.transition_table[event].detect { |t| t.to == to && t.from == from_state }, "#{event} does not transition to #{to} from #{from_state}"
78
+ end
79
+ end
78
80
 
79
81
  end
80
82
  end
@@ -1,5 +1,5 @@
1
1
  require 'shoulda'
2
- require 'woulda/acts_as_taggable_on_steroids'
2
+ require File.dirname(__FILE__) + '/acts_as_taggable_on_steroids'
3
3
 
4
4
  Test::Unit::TestCase.class_eval do
5
5
  extend Woulda::ActsAsTaggableOnSteroids::Macros
@@ -1,5 +1,5 @@
1
1
  require 'shoulda'
2
- require 'woulda/attachment_fu/macros'
2
+ require File.dirname(__FILE__) + '/attachment_fu/macros'
3
3
 
4
4
  Test::Unit::TestCase.class_eval do
5
5
  extend Woulda::AttachmentFu::Macros
@@ -1,5 +1,5 @@
1
1
  require 'shoulda'
2
- require 'woulda/enumerations_mixin/macros'
2
+ require File.dirname(__FILE__) + '/enumerations_mixin/macros'
3
3
 
4
4
  Test::Unit::TestCase.class_eval do
5
5
  extend Woulda::EnumerationsMixin::Macros
@@ -1,6 +1,6 @@
1
1
  require 'shoulda'
2
- require 'woulda/paperclip/macros'
2
+ require File.dirname(__FILE__) + '/paperclip/macros'
3
3
 
4
- Tet::Unit::TestCase.class_eval do
4
+ Test::Unit::TestCase.class_eval do
5
5
  extend Woulda::Paperclip::Macros
6
6
  end
@@ -14,7 +14,7 @@ module Woulda
14
14
  should "have a paperclip attachment named ##{attachment}" do
15
15
  assert klass.new.respond_to?(attachment.to_sym),
16
16
  "@#{klass.name.underscore} doesn't have a paperclip field named #{attachment}"
17
- assert_equal Paperclip::Attachment, klass.new.send(attachment.to_sym).class
17
+ assert_equal ::Paperclip::Attachment, klass.new.send(attachment.to_sym).class
18
18
  end
19
19
  end
20
20
  end
@@ -0,0 +1,6 @@
1
+ require 'shoulda'
2
+ require File.dirname(__FILE__) + '/should_raise/macros'
3
+
4
+ Test::Unit::TestCase.class_eval do
5
+ extend Woulda::ShouldRaise::Macros
6
+ end
@@ -0,0 +1,102 @@
1
+ # Copyright (c) 2008 Mathieu Martin
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ # TODO
23
+ # - nest contexts/should differently so the message verifications don't clobber each other.
24
+ # Put exactly same message in last few tests for an example.
25
+
26
+ module Woulda
27
+ module ShouldRaise
28
+ module Macros
29
+ # Make sure a block raises an exception.
30
+ # Call with optional arguments :instance_of/:kind_of and :message
31
+ # If :instance_of or :kind_of is specified, assert on the given type.
32
+ # Otherwise only assert that an exception is raised.
33
+ # Note: The shorthand should_raise(LoadError) is equivalent to should_raise(:instance_of => LoadError)
34
+ # If :message is specified, will assert that exception.message =~ :message.
35
+ #
36
+ # Examples:
37
+ # should_raise {a block}
38
+ # should_raise(LoadError) {a block}
39
+ # should_raise(:instance_of => LoadError) {a block}
40
+ # should_raise(:kind_of => LoadError) {a block}
41
+ # should_raise(:message => "no such file to load") {a block}
42
+ # should_raise(:message => /load/) {a block}
43
+ # should_raise(LoadError, :message => /load/) {a block}
44
+ # should_raise(:kind_of => LoadError, :message => /load/) {a block}
45
+ # should_raise(:instance_of => LoadError, :message => /load/) {a block}
46
+ def should_raise(*args, &block)
47
+ opts = args.last.is_a?(Hash) ? args.pop : {}
48
+
49
+ if args.first.is_a?(Class)
50
+ type = args.first
51
+ exact = true
52
+ else
53
+ type = opts[:instance_of] || opts[:kind_of]
54
+ exact = !!opts[:instance_of]
55
+ end
56
+ message = opts[:message]
57
+
58
+ # Make sure we don't have a false sense of security and bork if incorrect options are supplied.
59
+ [:message, :instance_of, :kind_of].each { |acceptable_arg| opts.delete(acceptable_arg) }
60
+ raise ArgumentError, "Unknown parameter(s): #{opts.keys.inspect}. Only :message, :instance_of and :kind_of are supported." if opts.size > 0
61
+
62
+ context "block #{block.inspect}" do # To avoid dupe test names. Any other ideas?
63
+ should_string = "raise an exception"
64
+ should_string += " %s type #{type.inspect}" % (exact ? 'of' : 'descending from') if type
65
+
66
+ should should_string do
67
+ begin
68
+ yield
69
+ rescue Exception => ex
70
+ @raised_exception = ex
71
+ end
72
+ if @raised_exception && type
73
+ if exact
74
+ assert_instance_of type, @raised_exception
75
+ else
76
+ assert_kind_of type, @raised_exception
77
+ end
78
+ else
79
+ assert @raised_exception, "The block was expected to raise an exception, but didn't"
80
+ end
81
+ end
82
+ end
83
+
84
+ if message
85
+ context "raising an exception" do
86
+ setup do
87
+ begin
88
+ yield
89
+ rescue Exception => ex
90
+ @raised_exception = ex
91
+ end
92
+ end
93
+
94
+ should "contain a message that matches #{message.inspect}" do
95
+ assert_match message, @raised_exception.message
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seanhussey-woulda
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Hussey
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2008-10-10 00:00:00 -07:00
13
+ date: 2008-11-01 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -65,6 +65,9 @@ files:
65
65
  - lib/woulda/paperclip
66
66
  - lib/woulda/paperclip/macros.rb
67
67
  - lib/woulda/paperclip.rb
68
+ - lib/woulda/should_raise
69
+ - lib/woulda/should_raise/macros.rb
70
+ - lib/woulda/should_raise.rb
68
71
  - lib/woulda/will_paginate
69
72
  - lib/woulda/will_paginate/macros.rb
70
73
  - lib/woulda/will_paginate.rb