misfit 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,2 +1,6 @@
1
+ = 0.0.2
2
+ * Support for the way rspec instantiates errors in stubs
3
+ * Support for instantiation without error messages
4
+
1
5
  = 0.0.1
2
- * Initial Release
6
+ * Initial Release
data/MIT-LICENSE CHANGED
@@ -1,7 +1,7 @@
1
1
  Copyright 2012 Ian White
2
2
 
3
3
  This plugin was developed by Ian White (http://github.com/ianwhite)
4
- while working at Distinctive Doors (http://distinctivedoors.co.uk)
4
+ while working at Distinctive Doors (http://distinctivedoors.co.uk/oss)
5
5
  who have kindly agreed to release this under the MIT-LICENSE.
6
6
 
7
7
  Permission is hereby granted, free of charge, to any person obtaining
data/README.md CHANGED
@@ -1,14 +1,21 @@
1
- misfit
1
+ misfit [![Build Status](https://secure.travis-ci.org/i2w/misfit.png?branch=master)](http://travis-ci.org/i2w/misfit)
2
2
  ======
3
3
 
4
4
  Flexible approach to handling exceptions in ruby (for library writers, or consumers). Inspired by [Avdi Grim](http://avdi.org/)'s excellent book [Exceptional Ruby](http://exceptionalruby.com/).
5
5
 
6
- This was developed by [Ian White](http://github.com/ianwhite) while working at [Distinctive Doors](http://distinctivedoors.co.uk) who have kindly agreed to release this under the MIT-LICENSE.
6
+ This was developed by [Ian White](http://github.com/ianwhite) while working at [Distinctive Doors](http://distinctivedoors.co.uk/oss) who have kindly agreed to release this under the MIT-LICENSE.
7
7
 
8
8
  Misfit allows any module to act like a ruby exception class and gives the ability to decorate any standard ruby exception, optionally adding data.
9
9
 
10
10
  Misfit also provides a mechanism to change the error handling policy from raising to something else
11
11
 
12
+ Installation
13
+ ------------
14
+
15
+ In your Gemfile:
16
+
17
+ gem 'misfit'
18
+
12
19
  Why?
13
20
  ----
14
21
 
@@ -94,6 +101,17 @@ You can also optionally wrap and add data to any Error:
94
101
 
95
102
  `YourLib::Error.wrap &block` causes all raised exceptions to be wrapped as `YourLib::Error`
96
103
 
104
+ Development
105
+ -----------
106
+
107
+ To run the specs, you can start from the last known good set of gem dependencies in Gemfile.lock.development:
108
+
109
+ git clone http://github.com/i2w/misfit
110
+ cd misfit
111
+ cp Gemfile.lock.development Gemfile.lock
112
+ bundle
113
+ bundle exec rake spec
114
+
97
115
  Other Examples of use:
98
116
  ----------------------
99
117
 
@@ -127,4 +145,9 @@ Other Examples of use:
127
145
  end
128
146
 
129
147
  # the resulting error will be an IOError, extended with MyIOError, and MyError, and will be rescued as such
130
- raise MyIOError
148
+ raise MyIOError
149
+
150
+ License
151
+ -------
152
+
153
+ This project uses the MIT-LICENSE.
data/Rakefile CHANGED
@@ -20,8 +20,6 @@ RDoc::Task.new(:rdoc) do |rdoc|
20
20
  rdoc.rdoc_files.include('lib/**/*.rb')
21
21
  end
22
22
 
23
- Bundler::GemHelper.install_tasks
24
-
25
23
  require 'rspec/core/rake_task'
26
24
 
27
25
  RSpec::Core::RakeTask.new(:spec)
@@ -31,3 +29,14 @@ task :simplecov => [:simplecov_env, :spec]
31
29
  task :simplecov_env do ENV['SIMPLECOV'] = '1' end
32
30
 
33
31
  task :default => :spec
32
+
33
+ Bundler::GemHelper.install_tasks
34
+
35
+ task :release => :check_gemfile
36
+
37
+ task :check_gemfile do
38
+ if File.exists?("Gemfile.lock") && File.read("Gemfile.lock") != File.read("Gemfile.lock.development")
39
+ cp "Gemfile.lock", "Gemfile.lock.development"
40
+ raise "** Gemfile.lock.development has been updated, please commit these changes."
41
+ end
42
+ end
data/lib/misfit.rb CHANGED
@@ -3,15 +3,15 @@ require 'active_support/core_ext'
3
3
 
4
4
  module Misfit
5
5
  extend ActiveSupport::Concern
6
-
6
+
7
7
  included do inherit_from_misfit end
8
-
8
+
9
9
  def self.exception_class
10
10
  StandardError
11
11
  end
12
-
12
+
13
13
  attr_accessor :data
14
-
14
+
15
15
  module ClassMethods
16
16
  # when called with an exception, makes the exception a <self>
17
17
  # when called with a block, any exceptions raised in the block will be wrapped as <self>
@@ -22,20 +22,20 @@ module Misfit
22
22
  wrap_exception *args
23
23
  end
24
24
  end
25
-
26
- def new message, data = nil, *backtrace
25
+
26
+ def new message = nil, data = nil, *backtrace
27
27
  wrap_exception exception_class.exception(message, *backtrace), data
28
28
  end
29
-
30
- def exception message, *args
29
+
30
+ def exception message = nil, *args
31
31
  new message, nil, *args
32
32
  end
33
-
33
+
34
34
  def exception_class klass = nil
35
35
  @exception_class = klass if klass
36
36
  @exception_class
37
37
  end
38
-
38
+
39
39
  private
40
40
  def wrap_exception exception, data = nil
41
41
  exception.tap do |e|
@@ -43,13 +43,13 @@ module Misfit
43
43
  e.data = data if data
44
44
  end
45
45
  end
46
-
46
+
47
47
  def wrap_block
48
48
  yield
49
49
  rescue Exception => exception
50
50
  raise wrap_exception(exception)
51
51
  end
52
-
52
+
53
53
  # when an exception module is included, set up this module
54
54
  # as an exception module itself, and 'inherit' the exception_class
55
55
  def inherit_from_misfit
@@ -58,4 +58,9 @@ module Misfit
58
58
  included do inherit_from_misfit end
59
59
  end
60
60
  end
61
- end
61
+
62
+ # this is here solely because of the way rspec instantiates exception objects in stubs
63
+ def initialize *args
64
+ super
65
+ end
66
+ end
@@ -1,3 +1,3 @@
1
1
  module Misfit
2
- VERSION = '0.0.1'
3
- end
2
+ VERSION = '0.0.2'
3
+ end
data/spec/misfit_spec.rb CHANGED
@@ -9,21 +9,21 @@ module MisfitSpec
9
9
  module Error
10
10
  include Misfit
11
11
  end
12
-
12
+
13
13
  module FooError
14
14
  include Error
15
15
  exception_class RuntimeError
16
16
  end
17
-
17
+
18
18
  module FazError
19
19
  include FooError
20
20
  exception_class IOError
21
21
  end
22
-
22
+
23
23
  module BarError
24
24
  include FazError
25
25
  end
26
-
26
+
27
27
  describe Misfit do
28
28
  describe 'Error (includes Misfit)' do
29
29
  subject { exception_module }
@@ -33,27 +33,35 @@ module MisfitSpec
33
33
  let(:data) { 'exception data' }
34
34
 
35
35
  describe 'standard idioms' do
36
+ it 'raise <exception_module> should raise error with no message' do
37
+ expect { raise exception_module }.to raise_error(exception_module)
38
+ end
39
+
40
+ it 'exception_module.exception should return error with no message' do
41
+ exception_module.exception.should be_a(exception_module)
42
+ end
43
+
36
44
  describe 'raise <exception_module>, <message>' do
37
45
  subject { raise exception_module, message }
38
46
 
39
47
  it { expect{ subject }.to raise_error(StandardError, message) }
40
48
  it { expect{ subject }.to raise_error(exception_module, message) }
41
49
  end
42
-
50
+
43
51
  describe 'raise <exception_module>.new(<message>)' do
44
52
  subject { raise exception_module.new(message) }
45
53
 
46
54
  it { expect{ subject }.to raise_error(StandardError, message) }
47
55
  it { expect{ subject }.to raise_error(exception_module, message) }
48
56
  end
49
-
57
+
50
58
  describe 'raise <exception_module>.exception(<message>)' do
51
59
  subject { raise exception_module.exception(message) }
52
60
 
53
61
  it { expect{ subject }.to raise_error(StandardError, message) }
54
62
  it { expect{ subject }.to raise_error(exception_module, message) }
55
63
  end
56
-
64
+
57
65
  describe 'FooError (includes Error, exception_class RuntimeError)' do
58
66
  let(:exception_module) { FooError }
59
67
 
@@ -65,7 +73,7 @@ module MisfitSpec
65
73
  it { expect{ subject }.to raise_error(RuntimeError, message) }
66
74
  end
67
75
  end
68
-
76
+
69
77
  describe 'FazError (includes FooError, exception_class IOError)' do
70
78
  let(:exception_module) { FazError }
71
79
 
@@ -79,7 +87,7 @@ module MisfitSpec
79
87
  it { expect{ subject }.to raise_error(IOError, message) }
80
88
  end
81
89
  end
82
-
90
+
83
91
  describe 'BarError (includes FazError)' do
84
92
  let(:exception_module) { BarError }
85
93
 
@@ -93,12 +101,20 @@ module MisfitSpec
93
101
  it { expect{ subject }.to raise_error(IOError, message) }
94
102
  end
95
103
  end
104
+
105
+ describe "used in specs" do
106
+ it "should work with stubs" do
107
+ object = Object.new
108
+ object.stub(:foo).and_raise(Error)
109
+ expect { object.foo }.to raise_error(Error)
110
+ end
111
+ end
96
112
  end
97
-
113
+
98
114
  describe 'adding data' do
99
115
  describe 'raise <exception_module>.new <message>, <data>' do
100
116
  subject { raise exception_module.new(message, data) }
101
-
117
+
102
118
  it "should have data added to the exception" do
103
119
  begin
104
120
  subject
@@ -108,28 +124,28 @@ module MisfitSpec
108
124
  end
109
125
  end
110
126
  end
111
-
127
+
112
128
  describe '#wrap' do
113
129
  describe 'RuntimeError.new(<message>)' do
114
130
  subject { exception_module.wrap RuntimeError.new(message) }
115
-
131
+
116
132
  it { should be_a RuntimeError }
117
133
  it { should be_a exception_module }
118
134
  its(:message) { should == message }
119
135
  end
120
-
136
+
121
137
  describe 'RuntimeError.new(<message>), <exception data>' do
122
138
  subject { exception_module.wrap RuntimeError.new(message), data }
123
-
139
+
124
140
  it { should be_a RuntimeError }
125
141
  it { should be_a exception_module }
126
142
  its(:message) { should == message }
127
143
  its(:data) { should == data }
128
144
  end
129
-
145
+
130
146
  describe '{ some_error_ridden_code! }' do
131
147
  subject { exception_module.wrap do some_error_ridden_code! end }
132
-
148
+
133
149
  it { expect{ subject }.to raise_error(NoMethodError, /some_error_ridden_code!/) }
134
150
  it { expect{ subject }.to raise_error(exception_module, /some_error_ridden_code!/) }
135
151
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: misfit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-16 00:00:00.000000000 Z
12
+ date: 2012-06-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70193682798820 !ruby/object:Gem::Requirement
16
+ requirement: &70208106687180 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70193682798820
24
+ version_requirements: *70208106687180
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &70193682798160 !ruby/object:Gem::Requirement
27
+ requirement: &70208106655660 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70193682798160
35
+ version_requirements: *70208106655660
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70193682797400 !ruby/object:Gem::Requirement
38
+ requirement: &70208106654580 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '2'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70193682797400
46
+ version_requirements: *70208106654580
47
47
  description: Flexible approach to handling exceptions in ruby (for library writers,
48
48
  or consumers). Ispired by Avdi Grimm's excellent book 'Exceptional Ruby'.
49
49
  email:
@@ -74,7 +74,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
74
74
  version: '0'
75
75
  segments:
76
76
  - 0
77
- hash: 1488499911703821850
77
+ hash: 2688544848088413638
78
78
  required_rubygems_version: !ruby/object:Gem::Requirement
79
79
  none: false
80
80
  requirements:
@@ -83,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
83
  version: '0'
84
84
  segments:
85
85
  - 0
86
- hash: 1488499911703821850
86
+ hash: 2688544848088413638
87
87
  requirements: []
88
88
  rubyforge_project:
89
89
  rubygems_version: 1.8.15