remarkable 3.1.13 → 4.0.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- data/README +3 -24
- data/lib/remarkable.rb +2 -2
- data/lib/remarkable/matchers.rb +3 -4
- data/lib/remarkable/rspec.rb +13 -6
- data/lib/remarkable/version.rb +1 -1
- data/remarkable.gemspec +42 -13
- metadata +39 -23
- data/lib/remarkable/pending.rb +0 -68
data/README
CHANGED
@@ -39,27 +39,6 @@ And it will show in your specs output:
|
|
39
39
|
|
40
40
|
"Example disabled: require name to be set"
|
41
41
|
|
42
|
-
== Pending macros
|
43
|
-
|
44
|
-
In Rspec you can mark some examples as pending:
|
45
|
-
|
46
|
-
it "should have one manager" do
|
47
|
-
pending("create managers resource")
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should validate associated manager" do
|
51
|
-
pending("create managers resource")
|
52
|
-
end
|
53
|
-
|
54
|
-
To allow this to work with macros, we created the pending group:
|
55
|
-
|
56
|
-
pending "create managers resource" do
|
57
|
-
should_have_one :manager
|
58
|
-
should_validate_associated :manager
|
59
|
-
end
|
60
|
-
|
61
|
-
This outputs the same as above.
|
62
|
-
|
63
42
|
== I18n
|
64
43
|
|
65
44
|
All matchers come with I18n support. You can find an example locale file under
|
@@ -85,9 +64,9 @@ Create a new matcher is easy. Let's create validate_inclusion_of matcher for
|
|
85
64
|
ActiveRecord as an example. A first matcher version would be:
|
86
65
|
|
87
66
|
module Remarkable
|
88
|
-
module
|
67
|
+
module ActiveModel
|
89
68
|
module Matchers
|
90
|
-
class ValidateInclusionOfMatcher < Remarkable::
|
69
|
+
class ValidateInclusionOfMatcher < Remarkable::ActiveModel::Base
|
91
70
|
arguments :attribute
|
92
71
|
assertion :is_valid?
|
93
72
|
|
@@ -131,7 +110,7 @@ As you noticed, the matcher doesn't have any message on it. You add them on I18n
|
|
131
110
|
file. A file for this example would be:
|
132
111
|
|
133
112
|
remarkable:
|
134
|
-
|
113
|
+
active_model:
|
135
114
|
validate_inclusion_of:
|
136
115
|
description: "validate inclusion of {{attribute}}"
|
137
116
|
expectations:
|
data/lib/remarkable.rb
CHANGED
@@ -8,11 +8,11 @@ require File.join(dir, 'remarkable', 'messages')
|
|
8
8
|
|
9
9
|
require File.join(dir, 'remarkable', 'base')
|
10
10
|
require File.join(dir, 'remarkable', 'macros')
|
11
|
-
require File.join(dir, 'remarkable', 'pending')
|
11
|
+
#require File.join(dir, 'remarkable', 'pending')
|
12
12
|
require File.join(dir, 'remarkable', 'negative')
|
13
13
|
require File.join(dir, 'remarkable', 'core_ext', 'array')
|
14
14
|
|
15
|
-
if defined?(
|
15
|
+
if defined?(Rspec)
|
16
16
|
require File.join(dir, 'remarkable', 'rspec')
|
17
17
|
end
|
18
18
|
|
data/lib/remarkable/matchers.rb
CHANGED
@@ -12,14 +12,13 @@ module Remarkable
|
|
12
12
|
def self.include_matchers!(base, target=nil)
|
13
13
|
if target.nil?
|
14
14
|
if rspec_defined?
|
15
|
-
target =
|
15
|
+
target = Rspec::Matchers
|
16
16
|
else
|
17
|
-
raise ArgumentError, "You haven't supplied the target to include_matchers! and
|
17
|
+
raise ArgumentError, "You haven't supplied the target to include_matchers! and Rspec is not loaded, so we cannot infer one."
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
metaclass = (class << target; self; end)
|
22
|
-
target.send :extend, Remarkable::Pending unless metaclass.ancestors.include?(Remarkable::Pending)
|
23
22
|
target.send :extend, Remarkable::Macros unless metaclass.ancestors.include?(Remarkable::Macros)
|
24
23
|
|
25
24
|
if defined?(base::Matchers)
|
@@ -35,6 +34,6 @@ module Remarkable
|
|
35
34
|
end
|
36
35
|
|
37
36
|
def self.rspec_defined? #:nodoc:
|
38
|
-
defined?(
|
37
|
+
defined?(Rspec)
|
39
38
|
end
|
40
39
|
end
|
data/lib/remarkable/rspec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module Rspec #:nodoc:
|
2
2
|
module Matchers #:nodoc:
|
3
3
|
# Overwrites to provide I18n on should and should_not.
|
4
4
|
#
|
@@ -9,16 +9,23 @@ module Spec #:nodoc:
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
module
|
13
|
-
|
12
|
+
module Core #:nodoc:
|
13
|
+
class ExampleGroup #:nodoc:
|
14
14
|
# Overwrites to provide I18n on example disabled message.
|
15
15
|
#
|
16
|
-
def
|
16
|
+
def _xexample(description=nil, opts={}, &block)
|
17
17
|
disabled = Remarkable.t 'remarkable.core.example_disabled', :default => 'Example disabled'
|
18
18
|
Kernel.warn("#{disabled}: #{description}")
|
19
19
|
end
|
20
|
-
alias_method :xit, :xexample
|
21
|
-
alias_method :xspecify, :xexample
|
20
|
+
#alias_method :xit, :xexample
|
21
|
+
#alias_method :xspecify, :xexample
|
22
|
+
|
23
|
+
# NOTE: Hack. Disabled examples is not the same as pending examples
|
24
|
+
# However, the rspec runner is monolithic and doesn't have a hook to process
|
25
|
+
# examples based on metadata
|
26
|
+
alias_example_to :xexample, :disabled => true, :pending => true
|
27
|
+
alias_example_to :xit, :disabled => true, :pending => true
|
28
|
+
alias_example_to :xspecify, :disabled => true, :pending => true
|
22
29
|
end
|
23
30
|
end
|
24
31
|
end
|
data/lib/remarkable/version.rb
CHANGED
data/remarkable.gemspec
CHANGED
@@ -1,32 +1,61 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
1
4
|
# -*- encoding: utf-8 -*-
|
2
5
|
|
3
6
|
Gem::Specification.new do |s|
|
4
7
|
s.name = %q{remarkable}
|
5
|
-
s.version = "
|
8
|
+
s.version = "4.0.0.alpha1"
|
6
9
|
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
8
|
-
s.authors = ["Carlos Brando", "Jos\303\251 Valim"]
|
9
|
-
s.date = %q{2010-
|
10
|
-
s.description = %q{Remarkable: a framework for rspec matchers, with support
|
11
|
-
s.email = ["eduardobrando@gmail.com", "jose.valim@gmail.com"]
|
12
|
-
s.extra_rdoc_files = [
|
13
|
-
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Ho-Sheng Hsiao", "Carlos Brando", "Jos\303\251 Valim"]
|
12
|
+
s.date = %q{2010-04-22}
|
13
|
+
s.description = %q{Remarkable: a framework for rspec matchers and macros, with support for I18n.}
|
14
|
+
s.email = ["hosh@sparkfly.com", "eduardobrando@gmail.com", "jose.valim@gmail.com"]
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"CHANGELOG",
|
17
|
+
"LICENSE",
|
18
|
+
"README"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
"CHANGELOG",
|
22
|
+
"LICENSE",
|
23
|
+
"README",
|
24
|
+
"lib/remarkable.rb",
|
25
|
+
"lib/remarkable/base.rb",
|
26
|
+
"lib/remarkable/core_ext/array.rb",
|
27
|
+
"lib/remarkable/dsl.rb",
|
28
|
+
"lib/remarkable/dsl/assertions.rb",
|
29
|
+
"lib/remarkable/dsl/callbacks.rb",
|
30
|
+
"lib/remarkable/dsl/optionals.rb",
|
31
|
+
"lib/remarkable/i18n.rb",
|
32
|
+
"lib/remarkable/macros.rb",
|
33
|
+
"lib/remarkable/matchers.rb",
|
34
|
+
"lib/remarkable/messages.rb",
|
35
|
+
"lib/remarkable/negative.rb",
|
36
|
+
"lib/remarkable/rspec.rb",
|
37
|
+
"lib/remarkable/version.rb",
|
38
|
+
"locale/en.yml",
|
39
|
+
"remarkable.gemspec"
|
40
|
+
]
|
14
41
|
s.homepage = %q{http://github.com/carlosbrando/remarkable}
|
42
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
15
43
|
s.require_paths = ["lib"]
|
16
44
|
s.rubyforge_project = %q{remarkable}
|
17
|
-
s.rubygems_version = %q{1.3.
|
18
|
-
s.summary = %q{Remarkable: a framework for rspec matchers, with support
|
45
|
+
s.rubygems_version = %q{1.3.6}
|
46
|
+
s.summary = %q{Remarkable: a framework for rspec matchers and macros, with support for I18n.}
|
19
47
|
|
20
48
|
if s.respond_to? :specification_version then
|
21
49
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
22
50
|
s.specification_version = 3
|
23
51
|
|
24
52
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
25
|
-
s.add_runtime_dependency(%q<rspec>, [">=
|
53
|
+
s.add_runtime_dependency(%q<rspec>, [">= 2.0.0.alpha7"])
|
26
54
|
else
|
27
|
-
s.add_dependency(%q<rspec>, [">=
|
55
|
+
s.add_dependency(%q<rspec>, [">= 2.0.0.alpha7"])
|
28
56
|
end
|
29
57
|
else
|
30
|
-
s.add_dependency(%q<rspec>, [">=
|
58
|
+
s.add_dependency(%q<rspec>, [">= 2.0.0.alpha7"])
|
31
59
|
end
|
32
60
|
end
|
61
|
+
|
metadata
CHANGED
@@ -1,30 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remarkable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: true
|
5
|
+
segments:
|
6
|
+
- 4
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- alpha1
|
10
|
+
version: 4.0.0.alpha1
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
13
|
+
- Ho-Sheng Hsiao
|
7
14
|
- Carlos Brando
|
8
15
|
- "Jos\xC3\xA9 Valim"
|
9
16
|
autorequire:
|
10
17
|
bindir: bin
|
11
18
|
cert_chain: []
|
12
19
|
|
13
|
-
date: 2010-
|
20
|
+
date: 2010-04-22 00:00:00 -04:00
|
14
21
|
default_executable:
|
15
22
|
dependencies:
|
16
23
|
- !ruby/object:Gem::Dependency
|
17
24
|
name: rspec
|
18
|
-
|
19
|
-
|
20
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
prerelease: false
|
26
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
21
27
|
requirements:
|
22
28
|
- - ">="
|
23
29
|
- !ruby/object:Gem::Version
|
24
|
-
|
25
|
-
|
26
|
-
|
30
|
+
segments:
|
31
|
+
- 2
|
32
|
+
- 0
|
33
|
+
- 0
|
34
|
+
- alpha7
|
35
|
+
version: 2.0.0.alpha7
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id001
|
38
|
+
description: "Remarkable: a framework for rspec matchers and macros, with support for I18n."
|
27
39
|
email:
|
40
|
+
- hosh@sparkfly.com
|
28
41
|
- eduardobrando@gmail.com
|
29
42
|
- jose.valim@gmail.com
|
30
43
|
executables: []
|
@@ -32,28 +45,27 @@ executables: []
|
|
32
45
|
extensions: []
|
33
46
|
|
34
47
|
extra_rdoc_files:
|
35
|
-
- README
|
36
|
-
- LICENSE
|
37
48
|
- CHANGELOG
|
38
|
-
files:
|
39
|
-
- README
|
40
49
|
- LICENSE
|
50
|
+
- README
|
51
|
+
files:
|
41
52
|
- CHANGELOG
|
53
|
+
- LICENSE
|
54
|
+
- README
|
55
|
+
- lib/remarkable.rb
|
42
56
|
- lib/remarkable/base.rb
|
43
57
|
- lib/remarkable/core_ext/array.rb
|
58
|
+
- lib/remarkable/dsl.rb
|
44
59
|
- lib/remarkable/dsl/assertions.rb
|
45
60
|
- lib/remarkable/dsl/callbacks.rb
|
46
61
|
- lib/remarkable/dsl/optionals.rb
|
47
|
-
- lib/remarkable/dsl.rb
|
48
62
|
- lib/remarkable/i18n.rb
|
49
63
|
- lib/remarkable/macros.rb
|
50
64
|
- lib/remarkable/matchers.rb
|
51
65
|
- lib/remarkable/messages.rb
|
52
66
|
- lib/remarkable/negative.rb
|
53
|
-
- lib/remarkable/pending.rb
|
54
67
|
- lib/remarkable/rspec.rb
|
55
68
|
- lib/remarkable/version.rb
|
56
|
-
- lib/remarkable.rb
|
57
69
|
- locale/en.yml
|
58
70
|
- remarkable.gemspec
|
59
71
|
has_rdoc: true
|
@@ -61,28 +73,32 @@ homepage: http://github.com/carlosbrando/remarkable
|
|
61
73
|
licenses: []
|
62
74
|
|
63
75
|
post_install_message:
|
64
|
-
rdoc_options:
|
65
|
-
|
76
|
+
rdoc_options:
|
77
|
+
- --charset=UTF-8
|
66
78
|
require_paths:
|
67
79
|
- lib
|
68
80
|
required_ruby_version: !ruby/object:Gem::Requirement
|
69
81
|
requirements:
|
70
82
|
- - ">="
|
71
83
|
- !ruby/object:Gem::Version
|
84
|
+
segments:
|
85
|
+
- 0
|
72
86
|
version: "0"
|
73
|
-
version:
|
74
87
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
88
|
requirements:
|
76
|
-
- - "
|
89
|
+
- - ">"
|
77
90
|
- !ruby/object:Gem::Version
|
78
|
-
|
79
|
-
|
91
|
+
segments:
|
92
|
+
- 1
|
93
|
+
- 3
|
94
|
+
- 1
|
95
|
+
version: 1.3.1
|
80
96
|
requirements: []
|
81
97
|
|
82
98
|
rubyforge_project: remarkable
|
83
|
-
rubygems_version: 1.3.
|
99
|
+
rubygems_version: 1.3.6
|
84
100
|
signing_key:
|
85
101
|
specification_version: 3
|
86
|
-
summary: "Remarkable: a framework for rspec matchers, with support
|
102
|
+
summary: "Remarkable: a framework for rspec matchers and macros, with support for I18n."
|
87
103
|
test_files: []
|
88
104
|
|
data/lib/remarkable/pending.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
module Remarkable
|
2
|
-
|
3
|
-
module Pending
|
4
|
-
|
5
|
-
# We cannot put the alias method in the module because it's a Ruby 1.8 bug
|
6
|
-
# http://coderrr.wordpress.com/2008/03/28/alias_methodmodule-bug-in-ruby-18/
|
7
|
-
#
|
8
|
-
def self.extended(base) #:nodoc:
|
9
|
-
if base.respond_to?(:example)
|
10
|
-
class << base
|
11
|
-
alias_method :example_without_pending, :example
|
12
|
-
alias_method :example, :example_with_pending
|
13
|
-
alias :it :example
|
14
|
-
alias :specify :example
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
# Adds a pending block to your specs.
|
20
|
-
#
|
21
|
-
# == Examples
|
22
|
-
#
|
23
|
-
# pending 'create manager resource' do
|
24
|
-
# should_have_one :manager
|
25
|
-
# should_validate_associated :manager
|
26
|
-
# end
|
27
|
-
#
|
28
|
-
# By default, it executes the examples inside the pending block. So as soon
|
29
|
-
# as you add the has_one :manager relationship to your model, your specs
|
30
|
-
# will say that this was already fixed and there is no need to be treated
|
31
|
-
# as pending. To disable this behavior, you can give :execute => false:
|
32
|
-
#
|
33
|
-
# pending 'create manager resource', :execute => false
|
34
|
-
#
|
35
|
-
def pending(*args, &block)
|
36
|
-
options = { :execute => true }.merge(args.extract_options!)
|
37
|
-
|
38
|
-
@_pending_group = true
|
39
|
-
@_pending_group_description = args.first || "TODO"
|
40
|
-
@_pending_group_execute = options.delete(:execute)
|
41
|
-
|
42
|
-
self.instance_eval(&block)
|
43
|
-
|
44
|
-
@_pending_group = false
|
45
|
-
@_pending_group_description = nil
|
46
|
-
@_pending_group_execute = nil
|
47
|
-
end
|
48
|
-
|
49
|
-
def example_with_pending(description=nil, options={}, backtrace=nil, &implementation) #:nodoc:
|
50
|
-
if block_given? && @_pending_group
|
51
|
-
pending_caller = caller.detect{ |c| c !~ /method_missing'/ }
|
52
|
-
pending_description = @_pending_group_description
|
53
|
-
|
54
|
-
pending_block = if @_pending_group_execute
|
55
|
-
proc{ pending(pending_description){ self.instance_eval(&implementation) } }
|
56
|
-
else
|
57
|
-
proc{ pending(pending_description) }
|
58
|
-
end
|
59
|
-
|
60
|
-
example_without_pending(description, options, backtrace || pending_caller, &pending_block)
|
61
|
-
else
|
62
|
-
example_without_pending(description, options, backtrace || caller(0)[1], &implementation)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|