generator-spec 0.4.8 → 0.5.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.
Files changed (37) hide show
  1. data/README.markdown +6 -0
  2. data/VERSION +1 -1
  3. data/generator-spec.gemspec +4 -2
  4. data/lib/generator_spec/extensions/core_ext.rb +30 -0
  5. data/lib/generator_spec/helpers/migration_helper.rb +15 -10
  6. data/lib/generator_spec/main.rb +5 -3
  7. data/lib/generator_spec/matchers/content/content_matcher.rb +8 -4
  8. data/lib/generator_spec/matchers/content/have_call.rb +4 -4
  9. data/lib/generator_spec/matchers/content/have_comment.rb +42 -0
  10. data/lib/generator_spec/matchers/file/generate_file.rb +2 -4
  11. data/lib/generator_spec/matchers/file/have_file.rb +2 -2
  12. data/lib/generator_spec/matchers/migration/have_up_down.rb +2 -0
  13. data/lib/generator_spec/rails_helpers/base_helper.rb +171 -0
  14. data/lib/generator_spec/rails_helpers/rails_app.rb +9 -2
  15. data/lib/generator_spec/rails_helpers/rails_controller.rb +33 -25
  16. data/lib/generator_spec/rails_helpers/rails_helper.rb +27 -25
  17. data/lib/generator_spec/rails_helpers/rails_mailer.rb +29 -21
  18. data/lib/generator_spec/rails_helpers/rails_migration.rb +41 -26
  19. data/lib/generator_spec/rails_helpers/rails_model.rb +29 -19
  20. data/lib/generator_spec/rails_helpers/rails_observer.rb +27 -23
  21. data/lib/generator_spec/rails_helpers/rails_orm.rb +33 -18
  22. data/lib/generator_spec/rails_helpers/rails_view.rb +42 -28
  23. data/spec/generator_spec/matchers/content/have_call_spec.rb +16 -0
  24. data/spec/generator_spec/matchers/rails/controller_matcher_spec.rb +3 -2
  25. data/spec/generator_spec/matchers/rails/helper_matcher_spec.rb +1 -1
  26. data/spec/generator_spec/matchers/rails/mailer_matcher_spec.rb +1 -1
  27. data/spec/generator_spec/matchers/rails/model_matcher_spec.rb +4 -4
  28. data/spec/generator_spec/matchers/rails/observer_matcher_spec.rb +1 -1
  29. data/spec/generator_spec/matchers/rails/view_matcher_spec.rb +1 -1
  30. data/spec/generator_spec/rails_helpers/rails_controller_spec.rb +33 -0
  31. data/spec/generator_spec/rails_helpers/rails_helper_spec.rb +33 -0
  32. data/spec/generator_spec/rails_helpers/rails_mailer_spec.rb +33 -0
  33. data/spec/generator_spec/rails_helpers/rails_model_spec.rb +31 -0
  34. data/spec/generator_spec/rails_helpers/rails_observer_spec.rb +33 -0
  35. data/spec/generator_spec/rails_helpers/rails_view_spec.rb +31 -0
  36. data/spec/spec_helper.rb +1 -1
  37. metadata +6 -4
@@ -1,5 +1,12 @@
1
1
  module RSpec::Rails
2
- module App
2
+ module App
3
+ def create_empty_tmp *args
4
+ args.flatten.each do |arg|
5
+ dir = send :"#{arg}_dir"
6
+ FileUtils.mkdir_p dir
7
+ end
8
+ end
9
+
3
10
  def root_dir
4
11
  ::Rails.root
5
12
  end
@@ -85,7 +92,7 @@ module RSpec::Rails
85
92
  end
86
93
 
87
94
  def mailer_files
88
- rails_app_files :mailers
95
+ rails_app_files :mailers, '**/*_mailer.rb'
89
96
  end
90
97
 
91
98
  def helper_files
@@ -1,36 +1,44 @@
1
1
  module RSpec::Rails
