From 21e7b8462113fc7c0fd1882dcc2bf7225de67b1a Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Mon, 12 Oct 2009 22:15:43 -0500 Subject: Callbacks, DeprecatedCallbacks = NewCallbacks, Callbacks --- activemodel/lib/active_model/validations.rb | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'activemodel') diff --git a/activemodel/lib/active_model/validations.rb b/activemodel/lib/active_model/validations.rb index edeb508a08..0f178a07c8 100644 --- a/activemodel/lib/active_model/validations.rb +++ b/activemodel/lib/active_model/validations.rb @@ -1,12 +1,10 @@ require 'active_support/core_ext/array/extract_options' require 'active_support/core_ext/hash/keys' -require 'active_support/concern' -require 'active_support/callbacks' module ActiveModel module Validations extend ActiveSupport::Concern - include ActiveSupport::NewCallbacks + include ActiveSupport::Callbacks included do define_callbacks :validate, :scope => :name @@ -99,7 +97,7 @@ module ActiveModel def invalid? !valid? end - + protected # Hook method defining how an attribute value should be retieved. By default this is assumed # to be an instance named after the attribute. Override this method in subclasses should you @@ -110,9 +108,9 @@ module ActiveModel # def initialize(data = {}) # @data = data # end - # + # # private - # + # # def read_attribute_for_validation(key) # @data[key] # end -- cgit v1.2.3 From 02b76862e1ff8ceccb3cd48922ac178462e14892 Mon Sep 17 00:00:00 2001 From: Yehuda Katz Date: Thu, 15 Oct 2009 14:04:18 -0700 Subject: Bundle AMo --- activemodel/Gemfile | 11 +++++++++++ activemodel/test/cases/helper.rb | 9 +++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 activemodel/Gemfile (limited to 'activemodel') diff --git a/activemodel/Gemfile b/activemodel/Gemfile new file mode 100644 index 0000000000..289d696792 --- /dev/null +++ b/activemodel/Gemfile @@ -0,0 +1,11 @@ +rails_root = Pathname.new(File.dirname(__FILE__)).join("..") + +Gem.sources.each { |uri| source uri } + +gem "activesupport", "3.0.pre", :vendored_at => rails_root.join("activesupport") + +only :test do + gem "sqlite3-ruby" +end + +disable_system_gems diff --git a/activemodel/test/cases/helper.rb b/activemodel/test/cases/helper.rb index 3c0bd15236..e54c85938b 100644 --- a/activemodel/test/cases/helper.rb +++ b/activemodel/test/cases/helper.rb @@ -1,5 +1,10 @@ -$:.unshift(File.dirname(__FILE__) + '/../../lib') -$:.unshift(File.dirname(__FILE__) + '/../../../activesupport/lib') +bundled = "#{File.dirname(__FILE__)}/../vendor/gems/environment" +if File.exist?("#{bundled}.rb") + require bundled +else + $:.unshift(File.dirname(__FILE__) + '/../../lib') + $:.unshift(File.dirname(__FILE__) + '/../../../activesupport/lib') +end require 'config' -- cgit v1.2.3 From 6094e6516951444f8c3d6bb31f171af9fe96a02f Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Fri, 16 Oct 2009 13:56:59 -0500 Subject: We won't be publishing tars and zips anymore --- activemodel/Rakefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'activemodel') diff --git a/activemodel/Rakefile b/activemodel/Rakefile index fd69a557aa..8897987518 100755 --- a/activemodel/Rakefile +++ b/activemodel/Rakefile @@ -11,7 +11,7 @@ require 'rake/testtask' task :default => :test -Rake::TestTask.new do |t| +Rake::TestTask.new do |t| t.libs << "test" t.test_files = Dir.glob("test/cases/**/*_test.rb").sort t.verbose = true @@ -47,6 +47,4 @@ spec = eval(File.read('activemodel.gemspec')) Rake::GemPackageTask.new(spec) do |p| p.gem_spec = spec - p.need_tar = true - p.need_zip = true end -- cgit v1.2.3 From 35576a237e2c721dca8be0f8f0d653ae8bc07389 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Tue, 20 Oct 2009 10:16:19 -0500 Subject: Add arel to AMo gemfile --- activemodel/Gemfile | 1 + 1 file changed, 1 insertion(+) (limited to 'activemodel') diff --git a/activemodel/Gemfile b/activemodel/Gemfile index 289d696792..a192fdaf82 100644 --- a/activemodel/Gemfile +++ b/activemodel/Gemfile @@ -3,6 +3,7 @@ rails_root = Pathname.new(File.dirname(__FILE__)).join("..") Gem.sources.each { |uri| source uri } gem "activesupport", "3.0.pre", :vendored_at => rails_root.join("activesupport") +gem "arel", :git => "git://github.com/rails/arel.git" only :test do gem "sqlite3-ruby" -- cgit v1.2.3 From 4f6d6f7031a88b647814fc0154e6b69b636dc912 Mon Sep 17 00:00:00 2001 From: Yehuda Katz + Carl Lerche Date: Tue, 20 Oct 2009 16:33:54 -0700 Subject: Have all the tests running off a single Gemfile --- activemodel/Gemfile | 12 ------------ activemodel/test/cases/helper.rb | 13 ++++++------- 2 files changed, 6 insertions(+), 19 deletions(-) delete mode 100644 activemodel/Gemfile (limited to 'activemodel') diff --git a/activemodel/Gemfile b/activemodel/Gemfile deleted file mode 100644 index a192fdaf82..0000000000 --- a/activemodel/Gemfile +++ /dev/null @@ -1,12 +0,0 @@ -rails_root = Pathname.new(File.dirname(__FILE__)).join("..") - -Gem.sources.each { |uri| source uri } - -gem "activesupport", "3.0.pre", :vendored_at => rails_root.join("activesupport") -gem "arel", :git => "git://github.com/rails/arel.git" - -only :test do - gem "sqlite3-ruby" -end - -disable_system_gems diff --git a/activemodel/test/cases/helper.rb b/activemodel/test/cases/helper.rb index e54c85938b..49783c2735 100644 --- a/activemodel/test/cases/helper.rb +++ b/activemodel/test/cases/helper.rb @@ -1,13 +1,12 @@ -bundled = "#{File.dirname(__FILE__)}/../vendor/gems/environment" -if File.exist?("#{bundled}.rb") - require bundled -else - $:.unshift(File.dirname(__FILE__) + '/../../lib') - $:.unshift(File.dirname(__FILE__) + '/../../../activesupport/lib') +root = File.expand_path('../../../..', __FILE__) +begin + require "#{root}/vendor/gems/environment" +rescue LoadError + $:.unshift("#{root}/activesupport/lib") + $:.unshift("#{root}/activemodel/lib") end require 'config' - require 'active_model' # Show backtraces for deprecated behavior for quicker cleanup. -- cgit v1.2.3 From e714b499cc1f7ebc84f8d0e96607b79e60f2828d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 20 Oct 2009 22:20:01 -0200 Subject: Move validator, human_name and human_attribute_name to ActiveModel, remove deprecated error messages and add i18n_scope and lookup_ancestors. Signed-off-by: Carl Lerche --- activemodel/lib/active_model.rb | 2 + activemodel/lib/active_model/errors.rb | 19 +++--- activemodel/lib/active_model/naming.rb | 9 +-- activemodel/lib/active_model/translation.rb | 59 +++++++++++++++++++ activemodel/lib/active_model/validations.rb | 1 + activemodel/lib/active_model/validator.rb | 68 ++++++++++++++++++++++ activemodel/test/cases/naming_test.rb | 2 +- activemodel/test/cases/translation_test.rb | 51 ++++++++++++++++ .../i18n_generate_message_validation_test.rb | 1 - .../test/cases/validations/i18n_validation_test.rb | 8 +++ .../test/cases/validations/with_validation_test.rb | 8 +-- 11 files changed, 208 insertions(+), 20 deletions(-) create mode 100644 activemodel/lib/active_model/translation.rb create mode 100644 activemodel/lib/active_model/validator.rb create mode 100644 activemodel/test/cases/translation_test.rb (limited to 'activemodel') diff --git a/activemodel/lib/active_model.rb b/activemodel/lib/active_model.rb index 67f529262d..505e16c195 100644 --- a/activemodel/lib/active_model.rb +++ b/activemodel/lib/active_model.rb @@ -39,8 +39,10 @@ module ActiveModel autoload :Serialization, 'active_model/serialization' autoload :StateMachine, 'active_model/state_machine' autoload :TestCase, 'active_model/test_case' + autoload :Translation, 'active_model/translation' autoload :Validations, 'active_model/validations' autoload :ValidationsRepairHelper, 'active_model/validations_repair_helper' + autoload :Validator, 'active_model/validator' autoload :VERSION, 'active_model/version' module Serializers diff --git a/activemodel/lib/active_model/errors.rb b/activemodel/lib/active_model/errors.rb index 7a48960f89..e8bb62953d 100644 --- a/activemodel/lib/active_model/errors.rb +++ b/activemodel/lib/active_model/errors.rb @@ -93,7 +93,7 @@ module ActiveModel # company = Company.create(:address => '123 First St.') # company.errors.full_messages # => # ["Name is too short (minimum is 5 characters)", "Name can't be blank", "Address can't be blank"] - def full_messages(options = {}) + def full_messages full_messages = [] each do |attribute, messages| @@ -103,8 +103,10 @@ module ActiveModel if attribute == :base messages.each {|m| full_messages << m } else - attr_name = attribute.to_s.humanize - prefix = attr_name + I18n.t('activemodel.errors.format.separator', :default => ' ') + attr_name = @base.class.human_attribute_name(attribute) + options = { :default => ' ', :scope => @base.class.i18n_scope } + prefix = attr_name + I18n.t(:"errors.format.separator", options) + messages.each do |m| full_messages << "#{prefix}#{m}" end @@ -135,10 +137,7 @@ module ActiveModel def generate_message(attribute, message = :invalid, options = {}) message, options[:default] = options[:default], message if options[:default].is_a?(Symbol) - klass_ancestors = [@base.class] - klass_ancestors += @base.class.ancestors.reject {|x| x.is_a?(Module)} - - defaults = klass_ancestors.map do |klass| + defaults = @base.class.lookup_ancestors.map do |klass| [ :"models.#{klass.name.underscore}.attributes.#{attribute}.#{message}", :"models.#{klass.name.underscore}.#{message}" ] end @@ -150,10 +149,10 @@ module ActiveModel value = @base.send(:read_attribute_for_validation, attribute) options = { :default => defaults, - :model => @base.class.name.humanize, - :attribute => attribute.to_s.humanize, + :model => @base.class.model_name.human, + :attribute => @base.class.human_attribute_name(attribute), :value => value, - :scope => [:activemodel, :errors] + :scope => [@base.class.i18n_scope, :errors] }.merge(options) I18n.translate(key, options) diff --git a/activemodel/lib/active_model/naming.rb b/activemodel/lib/active_model/naming.rb index b8c2a367b4..675d62b9a6 100644 --- a/activemodel/lib/active_model/naming.rb +++ b/activemodel/lib/active_model/naming.rb @@ -5,12 +5,13 @@ module ActiveModel attr_reader :singular, :plural, :element, :collection, :partial_path, :human alias_method :cache_key, :collection - def initialize(name) - super + def initialize(klass, name) + super(name) + @klass = klass @singular = ActiveSupport::Inflector.underscore(self).tr('/', '_').freeze @plural = ActiveSupport::Inflector.pluralize(@singular).freeze @element = ActiveSupport::Inflector.underscore(ActiveSupport::Inflector.demodulize(self)).freeze - @human = @element.gsub(/_/, " ") + @human = ActiveSupport::Inflector.humanize(@element).freeze @collection = ActiveSupport::Inflector.tableize(self).freeze @partial_path = "#{@collection}/#{@element}".freeze end @@ -20,7 +21,7 @@ module ActiveModel # Returns an ActiveModel::Name object for module. It can be # used to retrieve all kinds of naming-related information. def model_name - @_model_name ||= ActiveModel::Name.new(name) + @_model_name ||= ActiveModel::Name.new(self, name) end end end diff --git a/activemodel/lib/active_model/translation.rb b/activemodel/lib/active_model/translation.rb new file mode 100644 index 0000000000..dc11198c66 --- /dev/null +++ b/activemodel/lib/active_model/translation.rb @@ -0,0 +1,59 @@ +module ActiveModel + module Translation + include ActiveModel::Naming + + # Returns the i18n_scope for the class. Overwrite if you want custom lookup. + def i18n_scope + :activemodel + end + + # When localizing a string, goes through the lookup returned by this method. + # Used in ActiveModel::Name#human, ActiveModel::Errors#full_messages and + # ActiveModel::Translation#human_attribute_name. + def lookup_ancestors + self.ancestors.select { |x| x.respond_to?(:model_name) } + end + + # Transforms attributes names into a more human format, such as "First name" instead of "first_name". + # + # Example: + # + # Person.human_attribute_name("first_name") # => "First name" + # + # Specify +options+ with additional translating options. + def human_attribute_name(attribute, options = {}) + defaults = lookup_ancestors.map do |klass| + :"#{klass.model_name.underscore}.#{attribute}" + end + + defaults << options.delete(:default) if options[:default] + defaults << attribute.to_s.humanize + + options.reverse_merge! :scope => [self.i18n_scope, :attributes], :count => 1, :default => defaults + I18n.translate(defaults.shift, options) + end + + # Model.human_name is deprecated. Use Model.model_name.human instead. + def human_name(*args) + ActiveSupport::Deprecation.warn("human_name has been deprecated, please use model_name.human instead", caller[0,1]) + model_name.human(*args) + end + end + + class Name < String + # Transform the model name into a more humane format, using I18n. By default, + # it will underscore then humanize the class name (BlogPost.human_name #=> "Blog post"). + # Specify +options+ with additional translating options. + def human(options={}) + defaults = @klass.lookup_ancestors.map do |klass| + klass.model_name.underscore.to_sym + end + + defaults << options.delete(:default) if options[:default] + defaults << @human + + options.reverse_merge! :scope => [@klass.i18n_scope, :models], :count => 1, :default => defaults + I18n.translate(defaults.shift, options) + end + end +end diff --git a/activemodel/lib/active_model/validations.rb b/activemodel/lib/active_model/validations.rb index 0f178a07c8..064ec98f3a 100644 --- a/activemodel/lib/active_model/validations.rb +++ b/activemodel/lib/active_model/validations.rb @@ -7,6 +7,7 @@ module ActiveModel include ActiveSupport::Callbacks included do + extend ActiveModel::Translation define_callbacks :validate, :scope => :name end diff --git a/activemodel/lib/active_model/validator.rb b/activemodel/lib/active_model/validator.rb new file mode 100644 index 0000000000..09de72b757 --- /dev/null +++ b/activemodel/lib/active_model/validator.rb @@ -0,0 +1,68 @@ +module ActiveModel #:nodoc: + + # A simple base class that can be used along with ActiveModel::Base.validates_with + # + # class Person < ActiveModel::Base + # validates_with MyValidator + # end + # + # class MyValidator < ActiveModel::Validator + # def validate + # if some_complex_logic + # record.errors[:base] = "This record is invalid" + # end + # end + # + # private + # def some_complex_logic + # # ... + # end + # end + # + # Any class that inherits from ActiveModel::Validator will have access to record, + # which is an instance of the record being validated, and must implement a method called validate. + # + # class Person < ActiveModel::Base + # validates_with MyValidator + # end + # + # class MyValidator < ActiveModel::Validator + # def validate + # record # => The person instance being validated + # options # => Any non-standard options passed to validates_with + # end + # end + # + # To cause a validation error, you must add to the record's errors directly + # from within the validators message + # + # class MyValidator < ActiveModel::Validator + # def validate + # record.errors[:base] << "This is some custom error message" + # record.errors[:first_name] << "This is some complex validation" + # # etc... + # end + # end + # + # To add behavior to the initialize method, use the following signature: + # + # class MyValidator < ActiveModel::Validator + # def initialize(record, options) + # super + # @my_custom_field = options[:field_name] || :first_name + # end + # end + # + class Validator + attr_reader :record, :options + + def initialize(record, options) + @record = record + @options = options + end + + def validate + raise "You must override this method" + end + end +end diff --git a/activemodel/test/cases/naming_test.rb b/activemodel/test/cases/naming_test.rb index 4d97af3d13..fe1ea36450 100644 --- a/activemodel/test/cases/naming_test.rb +++ b/activemodel/test/cases/naming_test.rb @@ -2,7 +2,7 @@ require 'cases/helper' class NamingTest < ActiveModel::TestCase def setup - @model_name = ActiveModel::Name.new('Post::TrackBack') + @model_name = ActiveModel::Name.new(self, 'Post::TrackBack') end def test_singular diff --git a/activemodel/test/cases/translation_test.rb b/activemodel/test/cases/translation_test.rb new file mode 100644 index 0000000000..d171784963 --- /dev/null +++ b/activemodel/test/cases/translation_test.rb @@ -0,0 +1,51 @@ +require 'cases/helper' + +class SuperUser + extend ActiveModel::Translation +end + +class User < SuperUser +end + +class ActiveModelI18nTests < ActiveModel::TestCase + + def setup + I18n.backend = I18n::Backend::Simple.new + end + + def test_translated_model_attributes + I18n.backend.store_translations 'en', :activemodel => {:attributes => {:super_user => {:name => 'super_user name attribute'} } } + assert_equal 'super_user name attribute', SuperUser.human_attribute_name('name') + end + + def test_translated_model_attributes_with_symbols + I18n.backend.store_translations 'en', :activemodel => {:attributes => {:super_user => {:name => 'super_user name attribute'} } } + assert_equal 'super_user name attribute', SuperUser.human_attribute_name(:name) + end + + def test_translated_model_attributes_with_ancestor + I18n.backend.store_translations 'en', :activemodel => {:attributes => {:user => {:name => 'user name attribute'} } } + assert_equal 'user name attribute', User.human_attribute_name('name') + end + + def test_translated_model_attributes_with_ancestors_fallback + I18n.backend.store_translations 'en', :activemodel => {:attributes => {:super_user => {:name => 'super_user name attribute'} } } + assert_equal 'super_user name attribute', User.human_attribute_name('name') + end + + def test_translated_model_names + I18n.backend.store_translations 'en', :activemodel => {:models => {:super_user => 'super_user model'} } + assert_equal 'super_user model', SuperUser.model_name.human + end + + def test_translated_model_names_with_sti + I18n.backend.store_translations 'en', :activemodel => {:models => {:user => 'user model'} } + assert_equal 'user model', User.model_name.human + end + + def test_translated_model_names_with_ancestors_fallback + I18n.backend.store_translations 'en', :activemodel => {:models => {:super_user => 'super_user model'} } + assert_equal 'super_user model', User.model_name.human + end +end + diff --git a/activemodel/test/cases/validations/i18n_generate_message_validation_test.rb b/activemodel/test/cases/validations/i18n_generate_message_validation_test.rb index 443a81c6ac..54b2405c92 100644 --- a/activemodel/test/cases/validations/i18n_generate_message_validation_test.rb +++ b/activemodel/test/cases/validations/i18n_generate_message_validation_test.rb @@ -63,7 +63,6 @@ class I18nGenerateMessageValidationTest < ActiveModel::TestCase assert_equal 'custom message title', @person.errors.generate_message(:title, :exclusion, :default => 'custom message {{value}}', :value => 'title') end - # validates_associated: generate_message(attr_name, :invalid, :default => configuration[:message], :value => value) # validates_format_of: generate_message(attr_name, :invalid, :default => configuration[:message], :value => value) def test_generate_message_invalid_with_default_message assert_equal 'is invalid', @person.errors.generate_message(:title, :invalid, :default => nil, :value => 'title') diff --git a/activemodel/test/cases/validations/i18n_validation_test.rb b/activemodel/test/cases/validations/i18n_validation_test.rb index fc4f1926b0..68b1b27f75 100644 --- a/activemodel/test/cases/validations/i18n_validation_test.rb +++ b/activemodel/test/cases/validations/i18n_validation_test.rb @@ -56,6 +56,12 @@ class I18nValidationTest < ActiveModel::TestCase @person.errors.add_on_blank :title, 'custom' end + def test_errors_full_messages_translates_human_attribute_name_for_model_attributes + @person.errors.add('name', 'empty') + I18n.expects(:translate).with(:"person.name", :default => ['Name'], :scope => [:activemodel, :attributes], :count => 1).returns('Name') + @person.errors.full_messages + end + # ActiveRecord::Validations # validates_confirmation_of w/ mocha def test_validates_confirmation_of_generates_message @@ -494,6 +500,8 @@ class I18nValidationTest < ActiveModel::TestCase assert_equal ['global message'], @person.errors[:title] end + # test with validates_with + def test_validations_with_message_symbol_must_translate I18n.backend.store_translations 'en', :activemodel => {:errors => {:messages => {:custom_error => "I am a custom error"}}} Person.validates_presence_of :title, :message => :custom_error diff --git a/activemodel/test/cases/validations/with_validation_test.rb b/activemodel/test/cases/validations/with_validation_test.rb index c290b49a28..fae87a6188 100644 --- a/activemodel/test/cases/validations/with_validation_test.rb +++ b/activemodel/test/cases/validations/with_validation_test.rb @@ -13,24 +13,24 @@ class ValidatesWithTest < ActiveRecord::TestCase ERROR_MESSAGE = "Validation error from validator" OTHER_ERROR_MESSAGE = "Validation error from other validator" - class ValidatorThatAddsErrors < ActiveRecord::Validator + class ValidatorThatAddsErrors < ActiveModel::Validator def validate() record.errors[:base] << ERROR_MESSAGE end end - class OtherValidatorThatAddsErrors < ActiveRecord::Validator + class OtherValidatorThatAddsErrors < ActiveModel::Validator def validate() record.errors[:base] << OTHER_ERROR_MESSAGE end end - class ValidatorThatDoesNotAddErrors < ActiveRecord::Validator + class ValidatorThatDoesNotAddErrors < ActiveModel::Validator def validate() end end - class ValidatorThatValidatesOptions < ActiveRecord::Validator + class ValidatorThatValidatesOptions < ActiveModel::Validator def validate() if options[:field] == :first_name record.errors[:base] << ERROR_MESSAGE -- cgit v1.2.3 From 9fbb2c571b65e0501bf3570a3d49e553a9ae39c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 21 Oct 2009 11:18:36 -0500 Subject: Fix error_messages_for when instance variable names are given. Signed-off-by: Joshua Peek --- activemodel/lib/active_model/translation.rb | 3 +++ 1 file changed, 3 insertions(+) (limited to 'activemodel') diff --git a/activemodel/lib/active_model/translation.rb b/activemodel/lib/active_model/translation.rb index dc11198c66..2ad8ca9dea 100644 --- a/activemodel/lib/active_model/translation.rb +++ b/activemodel/lib/active_model/translation.rb @@ -45,6 +45,9 @@ module ActiveModel # it will underscore then humanize the class name (BlogPost.human_name #=> "Blog post"). # Specify +options+ with additional translating options. def human(options={}) + return @human unless @klass.respond_to?(:lookup_ancestors) && + @klass.respond_to?(:i18n_scope) + defaults = @klass.lookup_ancestors.map do |klass| klass.model_name.underscore.to_sym end -- cgit v1.2.3 From a038b3d1bc20ba225bf8a7672478300f60a41e77 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Mon, 9 Nov 2009 03:31:59 -0800 Subject: Make Rakefile usable outside of base dir --- activemodel/Rakefile | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'activemodel') diff --git a/activemodel/Rakefile b/activemodel/Rakefile index 8897987518..a63e1982b9 100755 --- a/activemodel/Rakefile +++ b/activemodel/Rakefile @@ -1,4 +1,5 @@ -require File.join(File.dirname(__FILE__), 'lib', 'active_model', 'version') +dir = File.dirname(__FILE__) +require "#{dir}/lib/active_model/version" PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : '' PKG_NAME = 'activemodel' @@ -12,16 +13,16 @@ require 'rake/testtask' task :default => :test Rake::TestTask.new do |t| - t.libs << "test" - t.test_files = Dir.glob("test/cases/**/*_test.rb").sort + t.libs << "#{dir}/test" + t.test_files = Dir.glob("#{dir}/test/cases/**/*_test.rb").sort t.verbose = true t.warning = true end task :isolated_test do ruby = File.join(*RbConfig::CONFIG.values_at('bindir', 'RUBY_INSTALL_NAME')) - Dir.glob("test/**/*_test.rb").all? do |file| - system(ruby, '-w', '-Ilib:test', file) + Dir.glob("#{dir}/test/**/*_test.rb").all? do |file| + system(ruby, '-w', "-I#{dir}/lib", "-I#{dir}/test", file) end or raise "Failures" end @@ -30,20 +31,20 @@ require 'rake/rdoctask' # Generate the RDoc documentation Rake::RDocTask.new do |rdoc| - rdoc.rdoc_dir = 'doc' + rdoc.rdoc_dir = "#{dir}/doc" rdoc.title = "Active Model" rdoc.options << '--line-numbers' << '--inline-source' << '-A cattr_accessor=object' rdoc.options << '--charset' << 'utf-8' rdoc.template = ENV['template'] ? "#{ENV['template']}.rb" : '../doc/template/horo' - rdoc.rdoc_files.include('README', 'CHANGES') - rdoc.rdoc_files.include('lib/**/*.rb') + rdoc.rdoc_files.include("#{dir}/README", "#{dir}/CHANGES") + rdoc.rdoc_files.include("#{dir}/lib/**/*.rb") end require 'rake/packagetask' require 'rake/gempackagetask' -spec = eval(File.read('activemodel.gemspec')) +spec = eval(File.read("#{dir}/activemodel.gemspec")) Rake::GemPackageTask.new(spec) do |p| p.gem_spec = spec -- cgit v1.2.3 From 11e798ae0f2f46498811282756c9d21df3d4b523 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Mon, 9 Nov 2009 23:28:36 -0600 Subject: Avoid adding component lib/ to load path multiple times --- activemodel/test/cases/helper.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'activemodel') diff --git a/activemodel/test/cases/helper.rb b/activemodel/test/cases/helper.rb index 49783c2735..c1a3f6a4a7 100644 --- a/activemodel/test/cases/helper.rb +++ b/activemodel/test/cases/helper.rb @@ -3,9 +3,11 @@ begin require "#{root}/vendor/gems/environment" rescue LoadError $:.unshift("#{root}/activesupport/lib") - $:.unshift("#{root}/activemodel/lib") end +lib = File.expand_path("#{File.dirname(__FILE__)}/../../lib") +$:.unshift(lib) unless $:.include?('lib') || $:.include?(lib) + require 'config' require 'active_model' -- cgit v1.2.3 From bbb3e5a858b2d078b2af7516a583fa12f3edb565 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Tue, 10 Nov 2009 16:50:15 -0800 Subject: Unify test:isolated across components and run by default at toplevel --- activemodel/Rakefile | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'activemodel') diff --git a/activemodel/Rakefile b/activemodel/Rakefile index a63e1982b9..1f4a8466c9 100755 --- a/activemodel/Rakefile +++ b/activemodel/Rakefile @@ -19,11 +19,13 @@ Rake::TestTask.new do |t| t.warning = true end -task :isolated_test do - ruby = File.join(*RbConfig::CONFIG.values_at('bindir', 'RUBY_INSTALL_NAME')) - Dir.glob("#{dir}/test/**/*_test.rb").all? do |file| - system(ruby, '-w', "-I#{dir}/lib", "-I#{dir}/test", file) - end or raise "Failures" +namespace :test do + task :isolated do + ruby = File.join(*RbConfig::CONFIG.values_at('bindir', 'RUBY_INSTALL_NAME')) + Dir.glob("#{dir}/test/**/*_test.rb").all? do |file| + system(ruby, '-w', "-I#{dir}/lib", "-I#{dir}/test", file) + end or raise "Failures" + end end -- cgit v1.2.3 From 3fd2624be45cb3124641f53d9e520523d9bc49c9 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Fri, 13 Nov 2009 10:31:05 -0800 Subject: Uses Hash#reverse_merge --- activemodel/lib/active_model/translation.rb | 2 ++ 1 file changed, 2 insertions(+) (limited to 'activemodel') diff --git a/activemodel/lib/active_model/translation.rb b/activemodel/lib/active_model/translation.rb index 2ad8ca9dea..42ca463f82 100644 --- a/activemodel/lib/active_model/translation.rb +++ b/activemodel/lib/active_model/translation.rb @@ -1,3 +1,5 @@ +require 'active_support/core_ext/hash/reverse_merge' + module ActiveModel module Translation include ActiveModel::Naming -- cgit v1.2.3