generator-spec 0.4.7 → 0.4.8
Sign up to get free protection for your applications and to get access to all the features.
- 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
|