2
- module Controller
3
- include RSpec::Rails::App
4
-
5
- def create_controller name, content=nil
6
- file = controller_file_name(name)
7
- unless File.exist?(file)
8
- FileUtils.mkdir_p File.dirname(file)
9
- content ||= yield if block_given?
10
- File.open(file, 'w') do |f|
11
- f.puts controller_content(name, content)
12
- end
13
- end
14
- end
2
+ module Controller
3
+ include RSpec::Rails::BaseHelper
15
4
 
16
- def controller_content name, content=nil
17
- %Q{class #{name.to_s.camelize}Controller < ActionController::Base
18
- #{content}
19
- end}
5
+ def controller_file_name name, options=nil
6
+ artifact_path name, :controller
20
7
  end
21
8
 
9
+ # CREATE
10
+ def create_controller name, options={}, &block
11
+ create_artifact(name, set(options, :controller), &block)
12
+ end
13
+
14
+ # UPDATE
15
+ def insert_into_controller(name, options={}, &block)
16
+ insert_content(name, set(options, :controller), &block)
17
+ end
18
+
19
+ # READ
20
+ def read_controller(name, options={}, &block)
21
+ read_artifact(name, set(options, :controller), &block)
22
+ end
23
+
24
+ # DELETE
22
25
  def remove_controller name
23
- file = controller_file_name(name)
24
- FileUtils.rm_f(file) if File.exist?(file)
26
+ remove_artifact name, :controller
25
27
  end
26
28
 
27
29
  def remove_controllers *names
28
- names.each{|name| remove_controller name }
30
+ remove_artifacts :controller, *names
29
31
  end
30
-
31
- def controller_file_name name
32
- File.join(controller_dir, "#{name}_controller.rb")
33
- end
34
-
32
+
33
+
34
+ def controller_marker name, options=nil
35
+ "#{name.to_s.camelize}Controller < ActionController::Base"
36
+ end
37
+
38
+ def new_controller_content name, content=nil, &block
39
+ new_artifact_content name, :controller, content, &block
40
+ end
41
+
42
+ aliases_for :controller
35
43
  end
36
44
  end
@@ -1,38 +1,40 @@
1
1
  module RSpec::Rails
2
- module Helper
3
- include RSpec::Rails::App
2
+ module Helper
3
+ include RSpec::Rails::BaseHelper
4
+
5
+ def helper_file_name name, options=nil
6
+ artifact_path name, :helper
7
+ end
4
8
 
5
- def create_helper name, content=nil
6
- file = helper_file_name(name)
7
- unless File.exist?(file)
8
- FileUtils.mkdir_p File.dirname(file)
9
- content ||= yield if block_given?
10
- File.open(file, 'w') do |f|
11
- f.puts helper_content(name, content)
12
- end
13
- end
9
+ def create_helper name, options={}, &block
10
+ create_artifact(name, set(options, :helper), &block)
14
11
  end
15
12
 
16
- def helper_content name, content=nil
17
- %Q{class #{name.to_s.camelize}Helper
18
- #{content}
19
- end}
20
- end
13
+ def insert_into_helper(name, options={}, &block)
14
+ insert_content(name, set(options, :helper), &block)
15
+ end
16
+ alias_method :update_helper, :insert_into_helper
17
+
18
+ def read_helper(name, options={}, &block)
19
+ read_artifact(name, set(options, :helper), &block)
20
+ end
21
21
 
22
22
  def remove_helper name
23
- file = helper_file_name(name)
24
- FileUtils.rm_f(file) if File.exist?(file)
23
+ remove_artifact name, :helper
25
24
  end
26
25
 
27
26
  def remove_helpers *names
28
- names.each{|name| remove_helper name }
27
+ remove_artifacts :helper, *names
28
+ end
29
+
30
+ def helper_marker name, options=nil
31
+ "#{name.to_s.camelize}Helper"
32
+ end
33
+
34
+ def new_helper_content name, content=nil, &block
35
+ new_artifact_content name, :helper, content, &block
29
36
  end
30
37
 
31
- protected
32
-
33
- def helper_file_name name
34
- File.join(helper_dir, "#{name}_helper.rb")
35
- end
36
-
38
+ aliases_for :helper
37
39
  end
38
40
  end
