Skip to content

Commit

Permalink
Remove --freeze (since Rails will come bundled in all new apps) and u…
Browse files Browse the repository at this point in the history
…pdate gem action to change Gemfile instead of config.environment.

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
  • Loading branch information
josevalim authored and jeremy committed Nov 4, 2009
1 parent 3fb548c commit 3b8e29f
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 58 deletions.
60 changes: 49 additions & 11 deletions railties/lib/rails/generators/actions.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
require 'open-uri'
require 'active_support/deprecation'

module Rails
module Generators
Expand Down Expand Up @@ -45,19 +46,56 @@ def plugin(name, options)
#
# gem "rspec", :env => :test
# gem "technoweenie-restful-authentication", :lib => "restful-authentication", :source => "http://gems.github.com/"
# gem "rails", "3.0", :git => "git://github.com/rails/rails"
#
def gem(name, options={})
log :gem, name
env = options.delete(:env)
def gem(*args)
options = args.extract_options!
name, version = args

gems_code = "config.gem '#{name}'"
# Deal with deprecated options
{ :env => :only, :lib => :require_as }.each do |old, new|
next unless options[old]
options[new] = options.delete(old)
ActiveSupport::Deprecation.warn "#{old.inspect} option in gem is deprecated, use #{new.inspect} instead"
end

# Deal with deprecated source
if source = options.delete(:source)
ActiveSupport::Deprecation.warn ":source option in gem is deprecated, use add_source method instead"
add_source(source)
end

# Set the message to be shown in logs. Uses the git repo if one is given,
# otherwise use name (version).
parts, message = [ name.inspect ], name
if version ||= options.delete(:version)
parts << version
message << " (#{version})"
end
message = options[:git] if options[:git]

log :gemfile, message

options.each do |option, value|
parts << ":#{option} => #{value.inspect}"
end

if options.any?
opts = options.inject([]) {|result, h| result << [":#{h[0]} => #{h[1].inspect.gsub('"',"'")}"] }.sort.join(", ")
gems_code << ", #{opts}"
in_root do
append_file "Gemfile", "gem #{parts.join(", ")}", :verbose => false
end
end

# Add the given source to Gemfile
#
# ==== Example
#
# source "http://gems.github.com/"
def add_source(source, options={})
log :source, source

environment gems_code, :env => env
in_root do
prepend_file "Gemfile", "source #{source.inspect}", :verbose => false
end
end

# Adds a line inside the Initializer block for config/environment.rb.
Expand All @@ -79,6 +117,7 @@ def environment(data=nil, options={}, &block)
end
end
end
alias :application :environment

# Run a command in git.
#
Expand Down Expand Up @@ -222,9 +261,8 @@ def capify!
#
# freeze!
#
def freeze!(args = {})
log :vendor, "rails"
in_root { run("#{extify(:rake)} rails:freeze:edge", :verbose => false) }
def freeze!(args={})
ActiveSupport::Deprecation.warn "freeze! is deprecated since your rails app now comes bundled with Rails by default, please check your Gemfile"
end

# Make an entry in Rails routing file conifg/routes.rb
Expand Down
7 changes: 0 additions & 7 deletions railties/lib/rails/generators/rails/app/app_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@ class AppGenerator < Base
class_option :database, :type => :string, :aliases => "-d", :default => "sqlite3",
:desc => "Preconfigure for selected database (options: #{DATABASES.join('/')})"

class_option :freeze, :type => :boolean, :aliases => "-F", :default => false,
:desc => "Freeze Rails in vendor/rails from the gems"

class_option :template, :type => :string, :aliases => "-m",
:desc => "Path to an application template (can be a filesystem path or URL)."

Expand Down Expand Up @@ -155,10 +152,6 @@ def apply_rails_template
raise Error, "The template [#{rails_template}] could not be loaded. Error: #{e}"
end

def freeze?
freeze! if options[:freeze]
end

protected

attr_accessor :rails_template
Expand Down
4 changes: 2 additions & 2 deletions railties/lib/rails/generators/rails/app/templates/Gemfile
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Gemfile is where you list all of your application's dependencies
#
<%= "# " if options.freeze? %>gem "rails", "<%= Rails::VERSION::STRING %>"
gem "rails", "<%= Rails::VERSION::STRING %>"
#
# Bundling edge rails:
<%= "# " unless options.freeze? %>gem "rails", "<%= Rails::VERSION::STRING %>", :git => "git://github.com/rails/rails.git"
# gem "rails", "<%= Rails::VERSION::STRING %>", :git => "git://github.com/rails/rails.git"

