rspec-plugins 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -16,3 +16,4 @@ tmp
16
16
  .yardoc
17
17
  _yardoc
18
18
  doc/
19
+ .rvmrc
data/LICENSE CHANGED
@@ -176,7 +176,7 @@ recommend that a file or class name and description of purpose be included on
176
176
  the same "printed page" as the copyright notice for easier identification within
177
177
  third-party archives.
178
178
 
179
- Copyright [yyyy] [name of copyright owner]
179
+ Copyright [2013] [Drachenfels Gmbh, Ruben Jenster]
180
180
 
181
181
  Licensed under the Apache License, Version 2.0 (the "License");
182
182
  you may not use this file except in compliance with the License.
@@ -2,6 +2,9 @@ require 'rspec/core'
2
2
 
3
3
  module RSpec::Plugins
4
4
  module Core
5
+
6
+ class NoPluginError < NameError; end
7
+
5
8
  class << self
6
9
  attr_accessor :debug
7
10
 
@@ -18,17 +21,7 @@ module RSpec::Plugins
18
21
  example_group.metadata[:plugins] = proxy
19
22
  example_group.define_singleton_method(:plugins) { proxy }
20
23
  example_group.define_singleton_method :plugin do |plugin_id, meth, *args, &block|
21
- current_example_group = self
22
- plugin = proxy[plugin_id]
23
- if plugin.nil?
24
- raise("No plugin with id :#{plugin_id} enabled. Enabled plugins: #{proxy.plugins.keys}")
25
- else
26
- current_example_group.before(:all) do
27
- plugin.current_example_group = current_example_group
28
- Core.log("Calling plugin method #{plugin}##{meth}")
29
- plugin.send(meth, *args, &block)
30
- end
31
- end
24
+ proxy.dispatch(self, plugin_id, meth, *args, &block)
32
25
  end
33
26
  log "Included RSpec::Plugins::Core in example group [#{example_group.description}]"
34
27
  end
@@ -43,8 +36,8 @@ module RSpec::Plugins
43
36
  @plugins = {}
44
37
  end
45
38
 
46
- def [](key)
47
- @plugins[key]
39
+ def [](plugin_id)
40
+ @plugins[plugin_id]
48
41
  end
49
42
 
50
43
  def enable(enable_plugins)
@@ -52,6 +45,7 @@ module RSpec::Plugins
52
45
  enable_plugins.each_pair do |key, plugin|
53
46
  Core.log "Add plugin :#{key}"
54
47
  plugin.proxy = proxy
48
+ plugin.id = key
55
49
  # TODO check for duplicates
56
50
  @plugins[key] = plugin
57
51
  @example_group.send :before, :all do |running_example_group|
@@ -60,9 +54,9 @@ module RSpec::Plugins
60
54
  Core.log "Enabled plugin :#{key}"
61
55
  end
62
56
  if plugin.respond_to?(:around)
63
- @example_group.send :around, :each do |running_example|
57
+ @example_group.send :around, :each do |example|
64
58
  Core.log "Calling #{plugin}#around"
65
- plugin.around(running_example)
59
+ plugin.around(example)
66
60
  end
67
61
  end
68
62
  @example_group.send :after, :all do |running_example_group|
@@ -73,16 +67,26 @@ module RSpec::Plugins
73
67
  end
74
68
  end
75
69
  end
70
+
71
+ def dispatch(current_example_group, plugin_id, meth, *args, &block)
72
+ plugin = @plugins[plugin_id]
73
+ if plugin
74
+ current_example_group.before(:all) do
75
+ plugin.current_example_group = current_example_group
76
+ Core.log "Dispatching method :#{meth} to #{plugin}"
77
+ plugin.dispatch(meth, *args, &block)
78
+ end
79
+ else
80
+ raise Core::NoPluginError, "Plugin :#{plugin_id} not found. Available plugins: #{@plugins.keys}"
81
+ end
82
+ end
76
83
  end
77
84
 
78
85
  class Base
79
- attr_accessor :enabled, :proxy, :current_example_group
80
-
81
- def log(message)
82
- Core.log(message)
83
- end
86
+ attr_accessor :id, :enabled, :proxy, :current_example_group
84
87
 
85
88
  def initialize
89
+ @id = nil
86
90
  @enabled = false
87
91
  @proxy = nil
88
92
  @current_example_group = nil
@@ -96,6 +100,15 @@ module RSpec::Plugins
96
100
  @enabled = false
97
101
  end
98
102
 
103
+ def dispatch(meth, *args, &block)
104
+ send meth, *args, &block
105
+ end
106
+
107
+ private
108
+ def log(message)
109
+ Core.log "plugin[#{id}]: #{message}"
110
+ end
111
+
99
112
  def after(*args, &block)
100
113
  plugin = self
101
114
  @current_example_group.send :after, :all do
@@ -1,6 +1,6 @@
1
1
  module Rspec
2
2
  module Plugins
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
6
6
 