@@ -1,31 +1,39 @@
1
1
  module RSpec::Rails
2
- module Mailer
3
- include RSpec::Rails::App
4
-
5
- def create_mailer name, content=nil
6
- file = mailer_file_name(name)
7
- unless File.exist?(file)
8
- FileUtils.mkdir_p File.dirname(file)
9
- content ||= yield if block_given?
10
- return if !content
11
- File.open(file, 'w') do |f|
12
- f.puts content
13
- end
14
- end
2
+ module Mailer
3
+ include RSpec::Rails::BaseHelper
4
+
5
+ def mailer_file_name name, options=nil
6
+ artifact_path name, :mailer
7
+ end
8
+
9
+ def create_mailer name, options={}, &block
10
+ create_artifact(name, set(options, :mailer), &block)
15
11
  end
16
12
 
13
+ def insert_into_mailer(name, options={}, &block)
14
+ insert_content(name, set(options, :mailer), &block)
15
+ end
16
+
17
+ def read_mailer(name, options={}, &block)
18
+ read_artifact(name, set(options, :mailer), &block)
19
+ end
20
+
17
21
  def remove_mailer name
18
- file = mailer_file_name(name)
19
- FileUtils.rm_f(file) if File.exist?(file)
22
+ remove_artifact name, :mailer
20
23
  end
21
24
 
22
25
  def remove_mailers *names
23
- names.each{|name| remove_mailer name }
24
- end
25
-
26
- def mailer_file_name name
27
- File.join(mailer_dir, "#{name}.rb")
28
- end
26
+ remove_artifacts :mailer, *names
27
+ end
28
+
29
+ def mailer_marker name, options=nil
30
+ "#{name.to_s.camelize} < ActionMailer::Base"
31
+ end
32
+
33
+ def new_mailer_content name, content=nil, &block
34
+ new_artifact_content name, :mailer, content, &block
35
+ end
29
36
 
37
+ aliases_for :mailer
30
38
  end
31
39
  end
@@ -1,36 +1,51 @@
1
1
  module RSpec::Rails
2
- module Migration
3
- include RSpec::Rails::App
4
-
5
- def create_migration number, name, &block
6
- file = migration_file_name(number, name)
7
- unless File.exist?(file)
8
- FileUtils.mkdir_p File.dirname(file)
9
- File.open(file, 'w') do |f|
10
- f.puts file_content(name)
11
- yield f if block_given?
12
- end
13
- end
2
+ module Migration
3
+ include RSpec::Rails::BaseHelper
4
+
5
+ include Rails::Generators::MigrationHelper::ClassMethods
6
+
7
+ def migration_file_name name, options={}
8
+ number = options[:number]
9
+ number = next_migration_number(migration_dir) if !number
10
+ File.join(migration_dir, "#{number}_#{name}.rb")
11
+ end
12
+
13
+ def create_migration name, options={}, &block
14
+ create_artifact(name, set(options, :migration), &block)
14
15
  end
