grimen-dry_scaffold 0.2.6 → 0.3.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 (56) hide show
  1. data/CHANGELOG.textile +6 -0
  2. data/README.textile +26 -17
  3. data/TODO.textile +43 -6
  4. data/config/scaffold.yml +14 -6
  5. data/generators/dry_model/USAGE +2 -5
  6. data/generators/dry_model/dry_model_generator.rb +68 -145
  7. data/generators/dry_model/prototypes/active_record_migration.rb +1 -1
  8. data/generators/dry_model/prototypes/active_record_model.rb +2 -2
  9. data/generators/dry_model/prototypes/fixture_data/active_record_fixtures.yml +3 -0
  10. data/generators/dry_model/prototypes/fixture_data/factory_girl_factories.rb +4 -0
  11. data/generators/dry_model/prototypes/fixture_data/machinist_blueprints.rb +8 -0
  12. data/generators/dry_model/prototypes/tests/shoulda/unit_test.rb +20 -0
  13. data/generators/dry_model/prototypes/tests/test_unit/unit_test.rb +8 -2
  14. data/generators/dry_model/templates/models/active_record_migration.rb +2 -2
  15. data/generators/dry_model/templates/models/{test_data → fixture_data}/active_record_fixtures.yml +1 -1
  16. data/generators/dry_model/templates/models/fixture_data/factory_girl_factories.rb +5 -0
  17. data/generators/dry_model/templates/models/fixture_data/machinist_blueprints.rb +9 -0
  18. data/generators/dry_model/templates/models/tests/shoulda/unit_test.rb +23 -0
  19. data/generators/dry_model/templates/models/tests/test_unit/unit_test.rb +10 -2
  20. data/generators/dry_scaffold/USAGE +4 -5
  21. data/generators/dry_scaffold/dry_scaffold_generator.rb +145 -151
  22. data/generators/dry_scaffold/prototypes/controllers/action_controller.rb +53 -52
  23. data/generators/dry_scaffold/prototypes/controllers/inherited_resources_controller.rb +5 -4
  24. data/generators/dry_scaffold/prototypes/controllers/tests/shoulda/functional_test.rb +107 -0
  25. data/generators/dry_scaffold/prototypes/controllers/tests/test_unit/functional_test.rb +76 -0
  26. data/generators/dry_scaffold/prototypes/helpers/helper.rb +1 -1
  27. data/generators/dry_scaffold/prototypes/helpers/tests/shoulda/unit_test.rb +9 -0
  28. data/generators/dry_scaffold/prototypes/helpers/tests/test_unit/unit_test.rb +6 -2
  29. data/generators/dry_scaffold/prototypes/views/builder/index.atom.builder +9 -9
  30. data/generators/dry_scaffold/prototypes/views/builder/index.rss.builder +7 -7
  31. data/generators/dry_scaffold/prototypes/views/haml/_item.html.haml +6 -6
  32. data/generators/dry_scaffold/prototypes/views/haml/edit.html.haml +3 -3
  33. data/generators/dry_scaffold/prototypes/views/haml/index.html.haml +5 -5
  34. data/generators/dry_scaffold/prototypes/views/haml/layout.html.haml +1 -2
  35. data/generators/dry_scaffold/prototypes/views/haml/new.html.haml +3 -3
  36. data/generators/dry_scaffold/prototypes/views/haml/show.html.haml +6 -6
  37. data/generators/dry_scaffold/templates/controllers/action_controller.rb +7 -6
  38. data/generators/dry_scaffold/templates/controllers/inherited_resources_controller.rb +2 -2
  39. data/generators/dry_scaffold/templates/controllers/tests/shoulda/functional_test.rb +90 -0
  40. data/generators/dry_scaffold/templates/controllers/tests/test_unit/functional_test.rb +46 -37
  41. data/generators/dry_scaffold/templates/helpers/tests/shoulda/unit_test.rb +9 -0
  42. data/generators/dry_scaffold/templates/helpers/tests/test_unit/unit_test.rb +4 -0
  43. data/generators/dry_scaffold/templates/views/haml/_item.html.haml +3 -3
  44. data/generators/dry_scaffold/templates/views/haml/edit.html.haml +1 -1
  45. data/generators/dry_scaffold/templates/views/haml/index.html.haml +1 -1
  46. data/generators/dry_scaffold/templates/views/haml/new.html.haml +1 -1
  47. data/generators/dry_scaffold/templates/views/haml/show.html.haml +2 -2
  48. data/lib/dry_generator.rb +176 -0
  49. data/tasks/dry_scaffold.rake +5 -1
  50. metadata +16 -9
  51. data/generators/dry_model/prototypes/test_data/active_record_fixtures.yml +0 -3
  52. data/generators/dry_model/prototypes/test_data/factory_girl_factories.rb +0 -4
  53. data/generators/dry_model/prototypes/test_data/machinist_factories.rb +0 -8
  54. data/generators/dry_model/templates/models/test_data/factory_girl_factories.rb +0 -5
  55. data/generators/dry_model/templates/models/test_data/machinist_factories.rb +0 -9
  56. data/generators/dry_scaffold/prototypes/controllers/tests/unit_test/functional_test.rb +0 -64
