generator-spec 0.5.0 → 0.6.3

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 (119) hide show
  1. data/.document +0 -0
  2. data/.gitignore +0 -0
  3. data/.rspec +0 -0
  4. data/LICENSE +0 -0
  5. data/README.markdown +19 -13
  6. data/Rakefile +14 -35
  7. data/VERSION +1 -1
  8. data/generator-spec.gemspec +63 -148
  9. data/lib/generator-spec.rb +12 -0
  10. data/lib/generator-spec/namespaces.rb +7 -0
  11. data/lib/{generator_spec/helpers/configure_rails.rb → generator-spec/rails/configure.rb} +3 -3
  12. data/lib/generator-spec/rspec.rb +1 -0
  13. data/lib/generator-spec/rspec/configure.rb +6 -0
  14. data/lib/{generator_spec/rspec_generator/generator_util.rb → generator-spec/rspec/generator.rb} +6 -6
  15. data/lib/{generator_spec/rspec_generator → generator-spec/rspec/generator}/configure.rb +0 -0
  16. data/lib/{generator_spec/require_generator.rb → generator-spec/rspec/generator/require.rb} +0 -0
  17. data/lib/{generator_spec/rspec_generator → generator-spec/rspec/generator}/routes.rb +0 -0
  18. data/lib/{generator_spec/rspec_generator → generator-spec/rspec/generator}/test_case.rb +0 -0
  19. data/lib/generator-spec/rspec/macro.rb +18 -0
  20. data/lib/generator-spec/rspec/matchers/generate_artifact.rb +34 -0
  21. data/lib/generator-spec/rspec/matchers/generate_artifacts.rb +33 -0
  22. data/lib/generators/controller/controller_generator.rb +15 -21
  23. data/lib/generators/helper/helper_generator.rb +13 -29
  24. data/lib/generators/migration/migration_generator.rb +6 -7
  25. data/lib/generators/migration/templates/create_users.erb +0 -0
  26. data/lib/generators/model/model_generator.rb +36 -55
  27. data/lib/generators/observer/observer_generator.rb +2 -0
  28. data/lib/generators/view/view_generator.rb +2 -0
  29. data/spec/generator_spec/generators/controller_gen_spec.rb +40 -0
  30. data/spec/generator_spec/generators/{helper_generator_spec.rb → helper_gen_spec.rb} +4 -8
  31. data/spec/generator_spec/generators/{migration_generator_spec.rb → migration_gen_spec.rb} +3 -8
  32. data/spec/generator_spec/generators/model_gen_spec.rb +36 -0
  33. data/spec/generator_spec/generators/{observer_generator_spec.rb → observer_gen_spec.rb} +12 -21
  34. data/spec/generator_spec/generators/{view_generator_spec.rb → view_gen_spec.rb} +9 -20
  35. data/spec/generator_spec/matchers/generate_artifact_spec.rb +36 -0
  36. data/spec/generator_spec/matchers/generate_artifacts_spec.rb +35 -0
  37. data/spec/spec_helper.rb +5 -6
  38. data/wiki/Custom Rails 3 Generators.textile b/data/wiki/Custom Rails 3 → Generators.textile +0 -0
  39. data/wiki/content_matchers.textile +0 -0
  40. data/wiki/file_matchers.textile +0 -0
  41. data/wiki/migration_matchers.textile +0 -0
  42. data/wiki/rails_helpers.textile +0 -0
  43. metadata +117 -154
  44. data/lib/generator_spec.rb +0 -12
  45. data/lib/generator_spec/extensions/core_ext.rb +0 -47
  46. data/lib/generator_spec/helpers/generator_helper.rb +0 -11
  47. data/lib/generator_spec/helpers/migration_helper.rb +0 -69
  48. data/lib/generator_spec/main.rb +0 -77
  49. data/lib/generator_spec/matchers/content/content_matcher.rb +0 -110
  50. data/lib/generator_spec/matchers/content/have_block.rb +0 -57
  51. data/lib/generator_spec/matchers/content/have_call.rb +0 -59
  52. data/lib/generator_spec/matchers/content/have_calls.rb +0 -60
  53. data/lib/generator_spec/matchers/content/have_class_self.rb +0 -40
  54. data/lib/generator_spec/matchers/content/have_comment.rb +0 -42
  55. data/lib/generator_spec/matchers/content/have_method.rb +0 -66
  56. data/lib/generator_spec/matchers/content/have_module.rb +0 -66
  57. data/lib/generator_spec/matchers/content/have_region.rb +0 -48
  58. data/lib/generator_spec/matchers/content/have_subclass.rb +0 -50
  59. data/lib/generator_spec/matchers/content/include_module.rb +0 -51
  60. data/lib/generator_spec/matchers/content/inherit_from.rb +0 -40
  61. data/lib/generator_spec/matchers/file/generate_directory.rb +0 -73
  62. data/lib/generator_spec/matchers/file/generate_file.rb +0 -103
  63. data/lib/generator_spec/matchers/file/generate_migration.rb +0 -54
  64. data/lib/generator_spec/matchers/file/have_file.rb +0 -115
  65. data/lib/generator_spec/matchers/helpers/content.rb +0 -18
  66. data/lib/generator_spec/matchers/helpers/file.rb +0 -26
  67. data/lib/generator_spec/matchers/helpers/migration.rb +0 -89
  68. data/lib/generator_spec/matchers/migration/have_column.rb +0 -29
  69. data/lib/generator_spec/matchers/migration/have_index.rb +0 -9
  70. data/lib/generator_spec/matchers/migration/have_table.rb +0 -18
  71. data/lib/generator_spec/matchers/migration/have_tbl_column.rb +0 -25
  72. data/lib/generator_spec/matchers/migration/have_up_down.rb +0 -15
  73. data/lib/generator_spec/rails_helpers/base_helper.rb +0 -171
  74. data/lib/generator_spec/rails_helpers/rails_app.rb +0 -166
  75. data/lib/generator_spec/rails_helpers/rails_controller.rb +0 -44
  76. data/lib/generator_spec/rails_helpers/rails_helper.rb +0 -40
  77. data/lib/generator_spec/rails_helpers/rails_mailer.rb +0 -39
  78. data/lib/generator_spec/rails_helpers/rails_migration.rb +0 -51
  79. data/lib/generator_spec/rails_helpers/rails_model.rb +0 -40
  80. data/lib/generator_spec/rails_helpers/rails_observer.rb +0 -39
  81. data/lib/generator_spec/rails_helpers/rails_orm.rb +0 -114
  82. data/lib/generator_spec/rails_helpers/rails_view.rb +0 -65
  83. data/rspec_for_generators.gemspec +0 -96
  84. data/spec/generator_spec/generators/controller_generator_spec.rb +0 -47
  85. data/spec/generator_spec/generators/model_generator_spec.rb +0 -41
  86. data/spec/generator_spec/matchers/content/class_self_spec.rb +0 -30
  87. data/spec/generator_spec/matchers/content/have_block_spec.rb +0 -57
  88. data/spec/generator_spec/matchers/content/have_call_spec.rb +0 -55
  89. data/spec/generator_spec/matchers/content/have_calls_spec.rb +0 -47
  90. data/spec/generator_spec/matchers/content/have_class_spec.rb +0 -34
  91. data/spec/generator_spec/matchers/content/have_method_spec.rb +0 -52
  92. data/spec/generator_spec/matchers/content/have_module_spec.rb +0 -34
  93. data/spec/generator_spec/matchers/content/have_region_spec.rb +0 -56
  94. data/spec/generator_spec/matchers/content/have_subclass_spec.rb +0 -34
  95. data/spec/generator_spec/matchers/content/include_module_spec.rb +0 -36
  96. data/spec/generator_spec/matchers/content/inherit_from_spec.rb +0 -34
  97. data/spec/generator_spec/matchers/file/directory_spec.rb +0 -0
  98. data/spec/generator_spec/matchers/file/file_spec.rb +0 -0
  99. data/spec/generator_spec/matchers/file/migration_spec.rb +0 -0
  100. data/spec/generator_spec/matchers/migration/have_column_spec.rb +0 -0
  101. data/spec/generator_spec/matchers/migration/have_index_spec.rb +0 -0
  102. data/spec/generator_spec/matchers/migration/have_table_spec.rb +0 -0
  103. data/spec/generator_spec/matchers/migration/have_tbl_column_spec.rb +0 -0
  104. data/spec/generator_spec/matchers/migration/have_up_down_spec.rb +0 -0
  105. data/spec/generator_spec/matchers/rails/controller_matcher_spec.rb +0 -27
  106. data/spec/generator_spec/matchers/rails/helper_matcher_spec.rb +0 -26
  107. data/spec/generator_spec/matchers/rails/mailer_matcher_spec.rb +0 -24
  108. data/spec/generator_spec/matchers/rails/model_matcher_spec.rb +0 -31
  109. data/spec/generator_spec/matchers/rails/observer_matcher_spec.rb +0 -19
  110. data/spec/generator_spec/matchers/rails/view_matcher_spec.rb +0 -23
  111. data/spec/generator_spec/rails_helpers/rails_app_spec.rb +0 -0
  112. data/spec/generator_spec/rails_helpers/rails_controller_spec.rb +0 -33
  113. data/spec/generator_spec/rails_helpers/rails_helper_spec.rb +0 -33
  114. data/spec/generator_spec/rails_helpers/rails_mailer_spec.rb +0 -33
  115. data/spec/generator_spec/rails_helpers/rails_migration_spec.rb +0 -0
  116. data/spec/generator_spec/rails_helpers/rails_model_spec.rb +0 -31
  117. data/spec/generator_spec/rails_helpers/rails_observer_spec.rb +0 -33
  118. data/spec/generator_spec/rails_helpers/rails_orm_spec.rb +0 -0
  119. data/spec/generator_spec/rails_helpers/rails_view_spec.rb +0 -31
@@ -1,12 +0,0 @@
1
- require 'rspec'
2
- require 'rake'
3
- require 'rails'
4
- require 'require_all'
5
- require 'rails/generators'
6
- require 'active_support/core_ext/module/aliasing'
7
- require 'generator_spec/main'
8
-
9
- RSpec.configure do |config|
10
- config.include(RSpec::FileMatchers)
11
- config.include(RSpec::RubyContentMatchers)
12
- end
@@ -1,47 +0,0 @@
1
- class Array
2
- def args
3
- flatten.map{|a| a.args}.flatten
4
- end
5
- end
6
-
7
- class Symbol
8
- def args
9
- [to_s]
10
- end
11
- end
12
-
13
- class String
14
- def args
15
- (self =~ /\w+\s+\w+/) ? self.split : self
16
- end
17
- end
18
-
19
- class Module
20
- def multi_alias name, options={}
21
- config_options = options[:options]
22
- options.each_pair do |original, aliases|
23
- next if original == :options
24
- alias_methods name, original, [aliases].flatten, config_options
25
- end
26
- end
27
-
28
- protected
29
-
30
- def alias_methods name, original, aliases, config_options
31
- aliases.each do |alias_name|
32
- new_alias = make_name(name, alias_name.to_s, config_options)
33
- original_name = make_name(name, original.to_s, config_options)
34
- alias_method new_alias, original_name if respond_to? original_name
35
- end
36
- end
37
-
38
- def make_name name, alias_name, config_options
39
- return alias_name.gsub(/X/, name.to_s) if alias_name =~ /X/
40
- case config_options
41
- when :after
42
- "#{alias_name}_#{name}"
43
- when :before
44
- "#{name}_#{alias_name}"
45
- end
46
- end
47
- end
@@ -1,11 +0,0 @@
1
- module Rails::Generators
2
- module BasicHelper
3
- def info msg
4
- if self.class != @info_class
5
- @info_class = self.class
6
- Rails.logger.info "[#{@info_class}]"
7
- end
8
- Rails.logger.info "#{msg}" if RSpec::Generator.debug?
9
- end
10
- end
11
- end
@@ -1,69 +0,0 @@
1
- module Rails::Generators
2
- module MigrationHelper
3
- include Rails::Generators::Migration
4
- include Rails::Generators::BasicHelper
5
-
6
- module ClassMethods
7
- def migration_lookup_at(dirname) #:nodoc:
8
- Dir.glob("#{dirname}/[0-9]*_*.rb")
9
- end
10
-
11
- def migration_exists?(dirname, file_name) #:nodoc:
12
- migration_lookup_at(dirname).grep(/\d+_#{file_name}.rb$/).first
13
- end
14
- alias_method :first_migration_file, :migration_exists?
15
-
16
- def latest_migration_file(dirname, file_name) #:nodoc:
17
- migration_lookup_at(dirname).grep(/\d+_#{file_name}.rb$/).sort.last
18
- end
19
-
20
- def current_migration_number(dirname) #:nodoc:
21
- migration_lookup_at(dirname).collect do |file|
22
- File.basename(file).split("_").first.to_i
23
- end.max.to_i
24
- end
25
-
26
- def next_migration_number(dirname) #:nodoc:
27
- orm = Rails.configuration.generators.options[:rails][:orm]
28
- require "rails/generators/#{orm}"
29
- "#{orm.to_s.camelize}::Generators::Base".constantize.next_migration_number(dirname)
30
- rescue
31
- raise NotImplementedError
32
- end
33
- end
34
-
35
- def self.included(base) #:nodoc:
36
- base.extend ClassMethods
37
- end
38
-
39
- def reverse_migration_name name
40
- name.gsub(/^add_/, 'remove_').gsub(/^create_/, 'drop_')
41
- end
42
-
43
- def reverse_migration! migration_path
44
- reverse_class_names! migration_path
45
- reverse_up_down_methods! migration_path
46
- end
47
-
48
- def reverse_class_names! migration_path
49
- # Change class name
50
- gsub_file migration_path, /class Add/, 'class Remove'
51
- gsub_file migration_path, /class Create/, 'class Drop'
52
- end
53
-
54
- def reverse_up_down_methods! migration_path
55
- # swap up and down methods
56
- gsub_file migration_path, /up/, 'dwn'
57
- gsub_file migration_path, /down/, 'up'
58
- gsub_file migration_path, /dwn/, 'down'
59
- end
60
-
61
- def latest_migration_file dir, name
62
- self.class.latest_migration_file dir, name
63
- end
64
-
65
- def migration(options)
66
- migration_template "create_users.erb", "db/migrations/#{name}"
67
- end
68
- end
69
- end
@@ -1,77 +0,0 @@
1
- module RSpec
2
- module Generator
3
- end
4
- end
5
-
6
- module RSpec
7
- module Rails
8
- end
9
- end
10
-
11
- module Rails
12
- module Generators
13
- end
14
- end
15
-
16
-
17
- module RSpec
18
- module RubyContentMatchers
19
- end
20
- end
21
-
22
- module RSpec
23
- module FileMatchers
24
- end
25
- end
26
-
27
- require_all File.dirname(__FILE__) + '/extensions'
28
- require_all File.dirname(__FILE__) + '/helpers'
29
- require_all File.dirname(__FILE__) + '/rails_helpers'
30
- require_all File.dirname(__FILE__) + '/rspec_generator'
31
-
32
-
33
- module RSpec::Core
34
- class ExampleGroup
35
- def with_generator &block
36
- RSpec::Generator.with_generator &block
37
- end
38
-
39
- def setup_generator test_method_name=nil, &block
40
- RSpec::Generator.setup_generator test_method_name, &block
41
- end
42
- end
43
- end
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
- alias_method :load_helper, :helpers
57
- alias_method :load_helpers, :helpers
58
-
59
- protected
60
-
61
- def include_helper type
62
- raise ArgumentError, "Can not specify for #{type}" if ![:migration, :model, :helper, :controller, :view, :observer, :mailer].include?(type)
63
- class_eval do
64
- include "RSpec::Rails::#{type.to_s.camelize}".constantize
65
- end
66
- end
67
- end
68
-
69
- require 'generator_spec/require_generator'
70
-
71
- require 'generator_spec/matchers/content/content_matcher'
72
- require_all File.dirname(__FILE__) + '/matchers/content'
73
-
74
- require_all File.dirname(__FILE__) + '/matchers/file'
75
- require_all File.dirname(__FILE__) + '/matchers/migration'
76
-
77
- require_all File.dirname(__FILE__) + '/matchers/helpers'
@@ -1,110 +0,0 @@
1
- module RSpec
2
- class RubyContentMatcher
3
- attr_reader :content, :end_option, :alt_end, :content_matches
4
-
5
- def initialize name
6
- @end_option = name
7
- end
8
-
9
- def index
10
- 0
11
- end
12
-
13
- def indexes
14
- nil
15
- end
16
-
17
- def debug?
18
- RSpec::Generator.debug?
19
- end
20
-
21
- def matches? content, &block
22
- @content = content
23
- match = is_match? content
24
- content_to_yield = if indexes
25
- content_matches[indexes.first] || content_matches[indexes.last]
26
- else
27
- content_matches[index]
28
- end
29
- handle_result(content_to_yield, match, &block)
30
- end
31
-
32
- def is_match? content
33
- expr = get_expr(content)
34
- debug "match expression: #{expr}"
35
- match = (content =~ expr)
36
- @content_matches = [$1, $2, $3]
37
- match
38
- end
39
-
40
- def handle_result content, match, &block
41
- if block && match && content
42
- ruby_content = content.strip.extend(RSpec::RubyContent::Helpers)
43
- yield ruby_content
44
- end
45
- match
46
- end
47
-
48
- def get_expr content
49
- expr = /#{main_expr}#{comment_end}/m
50
- if (content =~ expr).nil?
51
- /#{main_expr}#{end_expr}/m
52
- else
53
- expr
54
- end
55
- end
56
-
57
- Q_ANY_GROUP = '(.*?)'
58
- ANY_GROUP = '(.*)'
59
-
60
- SPACES = '\s+'
61
- OPT_SPACES = '\s*'
62
- LPAR = '(\()'
63
- RPAR = '(\))'
64
- OPT_ARGS = '(\(.+\))?'
65
-
66
- def opt expr
67
- "#{expr}?"
68
- end
69
-
70
- def args_msg
71
- args ? " with arguments #{args}" : ''
72
- end
73
-
74
- def any_args_expr
75
- OPT_SPACES + OPT_ARGS
76
- end
77
-
78
- def args_expr
79
- args ? OPT_SPACES + opt(LPAR) + OPT_SPACES + "#{args}" + OPT_SPACES + opt(RPAR) : ''
80
- end
81
-
82
- def main_expr
83
- raise "Must override main_expr"
84
- end
85
-
86
- def end_expr
87
- "$"
88
- end
89
-
90
- def comment_end
91
- alt_end != nil ? '#' + SPACES + "(#{end_option}|#{alt_end})" : '#' + SPACES + "#{end_option}"
92
- end
93
-
94
- def failure_message
95
- debug_content
96
- end
97
-
98
- def negative_failure_message
99
- debug_content
100
- end
101
-
102
- def debug_content
103
- debug "Content: #{content}"
104
- end
105
-
106
- def debug msg
107
- puts msg if debug?
108
- end
109
- end
110
- end
@@ -1,57 +0,0 @@
1
- module RSpec::RubyContentMatchers
2
- class HaveBlock < RSpec::RubyContentMatcher
3
- attr_reader :name, :args, :block_args, :do_option, :end_option
4
-
5
- def initialize(name, options={})
6
- super options[:end] || name
7
- @name = name.to_s
8
- @args = options[:args]
9
- @do_option = options[:do].nil? ? true : options[:do]
10
- @block_args = options[:block_args]
11
- end
12
-
13
- def failure_message
14
- super
15
- return "Expected there to be a block #{name}#{args_msg}#{block_args_msg}, but there wasn't"
16
- end
17
-
18
- def negative_failure_message
19
- super
20
- return "Did not expect there to be a block #{name}#{args_msg}, but there was"
21
- end
22
-
23
- protected
24
-
25
- def block_args_msg
26
- " and block arguments #{block_args}" if block_args
27
- end
28
-
29
- def indexes
30
- [0, 2]
31
- end
32
-
33
- def main_expr
34
- "#{name}" + SPACES + "#{args_expr}#{do_expr}" + ANY_GROUP
35
- end
36
-
37
- def do_expr
38
- do_option == false ? '' : 'do' + SPACES + "#{block_args_expr}"
39
- end
40
-
41
- def args_expr
42
- args ? '(\()?\s*' + args + '\s*(\))?\s+' : ''
43
- end
44
-
45
- def block_args_expr
46
- block_args ? '\|\s*' + block_args + '\s*\|' : ''
47
- end
48
-
49
- def alt_end
50
- 'do'
51
- end
52
- end
53
-
54
- def have_block(name, options={})
55
- HaveBlock.new(name, options)
56
- end
57
- end
@@ -1,59 +0,0 @@
1
- # This method tries to see if a specific method is contained in the generated file.
2
- # It can operate (should) on either a file name or the raw content
3
- #
4
- # generated_file_name.should have_method "hello" # 'my/path/say_hello.rb'.should have_method "hello"
5
- #
6
- # say_hello_file_content.should have_method "hello"
7
- #
8
- module RSpec::RubyContentMatchers
9
- class HaveCall < RSpec::RubyContentMatcher
10
- attr_reader :method, :args, :dot
11
-
12
- def initialize(method, options = {})
13
- @method = method.to_s
14
- @args = options[:args] || options
15
- @dot = options[:dot]
16
- end
17
-
18
- def matches?(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)
27
- end
28
-
29
- def failure_message
30
- super
31
- "Expected there to be a call to #{method}#{args_msg}, but there wasn't"
32
- end
33
-
34
- def negative_failure_message
35
- super
36
- "Did not expect there to be a call to #{method}#{args_msg}, but there was"
37
- end
38
-
39
- protected
40
-
41
- def not_def
42
- '[^def\s]'
43
- end
44
-
45
- def dot_expr
46
- return Regexp.escape(dot) if dot.kind_of?(String)
47
- dot == true ? "#{not_def}\." : not_def
48
- end
49
-
50
- end
51
-
52
- def have_call(method, options = {})
53
- HaveCall.new(method, options)
54
- end
55
-
56
- def have_dot_call(method, options = {})
57
- HaveCall.new(method, options[:args], :dot => options[:dot] || true)
58
- end
59
- end