merb-gen 0.9.2 → 0.9.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.
- data/README +15 -4
- data/Rakefile +6 -4
- data/TODO +0 -4
- data/app_generators/merb/merb_generator.rb +4 -0
- data/app_generators/merb/templates/Rakefile +0 -92
- data/app_generators/merb/templates/app/views/exceptions/not_acceptable.html.erb +11 -3
- data/app_generators/merb/templates/app/views/exceptions/not_found.html.erb +10 -2
- data/app_generators/merb/templates/autotest/merb_rspec.rb +81 -60
- data/app_generators/merb/templates/config/environments/development.rb +1 -0
- data/app_generators/merb/templates/config/environments/production.rb +2 -0
- data/app_generators/merb/templates/config/environments/test.rb +1 -0
- data/app_generators/merb/templates/config/init.rb +132 -37
- data/app_generators/merb_plugin/templates/Rakefile +2 -2
- data/bin/merb-gen +0 -5
- data/lib/merb-gen/base.rb +7 -3
- metadata +3 -9
- data/merb_generators/freezer/USAGE +0 -0
- data/merb_generators/freezer/freezer_generator.rb +0 -25
- data/merb_generators/freezer/templates/script/frozen-merb +0 -43
data/README
CHANGED
@@ -1,10 +1,21 @@
|
|
1
1
|
==== merb-gen
|
2
2
|
|
3
|
-
merb-gen is a part of the Merb More package. It provides application
|
3
|
+
merb-gen is a part of the Merb More package. It provides application, plugin, and component
|
4
|
+
generators for Merb.
|
4
5
|
|
5
6
|
==== Usage
|
6
7
|
|
7
|
-
To generate a new merb app, run merb-gen <
|
8
|
-
a new merb app inside of the foo directory.
|
8
|
+
To generate directory structure for a new merb app, run merb-gen app <app-name>.
|
9
|
+
For instance, <tt>merb-gen app foo</tt> would create a new foo merb app inside of the foo directory.
|
9
10
|
|
10
|
-
|
11
|
+
Use <tt>--flat</tt> to generate a flattened application (very simple directory structure)
|
12
|
+
and <tt>--very-flat</tt> to generate a single file application.
|
13
|
+
|
14
|
+
To generate a new merb plugin, run merb-gen plugin <plugin_name>.
|
15
|
+
|
16
|
+
To see what generators are available, run merb-gen generators.
|
17
|
+
|
18
|
+
==== Custom generators
|
19
|
+
|
20
|
+
If you want to create your custom generators to use with Merb, and don't want to create a gem,
|
21
|
+
you should put them in ~/.rubigen/merb_generators/.
|
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'rake/gempackagetask'
|
3
3
|
|
4
4
|
GEM = "merb-gen"
|
5
|
-
VERSION = "0.9.
|
5
|
+
VERSION = "0.9.3"
|
6
6
|
AUTHOR = "Yehuda Katz"
|
7
7
|
EMAIL = "wycats@gmail.com"
|
8
8
|
HOMEPAGE = "http://www.merbivore.com"
|
@@ -23,7 +23,7 @@ spec = Gem::Specification.new do |s|
|
|
23
23
|
s.executables = %w( merb-gen )
|
24
24
|
|
25
25
|
# Uncomment this to add a dependency
|
26
|
-
s.add_dependency "merb-core", ">= 0.9.
|
26
|
+
s.add_dependency "merb-core", ">= 0.9.3"
|
27
27
|
s.add_dependency "rubigen", ">= 1.2.4"
|
28
28
|
|
29
29
|
s.require_path = 'lib'
|
@@ -36,12 +36,14 @@ Rake::GemPackageTask.new(spec) do |pkg|
|
|
36
36
|
pkg.gem_spec = spec
|
37
37
|
end
|
38
38
|
|
39
|
+
install_home = ENV['GEM_HOME'] ? "-i #{ENV['GEM_HOME']}" : ""
|
40
|
+
|
39
41
|
namespace :jruby do
|
40
42
|
task :install do
|
41
|
-
sh %{sudo jruby -S gem install pkg/#{GEM}-#{VERSION} --no-update-sources}
|
43
|
+
sh %{sudo jruby -S gem install #{install_home} pkg/#{GEM}-#{VERSION} --no-update-sources}
|
42
44
|
end
|
43
45
|
end
|
44
46
|
|
45
47
|
task :install => [:package] do
|
46
|
-
sh %{sudo gem install pkg/#{GEM}-#{VERSION} --no-update-sources}
|
48
|
+
sh %{sudo gem install #{install_home} pkg/#{GEM}-#{VERSION} --no-update-sources}
|
47
49
|
end
|
data/TODO
CHANGED
@@ -32,95 +32,3 @@ desc "Add new files to subversion"
|
|
32
32
|
task :svn_add do
|
33
33
|
system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add"
|
34
34
|
end
|
35
|
-
|
36
|
-
|
37
|
-
class Freezer
|
38
|
-
|
39
|
-
class << self
|
40
|
-
|
41
|
-
def components
|
42
|
-
{
|
43
|
-
"core" => "git://github.com/wycats/merb-core.git",
|
44
|
-
"more" => "git://github.com/wycats/merb-more.git",
|
45
|
-
"plugins" => "git://github.com/wycats/merb-plugins.git"
|
46
|
-
}
|
47
|
-
end
|
48
|
-
|
49
|
-
def framework_dir
|
50
|
-
# Should allow customization of this directory's location?
|
51
|
-
File.join(File.dirname(__FILE__), "framework")
|
52
|
-
end
|
53
|
-
|
54
|
-
def gitmodules
|
55
|
-
File.join(File.dirname(__FILE__), ".gitmodules")
|
56
|
-
end
|
57
|
-
|
58
|
-
def freeze(component, update = false)
|
59
|
-
new(component, update).freeze
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
|
64
|
-
def initialize(component, update)
|
65
|
-
@component = "merb-" + component
|
66
|
-
@update = update
|
67
|
-
end
|
68
|
-
|
69
|
-
def freeze
|
70
|
-
# Ensure that required git commands are available
|
71
|
-
%w(git-pull git-submodule).each do |bin|
|
72
|
-
next if in_path?(bin)
|
73
|
-
$stderr.puts "ERROR: #{bin} must be avaible in PATH"
|
74
|
-
exit 1
|
75
|
-
end
|
76
|
-
|
77
|
-
unless File.directory?(framework_dir)
|
78
|
-
puts "Creating framework directory ..."
|
79
|
-
FileUtils.mkdir_p(framework_dir)
|
80
|
-
end
|
81
|
-
|
82
|
-
if managed?
|
83
|
-
puts "#{@component} seems to be already managed by git-submodule."
|
84
|
-
if @update
|
85
|
-
puts "Trying to update #{@component} ..."
|
86
|
-
sh "cd #{framework_dir}/#{@component} && git-pull"
|
87
|
-
end
|
88
|
-
else
|
89
|
-
puts "Creating submodule for #{@component} ..."
|
90
|
-
sh "git-submodule --quiet add #{components[@component.gsub("merb-", '')]} #{File.basename(framework_dir)}/#{@component}"
|
91
|
-
if $?.success?
|
92
|
-
sh("git-submodule init")
|
93
|
-
else
|
94
|
-
# Should this instead be a raise?
|
95
|
-
$stderr.puts("ERROR: unable to create submodule for #{@component}")
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
protected
|
101
|
-
|
102
|
-
def in_submodule?
|
103
|
-
return false unless File.exists?(gitmodules)
|
104
|
-
File.read(gitmodules) =~ %r![submodule "#{framework_dir}/#{@component}"]!
|
105
|
-
end
|
106
|
-
|
107
|
-
def managed?
|
108
|
-
File.directory?(File.join(framework_dir, @component)) || in_submodule?
|
109
|
-
end
|
110
|
-
|
111
|
-
def in_path?(bin)
|
112
|
-
`which #{bin}`
|
113
|
-
!$?.nil? && $?.success?
|
114
|
-
end
|
115
|
-
|
116
|
-
end
|
117
|
-
|
118
|
-
task :freeze => Freezer.components.keys.map { |component| "freeze:#{component}" }
|
119
|
-
namespace :freeze do
|
120
|
-
Freezer.components.each do |component, git_repository|
|
121
|
-
desc "Freeze #{component} from #{git_repository}"
|
122
|
-
task component do
|
123
|
-
Freezer.freeze(component, ENV["UPDATE"])
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
@@ -38,11 +38,19 @@
|
|
38
38
|
|
39
39
|
<h3>Where can I find help?</h3>
|
40
40
|
<p>If you have any questions or if you can't figure something out, please take a
|
41
|
-
look at our <a href="http://
|
42
|
-
feel free to come chat at irc.freenode.net, channel #merb
|
41
|
+
look at our <a href="http://merbivore.com/"> project page</a>,
|
42
|
+
feel free to come chat at irc.freenode.net, channel #merb,
|
43
|
+
or post to <a href="http://groups.google.com/group/merb">merb mailing list</a>
|
44
|
+
on Google Groups.</p>
|
45
|
+
|
46
|
+
<h3>What if I've found a bug?</h3>
|
47
|
+
<p>If you want to file a bug or make your own contribution to Merb,
|
48
|
+
feel free to register and create a ticket at our
|
49
|
+
<a href="http://merb.lighthouseapp.com/">project development page</a>
|
50
|
+
on Lighthouse.</p>
|
43
51
|
|
44
52
|
<h3>How do I edit this page?</h3>
|
45
|
-
<p>You can change what people see when this happens
|
53
|
+
<p>You can change what people see when this happens by editing <tt>app/views/exceptions/not_acceptable.html.erb</tt>.</p>
|
46
54
|
|
47
55
|
</div>
|
48
56
|
|
@@ -17,8 +17,16 @@
|
|
17
17
|
|
18
18
|
<h3>Where can I find help?</h3>
|
19
19
|
<p>If you have any questions or if you can't figure something out, please take a
|
20
|
-
look at our <a href="http://
|
21
|
-
feel free to come chat at irc.freenode.net, channel #merb
|
20
|
+
look at our <a href="http://merbivore.com/"> project page</a>,
|
21
|
+
feel free to come chat at irc.freenode.net, channel #merb,
|
22
|
+
or post to <a href="http://groups.google.com/group/merb">merb mailing list</a>
|
23
|
+
on Google Groups.</p>
|
24
|
+
|
25
|
+
<h3>What if I've found a bug?</h3>
|
26
|
+
<p>If you want to file a bug or make your own contribution to Merb,
|
27
|
+
feel free to register and create a ticket at our
|
28
|
+
<a href="http://merb.lighthouseapp.com/">project development page</a>
|
29
|
+
on Lighthouse.</p>
|
22
30
|
|
23
31
|
<h3>How do I edit this page?</h3>
|
24
32
|
<p>You're seeing this page because you need to edit the following files:
|
@@ -1,86 +1,88 @@
|
|
1
|
-
# Adapted from Autotest::Rails
|
1
|
+
# Adapted from Autotest::Rails, RSpec's autotest class, as well as merb-core's.
|
2
2
|
require 'autotest'
|
3
3
|
|
4
|
+
class RspecCommandError < StandardError; end
|
5
|
+
|
4
6
|
class Autotest::MerbRspec < Autotest
|
5
|
-
|
7
|
+
|
6
8
|
# +model_tests_dir+:: the directory to find model-centric tests
|
7
9
|
# +controller_tests_dir+:: the directory to find controller-centric tests
|
8
10
|
# +view_tests_dir+:: the directory to find view-centric tests
|
9
11
|
# +fixtures_dir+:: the directory to find fixtures in
|
10
12
|
attr_accessor :model_tests_dir, :controller_tests_dir, :view_tests_dir, :fixtures_dir
|
11
|
-
|
13
|
+
|
12
14
|
def initialize # :nodoc:
|
13
15
|
super
|
14
|
-
|
16
|
+
|
15
17
|
initialize_test_layout
|
16
|
-
|
18
|
+
|
17
19
|
# Ignore any happenings in these directories
|
18
20
|
add_exception %r%^\./(?:doc|log|public|tmp)%
|
19
|
-
|
21
|
+
|
20
22
|
# Ignore any mappings that Autotest may have already set up
|
21
23
|
clear_mappings
|
22
|
-
|
23
|
-
# Any changes to a file in the root of the 'lib' directory will run any
|
24
|
+
|
25
|
+
# Any changes to a file in the root of the 'lib' directory will run any
|
24
26
|
# model test with a corresponding name.
|
25
27
|
add_mapping %r%^lib\/.*\.rb% do |filename, _|
|
26
|
-
files_matching
|
28
|
+
files_matching %r%#{model_test_for(filename)}$%
|
27
29
|
end
|
28
|
-
|
30
|
+
|
29
31
|
add_mapping %r%^spec/(spec_helper|shared/.*)\.rb$% do
|
30
32
|
files_matching %r%^spec/.*_spec\.rb$%
|
31
33
|
end
|
32
|
-
|
33
|
-
# Any changes to a fixture will run corresponding view, controller and
|
34
|
+
|
35
|
+
# Any changes to a fixture will run corresponding view, controller and
|
34
36
|
# model tests
|
35
37
|
add_mapping %r%^#{fixtures_dir}/(.*)s.yml% do |_, m|
|
36
38
|
[
|
37
|
-
model_test_for(m[1]),
|
38
|
-
controller_test_for(m[1]),
|
39
|
+
model_test_for(m[1]),
|
40
|
+
controller_test_for(m[1]),
|
39
41
|
view_test_for(m[1])
|
40
42
|
]
|
41
43
|
end
|
42
|
-
|
44
|
+
|
43
45
|
# Any change to a test or spec will cause it to be run
|
44
46
|
add_mapping %r%^spec/(unit|models|integration|controllers|views|functional)/.*rb$% do |filename, _|
|
45
47
|
filename
|
46
48
|
end
|
47
|
-
|
49
|
+
|
48
50
|
# Any change to a model will cause it's corresponding test to be run
|
49
51
|
add_mapping %r%^app/models/(.*)\.rb$% do |_, m|
|
50
52
|
model_test_for(m[1])
|
51
53
|
end
|
52
|
-
|
53
|
-
# Any change to the global helper will result in all view and controller
|
54
|
+
|
55
|
+
# Any change to the global helper will result in all view and controller
|
54
56
|
# tests being run
|
55
57
|
add_mapping %r%^app/helpers/global_helpers.rb% do
|
56
58
|
files_matching %r%^spec/(views|functional|controllers)/.*_spec\.rb$%
|
57
59
|
end
|
58
|
-
|
59
|
-
# Any change to a helper will run it's corresponding view and controller
|
60
|
-
# tests, unless the helper is the global helper. Changes to the global
|
60
|
+
|
61
|
+
# Any change to a helper will run it's corresponding view and controller
|
62
|
+
# tests, unless the helper is the global helper. Changes to the global
|
61
63
|
# helper run all view and controller tests.
|
62
64
|
add_mapping %r%^app/helpers/(.*)_helper(s)?.rb% do |_, m|
|
63
65
|
if m[1] == "global" then
|
64
66
|
files_matching %r%^spec/(views|functional|controllers)/.*_spec\.rb$%
|
65
67
|
else
|
66
68
|
[
|
67
|
-
view_test_for(m[1]),
|
69
|
+
view_test_for(m[1]),
|
68
70
|
controller_test_for(m[1])
|
69
71
|
]
|
70
72
|
end
|
71
73
|
end
|
72
|
-
|
73
|
-
# Changes to views result in their corresponding view and controller test
|
74
|
+
|
75
|
+
# Changes to views result in their corresponding view and controller test
|
74
76
|
# being run
|
75
77
|
add_mapping %r%^app/views/(.*)/% do |_, m|
|
76
78
|
[
|
77
|
-
view_test_for(m[1]),
|
79
|
+
view_test_for(m[1]),
|
78
80
|
controller_test_for(m[1])
|
79
81
|
]
|
80
82
|
end
|
81
|
-
|
82
|
-
# Changes to a controller result in its corresponding test being run. If
|
83
|
-
# the controller is the exception or application controller, all
|
83
|
+
|
84
|
+
# Changes to a controller result in its corresponding test being run. If
|
85
|
+
# the controller is the exception or application controller, all
|
84
86
|
# controller tests are run.
|
85
87
|
add_mapping %r%^app/controllers/(.*)\.rb$% do |_, m|
|
86
88
|
if ["application", "exception"].include?(m[1])
|
@@ -95,36 +97,58 @@ class Autotest::MerbRspec < Autotest
|
|
95
97
|
files_matching %r%^spec/(controllers|views|functional)/.*_spec\.rb$%
|
96
98
|
end
|
97
99
|
|
98
|
-
# If any of the major files governing the environment are altered, run
|
100
|
+
# If any of the major files governing the environment are altered, run
|
99
101
|
# everything
|
100
102
|
add_mapping %r%^spec/spec_helper.rb|config/(init|rack|environments/test.rb|database.yml)% do # FIX
|
101
103
|
files_matching %r%^spec/(unit|models|controllers|views|functional)/.*_spec\.rb$%
|
102
104
|
end
|
103
105
|
end
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
106
|
+
|
107
|
+
def failed_results(results)
|
108
|
+
results.scan(/^\d+\)\n(?:\e\[\d*m)?(?:.*?Error in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n(.*?)\n\n/m)
|
109
|
+
end
|
110
|
+
|
111
|
+
def handle_results(results)
|
112
|
+
@failures = failed_results(results)
|
113
|
+
@files_to_test = consolidate_failures @failures
|
114
|
+
unless $TESTING
|
115
|
+
if @files_to_test.empty?
|
116
|
+
hook :green
|
117
|
+
else
|
118
|
+
hook :red
|
119
|
+
end
|
120
|
+
end
|
121
|
+
@tainted = true unless @files_to_test.empty?
|
122
|
+
end
|
123
|
+
|
108
124
|
def consolidate_failures(failed)
|
109
125
|
filters = Hash.new { |h,k| h[k] = [] }
|
110
126
|
failed.each do |spec, failed_trace|
|
111
|
-
|
112
|
-
|
113
|
-
|
127
|
+
find_files.keys.select { |f| f =~ /spec\// }.each do |f|
|
128
|
+
if failed_trace =~ Regexp.new(f)
|
129
|
+
filters[f] << spec
|
130
|
+
break
|
131
|
+
end
|
114
132
|
end
|
115
133
|
end
|
116
|
-
|
134
|
+
filters
|
117
135
|
end
|
118
136
|
|
119
137
|
def make_test_cmd(files_to_test)
|
120
|
-
|
138
|
+
[
|
139
|
+
ruby,
|
140
|
+
"-S",
|
141
|
+
spec_command,
|
142
|
+
add_options_if_present,
|
143
|
+
files_to_test.keys.flatten.join(' ')
|
144
|
+
].join(" ")
|
121
145
|
end
|
122
|
-
|
146
|
+
|
123
147
|
def add_options_if_present
|
124
148
|
File.exist?("spec/spec.opts") ? "-O spec/spec.opts " : ""
|
125
149
|
end
|
126
150
|
|
127
|
-
# Finds the proper spec command to use.
|
151
|
+
# Finds the proper spec command to use. Precendence is set in the
|
128
152
|
# lazily-evaluated method spec_commands. Alias + Override that in
|
129
153
|
# ~/.autotest to provide a different spec command then the default
|
130
154
|
# paths provided.
|
@@ -134,7 +158,7 @@ class Autotest::MerbRspec < Autotest
|
|
134
158
|
|
135
159
|
raise RspecCommandError, "No spec command could be found!" unless @spec_command
|
136
160
|
|
137
|
-
@spec_command.gsub!
|
161
|
+
@spec_command.gsub!(File::SEPARATOR, separator) if separator
|
138
162
|
end
|
139
163
|
@spec_command
|
140
164
|
end
|
@@ -142,18 +166,15 @@ class Autotest::MerbRspec < Autotest
|
|
142
166
|
# Autotest will look for spec commands in the following
|
143
167
|
# locations, in this order:
|
144
168
|
#
|
145
|
-
# * bin/spec
|
146
169
|
# * default spec bin/loader installed in Rubygems
|
170
|
+
# * any spec command found in PATH
|
147
171
|
def spec_commands
|
148
|
-
[
|
149
|
-
File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec')),
|
150
|
-
File.join(Config::CONFIG['bindir'], 'spec')
|
151
|
-
]
|
172
|
+
[ File.join(Config::CONFIG['bindir'], 'spec'), 'spec' ]
|
152
173
|
end
|
153
|
-
|
174
|
+
|
154
175
|
private
|
155
176
|
|
156
|
-
# Determines the paths we can expect tests or specs to reside, as well as
|
177
|
+
# Determines the paths we can expect tests or specs to reside, as well as
|
157
178
|
# corresponding fixtures.
|
158
179
|
def initialize_test_layout
|
159
180
|
self.model_tests_dir = "spec/models"
|
@@ -161,19 +182,19 @@ private
|
|
161
182
|
self.view_tests_dir = "spec/views"
|
162
183
|
self.fixtures_dir = "spec/fixtures"
|
163
184
|
end
|
164
|
-
|
165
|
-
# Given a filename and the test type, this method will return the
|
185
|
+
|
186
|
+
# Given a filename and the test type, this method will return the
|
166
187
|
# corresponding test's or spec's name.
|
167
|
-
#
|
188
|
+
#
|
168
189
|
# ==== Arguments
|
169
190
|
# +filename+<String>:: the file name of the model, view, or controller
|
170
191
|
# +kind_of_test+<Symbol>:: the type of test we that we should run
|
171
|
-
#
|
192
|
+
#
|
172
193
|
# ==== Returns
|
173
194
|
# String:: the name of the corresponding test or spec
|
174
|
-
#
|
195
|
+
#
|
175
196
|
# ==== Example
|
176
|
-
#
|
197
|
+
#
|
177
198
|
# > test_for("user", :model)
|
178
199
|
# => "user_test.rb"
|
179
200
|
# > test_for("login", :controller)
|
@@ -182,21 +203,21 @@ private
|
|
182
203
|
# => "form_view_spec.rb" # If you're running a RSpec-like suite
|
183
204
|
def test_for(filename, kind_of_test) # :nodoc:
|
184
205
|
name = [filename]
|
185
|
-
name << kind_of_test.to_s
|
206
|
+
name << kind_of_test.to_s if kind_of_test == :view
|
186
207
|
name << "spec"
|
187
208
|
return name.join("_") + ".rb"
|
188
209
|
end
|
189
|
-
|
210
|
+
|
190
211
|
def model_test_for(filename)
|
191
212
|
[model_tests_dir, test_for(filename, :model)].join("/")
|
192
213
|
end
|
193
|
-
|
214
|
+
|
194
215
|
def controller_test_for(filename)
|
195
216
|
[controller_tests_dir, test_for(filename, :controller)].join("/")
|
196
217
|
end
|
197
|
-
|
218
|
+
|
198
219
|
def view_test_for(filename)
|
199
220
|
[view_tests_dir, test_for(filename, :view)].join("/")
|
200
221
|
end
|
201
|
-
|
202
|
-
end
|
222
|
+
|
223
|
+
end
|
@@ -1,58 +1,153 @@
|
|
1
|
-
#
|
1
|
+
#
|
2
|
+
# ==== Structure of Merb initializer
|
3
|
+
#
|
4
|
+
# 1. Load paths.
|
5
|
+
# 2. Dependencies configuration.
|
6
|
+
# 3. Libraries (ORM, testing tool, etc) you use.
|
7
|
+
# 4. Application-specific configuration.
|
8
|
+
|
9
|
+
#
|
10
|
+
# ==== Set up load paths
|
11
|
+
#
|
12
|
+
|
13
|
+
# Make the app's "gems" directory a place where gems are loaded from.
|
14
|
+
# Note that gems directory must have a structure RubyGems uses for
|
15
|
+
# directories under which gems are kept.
|
16
|
+
#
|
17
|
+
# To conveniently set it up use gem install -i <merb_app_root/gems>
|
18
|
+
# when installing gems. This will set up the structure under /gems
|
19
|
+
# automagically.
|
20
|
+
#
|
21
|
+
# An example:
|
22
|
+
#
|
23
|
+
# You want to bundle ActiveRecord and ActiveSupport with your Merb
|
24
|
+
# application to be deployment environment independent. To do so,
|
25
|
+
# install gems into merb_app_root/gems directory like this:
|
26
|
+
#
|
27
|
+
# gem install -i ~/dev/merbapp/gems activesupport-post-2.0.2gem activerecord-post-2.0.2.gem
|
28
|
+
#
|
29
|
+
# Since RubyGems will search merb_app_root/gems for dependencies, order
|
30
|
+
# in statement above is important: we need to install ActiveSupport which
|
31
|
+
# ActiveRecord depends on first.
|
32
|
+
#
|
33
|
+
# Remember that bundling of dependencies as gems with your application
|
34
|
+
# makes it independent of the environment it runs in and is a very
|
35
|
+
# good, encouraged practice to follow.
|
2
36
|
Gem.clear_paths
|
3
37
|
Gem.path.unshift(Merb.root / "gems")
|
4
38
|
|
5
|
-
#
|
6
|
-
|
39
|
+
# If you want modules and classes from libraries organized like
|
40
|
+
# merbapp/lib/magicwand/lib/magicwand.rb to autoload,
|
41
|
+
# uncomment this.
|
42
|
+
# Merb.push_path(:lib, Merb.root / "lib") # uses **/*.rb as path glob.
|
7
43
|
|
8
44
|
<% require 'sha1' %>
|
9
|
-
Merb::Config.use do |c|
|
10
|
-
|
11
|
-
### Sets up a custom session id key, if you want to piggyback sessions of other applications
|
12
|
-
### with the cookie session store. If not specified, defaults to '_session_id'.
|
13
|
-
# c[:session_id_key] = '_session_id'
|
14
|
-
|
15
|
-
c[:session_secret_key] = '<%= SHA1.new(rand(100000000000).to_s).to_s %>'
|
16
|
-
c[:session_store] = 'cookie'
|
17
|
-
end
|
18
45
|
|
19
|
-
### Merb doesn't come with database support by default. You need
|
20
|
-
### an ORM plugin. Install one, and uncomment one of the following lines,
|
21
|
-
### if you need a database.
|
22
46
|
|
23
|
-
|
47
|
+
# ==== Dependencies
|
48
|
+
|
49
|
+
# These are some examples of how you might specify dependencies.
|
50
|
+
# Dependencies load is delayed to one of later Merb app
|
51
|
+
# boot stages. It may be important when
|
52
|
+
# later part of your configuration relies on libraries specified
|
53
|
+
# here.
|
54
|
+
#
|
55
|
+
# dependencies "RedCloth", "merb_helpers"
|
56
|
+
# OR
|
57
|
+
# dependency "RedCloth", "> 3.0"
|
58
|
+
# OR
|
59
|
+
# dependencies "RedCloth" => "> 3.0", "ruby-aes-cext" => "= 1.0"
|
60
|
+
Merb::BootLoader.after_app_loads do
|
61
|
+
# Add dependencies here that must load after the application loads:
|
62
|
+
|
63
|
+
# dependency "magic_admin" # this gem uses the app's model classes
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
# ==== Set up your ORM of choice
|
68
|
+
#
|
69
|
+
|
70
|
+
# Merb doesn't come with database support by default. You need
|
71
|
+
# an ORM plugin. Install one, and uncomment one of the following lines,
|
72
|
+
# if you need a database.
|
73
|
+
|
74
|
+
# Uncomment for DataMapper ORM
|
24
75
|
<%= "# " unless default_orm?(:datamapper) %>use_orm :datamapper
|
25
76
|
|
26
|
-
|
77
|
+
# Uncomment for ActiveRecord ORM
|
27
78
|
<%= "# " unless default_orm?(:activerecord) %>use_orm :activerecord
|
28
79
|
|
29
|
-
|
80
|
+
# Uncomment for Sequel ORM
|
30
81
|
<%= "# " unless default_orm?(:sequel) %>use_orm :sequel
|
31
82
|
|
32
83
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
84
|
+
#
|
85
|
+
# ==== Pick what you test with
|
86
|
+
#
|
87
|
+
|
88
|
+
# This defines which test framework the generators will use
|
89
|
+
# rspec is turned on by default
|
90
|
+
#
|
91
|
+
# Note that you need to install the merb_rspec if you want to ue
|
92
|
+
# rspec and merb_test_unit if you want to use test_unit.
|
93
|
+
# merb_rspec is installed by default if you did gem install
|
94
|
+
# merb.
|
95
|
+
#
|
41
96
|
<%= "# " unless default_test_suite?(:test) %>use_test :test_unit
|
42
97
|
<%= "# " unless default_test_suite?(:spec) %>use_test :rspec
|
43
98
|
|
44
|
-
### Add your other dependencies here
|
45
99
|
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
|
50
|
-
# dependency "RedCloth", "> 3.0"
|
51
|
-
# OR
|
52
|
-
# dependencies "RedCloth" => "> 3.0", "ruby-aes-cext" => "= 1.0"
|
100
|
+
#
|
101
|
+
# ==== Set up your basic configuration
|
102
|
+
#
|
103
|
+
Merb::Config.use do |c|
|
53
104
|
|
54
|
-
|
55
|
-
|
105
|
+
# Sets up a custom session id key, if you want to piggyback sessions of other applications
|
106
|
+
# with the cookie session store. If not specified, defaults to '_session_id'.
|
107
|
+
# c[:session_id_key] = '_session_id'
|
56
108
|
|
57
|
-
|
109
|
+
c[:session_secret_key] = '<%= SHA1.new(rand(100000000000).to_s).to_s %>'
|
110
|
+
c[:session_store] = 'cookie'
|
58
111
|
end
|
112
|
+
|
113
|
+
|
114
|
+
# ==== Tune your inflector
|
115
|
+
|
116
|
+
# To fine tune your inflector use word, singular_word and plural_word
|
117
|
+
# methods of Language::English::Inflector module metaclass.
|
118
|
+
#
|
119
|
+
# Here we define erratum/errata exception case:
|
120
|
+
#
|
121
|
+
# Language::English::Inflector.word "erratum", "errata"
|
122
|
+
#
|
123
|
+
# In case singular and plural forms are the same omit
|
124
|
+
# second argument on call:
|
125
|
+
#
|
126
|
+
# Language::English::Inflector.word 'information'
|
127
|
+
#
|
128
|
+
# You can also define general, singularization and pluralization
|
129
|
+
# rules:
|
130
|
+
#
|
131
|
+
# Once the following rule is defined:
|
132
|
+
# Language::English::Inflector.rule 'y', 'ies'
|
133
|
+
#
|
134
|
+
# You can see the following results:
|
135
|
+
# irb> "fly".plural
|
136
|
+
# => flies
|
137
|
+
# irb> "cry".plural
|
138
|
+
# => cries
|
139
|
+
#
|
140
|
+
# Example for singularization rule:
|
141
|
+
#
|
142
|
+
# Language::English::Inflector.singular_rule 'o', 'oes'
|
143
|
+
#
|
144
|
+
# Works like this:
|
145
|
+
# irb> "heroes".singular
|
146
|
+
# => hero
|
147
|
+
#
|
148
|
+
# Example of pluralization rule:
|
149
|
+
# Language::English::Inflector.singular_rule 'fe', 'ves'
|
150
|
+
#
|
151
|
+
# And the result is:
|
152
|
+
# irb> "wife".plural
|
153
|
+
# => wives
|
@@ -23,7 +23,7 @@ spec = Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency('merb', '>= 0.4.0')
|
24
24
|
s.require_path = 'lib'
|
25
25
|
s.autorequire = PLUGIN
|
26
|
-
s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,
|
26
|
+
s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,spec}/**/*")
|
27
27
|
end
|
28
28
|
|
29
29
|
Rake::GemPackageTask.new(spec) do |pkg|
|
@@ -31,7 +31,7 @@ Rake::GemPackageTask.new(spec) do |pkg|
|
|
31
31
|
end
|
32
32
|
|
33
33
|
task :install => [:package] do
|
34
|
-
sh %{sudo gem install pkg/#{NAME}-#{VERSION}}
|
34
|
+
sh %{sudo gem install pkg/#{NAME}-#{VERSION} --no-update-sources}
|
35
35
|
end
|
36
36
|
|
37
37
|
namespace :jruby do
|
data/bin/merb-gen
CHANGED
@@ -27,7 +27,6 @@ app_help = <<-EOF
|
|
27
27
|
merb-gen app app_name (for a standard application)
|
28
28
|
merb-gen app app_name --flat (for a flattened application)
|
29
29
|
merb-gen app app_name --very-flat (for a single file application)
|
30
|
-
merb-gen frozen-merb (script to run from frozen gems/framework)
|
31
30
|
merb-gen plugin plugin_name (creates a plugin gem skeleton)
|
32
31
|
|
33
32
|
Other Generators:
|
@@ -76,10 +75,6 @@ elsif ARGV[0] && ARGV[0] == "app" && ARGV[1] && ARGV[1] !~ /^-/
|
|
76
75
|
elsif ARGV[0] && ARGV[0] == "plugin"
|
77
76
|
Merb::ApplicationGenerator.run ARGV[1], ARGV[2..-1], "merb_plugin", command || "generate"
|
78
77
|
|
79
|
-
# merb-gen frozen-merb
|
80
|
-
elsif ARGV[0] && ARGV[0] == "frozen-merb"
|
81
|
-
Merb::ComponentGenerator.run "frozen-merb", ["frozen-merb"], "freezer", command || "generate"
|
82
|
-
|
83
78
|
# merb-gen controller foo
|
84
79
|
# merb-gen resource foo --test
|
85
80
|
elsif ARGV[1] && ARGV[1] !~ /^-/
|
data/lib/merb-gen/base.rb
CHANGED
@@ -29,10 +29,11 @@ class Merb::GeneratorBase < RubiGen::Base
|
|
29
29
|
# Set the assigns that should be used for path-interpolation and building templates
|
30
30
|
@assigns = {:base_name => File.basename(@name), :test_type => options["spec"] ? "rspec" : "test_unit"}
|
31
31
|
|
32
|
-
FileUtils.mkdir_p @name
|
32
|
+
FileUtils.mkdir_p @name
|
33
|
+
create_dirs
|
33
34
|
copy_dirs
|
34
35
|
copy_files
|
35
|
-
|
36
|
+
|
36
37
|
display_framework_selections
|
37
38
|
end
|
38
39
|
end
|
@@ -55,8 +56,11 @@ class Merb::GeneratorBase < RubiGen::Base
|
|
55
56
|
puts
|
56
57
|
puts "Your app will use the #{@assigns[:test_type]} test framework."
|
57
58
|
if Gem.cache.search("merb_#{@assigns[:test_type]}").size == 0
|
58
|
-
puts "You need to install the merb_#{@assigns[:test_type]} gem."
|
59
|
+
puts "You need to install the merb_#{@assigns[:test_type]} gem." unless @assigns[:test_type] == 'rspec'
|
59
60
|
end
|
60
61
|
puts
|
61
62
|
end
|
63
|
+
|
64
|
+
def create_dirs
|
65
|
+
end
|
62
66
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: merb-gen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yehuda Katz
|
@@ -9,7 +9,7 @@ autorequire: merb-gen
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-05-04 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.9.
|
22
|
+
version: 0.9.3
|
23
23
|
version:
|
24
24
|
- !ruby/object:Gem::Dependency
|
25
25
|
name: rubigen
|
@@ -159,12 +159,6 @@ files:
|
|
159
159
|
- merb_generators/controller/templates/app/views/%controller_file_name%
|
160
160
|
- merb_generators/controller/templates/app/views/%controller_file_name%/index.html.erb
|
161
161
|
- merb_generators/controller/USAGE
|
162
|
-
- merb_generators/freezer
|
163
|
-
- merb_generators/freezer/freezer_generator.rb
|
164
|
-
- merb_generators/freezer/templates
|
165
|
-
- merb_generators/freezer/templates/script
|
166
|
-
- merb_generators/freezer/templates/script/frozen-merb
|
167
|
-
- merb_generators/freezer/USAGE
|
168
162
|
- merb_generators/part_controller
|
169
163
|
- merb_generators/part_controller/part_controller_generator.rb
|
170
164
|
- merb_generators/part_controller/templates
|
File without changes
|
@@ -1,25 +0,0 @@
|
|
1
|
-
class FreezerGenerator < Merb::GeneratorBase
|
2
|
-
|
3
|
-
def initialize(args, runtime_args = {})
|
4
|
-
@base = File.dirname(__FILE__)
|
5
|
-
super
|
6
|
-
end
|
7
|
-
|
8
|
-
def manifest
|
9
|
-
record do |m|
|
10
|
-
@m = m
|
11
|
-
@assigns = {}
|
12
|
-
copy_dirs
|
13
|
-
m.file "script/frozen-merb", "script/frozen-merb", :chmod => 0755, :shebang => DEFAULT_SHEBANG
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
protected
|
18
|
-
def banner
|
19
|
-
<<-EOS.split("\n").map{|x| x.strip}.join("\n")
|
20
|
-
Creates a frozen-merb script that runs merb from framework/ or gems/
|
21
|
-
|
22
|
-
USAGE: #{spec.name} frozen-merb
|
23
|
-
EOS
|
24
|
-
end
|
25
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
__DIR__ = File.join(File.dirname(__FILE__),"..")
|
4
|
-
|
5
|
-
framework = File.join(__DIR__,"framework")
|
6
|
-
|
7
|
-
if File.directory?(framework)
|
8
|
-
puts "Running from frozen framework"
|
9
|
-
core = File.join(framework,"merb-core")
|
10
|
-
if File.directory?(core)
|
11
|
-
$:.push File.join(core,"lib")
|
12
|
-
end
|
13
|
-
more = File.join(framework,"merb-more")
|
14
|
-
if File.directory?(more)
|
15
|
-
Dir.new(more).select {|d| d =~ /merb-/}.each do |d|
|
16
|
-
$:.push File.join(more,d,'lib')
|
17
|
-
end
|
18
|
-
end
|
19
|
-
plugins = File.join(framework,"merb-plugins")
|
20
|
-
if File.directory?(plugins)
|
21
|
-
Dir.new(plugins).select {|d| d =~ /merb_/}.each do |d|
|
22
|
-
$:.push File.join(plugins,d,'lib')
|
23
|
-
end
|
24
|
-
end
|
25
|
-
require "merb-core/core_ext/kernel"
|
26
|
-
require "merb-core/core_ext/rubygems"
|
27
|
-
else
|
28
|
-
gem = Dir.glob(__DIR__ + "/gems/gems/merb-core-*").last
|
29
|
-
raise "Can't run frozen without framework/ or local gem" unless gem
|
30
|
-
require gem + "/lib/merb-core/core_ext/kernel"
|
31
|
-
require gem + "/lib/merb-core/core_ext/rubygems"
|
32
|
-
|
33
|
-
Gem.clear_paths
|
34
|
-
Gem.path.unshift(__DIR__+"/gems")
|
35
|
-
end
|
36
|
-
|
37
|
-
require 'merb-core'
|
38
|
-
unless %w[-a --adapter -i --irb-console -r --script-runner].any? { |o| ARGV.index(o) }
|
39
|
-
ARGV.push *%w[-a mongrel]
|
40
|
-
end
|
41
|
-
|
42
|
-
Merb.frozen!
|
43
|
-
Merb.start
|