@@ -15,4 +15,4 @@
15
15
  <% end -%>
16
16
 
17
17
  %p.actions
18
- = link_to 'Cancel', <%= index_link %>
18
+ = link_to 'Cancel', <%= index_path %>
@@ -2,7 +2,7 @@
2
2
  = "<%= plural_name.humanize %>"
3
3
 
4
4
  %p.actions
5
- = link_to 'New <%= singular_name.humanize %>', <%= new_link %>
5
+ = link_to 'New <%= singular_name.humanize %>', <%= new_path %>
6
6
 
7
7
  %table
8
8
  %thead.header
@@ -15,4 +15,4 @@
15
15
  <% end -%>
16
16
 
17
17
  %p.actions
18
- = link_to 'Cancel', <%= index_link %>
18
+ = link_to 'Cancel', <%= index_path %>
@@ -8,6 +8,6 @@
8
8
  <% end -%>
9
9
 
10
10
  %p.actions
11
- = link_to 'Edit', <%= edit_link %>
11
+ = link_to 'Edit', <%= edit_path %>
12
12
  |
13
- = link_to 'Index', <%= index_link %>
13
+ = link_to 'Index', <%= index_path %>
@@ -0,0 +1,176 @@
1
+ class DryGenerator < Rails::Generator::NamedBase
2
+
3
+ HAS_WILL_PAGINATE = defined?(WillPaginate)
4
+ HAS_FORMTASTIC = defined?(Formtastic)
5
+ HAS_INHERITED_RESOURCES = defined?(InheritedResources)
6
+ HAS_SHOULDA = defined?(Shoulda)
7
+
8
+ # Load defaults from config file - default or custom.
9
+ begin
10
+ default_config_file = File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'scaffold.yml'))
11
+ custom_config_file = File.expand_path(File.join(Rails.root, 'config', 'scaffold.yml'))
12
+ config_file = File.join(File.exist?(custom_config_file) ? custom_config_file : default_config_file)
13
+ config = YAML::load(File.open(config_file))
14
+
15
+ CONFIG_ARGS = config['dry_scaffold']['args'] rescue nil
16
+ CONFIG_OPTIONS = config['dry_scaffold']['options'] rescue nil
17
+ end
18
+
19
+ # Banner: Generator arguments and options.
20
+ BANNER_ARGS = [
21
+ "[field:type field:type ...]"
22
+ ].freeze
23
+ BANNER_OPTIONS = [
24
+ "[--skip-tests]",
25
+ "[--shoulda]",
26
+ "[--fixtures]",
27
+ "[--fgirl]",
28
+ "[--machinist]",
29
+ "[--odaddy]"
30
+ ].freeze
31
+
32
+ DEFAULT_ARGS = {
33
+ :actions => (CONFIG_ARGS['actions'].split(',').compact.uniq.collect { |v| v.downcase.to_sym } rescue nil),
34
+ :formats => (CONFIG_ARGS['formats'].split(',').compact.uniq.collect { |v| v.downcase.to_sym } rescue nil)
35
+ }.freeze
36
+
37
+ DEFAULT_OPTIONS = {
38
+ :resourceful => CONFIG_OPTIONS['resourceful'] || HAS_INHERITED_RESOURCES,
39
+ :formtastic => CONFIG_OPTIONS['formtastic'] || HAS_FORMTASTIC,
40
+ :pagination => CONFIG_OPTIONS['pagination'] || HAS_WILL_PAGINATE,
41
+ :skip_tests => !CONFIG_OPTIONS['tests'] || false,
42
+ :skip_helpers => !CONFIG_OPTIONS['helpers'] || false,
43
+ :skip_views => !CONFIG_OPTIONS['views'] || false,
44
+ :layout => CONFIG_OPTIONS['layout'] || false,
45
+ :fixtures => CONFIG_OPTIONS['fixtures'] || false,
46
+ :fgirl => CONFIG_OPTIONS['factory_girl'] || false,
47
+ :machinist => CONFIG_OPTIONS['machinist'] || false,
48
+ :odaddy => CONFIG_OPTIONS['object_daddy'] || false,
49
+ :tunit => CONFIG_OPTIONS['test_unit'] || true,
50
+ :shoulda => CONFIG_OPTIONS['shoulda'] || false
51
+ }.freeze
52
+
53
+ TEST_PATHS = {
54
+ :test_unit => 'test',
55
+ :shoulda => 'test'
56
+ }.freeze
57
+
58
+ DEFAULT_TEST_FRAMEWORK = :test_unit
59
+ DEFAULT_FACTORY_FRAMEWORK = :fixtures
60
+
61
+ TESTS_PATH = File.join('test').freeze
62
+ FUNCTIONAL_TESTS_PATH = File.join(TESTS_PATH, 'functional').freeze
63
+ UNIT_TESTS_PATH = File.join(TESTS_PATH, 'unit').freeze
64
+
65
+ NON_ATTR_ARG_KEY_PREFIX = '_'.freeze
66
+
67
+ attr_accessor :view_template_format,
68
+ :test_framework,
69
+ :factory_framework
70
+
71
+ def initialize(runtime_args, runtime_options = {})
72
+ super(runtime_args, runtime_options)
73
+
74
+ @test_framework = options[:test_framework] || DEFAULT_TEST_FRAMEWORK
75
+ end
76
+
77
+ protected
78
+
79
+ def symbol_array_to_expression(array)
80
+ ":#{array.compact.join(', :')}" if array.present?
81
+ end
82
+
83
+ def banner_args
84
+ BANNER_ARGS.join(' ')
85
+ end
86
+
87
+ def banner_options
88
+ BANNER_OPTIONS.join(' ')
89
+ end
90
+
91
+ def banner
92
+ "\nUsage: \n\n#{$0} #{spec.name} MODEL_NAME"
93
+ end
94
+
95
+ def add_options!(opt)
96
+ opt.separator ' '
97
+ opt.separator 'Scaffold + Model Options:'
98
+
99
+ opt.on('--skip-tests', "Test: Skip generation of tests.") do |v|
100
+ options[:skip_tests] = v
101
+ end
102
+
103
+ opt.on("--tunit", "Test: Generate \"test_unit\" tests. Note: Rails default.") do |v|
104
+ options[:test_unit] = v
105
+ options[:test_framework] = :test_unit
106
+ end
107
+
108
+ opt.on("--shoulda", "Test: Generate \"shoulda\" tests.") do |v|
109
+ options[:shoulda] = v
110
+ options[:test_framework] = :shoulda
111
+ end
112
+
113
+ #opt.on('--rspec', "Test: Generate \"rspec\" tests.") do |v|
114
+ # # TODO: Implement RSpec templates. Maybe.
115
+ # puts '[dry_scaffold:] RSpec currently not supported.'
116
+ # options[:rspec] = v
117
+ # options[:test_framework] = :rspec
118
+ #end
119
+
120
+ opt.on("--fixtures", "Test: Generate fixtures. Note: Rails default.") do |v|
121
+ options[:fixtures] = v
122
+ options[:factory_framework] = :fixtures
123
+ end
124
+
125
+ opt.on("--fgirl", "Test: Generate \"factory_girl\" factories.") do |v|
126
+ options[:factory_girl] = v
127
+ options[:factory_framework] = :factory_girl
128
+ end
129
+
130
+ opt.on("--machinist", "Test: Generate \"machinist\" blueprints (factories).") do |v|
131
+ options[:machinist] = v
132
+ options[:factory_framework] = :machinist
133
+ end
134
+
135
+ opt.on("--odaddy", "Test: Generate \"object_daddy\" generator/factory methods.") do |v|
136
+ options[:object_daddy] = v
137
+ options[:factory_framework] = :object_daddy
138
+ end
139
+ end
140
+
141
+ end
142
+
143
+ module Rails
144
+ module Generator
145
+ class GeneratedAttribute
146
+ def default_for_fixture
147
+ @default ||= case type
148
+ when :integer then 1
149
+ when :float then 1.5
150
+ when :decimal then '9.99'
151
+ when :datetime, :timestamp, :time then Time.now.to_s(:db)
152
+ when :date then Date.today.to_s(:db)
153
+ when :string then 'Hello'
154
+ when :text then 'Lorem ipsum dolor sit amet...'
155
+ when :boolean then false
156
+ else
157
+ ''
158
+ end
159
+ end
160
+ def default_for_factory
161
+ @default ||= case type
162
+ when :integer then 1
163
+ when :float then 1.5
164
+ when :decimal then '9.99'
165
+ when :datetime, :timestamp, :time then 'Time.now'
166
+ when :date then 'Date.today'
167
+ when :string then '"Hello"'
168
+ when :text then '"Lorem ipsum dolor sit amet..."'
169
+ when :boolean then false
170
+ else
171
+ ''
172
+ end
173
+ end
174
+ end
175
+ end
176
+ end
@@ -31,7 +31,11 @@ namespace :dry_scaffold do
31
31
  require File.join(GEM_ROOT, 'lib', 'setup_helper')
