my_generators 0.0.1

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 (48) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +17 -0
  5. data/Rakefile +52 -0
  6. data/VERSION +1 -0
  7. data/lib/generators/my_generators/controller/controller_generator.rb +18 -0
  8. data/lib/generators/my_generators/controller/templates/view.html.haml +2 -0
  9. data/lib/generators/my_generators/model/model_generator.rb +28 -0
  10. data/lib/generators/my_generators/model/templates/model.rb +26 -0
  11. data/lib/generators/my_generators/scaffold/scaffold_generator.rb +49 -0
  12. data/lib/generators/my_generators/scaffold/templates/_form.html.haml +15 -0
  13. data/lib/generators/my_generators/scaffold/templates/edit.html.haml +7 -0
  14. data/lib/generators/my_generators/scaffold/templates/index.html.haml +23 -0
  15. data/lib/generators/my_generators/scaffold/templates/new.html.haml +5 -0
  16. data/lib/generators/my_generators/scaffold/templates/show.html.haml +11 -0
  17. data/lib/generators/my_scaffold_generator.rb +161 -0
  18. data/lib/generators/my_spec/controller/controller_generator.rb +33 -0
  19. data/lib/generators/my_spec/controller/templates/controller_spec.rb +14 -0
  20. data/lib/generators/my_spec/controller/templates/view_spec.rb +5 -0
  21. data/lib/generators/my_spec/helper/helper_generator.rb +20 -0
  22. data/lib/generators/my_spec/helper/templates/helper_spec.rb +15 -0
  23. data/lib/generators/my_spec/integration/integration_generator.rb +20 -0
  24. data/lib/generators/my_spec/integration/templates/request_spec.rb +14 -0
  25. data/lib/generators/my_spec/model/model_generator.rb +33 -0
  26. data/lib/generators/my_spec/model/templates/fixtures.yml +19 -0
  27. data/lib/generators/my_spec/model/templates/model_spec.rb +20 -0
  28. data/lib/generators/my_spec/model/templates/mongoid.rb +4 -0
  29. data/lib/generators/my_spec/observer/observer_generator.rb +16 -0
  30. data/lib/generators/my_spec/observer/templates/observer_spec.rb +5 -0
  31. data/lib/generators/my_spec/scaffold/scaffold_generator.rb +93 -0
  32. data/lib/generators/my_spec/scaffold/templates/controller_spec.rb +140 -0
  33. data/lib/generators/my_spec/scaffold/templates/edit_spec.rb +38 -0
  34. data/lib/generators/my_spec/scaffold/templates/index_spec.rb +37 -0
  35. data/lib/generators/my_spec/scaffold/templates/inherited_resources_stubs.rb +28 -0
  36. data/lib/generators/my_spec/scaffold/templates/new_spec.rb +37 -0
  37. data/lib/generators/my_spec/scaffold/templates/routing_spec.rb +37 -0
  38. data/lib/generators/my_spec/scaffold/templates/show_spec.rb +33 -0
  39. data/lib/generators/my_spec/view/templates/view_spec.rb +5 -0
  40. data/lib/generators/my_spec/view/view_generator.rb +24 -0
  41. data/lib/generators/rails/USAGE +10 -0
  42. data/lib/generators/rails/my_controller_generator.rb +33 -0
  43. data/lib/generators/rails/templates/controller.rb +13 -0
  44. data/lib/my_generators.rb +16 -0
  45. data/my_generators.gemspec +88 -0
  46. data/test/helper.rb +10 -0
  47. data/test/test_my_generators.rb +7 -0
  48. metadata +112 -0
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Tyler Gannon
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,17 @@
1
+ = my_generators
2
+
3
+ Description goes here.
4
+
5
+ == Note on Patches/Pull Requests
6
+
7
+ * Fork the project.
8
+ * Make your feature addition or bug fix.
9
+ * Add tests for it. This is important so I don't break it in a
10
+ future version unintentionally.
11
+ * Commit, do not mess with rakefile, version, or history.
12
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
13
+ * Send me a pull request. Bonus points for topic branches.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2010 Tyler Gannon. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,52 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "my_generators"
8
+ gem.summary = %Q{Generators that I use for rails apps}
9
+ gem.description = %Q{Just a replacement for default rails generators, specifig to my configuration of mongoid, inherited_resources, etc.}
10
+ gem.email = "tgannon@gmail.com"
11
+ gem.homepage = "http://github.com/tylergannon/my_generators"
12
+ gem.authors = ["Tyler Gannon"]
13
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
14
+ end
15
+ Jeweler::GemcutterTasks.new
16
+ rescue LoadError
17
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
18
+ end
19
+
20
+ require 'rake/testtask'
21
+ Rake::TestTask.new(:test) do |test|
22
+ test.libs << 'lib' << 'test'
23
+ test.pattern = 'test/**/test_*.rb'
24
+ test.verbose = true
25
+ end
26
+
27
+ begin
28
+ require 'rcov/rcovtask'
29
+ Rcov::RcovTask.new do |test|
30
+ test.libs << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+ rescue LoadError
35
+ task :rcov do
36
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
37
+ end
38
+ end
39
+
40
+ task :test => :check_dependencies
41
+
42
+ task :default => :test
43
+
44
+ require 'rake/rdoctask'
45
+ Rake::RDocTask.new do |rdoc|
46
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
47
+
48
+ rdoc.rdoc_dir = 'rdoc'
49
+ rdoc.title = "my_generators #{version}"
50
+ rdoc.rdoc_files.include('README*')
51
+ rdoc.rdoc_files.include('lib/**/*.rb')
52
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,18 @@
1
+ require 'rails/generators/erb/controller/controller_generator'
2
+ require 'generators/my_scaffold_generator'
3
+
4
+ module MyGenerators
5
+ module Generators
6
+ class ControllerGenerator < Erb::Generators::ControllerGenerator
7
+ include MyGenerators::Generators::MyScaffoldGenerator
8
+ source_root File.expand_path("../templates", __FILE__)
9
+
10
+ protected
11
+
12
+ def handler
13
+ :haml
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,2 @@
1
+ %h1 <%= class_name %>#<%= @action %>
2
+ %p Find me in <%= @path %>
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ require "rails/generators/mongoid_generator"
3
+ require 'generators/my_scaffold_generator'
4
+
5
+ module MyGenerators #:nodoc:
6
+ module Generators #:nodoc:
7
+ class ModelGenerator < Mongoid::Generators::Base #:nodoc:
8
+ include MyGenerators::Generators::MyScaffoldGenerator
9
+ desc "Creates a Mongoid model"
10
+ argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
11
+
12
+ class_option :timestamps, :type => :boolean
13
+ class_option :parent, :type => :string, :desc => "The parent class for the generated model"
14
+ class_option :versioning, :type => :boolean, :default => false, :desc => "Enable mongoid versioning"
15
+
16
+ def create_model_file
17
+ template "model.rb", File.join("app/models", class_path, "#{file_name}.rb")
18
+ end
19
+
20
+ hook_for :test_framework
21
+
22
+ def self.source_root
23
+ @source_root ||= File.expand_path("templates", File.dirname(__FILE__))
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,26 @@
1
+ class <%= class_name %><%= " < #{options[:parent].classify}" if options[:parent] %>
2
+ <% unless options[:parent] -%>
3
+ include Mongoid::Document
4
+ <% end -%>
5
+ <% if options[:timestamps] -%>
6
+ include Mongoid::Timestamps
7
+ <% end -%>
8
+ <%= 'include Mongoid::Versioning' if options[:versioning] -%>
9
+ <% if options[:embedded_in] %>
10
+ embedded_in :<%= options[:embedded_in] %>, :inverse_of => :<%= options[:singleton] ? class_name.underscore : class_name.tableize %>
11
+ <% end %>
12
+ <% if options[:referenced_in] %>
13
+ referenced_in :<%= options[:referenced_in] %>, :inverse_of => :<%= options[:singleton] ? class_name.underscore : class_name.tableize %>
14
+ <% end %>
15
+ <% attributes.reject{|attr| attr.reference?}.each do |attribute| -%>
16
+ field :<%= attribute.name %>, :type => <%= attribute.type_class %>
17
+ <% end -%>
18
+ <% attributes.select{|attr| attr.reference? }.each do |attribute| -%>
19
+ embedded_in :<%= attribute.name%>, :inverse_of => :<%= class_name.tableize %>
20
+ <% end -%>
21
+ <% if references_one -%> references_one :<%=references_one%> <% end %>
22
+ <% if references_many -%> references_many :<%=references_many%> <% end %>
23
+ <% if embeds_one -%> embeds_one :<%=embeds_one%> <% end %>
24
+ <% if embeds_many -%> embeds_many :<%=embeds_many%> <% end %>
25
+
26
+ end
@@ -0,0 +1,49 @@
1
+ require 'rails/generators/base'
2
+ require 'generators/my_scaffold_generator'
3
+
4
+ module MyGenerators::Generators
5
+ class ScaffoldGenerator < Rails::Generators::NamedBase
6
+ include Rails::Generators::ResourceHelpers
7
+ include MyScaffoldGenerator
8
+ argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
9
+
10
+ def create_root_folder
11
+ empty_directory File.join("app/views", controller_file_path)
12
+ end
13
+
14
+ source_root File.expand_path("../templates", __FILE__)
15
+
16
+ def copy_view_files
17
+ available_views.each do |view|
18
+ filename = filename_with_extensions(view)
19
+ template "#{view}.html.haml", File.join("app/views", controller_file_path, filename)
20
+ end
21
+ end
22
+
23
+ hook_for :form_builder, :as => :scaffold
24
+
25
+ def copy_form_file
26
+ if options[:form_builder].nil?
27
+ filename = filename_with_extensions("_form")
28
+ template "_form.html.haml", File.join("app/views", controller_file_path, filename)
29
+ end
30
+ end
31
+
32
+ protected
33
+
34
+ def available_views
35
+ %w(index edit show new)
36
+ end
37
+
38
+ def handler
39
+ :haml
40
+ end
41
+ def format
42
+ :html
43
+ end
44
+
45
+ def filename_with_extensions(name)
46
+ [name, format, handler].compact.join(".")
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,15 @@
1
+ = form_for <%= belongs_to ? "[@#{parent_name}, @#{model_name}]" : "@#{model_name}" %> do |f|
2
+ -if @<%= singular_table_name %>.errors.any?
3
+ #error_explanation
4
+ %h2= "#{pluralize(@<%= singular_table_name %>.errors.count, "error")} prohibited this <%= singular_table_name %> from being saved:"
5
+ %ul
6
+ - @<%= singular_table_name %>.errors.full_messages.each do |msg|
7
+ %li= msg
8
+
9
+ <% for attribute in attributes -%>
10
+ .field
11
+ = f.label :<%= attribute.name %>
12
+ = f.<%= attribute.field_type %> :<%= attribute.name %>
13
+ <% end -%>
14
+ .actions
15
+ = f.submit 'Save'
@@ -0,0 +1,7 @@
1
+ %h1 Editing <%= singular_table_name %>
2
+
3
+ = render 'form'
4
+
5
+ = link_to 'Show', <%= resource_url_helper %>
6
+ \|
7
+ = link_to 'Back', <%= index_url_helper %>
@@ -0,0 +1,23 @@
1
+ %h1 Listing <%= plural_table_name %>
2
+
3
+ %table
4
+ %tr
5
+ <% for attribute in attributes -%>
6
+ %th <%= attribute.human_name %>
7
+ <% end -%>
8
+ %th
9
+ %th
10
+ %th
11
+
12
+ - @<%= plural_table_name %>.each do |<%= singular_table_name %>|
13
+ %tr
14
+ <% for attribute in attributes -%>
15
+ %td= <%= singular_table_name %>.<%= attribute.name %>
16
+ <% end -%>
17
+ %td= link_to 'Show', <%= resource_url_helper(model_name) %>
18
+ %td= link_to 'Edit', edit_<%= resource_url_helper(model_name) %>
19
+ %td= link_to 'Destroy', <%= resource_url_helper(model_name) %>, :confirm => 'Are you sure?', :method => :delete
20
+
21
+ %br
22
+
23
+ = link_to 'New <%= human_name %>', new_<%= resource_url_helper() %>
@@ -0,0 +1,5 @@
1
+ %h1 New <%= singular_table_name %>
2
+
3
+ = render 'form'
4
+
5
+ = link_to 'Back', <%= index_url_helper %>
@@ -0,0 +1,11 @@
1
+ %p#notice= notice
2
+
3
+ <% for attribute in attributes -%>
4
+ %p
5
+ %b <%= attribute.human_name %>:
6
+ = @<%= singular_table_name %>.<%= attribute.name %>
7
+ <% end -%>
8
+
9
+ = link_to 'Edit', edit_<%= resource_url_helper %>
10
+ \|
11
+ = link_to 'Back', <%= index_url_helper %>
@@ -0,0 +1,161 @@
1
+ module MyGenerators
2
+ module Generators
3
+ module MyScaffoldGenerator
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ class_option :embedded_in, :type => :string, :default=>nil
8
+ class_option :referenced_in, :type => :string, :default=>nil
9
+ class_option :belongs_to, :type => :boolean, :default=>false
10
+
11
+ class_option :embeds_one, :type => :string, :default=>nil
12
+ class_option :embeds_many, :type => :string, :default=>nil
13
+ class_option :references_one, :type => :string, :default=>nil
14
+ class_option :references_many, :type => :string, :default=>nil
15
+
16
+ class_option :orm, :desc => "ORM used to generate the controller"
17
+ class_option :template_engine, :default=>'haml', :desc => "Template engine to generate view files"
18
+ class_option :singleton, :type => :boolean, :desc => "Supply to create a singleton controller"
19
+ class_option :controller_specs, :type => :boolean, :default => true, :desc => "Generate controller specs"
20
+ class_option :view_specs, :type => :boolean, :default => true, :desc => "Generate view specs"
21
+ class_option :webrat_matchers, :type => :boolean, :default => true, :desc => "Use webrat matchers in view specs"
22
+ class_option :helper_specs, :type => :boolean, :default => true, :desc => "Generate helper specs"
23
+ class_option :routing_specs, :type => :boolean, :default => true, :desc => "Generate routing specs"
24
+ end
25
+
26
+ def method_missing(method, *args)
27
+ options[method.to_sym]
28
+ end
29
+
30
+ protected
31
+ def resource_url_helper(resource=nil)
32
+ belongs_to ?
33
+ "#{parent_name}_#{model_name}_path(@#{parent_name}, #{resource||'@'+model_name})" :
34
+ "#{resource||'@'+model_name}"
35
+ end
36
+
37
+ def new_resource_url_helper
38
+ belongs_to ? "new_#{parent_name}_#{model_name}_path(@#{parent_name})" :
39
+ "new_#{model_name}_path"
40
+ end
41
+
42
+ def index_url_helper
43
+ belongs_to ? "#{parent_name}_#{table_name}_path(@#{parent_name})" : "#{table_name}_path"
44
+ end
45
+
46
+ def webrat?
47
+ options[:webrat_matchers] || @webrat_matchers_requested
48
+ end
49
+
50
+ def copy_view(view)
51
+ template "#{view}_spec.rb",
52
+ File.join("spec/views", controller_file_path, "#{view}.html.haml_spec.rb")
53
+ end
54
+
55
+ def params
56
+ "{'these' => 'params'}"
57
+ end
58
+
59
+ # Returns the name of the mock. For example, if the file name is user,
60
+ # it returns mock_user.
61
+ #
62
+ # If a hash is given, it uses the hash key as the ORM method and the
63
+ # value as response. So, for ActiveRecord and file name "User":
64
+ #
65
+ # mock_file_name(:save => true)
66
+ # #=> mock_user(:save => true)
67
+ #
68
+ # If another ORM is being used and another method instead of save is
69
+ # called, it will be the one used.
70
+ #
71
+ def mock_file_name(hash=nil)
72
+ if hash
73
+ method, and_return = hash.to_a.first
74
+ method = orm_instance.send(method).split('.').last.gsub(/\(.*?\)/, '')
75
+ "mock_#{file_name}(:#{method} => #{and_return})"
76
+ else
77
+ "mock_#{file_name}"
78
+ end
79
+ end
80
+
81
+ # Receives the ORM chain and convert to expects. For ActiveRecord:
82
+ #
83
+ # should! orm_class.find(User, "37")
84
+ # #=> User.should_receive(:find).with(37)
85
+ #
86
+ # For Datamapper:
87
+ #
88
+ # should! orm_class.find(User, "37")
89
+ # #=> User.should_receive(:get).with(37)
90
+ #
91
+ def should_receive!(chain)
92
+ stub_or_should_chain(:should_receive, chain)
93
+ end
94
+
95
+ # Receives the ORM chain and convert to stub. For ActiveRecord:
96
+ #
97
+ # stub! orm_class.find(User, "37")
98
+ # #=> User.stub!(:find).with(37)
99
+ #
100
+ # For Datamapper:
101
+ #
102
+ # stub! orm_class.find(User, "37")
103
+ # #=> User.stub!(:get).with(37)
104
+ #
105
+ def stub!(chain)
106
+ stub_or_should_chain(:stub, chain)
107
+ end
108
+
109
+ def stub_or_should_chain(mode, chain)
110
+ receiver, method = chain.split(".")
111
+ method.gsub!(/\((.*?)\)/, '')
112
+
113
+ response = "#{receiver}.#{mode}(:#{method})"
114
+ response << ".with(#{$1})" unless $1.blank?
115
+ response
116
+ end
117
+
118
+ def value_for(attribute)
119
+ case attribute.type
120
+ when :string
121
+ "#{attribute.name.titleize}".inspect
122
+ else
123
+ attribute.default.inspect
124
+ end
125
+ end
126
+
127
+ def parent_name
128
+ embedded_in || referenced_in
129
+ end
130
+ def parent_class
131
+ parent_name.camelize
132
+ end
133
+ def parents_name
134
+ parent_name.tableize
135
+ end
136
+ def parent_id
137
+ parent_name + "_id"
138
+ end
139
+
140
+ def association_matcher
141
+ embedded_in ? "be_embedded_in" : "be_referenced_in"
142
+ end
143
+ def parent_association
144
+ singleton ? class_name.underscore : class_name.tableize
145
+ end
146
+ def parent_association_matcher
147
+ singleton ? (embedded_in ? "embed_one" : "reference_one") :
148
+ (embedded_in ? "embed_many" : "reference_many")
149
+
150
+ end
151
+ def model_name
152
+ class_name.underscore
153
+ end
154
+
155
+ def child_model?
156
+ embedded_in || referenced_in
157
+ end
158
+ end
159
+ end
160
+ end
161
+
@@ -0,0 +1,33 @@
1
+ require 'generators/my_scaffold_generator'
2
+
3
+ module MySpec
4
+ module Generators
5
+ class ControllerGenerator < ::Rails::Generators::NamedBase
6
+ include MyScaffoldGenerator
7
+ argument :actions, :type => :array, :default => [], :banner => "action action"
8
+
9
+ def generate_controller_spec
10
+ return unless options[:controller_specs]
11
+
12
+ template 'controller_spec.rb',
13
+ File.join('spec/controllers', class_path, "#{file_name}_controller_spec.rb")
14
+ end
15
+
16
+ def generate_view_specs
17
+ return if actions.empty?
18
+ return unless options[:view_specs]
19
+
20
+ empty_directory File.join("spec", "views", file_path)
21
+
22
+ actions.each do |action|
23
+ @action = action
24
+ template 'view_spec.rb',
25
+ File.join("spec", "views", file_path, "#{@action}.html.#{options[:template_engine]}_spec.rb")
26
+ end
27
+ end
28
+ def self.source_root
29
+ @source_root ||= File.expand_path("templates", File.dirname(__FILE__))
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe <%= class_name %>Controller do
4
+
5
+ <% for action in actions -%>
6
+ describe "GET '<%= action %>'" do
7
+ it "should be successful" do
8
+ get '<%= action %>'
9
+ response.should be_success
10
+ end
11
+ end
12
+
13
+ <% end -%>
14
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe "<%= file_name %>/<%= @action %>.html.<%= options[:template_engine] %>" do
4
+ pending "add some examples to (or delete) #{__FILE__}"
5
+ end
@@ -0,0 +1,20 @@
1
+ require 'generators/my_scaffold_generator'
2
+
3
+ module MySpec
4
+ module Generators
5
+ class HelperGenerator < Rails::Generators::NamedBase
6
+ include MyGenerators::Generators::MyScaffoldGenerator
7
+
8
+ def generate_helper_spec
9
+ return unless options[:helper_specs]
10
+
11
+ template 'helper_spec.rb', File.join('spec/helpers', class_path, "#{file_name}_helper_spec.rb")
12
+ end
13
+
14
+ def self.source_root
15
+ @source_root ||= File.expand_path("templates", File.dirname(__FILE__))
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ # Specs in this file have access to a helper object that includes
4
+ # the <%= class_name %>Helper. For example:
5
+ #
6
+ # describe <%= class_name %>Helper do
7
+ # describe "string concat" do
8
+ # it "concats two strings with spaces" do
9
+ # helper.concat_strings("this","that").should == "this that"
10
+ # end
11
+ # end
12
+ # end
13
+ describe <%= class_name %>Helper do
14
+ pending "add some examples to (or delete) #{__FILE__}"
15
+ end
@@ -0,0 +1,20 @@
1
+ require 'generators/my_scaffold_generator'
2
+
3
+ module MySpec
4
+ module Generators
5
+ class IntegrationGenerator < Rails::Generators::NamedBase
6
+ include MyGenerators::Generators::MyScaffoldGenerator
7
+ class_option :request_specs, :type => :boolean, :default => true, :desc => "Generate request specs"
8
+
9
+ def generate_request_spec
10
+ return unless options[:request_specs]
11
+
12
+ template 'request_spec.rb',
13
+ File.join('spec/requests', class_path, "#{table_name}_spec.rb")
14
+ end
15
+ def self.source_root
16
+ @source_root ||= File.expand_path("templates", File.dirname(__FILE__))
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe "<%= class_name.pluralize %>" do
4
+ describe "GET /<%= table_name %>" do
5
+ before :each do
6
+ <% if child_model? %>
7
+ <%=parent_class%>.stub(:find).with(anything()) {john_q :<%=parent_name%>}
8
+ <% end %>
9
+ end
10
+ it "works! (now write some real specs)" do
11
+ get <%= table_name %>_path
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,33 @@
1
+ require 'generators/my_scaffold_generator'
2
+
3
+ module MySpec
4
+ module Generators
5
+ class ModelGenerator < Rails::Generators::NamedBase
6
+ include MyGenerators::Generators::MyScaffoldGenerator
7
+ class_option :fixture, :type => :boolean
8
+ argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
9
+
10
+ def copy_spec_support_files
11
+ empty_directory 'spec/support'
12
+ template 'mongoid.rb', 'spec/support/mongoid.rb'
13
+ end
14
+
15
+ def create_model_spec
16
+ template 'model_spec.rb', File.join('spec/models', class_path, "#{file_name}_spec.rb")
17
+ end
18
+
19
+ hook_for :fixture_replacement
20
+
21
+ def create_fixture_file
22
+ if options[:fixture] && options[:fixture_replacement].nil?
23
+ template 'fixtures.yml', File.join('spec/fixtures', "#{table_name}.yml")
24
+ end
25
+ end
26
+
27
+ def self.source_root
28
+ @source_root ||= File.expand_path("templates", File.dirname(__FILE__))
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ <% unless attributes.empty? -%>
4
+ one:
5
+ <% for attribute in attributes -%>
6
+ <%= attribute.name %>: <%= attribute.default %>
7
+ <% end -%>
8
+
9
+ two:
10
+ <% for attribute in attributes -%>
11
+ <%= attribute.name %>: <%= attribute.default %>
12
+ <% end -%>
13
+ <% else -%>
14
+ # one:
15
+ # column: value
16
+ #
17
+ # two:
18
+ # column: value
19
+ <% end -%>