peck 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +27 -0
- data/lib/peck/context.rb +12 -2
- data/lib/peck/counter.rb +2 -0
- data/lib/peck/debug.rb +2 -0
- data/lib/peck/delegates.rb +2 -0
- data/lib/peck/error.rb +2 -0
- data/lib/peck/expectations.rb +26 -1
- data/lib/peck/flavors/quiet.rb +2 -0
- data/lib/peck/flavors/vanilla.rb +2 -0
- data/lib/peck/notifiers/base.rb +22 -16
- data/lib/peck/notifiers/default.rb +2 -0
- data/lib/peck/specification.rb +7 -2
- data/lib/peck.rb +4 -6
- metadata +3 -3
data/README.md
CHANGED
@@ -100,6 +100,33 @@ created.
|
|
100
100
|
emd
|
101
101
|
end
|
102
102
|
|
103
|
+
Except extension you can also add should macros which defined one or more
|
104
|
+
specifications:
|
105
|
+
|
106
|
+
class Peck::Should::Specification
|
107
|
+
class Disallow < Peck::Should::Proxy
|
108
|
+
def get(action)
|
109
|
+
context.it("disallows GET on `#{action}'") do
|
110
|
+
get action
|
111
|
+
response.should == :unauthorized
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def disallow
|
117
|
+
Peck::Should::Specification::Disallow.new(context)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe CertificatesController, "when accessed by a regular user" do
|
122
|
+
before do
|
123
|
+
login :regular_user
|
124
|
+
end
|
125
|
+
|
126
|
+
should.disallow.get :index
|
127
|
+
should.disallow.get :show
|
128
|
+
end
|
129
|
+
|
103
130
|
## Documentation
|
104
131
|
|
105
132
|
Peck is still very much in flux and will probably change a lot in the coming
|
data/lib/peck/context.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
class Peck
|
2
4
|
class Context
|
3
5
|
attr_reader :specification
|
@@ -10,6 +12,10 @@ class Peck
|
|
10
12
|
self.class.describe(*args, &block)
|
11
13
|
end
|
12
14
|
|
15
|
+
def inspect
|
16
|
+
"#<Peck::Context:0x#{object_id.to_s(16)} @description=\"#{self.class.label}\">"
|
17
|
+
end
|
18
|
+
|
13
19
|
class << self
|
14
20
|
FILENAME_WITHOUT_LINE_RE = /^(.+?):\d+/
|
15
21
|
|
@@ -53,7 +59,11 @@ class Peck
|
|
53
59
|
init(@before, @after, *description, &block)
|
54
60
|
end
|
55
61
|
end
|
56
|
-
|
62
|
+
|
63
|
+
def inspect
|
64
|
+
"#<Peck::Context description=\"#{@description[0]}…\">"
|
65
|
+
end
|
66
|
+
|
57
67
|
# Is only ran once for every context when it's initialized. Great place
|
58
68
|
# to hook in test suite specific functionality.
|
59
69
|
#
|
@@ -62,7 +72,7 @@ class Peck
|
|
62
72
|
@setup ||= []
|
63
73
|
@setup << block
|
64
74
|
end
|
65
|
-
|
75
|
+
|
66
76
|
def before(*args, &block)
|
67
77
|
add_callback(@before, *args, &block)
|
68
78
|
end
|
data/lib/peck/counter.rb
CHANGED
data/lib/peck/debug.rb
CHANGED
data/lib/peck/delegates.rb
CHANGED
data/lib/peck/error.rb
CHANGED
data/lib/peck/expectations.rb
CHANGED
@@ -1,7 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require 'peck/error'
|
2
4
|
|
3
5
|
class Peck
|
4
6
|
class Should
|
7
|
+
class Proxy
|
8
|
+
attr_accessor :negated
|
9
|
+
attr_reader :context, :block
|
10
|
+
|
11
|
+
def initialize(context, &block)
|
12
|
+
@context = context
|
13
|
+
@block = block
|
14
|
+
@negated = false
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Specification < Proxy
|
19
|
+
def not
|
20
|
+
@negated = !@negated
|
21
|
+
self
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
5
25
|
# Kills ==, ===, =~, eql?, equal?, frozen?, instance_of?, is_a?,
|
6
26
|
# kind_of?, nil?, respond_to?, tainted?
|
7
27
|
KILL_METHODS_RE = /\?|^\W+$/
|
@@ -110,6 +130,11 @@ end
|
|
110
130
|
|
111
131
|
class Object
|
112
132
|
def should(*args, &block)
|
113
|
-
|
133
|
+
# TODO: raise argument error when .should.should
|
134
|
+
if self.kind_of?(Class) && (self < Peck::Context)
|
135
|
+
Peck::Should::Specification.new(self)
|
136
|
+
else
|
137
|
+
Peck::Should.new(self).be(*args, &block)
|
138
|
+
end
|
114
139
|
end
|
115
140
|
end
|
data/lib/peck/flavors/quiet.rb
CHANGED
data/lib/peck/flavors/vanilla.rb
CHANGED
data/lib/peck/notifiers/base.rb
CHANGED
@@ -1,11 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
class Peck
|
2
4
|
class Notifiers
|
3
5
|
class Base
|
4
|
-
|
5
|
-
|
6
|
+
module BacktraceCleaning
|
7
|
+
# When a file starts with this path, it's in the Peck library
|
8
|
+
PECK_PATH = File.expand_path('../../../../', __FILE__)
|
9
|
+
|
10
|
+
# Matches: `block (2 levels) in <top (required)>'
|
11
|
+
ANONYMOUS_BLOCK_RE = /`block/
|
6
12
|
|
7
|
-
|
8
|
-
|
13
|
+
def clean_backtrace(backtrace)
|
14
|
+
stripped = []
|
15
|
+
backtrace.each do |line|
|
16
|
+
if line.start_with?(PECK_PATH) || line.start_with?("<")
|
17
|
+
elsif line =~ ANONYMOUS_BLOCK_RE
|
18
|
+
stripped << line.split(':')[0,2].join(':')
|
19
|
+
else
|
20
|
+
stripped << line
|
21
|
+
end
|
22
|
+
end
|
23
|
+
stripped.empty? ? backtrace : stripped
|
24
|
+
end
|
25
|
+
end
|
9
26
|
|
10
27
|
def self.use
|
11
28
|
@instance ||= begin
|
@@ -22,18 +39,7 @@ class Peck
|
|
22
39
|
count == 1 ? stem : "#{stem}s"
|
23
40
|
end
|
24
41
|
|
25
|
-
|
26
|
-
stripped = []
|
27
|
-
backtrace.each do |line|
|
28
|
-
if line.start_with?(PECK_PATH) || line.start_with?("<")
|
29
|
-
elsif line =~ ANONYMOUS_BLOCK_RE
|
30
|
-
stripped << line.split(':')[0,2].join(':')
|
31
|
-
else
|
32
|
-
stripped << line
|
33
|
-
end
|
34
|
-
end
|
35
|
-
stripped.empty? ? backtrace : stripped
|
36
|
-
end
|
42
|
+
include BacktraceCleaning
|
37
43
|
end
|
38
44
|
end
|
39
45
|
end
|
data/lib/peck/specification.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
class Peck
|
2
4
|
class Context
|
3
5
|
def self.it(description, &block)
|
@@ -49,7 +51,8 @@ class Peck
|
|
49
51
|
end
|
50
52
|
end
|
51
53
|
|
52
|
-
def run
|
54
|
+
def run delegates
|
55
|
+
delegates.started_specification(self)
|
53
56
|
if @block
|
54
57
|
@before.each { |cb| @context.instance_eval(&cb) }
|
55
58
|
begin
|
@@ -63,11 +66,13 @@ class Peck
|
|
63
66
|
@after.each { |cb| @context.instance_eval(&cb) }
|
64
67
|
end
|
65
68
|
else
|
66
|
-
|
69
|
+
delegates.received_missing(self)
|
67
70
|
end
|
68
71
|
rescue Object => e
|
69
72
|
Peck.delegates.received_exception(self, e)
|
70
73
|
@events << Event.new(e, self)
|
74
|
+
ensure
|
75
|
+
delegates.finished_specification(self)
|
71
76
|
end
|
72
77
|
|
73
78
|
def empty?
|
data/lib/peck.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
class Peck
|
2
4
|
VERSION = "0.1.0"
|
3
5
|
|
@@ -75,9 +77,7 @@ class Peck
|
|
75
77
|
Thread.current['peck-semaphore'] = Mutex.new
|
76
78
|
contexts.each do |context|
|
77
79
|
context.specs.each do |specification|
|
78
|
-
|
79
|
-
specification.run
|
80
|
-
delegates.finished_specification(specification)
|
80
|
+
specification.run(delegates)
|
81
81
|
end
|
82
82
|
end
|
83
83
|
rescue Exception => e
|
@@ -94,9 +94,7 @@ class Peck
|
|
94
94
|
loop do
|
95
95
|
spec_index = Thread.exclusive { current_spec += 1 }
|
96
96
|
if specification = specs[spec_index]
|
97
|
-
|
98
|
-
specification.run
|
99
|
-
delegates.finished_specification(specification)
|
97
|
+
specification.run(delegates)
|
100
98
|
else
|
101
99
|
break
|
102
100
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: peck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
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: 2012-
|
12
|
+
date: 2012-09-28 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! ' Concurrent spec framework.
|
15
15
|
|
@@ -55,7 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
55
55
|
version: '0'
|
56
56
|
requirements: []
|
57
57
|
rubyforge_project:
|
58
|
-
rubygems_version: 1.8.
|
58
|
+
rubygems_version: 1.8.23
|
59
59
|
signing_key:
|
60
60
|
specification_version: 3
|
61
61
|
summary: Peck is a concurrent spec framework which inherits a lot from the fabulous
|