32
32
  include SetupHelper
33
33
 
34
- GEMS = [:haml, :will_paginate, :'josevalim-inherited_resources', :'justinfrench-formtastic'].freeze
34
+ GEMS = [:haml,
35
+ :'mislav-will_paginate',
36
+ :'josevalim-inherited_resources',
37
+ :'justinfrench-formtastic',
38
+ :'thoughtbot-shoulda'].freeze
35
39
  PLUGINS = [].freeze
36
40
 
37
41
  desc "Install dependencies for fully advantage of this generator."
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grimen-dry_scaffold
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Grimfelt
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-03 00:00:00 -07:00
12
+ date: 2009-07-22 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -42,22 +42,26 @@ files:
42
42
  - generators/dry_model/dry_model_generator.rb
43
43
  - generators/dry_model/prototypes/active_record_migration.rb
44
44
  - generators/dry_model/prototypes/active_record_model.rb
45
- - generators/dry_model/prototypes/test_data/active_record_fixtures.yml
46
- - generators/dry_model/prototypes/test_data/factory_girl_factories.rb
47
- - generators/dry_model/prototypes/test_data/machinist_factories.rb
45
+ - generators/dry_model/prototypes/fixture_data/active_record_fixtures.yml
46
+ - generators/dry_model/prototypes/fixture_data/factory_girl_factories.rb
47
+ - generators/dry_model/prototypes/fixture_data/machinist_blueprints.rb
48
+ - generators/dry_model/prototypes/tests/shoulda/unit_test.rb
48
49
  - generators/dry_model/prototypes/tests/test_unit/unit_test.rb