16
+
17
+ def find_migration name, option=nil
18
+ migrations = Dir.glob("#{migration_dir}/[0-9]*_*.rb")
19
+ return nil if !migrations.empty?
20
+ matching_migrations = migrations.grep(/\d+_#{name}\.rb$/)
21
+ return nil if matching_migrations.empty?
22
+ migration_file = (option == :last) ? matching_migrations.last : matching_migrations.first
23
+ end
24
+
25
+ def insert_into_migration(name, options={}, &block)
26
+ insert_content(name, set(options, :migration), &block)
27
+ end
28
+
29
+ def read_migration(name, options={}, &block)
30
+ read_artifact(name, set(options, :migration), &block)
31
+ end
15
32
 
16
33
  def remove_migration name
17
- migrations = Dir.glob("#{migration_dir}/[0-9]*_*.rb")
18
- migration_file = if !migrations.empty?
19
- migrations.grep(/\d+_#{name}\.rb$/).first
20
- else
21
- false
22
- end
23
- FileUtils.rm_f(migration_file) if migration_file
34
+ remove_artifact :migration, name
24
35
  end
25
36
 
26
37
  def remove_migrations *names
27
- names.each do |name|
28
- remove_migration name
29
- end
30
- end
38
+ remove_artifacts :migration, *names
39
+ end
40
+
41
+ def migration_marker name, options=nil
42
+ "#{name.to_s.camelize} < ActiveRecord::Migration"
43
+ end
44
+
45
+ def new_migration_content name, content=nil, &block
46
+ new_artifact_content name, :migration, content, &block
47
+ end
31
48
 
32
- def migration_file_name number, name
33
- File.join(migration_dir, "#{number}_#{name}.rb")
34
- end
49
+ aliases_for :migration
35
50
  end
36
51
  end
@@ -1,30 +1,40 @@
1
1
  module RSpec::Rails
2
- module Model
3
- include RSpec::Rails::App
2
+ module Model
3
+ include RSpec::Rails::BaseHelper
4
+
5
+ def model_file_name name, options=nil
6
+ artifact_path name, :model
7
+ end
4
8
 
5
- def create_model name, type=nil, &block
6
- file = model_file_name(name)
7
- unless File.exist?(file)
8
- FileUtils.mkdir_p File.dirname(file)
9
- File.open(file, 'w') do |f|
10
- raise "You must include an ORM helper in your model spec, fx: include RSpec::Rails::Orm::ActiveRecord" if !respond_to? :file_content
11
- f.puts file_content(name, type)
12
- yield f if block_given?
13
- end
14
- end
9
+ def create_model name, options={}, &block
10
+ create_artifact(name, set(options, :model), &block)
15
11
  end
16
12
 
13
+ def insert_into_model(name, options={}, &block)
14
+ insert_content(name, set(options, :model), &block)
15
+ end
16
+
17
+ def read_model(name, options={}, &block)
18
+ read_artifact(name, set(options, :model), &block)
19
+ end
20
+
17
21
  def remove_model name
18
- file = model_file_name(name)
19
- FileUtils.rm_f(file) if File.exist?(file)
22
+ remove_artifact name, :model
20
23
  end
21
24
 
22
25
  def remove_models *names
23
- names.each{|name| remove_model name }
24
- end
26
+ remove_artifacts :model, *names
27
+ end
28
+
29
+ def model_marker name, options={}
30
+ return send :orm_marker_name, options[:model_type] if respond_to?(:orm_marker_name)
31
+ name.camelize
32
+ end
33
+
34
+ aliases_for :model
25
35
 
26
- def model_file_name name
27
- File.join(model_dir, "#{name}.rb")
28
- end
36
+ def orm_notify
37
+ ". You must specify an ORM with the macro use_orm, f.ex -- use_orm :active_record"
38
+ end
29
39
  end
30
40
  end
@@ -1,35 +1,39 @@
1
1
  module RSpec::Rails
2
- module Observer
3
- include RSpec::Rails::App
4
-
5
- def create_observer name, content=nil
6
- file = observer_file_name(name)
7
- unless File.exist?(file)
8
- FileUtils.mkdir_p File.dirname(file)
9
- content ||= yield if block_given?
10
- File.open(file, 'w') do |f|
11
- f.puts observer_content(name, content)
12
- end
13
- end
2
+ module Observer
3
+ include RSpec::Rails::BaseHelper
4
+
5
+ def observer_file_name name, options=nil
6
+ artifact_path name, :observer
7
+ end
8
+
9
+ def create_observer name, options={}, &block
10
+ create_artifact(name, set(options, :observer), &block)
14
11
  end
15
12
 
16
- def observer_content name, content=nil
17
- %Q{class #{name.to_s.camelize}Observer < ActiveRecord::Observer
18
- #{content}
19
- end}
13
+ def insert_into_observer(name, options={}, &block)
14
+ insert_content(name, set(options, :observer), &block)
15
+ end
16
+
17
+ def read_observer(name, options={}, &block)
18
+ read_artifact(name, set(options, :observer), &block)
20
19
  end
21
20
 
22
21
  def remove_observer name
23
- file = observer_file_name(name)
24
- FileUtils.rm_f(file) if File.exist?(file)
22
+ remove_artifact name, :observer
25
23
  end
26
24
 
27
- def remove_observers *names
28
- names.each{|name| remove_observer name }
25
+ def remove_observers *names
26
+ remove_artifacts :observer, *names
29
27
  end
28
+
29
+ def observer_marker name, options=nil
30
+ "#{name.to_s.camelize}Observer < ActiveRecord::Observer"
31
+ end
32
+
33
+ def new_observer_content name, content=nil, &block
34
+ new_artifact_content name, :observer, content, &block
35
+ end
30
36
 
31
- def observer_file_name name
32
- File.join(observer_dir, "#{name}_observer.rb")
33
- end
37
+ aliases_for :observer
34
38
  end
35
39
  end
@@ -3,10 +3,14 @@ require 'generator_spec/rails_helpers/rails_model'
3
3
  module RSpec::Rails
4
4
  module Orm
5
5
  module Base
6
- include RSpec::Rails::Model
6
+ include RSpec::Rails::Model
7
7
 
8
8
  protected
9
9
 
10
+ def orm_marker_name type = :document
11
+ document_name type
12
+ end
13
+
10
14
  def document_name type
11
15
  type_content = type == :document ? "#{orm_name}::Document" : "#{orm_name}::EmbeddedDocument"
12
16
  end
@@ -15,19 +19,21 @@ module RSpec::Rails
15
19
  "class #{name.to_s.camelize}"
16
20
  end
17
21
 
18
- def file name
22
+ def file name, include_stmt, &block
19
23
  %Q{#{clazz name}
20
- #{yield if block_given?}
21
- end}
24
+ #{include_stmt}
25
+ #{yield if block}
26
+ end}
22
27
  end
23
28
 
24
- def file_w_include name
25
- file name { "include #{yield}" if block_given?}
29
+ def file_w_include name, module_name, &block
30
+ file name, "include #{module_name}", &block
26
31
  end
27
32
 
28
- def file_w_inherit name
29
- %Q{#{clazz name} < #{yield if block_given?}
30
- end}
33
+ def file_w_inherit name, module_name, &block
34
+ %Q{#{clazz name} < #{module_name}
35
+ #{yield if block}
36
+ end}
31
37
  end
32
38
 
33
39
  def field name, type = nil
@@ -39,8 +45,12 @@ module RSpec::Rails
39
45
  module ActiveRecord
40
46
  include RSpec::Rails::Orm::Base
41
47
 
42
- def file_content name, type=nil
43
- file_w_inherit(name) {'ActiveRecord::Base'}
48
+ def orm_marker_name type=nil
49
+ 'ActiveRecord::Base'
50
+ end
51
+
52
+ def new_model_content name, type=nil, content
53
+ file_w_inherit(name, orm_marker_name(type)) { content }
44
54
  end
45
55
  end
46
56
 
@@ -49,9 +59,10 @@ module RSpec::Rails
49
59
 
50
60
  def orm_name
51
61
  'MongoMapper'
52
- end
53
- def file_content name, type = :document
54
- file_w_include(name) { document_name type }
62
+ end
63
+
64
+ def new_model_content name, type = :document
65
+ file_w_include(name, orm_marker_name(type)) { content }
55
66
  end
56
67
 
57
68
  def field_name
@@ -70,8 +81,8 @@ module RSpec::Rails
70
81
  'field'
71
82
  end
72
83
 
73
- def file_content name, type = :document
74
- file_w_include(name) { document_name type }
84
+ def new_model_content name, type = :document
85
+ file_w_include(name, orm_marker_name(type)) { content }
75
86
  end
76
87
 
77
88
  def field name, type = nil
@@ -87,8 +98,12 @@ module RSpec::Rails
87
98
  'DataMapper'
88
99
  end
89
100
 
90
- def file_content name
91
- file_w_include(name) { "#{orm_name}::Resource" }
101
+ def orm_marker_name type=nil
102
+ "#{orm_name}::Resource"
103
+ end
104
+
105
+ def new_model_content name
106
+ file_w_include(name, orm_marker_name(type)) { content }
92
107
  end
93
108
 
94
109
  def field_name