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.
- data/CHANGELOG.textile +6 -0
- data/README.textile +26 -17
- data/TODO.textile +43 -6
- data/config/scaffold.yml +14 -6
- data/generators/dry_model/USAGE +2 -5
- data/generators/dry_model/dry_model_generator.rb +68 -145
- data/generators/dry_model/prototypes/active_record_migration.rb +1 -1
- data/generators/dry_model/prototypes/active_record_model.rb +2 -2
- data/generators/dry_model/prototypes/fixture_data/active_record_fixtures.yml +3 -0
- data/generators/dry_model/prototypes/fixture_data/factory_girl_factories.rb +4 -0
- data/generators/dry_model/prototypes/fixture_data/machinist_blueprints.rb +8 -0
- data/generators/dry_model/prototypes/tests/shoulda/unit_test.rb +20 -0
- data/generators/dry_model/prototypes/tests/test_unit/unit_test.rb +8 -2
- data/generators/dry_model/templates/models/active_record_migration.rb +2 -2
- data/generators/dry_model/templates/models/{test_data → fixture_data}/active_record_fixtures.yml +1 -1
- data/generators/dry_model/templates/models/fixture_data/factory_girl_factories.rb +5 -0
- data/generators/dry_model/templates/models/fixture_data/machinist_blueprints.rb +9 -0
- data/generators/dry_model/templates/models/tests/shoulda/unit_test.rb +23 -0
- data/generators/dry_model/templates/models/tests/test_unit/unit_test.rb +10 -2
- data/generators/dry_scaffold/USAGE +4 -5
- data/generators/dry_scaffold/dry_scaffold_generator.rb +145 -151
- data/generators/dry_scaffold/prototypes/controllers/action_controller.rb +53 -52
- data/generators/dry_scaffold/prototypes/controllers/inherited_resources_controller.rb +5 -4
- data/generators/dry_scaffold/prototypes/controllers/tests/shoulda/functional_test.rb +107 -0
- data/generators/dry_scaffold/prototypes/controllers/tests/test_unit/functional_test.rb +76 -0
- data/generators/dry_scaffold/prototypes/helpers/helper.rb +1 -1
- data/generators/dry_scaffold/prototypes/helpers/tests/shoulda/unit_test.rb +9 -0
- data/generators/dry_scaffold/prototypes/helpers/tests/test_unit/unit_test.rb +6 -2
- data/generators/dry_scaffold/prototypes/views/builder/index.atom.builder +9 -9
- data/generators/dry_scaffold/prototypes/views/builder/index.rss.builder +7 -7
- data/generators/dry_scaffold/prototypes/views/haml/_item.html.haml +6 -6
- data/generators/dry_scaffold/prototypes/views/haml/edit.html.haml +3 -3
- data/generators/dry_scaffold/prototypes/views/haml/index.html.haml +5 -5
- data/generators/dry_scaffold/prototypes/views/haml/layout.html.haml +1 -2
- data/generators/dry_scaffold/prototypes/views/haml/new.html.haml +3 -3
- data/generators/dry_scaffold/prototypes/views/haml/show.html.haml +6 -6
- data/generators/dry_scaffold/templates/controllers/action_controller.rb +7 -6
- data/generators/dry_scaffold/templates/controllers/inherited_resources_controller.rb +2 -2
- data/generators/dry_scaffold/templates/controllers/tests/shoulda/functional_test.rb +90 -0
- data/generators/dry_scaffold/templates/controllers/tests/test_unit/functional_test.rb +46 -37
- data/generators/dry_scaffold/templates/helpers/tests/shoulda/unit_test.rb +9 -0
- data/generators/dry_scaffold/templates/helpers/tests/test_unit/unit_test.rb +4 -0
- data/generators/dry_scaffold/templates/views/haml/_item.html.haml +3 -3
- data/generators/dry_scaffold/templates/views/haml/edit.html.haml +1 -1
- data/generators/dry_scaffold/templates/views/haml/index.html.haml +1 -1
- data/generators/dry_scaffold/templates/views/haml/new.html.haml +1 -1
- data/generators/dry_scaffold/templates/views/haml/show.html.haml +2 -2
- data/lib/dry_generator.rb +176 -0
- data/tasks/dry_scaffold.rake +5 -1
- metadata +16 -9
- data/generators/dry_model/prototypes/test_data/active_record_fixtures.yml +0 -3
- data/generators/dry_model/prototypes/test_data/factory_girl_factories.rb +0 -4
- data/generators/dry_model/prototypes/test_data/machinist_factories.rb +0 -8
- data/generators/dry_model/templates/models/test_data/factory_girl_factories.rb +0 -5
- data/generators/dry_model/templates/models/test_data/machinist_factories.rb +0 -9
- data/generators/dry_scaffold/prototypes/controllers/tests/unit_test/functional_test.rb +0 -64
@@ -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
|
data/tasks/dry_scaffold.rake
CHANGED
@@ -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,
|
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.
|
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-
|
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/
|
46
|
-
- generators/dry_model/prototypes/
|
47
|
-
- generators/dry_model/prototypes/
|
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/
|
52
|
-
- generators/dry_model/templates/models/
|
53
|
-
- generators/dry_model/templates/models/
|
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/
|
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,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
|