49
50
  - generators/dry_model/templates/models/active_record_migration.rb
50
51
  - generators/dry_model/templates/models/active_record_model.rb
51
- - generators/dry_model/templates/models/test_data/active_record_fixtures.yml
52
- - generators/dry_model/templates/models/test_data/factory_girl_factories.rb
53
- - generators/dry_model/templates/models/test_data/machinist_factories.rb
52
+ - generators/dry_model/templates/models/fixture_data/active_record_fixtures.yml
53
+ - generators/dry_model/templates/models/fixture_data/factory_girl_factories.rb
54
+ - generators/dry_model/templates/models/fixture_data/machinist_blueprints.rb
55
+ - generators/dry_model/templates/models/tests/shoulda/unit_test.rb
54
56
  - generators/dry_model/templates/models/tests/test_unit/unit_test.rb
55
57
  - generators/dry_scaffold/USAGE
56
58
  - generators/dry_scaffold/dry_scaffold_generator.rb
57
59
  - generators/dry_scaffold/prototypes/controllers/action_controller.rb
58
60
  - generators/dry_scaffold/prototypes/controllers/inherited_resources_controller.rb
59
- - generators/dry_scaffold/prototypes/controllers/tests/unit_test/functional_test.rb
61
+ - generators/dry_scaffold/prototypes/controllers/tests/shoulda/functional_test.rb
62
+ - generators/dry_scaffold/prototypes/controllers/tests/test_unit/functional_test.rb
60
63
  - generators/dry_scaffold/prototypes/helpers/helper.rb
64
+ - generators/dry_scaffold/prototypes/helpers/tests/shoulda/unit_test.rb
61
65
  - generators/dry_scaffold/prototypes/helpers/tests/test_unit/unit_test.rb
62
66
  - generators/dry_scaffold/prototypes/views/builder/index.atom.builder
63
67
  - generators/dry_scaffold/prototypes/views/builder/index.rss.builder
