generator-spec 0.4.7 → 0.4.8
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.markdown +14 -7
- data/VERSION +1 -1
- data/generator-spec.gemspec +2 -2
- data/lib/generator_spec/main.rb +22 -0
- data/lib/generator_spec/matchers/content/content_matcher.rb +6 -1
- data/lib/generator_spec/matchers/content/have_call.rb +9 -3
- data/lib/generator_spec/matchers/content/have_calls.rb +14 -2
- data/lib/generator_spec/matchers/file/generate_file.rb +1 -0
- data/lib/generator_spec/matchers/migration/have_column.rb +7 -1
- data/lib/generator_spec/rails_helpers/rails_view.rb +14 -6
- data/spec/generator_spec/generators/controller_generator_spec.rb +1 -1
- data/spec/generator_spec/generators/helper_generator_spec.rb +1 -1
- data/spec/generator_spec/generators/migration_generator_spec.rb +12 -6
- data/spec/generator_spec/generators/model_generator_spec.rb +1 -1
- data/spec/generator_spec/generators/observer_generator_spec.rb +1 -1
- data/spec/generator_spec/generators/view_generator_spec.rb +3 -3
- data/spec/generator_spec/matchers/content/class_self_spec.rb +2 -4
- data/spec/generator_spec/matchers/content/have_block_spec.rb +1 -1
- data/spec/generator_spec/matchers/content/have_call_spec.rb +1 -1
- data/spec/generator_spec/matchers/content/have_calls_spec.rb +29 -32
- data/spec/generator_spec/matchers/content/have_class_spec.rb +1 -1
- data/spec/generator_spec/matchers/content/have_method_spec.rb +1 -1
- data/spec/generator_spec/matchers/content/have_module_spec.rb +1 -1
- data/spec/generator_spec/matchers/content/have_region_spec.rb +1 -1
- data/spec/generator_spec/matchers/content/have_subclass_spec.rb +1 -1
- data/spec/generator_spec/matchers/content/include_module_spec.rb +1 -1
- data/spec/generator_spec/matchers/content/inherit_from_spec.rb +1 -1
- metadata +3 -3
data/README.markdown
CHANGED
@@ -89,16 +89,22 @@ require 'generators/canable'
|
|
89
89
|
|
90
90
|
describe 'model_generator' do
|
91
91
|
# include Rails model helpers for ActiveRecord
|
92
|
-
# available:
|
92
|
+
# available:
|
93
|
+
|
94
|
+
# Other ORM options - :mongo_mapper, :mongoid and :data_mapper
|
95
|
+
# note: use_orm auto-includes the :model helper module
|
96
|
+
use_orm :active_record
|
93
97
|
|
94
|
-
|
98
|
+
# load helper modules and make available inside spec blocks
|
99
|
+
# here the module in rails_helpers/rails_migration is included
|
100
|
+
helpers :migration
|
95
101
|
|
96
102
|
before :each do
|
97
103
|
# define generator to test
|
98
104
|
setup_generator 'model_generator' do
|
99
105
|
tests Canable::Generators::ModelGenerator
|
100
106
|
end
|
101
|
-
# ensure clean state before run
|
107
|
+
# ensure clean state before each run
|
102
108
|
remove_model :account
|
103
109
|
end
|
104
110
|
|
@@ -139,6 +145,8 @@ These mutations make it easy to setup the temporary Rails app in a specific pre-
|
|
139
145
|
|
140
146
|
### Examples: Rails helpers
|
141
147
|
|
148
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
|
149
|
+
|
142
150
|
describe 'controller' do
|
143
151
|
include RSpec::Rails::Controller
|
144
152
|
|
@@ -156,10 +164,9 @@ describe 'controller' do
|
|
156
164
|
end
|
157
165
|
|
158
166
|
it "should have an account_controller file that contains an AccountController class with an index method inside" do
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
end
|
167
|
+
Rails.application.should have_controller :account do |controller_file|
|
168
|
+
controller_file.should have_controller_class :account do |klass|
|
169
|
+
klass.should have_method :index
|
163
170
|
end
|
164
171
|
end
|
165
172
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.8
|
data/generator-spec.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{generator-spec}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kristian Mandrup"]
|
12
|
-
s.date = %q{2010-08-
|
12
|
+
s.date = %q{2010-08-11}
|
13
13
|
s.description = %q{RSpec 2 library to assist in writing generator specs}
|
14
14
|
s.email = %q{kmandrup@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/generator_spec/main.rb
CHANGED
@@ -42,6 +42,28 @@ module RSpec::Core
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
+
class Class
|
46
|
+
def use_orm orm
|
47
|
+
class_eval do
|
48
|
+
raise ArgumentError, "Unknown orm #{orm}" if ![:active_record, :mongoid, :mongo_mapper, :data_mapper].include?(orm)
|
49
|
+
include "RSpec::Rails::Orm::#{orm.to_s.camelize}".constantize
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def helpers *types
|
54
|
+
types.each{|type| include_helper type}
|
55
|
+
end
|
56
|
+
|
57
|
+
protected
|
58
|
+
|
59
|
+
def include_helper type
|
60
|
+
raise ArgumentError, "Can not specify for #{type}" if ![:migration, :model, :helper, :controller, :view, :observer, :mailer].include?(type)
|
61
|
+
class_eval do
|
62
|
+
include "RSpec::Rails::#{type.to_s.camelize}".constantize
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
45
67
|
require 'generator_spec/require_generator'
|
46
68
|
|
47
69
|
require 'generator_spec/matchers/content/content_matcher'
|
@@ -14,6 +14,9 @@ module RSpec
|
|
14
14
|
nil
|
15
15
|
end
|
16
16
|
|
17
|
+
def debug?
|
18
|
+
false
|
19
|
+
end
|
17
20
|
|
18
21
|
def matches? content, &block
|
19
22
|
@content = content
|
@@ -28,8 +31,10 @@ module RSpec
|
|
28
31
|
|
29
32
|
def is_match? content
|
30
33
|
expr = get_expr(content)
|
34
|
+
puts "match expression: #{expr}" if debug?
|
31
35
|
match = (content =~ expr)
|
32
36
|
@content_matches = [$1, $2, $3]
|
37
|
+
match
|
33
38
|
end
|
34
39
|
|
35
40
|
def handle_result content, match, &block
|
@@ -71,7 +76,7 @@ module RSpec
|
|
71
76
|
end
|
72
77
|
|
73
78
|
def args_expr
|
74
|
-
args ?
|
79
|
+
args ? OPT_SPACES + opt(LPAR) + OPT_SPACES + "#{args}" + OPT_SPACES + opt(RPAR) : ''
|
75
80
|
end
|
76
81
|
|
77
82
|
def main_expr
|
@@ -16,8 +16,14 @@ module RSpec::RubyContentMatchers
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def matches?(content)
|
19
|
-
@content = content
|
20
|
-
(content =~
|
19
|
+
@content = content
|
20
|
+
has_def = (content =~ /def(.*)#{method}/)
|
21
|
+
expr = if has_def
|
22
|
+
/#{dot_expr}#{method}#{args_expr}/m
|
23
|
+
else
|
24
|
+
/#{dot_expr}?#{method}#{args_expr}/m
|
25
|
+
end
|
26
|
+
(content =~ expr)
|
21
27
|
end
|
22
28
|
|
23
29
|
def failure_message
|
@@ -33,7 +39,7 @@ module RSpec::RubyContentMatchers
|
|
33
39
|
protected
|
34
40
|
|
35
41
|
def not_def
|
36
|
-
'[^def\s]
|
42
|
+
'[^def\s]'
|
37
43
|
end
|
38
44
|
|
39
45
|
def dot_expr
|
@@ -26,7 +26,13 @@ module RSpec::RubyContentMatchers
|
|
26
26
|
def do_list
|
27
27
|
calls.each do |method|
|
28
28
|
@method = method.to_s
|
29
|
-
expr =
|
29
|
+
expr =
|
30
|
+
has_def = (content =~ /def(.*)#{method}/)
|
31
|
+
expr = if has_def
|
32
|
+
/#{not_def}\s*#{method}/m
|
33
|
+
else
|
34
|
+
/#{not_def}?\s*#{method}/m
|
35
|
+
end
|
30
36
|
return false if (content =~ expr) == nil
|
31
37
|
end
|
32
38
|
true
|
@@ -36,7 +42,13 @@ module RSpec::RubyContentMatchers
|
|
36
42
|
calls.each_pair do |method, args|
|
37
43
|
@method = method.to_s
|
38
44
|
@args = args
|
39
|
-
|
45
|
+
has_def = (content =~ /def(.*)#{method}/)
|
46
|
+
expr = if has_def
|
47
|
+
/#{not_def}\s*#{method}\s*#{args_expr}/m
|
48
|
+
else
|
49
|
+
/#{not_def}?\s*#{method}\s*#{args_expr}/m
|
50
|
+
end
|
51
|
+
return false if (content =~ expr) == nil
|
40
52
|
end
|
41
53
|
true
|
42
54
|
end
|
@@ -10,7 +10,13 @@ module RSpec::RubyContentMatchers
|
|
10
10
|
|
11
11
|
def have_columns(columns = {})
|
12
12
|
raise ArgumentError, "Columns must be passed as a :name => :type Hash" if !columns.kind_of? Hash
|
13
|
-
|
13
|
+
col_hash = {}
|
14
|
+
columns.each_pair do |name, type|
|
15
|
+
method_call = "t.#{type}"
|
16
|
+
arg = ":#{name}"
|
17
|
+
col_hash[method_call] = arg
|
18
|
+
end
|
19
|
+
HaveCalls.new col_hash
|
14
20
|
end
|
15
21
|
|
16
22
|
def have_change_column(name, type='string')
|
@@ -2,16 +2,24 @@ module RSpec::Rails
|
|
2
2
|
module View
|
3
3
|
include RSpec::Rails::App
|
4
4
|
|
5
|
-
def create_view name, action='show', *args
|
5
|
+
def create_view name, action='show', *args, &block
|
6
6
|
type, content = parse_args(*args)
|
7
7
|
file = view_file_name(name, action, type)
|
8
|
+
|
9
|
+
# make dir
|
8
10
|
unless File.exist?(file)
|
9
11
|
FileUtils.mkdir_p File.dirname(file)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
end
|
13
|
+
|
14
|
+
# set content to block
|
15
|
+
content = yield if block
|
16
|
+
|
17
|
+
# abort if no content given
|
18
|
+
return if !content
|
19
|
+
|
20
|
+
# write file content of view
|
21
|
+
File.open(file, 'w') do |f|
|
22
|
+
f.puts content
|
15
23
|
end
|
16
24
|
end
|
17
25
|
|
@@ -1,17 +1,24 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
2
|
|
3
3
|
RSpec::Generator.debug = true
|
4
4
|
|
5
5
|
require_generator :migration
|
6
6
|
|
7
|
+
class Class
|
8
|
+
def spec
|
9
|
+
RSpec::DSL
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
7
13
|
describe 'migration_generator' do
|
8
|
-
|
9
|
-
|
14
|
+
use_orm :active_record
|
15
|
+
helpers :migration, :helper
|
10
16
|
|
11
17
|
before :each do
|
12
18
|
setup_generator 'migration_generator' do
|
13
19
|
tests MigrationGenerator
|
14
|
-
end
|
20
|
+
end
|
21
|
+
remove_migration :create_users
|
15
22
|
end
|
16
23
|
|
17
24
|
after :each do
|
@@ -19,13 +26,12 @@ describe 'migration_generator' do
|
|
19
26
|
|
20
27
|
it "should generate create_user migration" do
|
21
28
|
with_generator do |g|
|
22
|
-
remove_migration :create_users
|
23
29
|
g.run_generator [:create_users].args
|
24
30
|
g.should generate_migration :create_users do |content|
|
25
31
|
content.should have_migration :create_users do |klass|
|
26
32
|
klass.should have_up do |up|
|
27
33
|
up.should have_create_table :users do |user_tbl|
|
28
|
-
user_tbl.should have_columns :name => :string, :age => :
|
34
|
+
user_tbl.should have_columns :name => :string, :age => :integer, :admin => :boolean
|
29
35
|
user_tbl.should_not have_timestamps
|
30
36
|
end
|
31
37
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
2
|
require_generator :view
|
3
3
|
|
4
4
|
module RSpec::Core
|
@@ -39,8 +39,8 @@ describe 'view_generator' do
|
|
39
39
|
'# view content'
|
40
40
|
end
|
41
41
|
g.run_generator [name, action, type].map(&:to_s)
|
42
|
-
g.should generate_view name, action, type do |
|
43
|
-
|
42
|
+
g.should generate_view name, action, type do |file|
|
43
|
+
file.should match /Hello You/
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
|
2
2
|
|
3
3
|
describe 'class_self matcher' do
|
4
4
|
context "content without class << self" do
|
@@ -7,9 +7,7 @@ describe 'class_self matcher' do
|
|
7
7
|
end}
|
8
8
|
|
9
9
|
it "should not have class << self" do
|
10
|
-
not_class_self.should_not have_class_self
|
11
|
-
puts content
|
12
|
-
end
|
10
|
+
not_class_self.should_not have_class_self
|
13
11
|
end
|
14
12
|
end
|
15
13
|
|
@@ -1,21 +1,21 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
|
2
2
|
|
3
3
|
describe 'method calls matcher' do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
4
|
+
context "content without calls" do
|
5
|
+
not_class_self = %q{
|
6
|
+
def x
|
7
|
+
end
|
8
|
+
|
9
|
+
def y
|
10
|
+
end
|
11
|
+
}
|
12
|
+
|
13
|
+
it "should not have calls to x or y" do
|
14
|
+
not_class_self.should_not have_calls :x, :y do |content|
|
15
|
+
puts content
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
19
|
|
20
20
|
context "content with calls to x and y" do
|
21
21
|
class_self = %q{
|
@@ -31,20 +31,17 @@ describe 'method calls matcher' do
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
34
|
+
context "content with calls to x and y" do
|
35
|
+
class_self = %q{
|
36
|
+
def x
|
37
|
+
x(2)
|
38
|
+
y 3
|
39
|
+
end}
|
40
|
+
|
41
|
+
it "should have calls: x(2) and y 3" do
|
42
|
+
class_self.should have_calls :x => '2', :y => '3' do |content|
|
43
|
+
puts "content: #{content}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
47
|
end
|
48
|
-
|
49
|
-
|
50
|
-
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 4
|
8
|
-
-
|
9
|
-
version: 0.4.
|
8
|
+
- 8
|
9
|
+
version: 0.4.8
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Kristian Mandrup
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-08-
|
17
|
+
date: 2010-08-11 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|