# Specify gemcutter as a gem source
# source "http://gemcutter.org"
Expand Down
47 changes: 24 additions & 23 deletions railties/test/generators/actions_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,37 +54,37 @@ def test_plugin_with_no_options_should_skip_method
action :plugin, 'rest_auth', {}
end

def test_gem_should_put_gem_dependency_in_enviroment
def test_add_source_adds_source_to_gemfile
run_generator
action :gem, 'will-paginate'
assert_file 'config/application.rb', /config\.gem 'will\-paginate'/
action :add_source, 'http://gems.github.com'
assert_file 'Gemfile', /source "http:\/\/gems\.github\.com"/
end

def test_gem_with_options_should_include_options_in_gem_dependency_in_environment
def test_gem_should_put_gem_dependency_in_gemfile
run_generator
action :gem, 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com'

regexp = /#{Regexp.escape("config.gem 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com'")}/
assert_file 'config/application.rb', regexp
action :gem, 'will-paginate'
assert_file 'Gemfile', /gem "will\-paginate"/
end

def test_gem_with_env_string_should_put_gem_dependency_in_specified_environment
def test_gem_with_options_should_include_all_options_in_gemfile
run_generator
action :gem, 'rspec', :env => 'test'
assert_file 'config/environments/test.rb', /config\.gem 'rspec'/
end

def test_gem_with_env_array_should_put_gem_dependency_in_specified_environments
run_generator
action :gem, 'quietbacktrace', :env => %w[ development test ]
assert_file 'config/environments/development.rb', /config\.gem 'quietbacktrace'/
assert_file 'config/environments/test.rb', /config\.gem 'quietbacktrace'/
assert_deprecated do
action :gem, 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com'
end

assert_file 'Gemfile', /gem "mislav\-will\-paginate", :require_as => "will\-paginate"/
assert_file 'Gemfile', /source "http:\/\/gems\.github\.com"/
end

def test_gem_with_lib_option_set_to_false_should_put_gem_dependency_in_enviroment_correctly
def test_gem_with_env_should_include_all_dependencies_in_gemfile
run_generator
action :gem, 'mislav-will-paginate', :lib => false
assert_file 'config/application.rb', /config\.gem 'mislav\-will\-paginate'\, :lib => false/

assert_deprecated do
action :gem, 'rspec', :env => %w(development test)
end

assert_file 'Gemfile', /gem "rspec", :only => \["development", "test"\]/
end

def test_environment_should_include_data_in_environment_initializer_block
Expand Down Expand Up @@ -163,9 +163,10 @@ def test_capify_should_run_the_capify_command
action :capify!
end

def test_freeze_should_freeze_rails_edge
generator.expects(:run).once.with('rake rails:freeze:edge', :verbose => false)
action :freeze!
def test_freeze_is_deprecated
assert_deprecated do
action :freeze!
end
end

def test_route_should_add_data_to_the_routes_block_in_config_routes
Expand Down
14 changes: 0 additions & 14 deletions railties/test/generators/app_generator_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -110,20 +110,6 @@ def test_shebang_when_is_the_same_as_default_use_env
).each { |path| assert_file "script/#{path}", /#!\/usr\/bin\/env/ }
end

def test_rails_is_frozen
generator(:freeze => true, :database => "sqlite3").expects(:run).
with("rake rails:freeze:edge", :verbose => false)
silence(:stdout){ generator.invoke }

assert_file 'Gemfile' do |content|
flag = %(gem "rails", "#{Rails::VERSION::STRING}", :git => "git://github.com/rails/rails.git")
assert_match /^#{Regexp.escape(flag)}$/, content

flag = %(# gem "rails", "#{Rails::VERSION::STRING}")
assert_match /^#{Regexp.escape(flag)}$/, content
end
end

def test_template_from_dir_pwd
FileUtils.cd(Rails.root)
assert_match /It works from file!/, run_generator(["-m", "lib/template.rb"])
Expand Down
2 changes: 1 addition & 1 deletion railties/test/generators/generators_test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def self.root
CURRENT_PATH = File.expand_path(Dir.pwd)
Rails::Generators.no_color!

class GeneratorsTestCase < Test::Unit::TestCase
class GeneratorsTestCase < ActiveSupport::TestCase
include FileUtils

def destination_root
Expand Down

0 comments on commit 3b8e29f

Please sign in to comment.