@@ -70,8 +74,10 @@ files:
70
74
  - generators/dry_scaffold/prototypes/views/haml/show.html.haml
71
75
  - generators/dry_scaffold/templates/controllers/action_controller.rb
72
76
  - generators/dry_scaffold/templates/controllers/inherited_resources_controller.rb
77
+ - generators/dry_scaffold/templates/controllers/tests/shoulda/functional_test.rb
73
78
  - generators/dry_scaffold/templates/controllers/tests/test_unit/functional_test.rb
74
79
  - generators/dry_scaffold/templates/helpers/helper.rb
80
+ - generators/dry_scaffold/templates/helpers/tests/shoulda/unit_test.rb
75
81
  - generators/dry_scaffold/templates/helpers/tests/test_unit/unit_test.rb
76
82
  - generators/dry_scaffold/templates/views/builder/index.atom.builder
77
83
  - generators/dry_scaffold/templates/views/builder/index.rss.builder
@@ -83,6 +89,7 @@ files:
83
89
  - generators/dry_scaffold/templates/views/haml/new.html.haml
84
90
  - generators/dry_scaffold/templates/views/haml/show.html.haml
85
91
  - generators/dscaffold/dscaffold_generator.rb
92
+ - lib/dry_generator.rb
86
93
  - lib/setup_helper.rb
87
94
  - rails/init.rb
88
95
  - tasks/dry_scaffold.rake
@@ -1,3 +0,0 @@
1
- resource_1:
2
- name: "AString"
3
- description: "SomeText"
@@ -1,4 +0,0 @@
1
- Factory.define :basic_resource do |f|
2
- f.name "AString"
3
- f.description "SomeText"
4
- end
@@ -1,8 +0,0 @@
1
- Sham.define do
2
- # TODO: Define blueprint shams for "<%= class_name %>"
3
- end
4
-
5
- Resource.blueprint :basic do
6
- name { "AString" }
7
- description { "SomeText" }
8
- end
@@ -1,5 +0,0 @@
1
- Factory.define :basic_<%= singular_name %> do |f|
2
- <% attributes.each do |attribute| -%>
3
- f.<%= attribute.name %> <%= attribute.default_for_factory %>
4
- <% end -%>
5
- end
@@ -1,9 +0,0 @@
1
- Sham.define do
2
- # TODO: Define blueprint shams for "<%= class_name %>"
3
- end
4
-
5
- <%= class_name %>.blueprint :basic do
6
- <% attributes.each do |attribute| -%>
7
- <%= attribute.name %> { <%= attribute.default_for_factory %> }
8
- <% end -%>
9
- end
@@ -1,64 +0,0 @@
1
- require 'helper'
2
-
3
- class ResourceControllerTest < ActionController::TestCase
4
-
5
- test "create" do
6
- Resource.any_instance.expects(:save).returns(true)
7
- post :create, :resource => { }
8
- assert_response :redirect
9
- end
10
-
11
- test "create_with_failure" do
12
- Resource.any_instance.expects(:save).returns(false)
13
- post :create, :resource => { }
14
- assert_template 'new'
15
- end
16
-
17
- test "destroy" do
18
- Resource.any_instance.expects(:destroy).returns(true)
19
- delete :destroy, :id => resources(:one).to_param
20
- assert_not_nil flash[:notice]
21
- assert_response :redirect
22
- end
23
-
24
- test "destroy_with_failure" do
25
- Resource.any_instance.expects(:destroy).returns(false)
26
- delete :destroy, :id => resources(:one).to_param
27
- assert_not_nil flash[:error]
28
- assert_response :redirect
29
- end
30
-
31
- test "edit" do
32
- get :edit, :id => resources(:one).to_param
33
- assert_response :success
34
- end
35
-
36
- test "index" do
37
- get :index
38
- assert_response :success
39
- assert_not_nil assigns(:resources)
40
- end
41
-
42
- test "new" do
43
- get :new
44
- assert_response :success
45
- end
46
-
47
- test "show" do
48
- get :show, :id => resources(:one).to_param
49
- assert_response :success
50
- end
51
-
52
- test "update" do
53
- Resource.any_instance.expects(:save).returns(true)
54
- put :update, :id => resources(:one).to_param, :resource => { }
55
- assert_response :redirect
56
- end
57
-
58
- test "update_with_failure" do
59
- Resource.any_instance.expects(:save).returns(false)
60
- put :update, :id => resources(:one).to_param, :resource => { }
61
- assert_template 'edit'
62
- end
63
-
64
- end