@@ -1,15 +1,25 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  class CounterPlugin < RSpec::Plugins::Base
4
- attr_accessor :counter
4
+ attr_accessor :count, :count_after, :count_around
5
5
 
6
6
  def initialize
7
7
  super
8
- @counter = 0
8
+ @count = 0
9
+ @count_after = 0
10
+ @count_around = 0
11
+ end
12
+
13
+ def around(example)
14
+ @count_around += 1
9
15
  end
10
16
 
11
17
  def increment
12
- @counter += 1
18
+ @count += 1
19
+ after do |plugin|
20
+ log "Setting @count_after to @count*2"
21
+ plugin.count_after = @count*2
22
+ end
13
23
  end
14
24
  end
15
25
 
@@ -29,12 +39,16 @@ describe '-- #1 plugins' do
29
39
 
30
40
  describe "plugin :counter" do
31
41
  subject { plugins[:counter] }
32
- its(:counter) { should eq(2) }
42
+ its(:id) { should eq(:counter) }
43
+ its(:count) { should eq(2) }
44
+ its(:count_after) { should eq(0) }
33
45
  end
34
46
 
35
47
  describe "plugin :counter2" do
36
48
  subject { plugins[:counter2] }
37
- its(:counter) { should eq(1) }
49
+ its(:id) { should eq(:counter2) }
50
+ its(:count) { should eq(1) }
51
+ its(:count_after) { should eq(0) }
38
52
  end
39
53
 
40
54
  context "counter.increment 1, counter2.increment 2" do
@@ -44,12 +58,14 @@ describe '-- #1 plugins' do
44
58
 
45
59
  describe "plugin :counter" do
46
60
  subject { plugins[:counter] }
47
- its(:counter) { should eq(3) }
61
+ its(:count) { should eq(3) }
62
+ its(:count_after) { should eq(0) }
48
63
  end
49
64
 
50
65
  describe "plugin :counter2" do
51
66
  subject { plugins[:counter2] }
52
- its(:counter) { should eq(3) }
67
+ its(:count) { should eq(3) }
68
+ its(:count_after) { should eq(0) }
53
69
  end
54
70
  end
55
71
  end
@@ -60,12 +76,14 @@ describe '-- #1 plugins' do
60
76
 
61
77
  describe "plugin :counter" do
62
78
  subject { plugins[:counter] }
63
- its(:counter) { should eq(3) }
79
+ its(:count) { should eq(3) }
80
+ its(:count_after) { should eq(6) }
64
81
  end
65
82
 
66
83
  describe "plugin :counter2" do
67
84
  subject { plugins[:counter2] }
68
- its(:counter) { should eq(5) }
85
+ its(:count) { should eq(5) }
86
+ its(:count_after) { should eq(6) }
69
87
  end
70
88
  end
71
89
  end
@@ -76,14 +94,29 @@ describe '-- #2 plugins' do
76
94
  let(:plugins) { example.metadata[:plugins] }
77
95
  plugins.enable :counter => CounterPlugin.new
78
96
 
79
- describe "#plugins" do
97
+ describe "#plugins[:counter]" do
80
98
  subject { plugins[:counter] }
81
- its(:counter) { should eq(0) }
99
+ its(:count) { should eq(0) }
100
+ its(:count_after) { should eq(0) }
82
101
  end
83
102
 
84
- describe "#plugins" do
103
+ describe "#plugins[:counter]" do
85
104
  plugin :counter, :increment
86
105
  subject { plugins[:counter] }
87
- its(:counter) { should eq(1) }
106
+ its(:count) { should eq(1) }
107
+ its(:count_after) { should eq(0) }
108
+ end
109
+ end
110
+
111
+ describe "-- #3 plugins" do
112
+ include RSpec::Plugins::Core
113
+
114
+ let(:plugins) { example.metadata[:plugins] }
115
+ describe "fail if no plugin is enabled" do
116
+ it "should fail" do
117
+ expect {
118
+ plugins.dispatch(:foobar, :mymethod, :arg1)
119
+ }.to raise_error RSpec::Plugins::Core::NoPluginError
120
+ end
88
121
  end
89
122
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-plugins
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,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-01 00:00:00.000000000 Z
12
+ date: 2013-08-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -89,12 +89,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
89
  - - ! '>='
90
90
  - !ruby/object:Gem::Version
91
91
  version: '0'
92
+ segments:
93
+ - 0
94
+ hash: -630404549343680935
92
95
  required_rubygems_version: !ruby/object:Gem::Requirement
93
96
  none: false
94
97
  requirements:
95
98
  - - ! '>='
96
99
  - !ruby/object:Gem::Version
97
100
  version: '0'
101
+ segments:
102
+ - 0
103
+ hash: -630404549343680935
98
104
  requirements: []
99
105
  rubyforge_project:
100
106
  rubygems_version: 1.8.25
@@ -105,4 +111,3 @@ summary: Make your hooks reusable through in a plugin module or easily create a
105
111
  test_files:
106
112
  - spec/counter_plugin_spec.rb
107
113
  - spec/spec_helper.rb
108
- has_rdoc: