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
@@ -0,0 +1 @@
1
+ require_all File.dirname(__FILE__) + '/rspec'
@@ -0,0 +1,6 @@
1
+ require 'generator-spec/rspec/macro'
2
+
3
+ RSpec.configure do |config|
4
+ config.extend RSpec::Generator::Macro
5
+ config.include RSpec::Generator::Macro
6
+ end
@@ -1,18 +1,18 @@
1
1
  require 'rails/all'
2
2
  require 'rails/generators'
3
3
  require 'rails/generators/test_case'
4
- require 'generator_spec/rspec_generator/configure'
4
+ require 'generator-spec/rspec/generator/configure'
5
5
 
6
6
  module RSpec::Generator
7
7
  class << self
8
- attr_accessor :generator, :test_method_name, :remove_temp_dir, :debug, :logger
8
+ attr_accessor :generator, :test_method_name, :remove_temp_dir, :debug, :logger, :logfile
9
9
 
10
10
  def debug?
11
11
  debug
12
12
  end
13
13
 
14
14
  def info msg
15
- Rails.logger.info(msg) if RSpec::Generator.debug?
15
+ Rails.logger.info(msg) if debug?
16
16
  end
17
17
 
18
18
  def remove_rails_dir!
@@ -30,11 +30,11 @@ module RSpec::Generator
30
30
  with(get_generator, &block)
31
31
  end
32
32
 
33
- def setup_generator test_method_name=nil, &block
33
+ def setup_generator test_method_name, &block
34
34
  info "-----------------------------------------------------"
35
35
  info "#{Time.now} -- setup generator: [#{test_method_name}]"
36
- clean! if test_method_name
37
- generator = get_generator(test_method_name).extend(RSpec::Generator::Helpers)
36
+ clean! if test_method_name
37
+ generator = get_generator(test_method_name) #.extend(Rails::Assist::Generators::BasicHelper)
38
38
  if block
39
39
  block.arity < 1 ? generator.class.instance_eval(&block) : block.call(generator.class)
40
40
  end
@@ -0,0 +1,18 @@
1
+ module RSpec::Generator
2
+ module Macro
3
+ def with_generator &block
4
+ RSpec::Generator.with_generator &block
5
+ end
6
+
7
+ def setup_generator test_method_name=nil, &block
8
+ RSpec::Generator.setup_generator test_method_name, &block
9
+ end
10
+ end
11
+ end
12
+
13
+ module RSpec::Core
14
+ class ExampleGroup
15
+ extend RSpec::Generator::Macro
16
+ end
17
+ end
18
+
@@ -0,0 +1,34 @@
1
+ module RSpec::RailsApp::Artifact
2
+ module Matchers
3
+ class GenerateArtifact < HaveArtifact
4
+ def initialize(name, artifact_type)
5
+ super
6
+ end
7
+
8
+ def matches?(generator, &block)
9
+ super File.join(Rails.application.config.root_dir, 'rails_app'), &block
10
+ end
11
+ end
12
+
13
+ def generate_artifact name, type
14
+ GenerateArtifact.new name, type
15
+ end
16
+
17
+ (::Rails3::Assist.artifacts - [:view]).each do |name|
18
+ plural_artifact = name.to_s.pluralize
19
+ class_eval %{
20
+ def generate_#{name} name
21
+ generate_artifact name, :#{name}
22
+ end
23
+ alias_method :create_#{name}, :generate_#{name}
24
+ }
25
+ end
26
+
27
+ def generate_view folder, action=nil, view_ext=nil
28
+ arg = {:folder => folder, :action => action, :view_ext => view_ext}
29
+ generate_artifact arg, :view
30
+ end
31
+ alias_method :create_view, :generate_view
32
+ end
33
+ end
34
+
@@ -0,0 +1,33 @@
1
+ module RSpec::RailsApp::Artifact
2
+ module Matchers
3
+ class GenerateArtifacts < HaveArtifacts
4
+ def initialize(artifact_type, *names)
5
+ super
6
+ end
7
+
8
+ def matches?(generator, &block)
9
+ super File.join(Rails.application.config.root_dir, 'rails_app'), &block
10
+ end
11
+ end
12
+
13
+ def generate_artifacts type, *names
14
+ GenerateArtifacts.new type, *names
15
+ end
16
+
17
+ (::Rails3::Assist.artifacts - [:view]).each do |name|
18
+ plural_artifact = name.to_s.pluralize
19
+ class_eval %{
20
+ def generate_#{plural_artifact} *names
21
+ generate_artifacts :#{name}, *names
22
+ end
23
+ alias_method :create_#{plural_artifact}, :generate_#{plural_artifact}
24
+ }
25
+ end
26
+
27
+ def generate_views folder, *args
28
+ generate_artifacts folder, *args
29
+ end
30
+ alias_method :create_views, :generate_views
31
+ end
32
+ end
33
+
@@ -1,33 +1,27 @@
1
+ require 'rails3_artifactor'
2
+
1
3
  class ControllerGenerator < Rails::Generators::NamedBase
2
4
  desc "Adds method 'control_me' to a Controller"
3
5
 
4
- def self.source_root
5
- @source_root ||= File.expand_path("../templates", __FILE__)
6
- end
7
-
8
6
  def add_helper_method
9
- if File.exist?(controller_file_name)
10
- inject_into_file(controller_file_name, controller_method_code, :after => after_txt) if after_txt
11
- else
12
- say "#{controller_file_name} does not exist. Please create it first before you can add a controller method to it!", :red
7
+ begin
8
+ insert_into_controller name do
9
+ include_txt
10
+ end
11
+ rescue
12
+ say "Controller #{name} does not exist. Please create it first before you can add a controller method to it!", :red
13
13
  end
14
14
  end
15
15
 
16
16
  protected
17
+
18
+ extend Rails3::Assist::UseMacro
19
+ use_helpers :controller
17
20
 
18
- def after_txt
19
- "#{class_name}Controller"
20
- end
21
-
22
- def controller_file_name
23
- File.join(Rails.root, "app/controllers/#{file_name}_controller.rb")
24
- end
25
-
26
- def controller_method_code
27
- %Q{
28
- def control_me
21
+ def include_txt
22
+ %{def control_me
29
23
  "Control me please!"
24
+ end}
30
25
  end
31
- }
32
- end
26
+
33
27
  end
@@ -1,36 +1,20 @@
1
+ require 'rails3_artifactor'
2
+
1
3
  class HelperGenerator < Rails::Generators::NamedBase
2
- include Rails::Generators::BasicHelper
3
-
4
+ include Rails3::Assist:Artifact::Helper
5
+
4
6
  desc "Adds method 'help_me' to a Helper"
5
7
 
6
- def self.source_root
7
- @source_root ||= File.expand_path("../templates", __FILE__)
8
- end
9
-
10
- def add_helper_method
11
- info "add_helper_method: #{helper_file_name}"
12
- if File.exist?(helper_file_name)
13
- inject_into_file(helper_file_name, helper_method_code, :after => after_txt) if after_txt
14
- else
15
- say "#{helper_file_name} does not exist. Please create it first before you can add a helper method to it!", :red
8
+ def add_method
9
+ begin
10
+ insert_into_helper name do
11
+ %{def help_me
12
+ "Help me please!"
13
+ end}
14
+ end
15
+ rescue
16
+ say "Helper #{name} does not exist. Please create it!", :red
16
17
  end
17
18
  end
18
19
 
19
- protected
20
-
21
- def after_txt
22
- "#{class_name}Helper"
23
- end
24
-
25
- def helper_file_name
26
- File.join(Rails.root, "app/helpers/#{file_name}_helper.rb")
27
- end
28
-
29
- def helper_method_code
30
- %Q{
31
- def help_me
32
- "Help me please!"
33
- end
34
- }
35
- end
36
20
  end
@@ -1,14 +1,13 @@
1
+ require 'migration_assist'
2
+
1
3
  class MigrationGenerator < Rails::Generators::NamedBase
2
- include Rails::Generators::MigrationHelper
4
+ include Rails::Migration::Assist
3
5
 
4
6
  desc "Creates a migration"
5
7
 
6
- def self.source_root
7
- @source_root ||= File.expand_path("../templates", __FILE__)
8
- end
9
-
8
+ source_root File.dirname(__FILE__) + '/templates'
9
+
10
10
  def create_migration
11
- info "Create migration #{name}"
12
- migration "#{name} name:string age:integer admin:boolean"
11
+ migration name, 'create_users'
13
12
  end
14
13
  end
File without changes
@@ -1,91 +1,72 @@
1
- class ModelGenerator < Rails::Generators::Base
1
+ require 'active_support/inflector'
2
+ require 'logging_assist'
3
+
4
+ include Log4r
5
+
6
+ class ModelGenerator < Rails::Generators::NamedBase
2
7
  desc "Adds Canable::Ables permission system to Model"
3
8
 
4
- argument :name, :type => :string, :default => 'User', :desc => 'Name of model to make Canable:Able', :required => false
5
-
6
- def self.source_root
7
- @source_root ||= File.expand_path("../../templates", __FILE__)
8
- end
9
+ # argument :name, :type => :string, :default => 'User', :desc => 'Name of model to make Canable:Able', :required => false
9
10
 
11
+ # class_option :user_stamps, :type => :boolean, :default => false
12
+
13
+
10
14
  def make_canable_able
11
- if File.exist?(model_file_name)
12
- @model_file_txt = File.open(model_file_name).read
13
- after_txt = find_after_txt(model_file_txt)
14
- inject_into_file(model_file_name, canable_include_txt, :after => after_txt) if after_txt
15
- else
16
- say "#{model_file_name} does not exist. Please create it first before you can make it Canable:Able", :red
15
+ begin
16
+ log.debug "make_canable_able: #{name}"
17
+ insert_into_model name do
18
+ canable_include_txt
19
+ end
20
+ rescue
21
+ say "model #{name} does not exist. Please create it first before you can make it Canable:Able", :red
17
22
  end
18
23
  end
19
24
 
20
25
  def post_log
21
- say "Your model #{model_class_name} is now Canable:Able. Please define your permission login in #{model_file_name}", :green
26
+ say "Your model #{name.to_s.camelize} is now Canable:Able. Please define your permissions in the model", :green
22
27
  end
23
28
 
24
29
  protected
25
30
 
26
- attr_accessor :model_file_txt
27
-
28
- def find_after_txt model_file_txt
29
- # after first include statement
30
- match = (model_file_txt =~ /(include\s+\S+)/)
31
- return $1 if match
32
-
33
- # or after class definition if no includes
34
- match = model_file_txt =~ /(class\s+#{model_class_name}\s+<\s+ActiveRecord::Base)/ # first try match AR model
35
- match = model_file_txt =~ /(class\s+#{model_class_name})/ if !match
36
- $1 || nil
37
- end
38
-
39
- def model_class_name
40
- name.to_s.camelize
41
- end
42
-
43
- def model_file_name
44
- File.join(Rails.root, "app/models/#{name}.rb")
31
+ def log
32
+ @log ||= Rails::Assist::Logging.new
45
33
  end
34
+
35
+ extend Rails3::Assist::UseMacro
36
+ use_orm :mongoid
37
+ # use_helper :model
46
38
 
47
39
  def canable_include_txt
48
40
  %Q{
49
- include Canable::Ables
50
- #{add_userstamps}
41
+ include Canable::Ables
42
+ #{add_userstamps}
51
43
 
52
- # permission logic
53
- #{add_methods}
44
+ # permission logic
45
+ #{add_methods}
54
46
  }
55
47
  end
56
48
 
57
- def has_userstamps?
58
- model_file_txt =~ /userstamps!/
59
- end
60
-
61
49
  def add_userstamps
62
- if !has_userstamps?
63
- "userstamps! # adds creator and updater\n" if options[:userstamps]
64
- end
50
+ "userstamps! # adds creator and updater\n" # if options[:userstamps]
65
51
  end
66
52
 
67
- def has_method? name
68
- model_file_txt =~ /(def #{name}_by\?)/
69
- end
70
-
71
53
  def add_methods
72
54
  methods = []
73
55
  %w{creatable destroyable updatable viewable}.each do |name|
74
- if !has_method?(name)
56
+ # if !has_method?(name)
75
57
  method = add_method(name)
76
58
  methods << method if method
77
- end
59
+ # end
78
60
  end
79
61
  methods.join("\n ")
80
62
  end
81
63
 
82
64
  def add_method(name)
83
- if options[name.to_sym]
65
+ #if options[name.to_sym]
84
66
  %Q{
85
- def #{name}_by?(user)
86
- true
87
- end
88
- }
89
- end
67
+ def #{name}_by?(user)
68
+ true
69
+ end}
70
+ #end
90
71
  end
91
72
  end
@@ -1,4 +1,6 @@
1
1
  class ObserverGenerator < Rails::Generators::NamedBase
2
+ include Rails::Assist::Generators::BasicHelper
3
+
2
4
  desc "Adds method 'observe_me' to a Observer"
3
5
 
4
6
  def self.source_root
@@ -1,4 +1,6 @@
1
1
  class ViewGenerator < Rails::Generators::NamedBase
2
+ include Rails::Assist::Generators::BasicHelper
3
+
2
4
  desc "Adds some view code to existing View"
3
5
 
4
6
  argument :view, :type => :string, :required => true
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+ require_generator :controller
3
+
4
+ describe 'helper_generator' do
5
+ use_helper :controller
6
+
7
+ before :each do
8
+ setup_generator 'controller_generator' do
9
+ tests ControllerGenerator
10
+ end
11
+ remove_controller :account
12
+ end
13
+
14
+ after :each do
15
+ # remove_controller :account
16
+ end
17
+
18
+ it "should not work without an Account controller file" do
19
+ remove_controller :account
20
+ with_generator do |g|
21
+ g.run_generator :account.args
22
+ g.should_not generate_controller :account
23
+ end
24
+ end
25
+
26
+ it "should decorate an existing Account controller file with a 'control_me' method" do
27
+ with_generator do |g|
28
+ create_controller :account do
29
+ '# controller content'
30
+ end
31
+ g.run_generator :account.args
32
+ g.should generate_controller :account do |content|
33
+ content.should have_method :control_me
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+
40
+