aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/README.rdoc2
-rw-r--r--actionpack/actionpack.gemspec2
-rw-r--r--activemodel/lib/active_model/serializers/xml.rb2
-rw-r--r--activemodel/test/cases/serializers/xml_serialization_test.rb8
-rw-r--r--activerecord/README.rdoc2
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb41
-rw-r--r--activerecord/lib/active_record/locking/optimistic.rb30
-rw-r--r--activerecord/lib/active_record/locking/pessimistic.rb4
-rw-r--r--activerecord/lib/active_record/railties/controller_runtime.rb1
-rw-r--r--activeresource/CHANGELOG12
-rw-r--r--activeresource/examples/simple.rb15
-rw-r--r--activeresource/lib/active_resource/base.rb89
-rw-r--r--activeresource/lib/active_resource/connection.rb2
-rw-r--r--activeresource/lib/active_resource/custom_methods.rb24
-rw-r--r--activeresource/lib/active_resource/formats.rb8
-rw-r--r--activeresource/lib/active_resource/formats/json_format.rb2
-rw-r--r--activeresource/lib/active_resource/formats/xml_format.rb13
-rw-r--r--activeresource/lib/active_resource/http_mock.rb46
-rw-r--r--activeresource/test/abstract_unit.rb127
-rw-r--r--activeresource/test/cases/authorization_test.rb104
-rw-r--r--activeresource/test/cases/base/custom_methods_test.rb56
-rw-r--r--activeresource/test/cases/base/load_test.rb31
-rw-r--r--activeresource/test/cases/base/schema_test.rb4
-rw-r--r--activeresource/test/cases/base_test.rb115
-rw-r--r--activeresource/test/cases/connection_test.rb (renamed from activeresource/test/connection_test.rb)86
-rw-r--r--activeresource/test/cases/finder_test.rb16
-rw-r--r--activeresource/test/cases/format_test.rb20
-rw-r--r--activeresource/test/cases/http_mock_test.rb56
-rw-r--r--activeresource/test/cases/log_subscriber_test.rb8
-rw-r--r--activeresource/test/cases/observing_test.rb10
-rw-r--r--activeresource/test/cases/validations_test.rb4
-rw-r--r--activeresource/test/setter_trap.rb2
-rw-r--r--activesupport/lib/active_support/buffered_logger.rb15
-rw-r--r--activesupport/lib/active_support/core_ext/numeric/time.rb2
-rw-r--r--activesupport/lib/active_support/core_ext/object/duplicable.rb2
-rw-r--r--activesupport/lib/active_support/core_ext/time/calculations.rb1
-rw-r--r--activesupport/test/option_merger_test.rb8
-rw-r--r--railties/guides/source/layout.html.erb2
-rw-r--r--railties/guides/source/migrations.textile2
-rw-r--r--railties/lib/rails/engine.rb6
-rw-r--r--railties/lib/rails/generators/actions.rb2
-rw-r--r--railties/lib/rails/generators/app_base.rb4
-rw-r--r--railties/lib/rails/generators/erb/scaffold/templates/_form.html.erb2
-rw-r--r--railties/lib/rails/generators/erb/scaffold/templates/index.html.erb4
-rw-r--r--railties/lib/rails/generators/erb/scaffold/templates/show.html.erb2
-rw-r--r--railties/lib/rails/generators/named_base.rb1
-rw-r--r--railties/lib/rails/generators/rails/app/templates/config/databases/mysql.yml3
-rw-r--r--railties/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml2
-rw-r--r--railties/lib/rails/generators/rails/controller/templates/controller.rb2
-rw-r--r--railties/lib/rails/generators/test_unit/controller/templates/functional_test.rb2
-rw-r--r--railties/lib/rails/generators/test_unit/mailer/templates/functional_test.rb2
-rw-r--r--railties/lib/rails/generators/test_unit/model/templates/fixtures.yml6
-rw-r--r--railties/test/generators/actions_test.rb4
-rw-r--r--railties/test/generators/app_generator_test.rb45
-rw-r--r--railties/test/generators/controller_generator_test.rb4
-rw-r--r--railties/test/generators/helper_generator_test.rb6
-rw-r--r--railties/test/generators/mailer_generator_test.rb48
-rw-r--r--railties/test/generators/migration_generator_test.rb16
-rw-r--r--railties/test/generators/model_generator_test.rb33
-rw-r--r--railties/test/generators/namespaced_generators_test.rb28
-rw-r--r--railties/test/generators/observer_generator_test.rb2
-rw-r--r--railties/test/generators/plugin_generator_test.rb6
-rw-r--r--railties/test/generators/resource_generator_test.rb14
-rw-r--r--railties/test/generators/scaffold_controller_generator_test.rb46
-rw-r--r--railties/test/generators/session_migration_generator_test.rb4
-rw-r--r--railties/test/generators_test.rb30
66 files changed, 682 insertions, 616 deletions
diff --git a/actionpack/README.rdoc b/actionpack/README.rdoc
index 5db4cff66b..2f3678881d 100644
--- a/actionpack/README.rdoc
+++ b/actionpack/README.rdoc
@@ -33,7 +33,7 @@ A short rundown of some of the major features:
* Actions grouped in controller as methods instead of separate command objects
and can therefore share helper methods
- CustomersController < ActionController::Base
+ class CustomersController < ActionController::Base
def show
@customer = find_customer
end
diff --git a/actionpack/actionpack.gemspec b/actionpack/actionpack.gemspec
index f623d6d487..0b4e7027ed 100644
--- a/actionpack/actionpack.gemspec
+++ b/actionpack/actionpack.gemspec
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
s.add_dependency('i18n', '~> 0.6.0beta1')
s.add_dependency('rack', '~> 1.3.0.beta')
s.add_dependency('rack-test', '~> 0.6.0')
- s.add_dependency('rack-mount', '~> 0.8.0')
+ s.add_dependency('rack-mount', '~> 0.8.1')
s.add_dependency('sprockets', '~> 2.0.0.beta.3')
s.add_dependency('tzinfo', '~> 0.3.27')
s.add_dependency('erubis', '~> 2.7.0')
diff --git a/activemodel/lib/active_model/serializers/xml.rb b/activemodel/lib/active_model/serializers/xml.rb
index 19639b1363..eb3975f86b 100644
--- a/activemodel/lib/active_model/serializers/xml.rb
+++ b/activemodel/lib/active_model/serializers/xml.rb
@@ -25,7 +25,7 @@ module ActiveModel
def decorations
decorations = {}
decorations[:encoding] = 'base64' if type == :binary
- decorations[:type] = type unless type == :string
+ decorations[:type] = (type == :string) ? nil : type
decorations[:nil] = true if value.nil?
decorations
end
diff --git a/activemodel/test/cases/serializers/xml_serialization_test.rb b/activemodel/test/cases/serializers/xml_serialization_test.rb
index 8f5c196850..f978191d22 100644
--- a/activemodel/test/cases/serializers/xml_serialization_test.rb
+++ b/activemodel/test/cases/serializers/xml_serialization_test.rb
@@ -92,7 +92,7 @@ class XmlSerializationTest < ActiveModel::TestCase
test "should serialize string" do
assert_match %r{<name>aaron stack</name>}, @contact.to_xml
end
-
+
test "should serialize nil" do
assert_match %r{<pseudonyms nil=\"true\"></pseudonyms>}, @contact.to_xml(:methods => :pseudonyms)
end
@@ -132,4 +132,10 @@ class XmlSerializationTest < ActiveModel::TestCase
xml = @contact.to_xml(:procs => [ proc ])
assert_match %r{<name-reverse>kcats noraa</name-reverse>}, xml
end
+
+ test "should serialize string correctly when type passed" do
+ xml = @contact.to_xml :type => 'Contact'
+ assert_match %r{<contact type="Contact">}, xml
+ assert_match %r{<name>aaron stack</name>}, xml
+ end
end
diff --git a/activerecord/README.rdoc b/activerecord/README.rdoc
index 3a89446a83..6b4c85bb93 100644
--- a/activerecord/README.rdoc
+++ b/activerecord/README.rdoc
@@ -84,7 +84,7 @@ A short rundown of some of the major features:
class CommentObserver < ActiveRecord::Observer
def after_create(comment) # is called just after Comment#save
- CommentMailer.new_comment_email("david@loudthinking.com", comment)
+ CommentMailer.new_comment_email("david@loudthinking.com", comment).deliver
end
end
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
index f4beeceb61..0a460bc086 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -701,11 +701,11 @@ module ActiveRecord
schemas = schema_search_path.split(/,/).map { |p| quote(p) }.join(',')
result = query(<<-SQL, name)
SELECT distinct i.relname, d.indisunique, d.indkey, t.oid
- FROM pg_class t, pg_class i, pg_index d
+ FROM pg_class t
+ INNER JOIN pg_index d ON t.oid = d.indrelid
+ INNER JOIN pg_class i ON d.indexrelid = i.oid
WHERE i.relkind = 'i'
- AND d.indexrelid = i.oid
AND d.indisprimary = 'f'
- AND t.oid = d.indrelid
AND t.relname = '#{table_name}'
AND i.relnamespace IN (SELECT oid FROM pg_namespace WHERE nspname IN (#{schemas}) )
ORDER BY i.relname
@@ -820,19 +820,13 @@ module ActiveRecord
# given table's primary key.
result = exec_query(<<-end_sql, 'SCHEMA').rows.first
SELECT attr.attname, seq.relname
- FROM pg_class seq,
- pg_attribute attr,
- pg_depend dep,
- pg_namespace name,
- pg_constraint cons
- WHERE seq.oid = dep.objid
- AND seq.relkind = 'S'
- AND attr.attrelid = dep.refobjid
- AND attr.attnum = dep.refobjsubid
- AND attr.attrelid = cons.conrelid
- AND attr.attnum = cons.conkey[1]
- AND cons.contype = 'p'
- AND dep.refobjid = '#{quote_table_name(table)}'::regclass
+ FROM pg_class seq
+ INNER JOIN pg_depend dep ON seq.oid = dep.objid
+ INNER JOIN pg_attribute attr ON attr.attrelid = dep.refobjid AND attr.attnum = dep.refobjsubid
+ INNER JOIN pg_constraint cons ON attr.attrelid = cons.conrelid AND attr.attnum = cons.conkey[1]
+ WHERE seq.relkind = 'S'
+ AND cons.contype = 'p'
+ AND dep.refobjid = '#{quote_table_name(table)}'::regclass
end_sql
# [primary_key, sequence]
@@ -845,16 +839,11 @@ module ActiveRecord
def primary_key(table)
row = exec_query(<<-end_sql, 'SCHEMA', [[nil, table]]).rows.first
SELECT DISTINCT(attr.attname)
- FROM pg_attribute attr,
- pg_depend dep,
- pg_namespace name,
- pg_constraint cons
- WHERE attr.attrelid = dep.refobjid
- AND attr.attnum = dep.refobjsubid
- AND attr.attrelid = cons.conrelid
- AND attr.attnum = cons.conkey[1]
- AND cons.contype = 'p'
- AND dep.refobjid = $1::regclass
+ FROM pg_attribute attr
+ INNER JOIN pg_depend dep ON attr.attrelid = dep.refobjid AND attr.attnum = dep.refobjsubid
+ INNER JOIN pg_constraint cons ON attr.attrelid = cons.conrelid AND attr.attnum = cons.conkey[1]
+ WHERE cons.contype = 'p'
+ AND dep.refobjid = $1::regclass
end_sql
row && row.first
diff --git a/activerecord/lib/active_record/locking/optimistic.rb b/activerecord/lib/active_record/locking/optimistic.rb
index cdedcde0eb..3afa257a76 100644
--- a/activerecord/lib/active_record/locking/optimistic.rb
+++ b/activerecord/lib/active_record/locking/optimistic.rb
@@ -3,16 +3,17 @@ module ActiveRecord
# == What is Optimistic Locking
#
# Optimistic locking allows multiple users to access the same record for edits, and assumes a minimum of
- # conflicts with the data. It does this by checking whether another process has made changes to a record since
- # it was opened, an ActiveRecord::StaleObjectError is thrown if that has occurred and the update is ignored.
+ # conflicts with the data. It does this by checking whether another process has made changes to a record since
+ # it was opened, an <tt>ActiveRecord::StaleObjectError</tt> exception is thrown if that has occurred
+ # and the update is ignored.
#
- # Check out ActiveRecord::Locking::Pessimistic for an alternative.
+ # Check out <tt>ActiveRecord::Locking::Pessimistic</tt> for an alternative.
#
# == Usage
#
- # Active Records support optimistic locking if the field <tt>lock_version</tt> is present. Each update to the
- # record increments the lock_version column and the locking facilities ensure that records instantiated twice
- # will let the last one saved raise a StaleObjectError if the first was also updated. Example:
+ # Active Records support optimistic locking if the field +lock_version+ is present. Each update to the
+ # record increments the +lock_version+ column and the locking facilities ensure that records instantiated twice
+ # will let the last one saved raise a +StaleObjectError+ if the first was also updated. Example:
#
# p1 = Person.find(1)
# p2 = Person.find(1)
@@ -36,10 +37,10 @@ module ActiveRecord
# You're then responsible for dealing with the conflict by rescuing the exception and either rolling back, merging,
# or otherwise apply the business logic needed to resolve the conflict.
#
- # You must ensure that your database schema defaults the lock_version column to 0.
+ # You must ensure that your database schema defaults the +lock_version+ column to 0.
#
# This behavior can be turned off by setting <tt>ActiveRecord::Base.lock_optimistically = false</tt>.
- # To override the name of the lock_version column, invoke the <tt>set_locking_column</tt> method.
+ # To override the name of the +lock_version+ column, invoke the <tt>set_locking_column</tt> method.
# This method uses the same syntax as <tt>set_table_name</tt>
module Optimistic
extend ActiveSupport::Concern
@@ -68,9 +69,9 @@ module ActiveRecord
result = super
# If the locking column has no default value set,
- # start the lock version at zero. Note we can't use
- # locking_enabled? at this point as @attributes may
- # not have been initialized yet
+ # start the lock version at zero. Note we can't use
+ # <tt>locking_enabled?</tt> at this point as
+ # <tt>@attributes</tt> may not have been initialized yet.
if lock_optimistically && result.include?(self.class.locking_column)
result[self.class.locking_column] ||= 0
@@ -137,10 +138,9 @@ module ActiveRecord
module ClassMethods
DEFAULT_LOCKING_COLUMN = 'lock_version'
- # Is optimistic locking enabled for this table? Returns true if the
- # +lock_optimistically+ flag is set to true (which it is, by default)
- # and the table includes the +locking_column+ column (defaults to
- # +lock_version+).
+ # Returns true if the +lock_optimistically+ flag is set to true
+ # (which it is, by default) and the table includes the
+ # +locking_column+ column (defaults to +lock_version+).
def locking_enabled?
lock_optimistically && columns_hash[locking_column]
end
diff --git a/activerecord/lib/active_record/locking/pessimistic.rb b/activerecord/lib/active_record/locking/pessimistic.rb
index 862cf8f72a..4c4c1bf5a1 100644
--- a/activerecord/lib/active_record/locking/pessimistic.rb
+++ b/activerecord/lib/active_record/locking/pessimistic.rb
@@ -3,7 +3,7 @@ module ActiveRecord
# Locking::Pessimistic provides support for row-level locking using
# SELECT ... FOR UPDATE and other lock types.
#
- # Pass <tt>:lock => true</tt> to ActiveRecord::Base.find to obtain an exclusive
+ # Pass <tt>:lock => true</tt> to <tt>ActiveRecord::Base.find</tt> to obtain an exclusive
# lock on the selected rows:
# # select * from accounts where id=1 for update
# Account.find(1, :lock => true)
@@ -21,7 +21,7 @@ module ActiveRecord
# yuko.save!
# end
#
- # You can also use ActiveRecord::Base#lock! method to lock one record by id.
+ # You can also use <tt>ActiveRecord::Base#lock!</tt> method to lock one record by id.
# This may be better if you don't need to lock every row. Example:
#
# Account.transaction do
diff --git a/activerecord/lib/active_record/railties/controller_runtime.rb b/activerecord/lib/active_record/railties/controller_runtime.rb
index 9e3b3429e4..fb3fd34665 100644
--- a/activerecord/lib/active_record/railties/controller_runtime.rb
+++ b/activerecord/lib/active_record/railties/controller_runtime.rb
@@ -1,4 +1,5 @@
require 'active_support/core_ext/module/attr_internal'
+require 'active_record/log_subscriber'
module ActiveRecord
module Railties
diff --git a/activeresource/CHANGELOG b/activeresource/CHANGELOG
index a4e79f3d77..25f9242b98 100644
--- a/activeresource/CHANGELOG
+++ b/activeresource/CHANGELOG
@@ -1,11 +1,15 @@
*Rails 3.1.0 (unreleased)*
-* No changes
+* The default format has been changed to JSON for all requests. If you want to continue to use XML you will need to set `self.format = :xml` in the class. eg.
+
+class User < ActiveResource::Base
+ self.format = :xml
+end
*Rails 3.0.7 (April 18, 2011)*
-*No changes.
+* No changes.
*Rails 3.0.6 (April 5, 2011)
@@ -95,14 +99,14 @@
* Ruby 1.9 compatibility. [Jeremy Kemper]
-*2.0.2* (December 16th, 2007)
+*2.0.2 (December 16th, 2007)*
* Added more specific exceptions for 400, 401, and 403 (all descending from ClientError so existing rescues will work) #10326 [trek]
* Correct empty response handling. #10445 [seangeo]
-*2.0.1* (December 7th, 2007)
+*2.0.1 (December 7th, 2007)*
* Don't cache net/http object so that ActiveResource is more thread-safe. Closes #10142 [kou]
diff --git a/activeresource/examples/simple.rb b/activeresource/examples/simple.rb
deleted file mode 100644
index 6d2c6e3b1b..0000000000
--- a/activeresource/examples/simple.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
-require 'active_resource'
-require 'active_support/core_ext/hash/conversions'
-
-ActiveSupport::XmlMini.backend = ENV['XMLMINI'] || 'REXML'
-ActiveResource::HttpMock.respond_to do |mock|
- mock.get '/people/1.xml', {}, { :id => 1, :name => 'bob' }.to_xml(:root => 'person')
-end
-
-class Person < ActiveResource::Base
- self.site = 'http://localhost/'
-end
-
-bob = Person.find(1)
-puts bob.inspect
diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb
index 7f2a844723..65d285249b 100644
--- a/activeresource/lib/active_resource/base.rb
+++ b/activeresource/lib/active_resource/base.rb
@@ -81,19 +81,19 @@ module ActiveResource
# <tt>post</tt>, <tt>put</tt> and <tt>\delete</tt> methods where you can specify a custom REST method
# name to invoke.
#
- # # POST to the custom 'register' REST method, i.e. POST /people/new/register.xml.
+ # # POST to the custom 'register' REST method, i.e. POST /people/new/register.json.
# Person.new(:name => 'Ryan').post(:register)
# # => { :id => 1, :name => 'Ryan', :position => 'Clerk' }
#
- # # PUT an update by invoking the 'promote' REST method, i.e. PUT /people/1/promote.xml?position=Manager.
+ # # PUT an update by invoking the 'promote' REST method, i.e. PUT /people/1/promote.json?position=Manager.
# Person.find(1).put(:promote, :position => 'Manager')
# # => { :id => 1, :name => 'Ryan', :position => 'Manager' }
#
- # # GET all the positions available, i.e. GET /people/positions.xml.
+ # # GET all the positions available, i.e. GET /people/positions.json.
# Person.get(:positions)
# # => [{:name => 'Manager'}, {:name => 'Clerk'}]
#
- # # DELETE to 'fire' a person, i.e. DELETE /people/1/fire.xml.
+ # # DELETE to 'fire' a person, i.e. DELETE /people/1/fire.json.
# Person.find(1).delete(:fire)
#
# For more information on using custom REST methods, see the
@@ -164,7 +164,7 @@ module ActiveResource
# response code will be returned from the server which will raise an ActiveResource::ResourceNotFound
# exception.
#
- # # GET http://api.people.com:3000/people/999.xml
+ # # GET http://api.people.com:3000/people/999.json
# ryan = Person.find(999) # 404, raises ActiveResource::ResourceNotFound
#
#
@@ -218,7 +218,7 @@ module ActiveResource
# ryan.save # => false
#
# # When
- # # PUT http://api.people.com:3000/people/1.xml
+ # # PUT http://api.people.com:3000/people/1.json
# # or
# # PUT http://api.people.com:3000/people/1.json
# # is requested with invalid values, the response is:
@@ -489,7 +489,7 @@ module ActiveResource
# Person.format = ActiveResource::Formats::XmlFormat
# Person.find(1) # => GET /people/1.xml
#
- # Default format is <tt>:xml</tt>.
+ # Default format is <tt>:json</tt>.
def format=(mime_type_reference_or_format)
format = mime_type_reference_or_format.is_a?(Symbol) ?
ActiveResource::Formats[mime_type_reference_or_format] : mime_type_reference_or_format
@@ -498,9 +498,9 @@ module ActiveResource
connection.format = format if site
end
- # Returns the current format, default is ActiveResource::Formats::XmlFormat.
+ # Returns the current format, default is ActiveResource::Formats::JsonFormat.
def format
- self._format || ActiveResource::Formats::XmlFormat
+ self._format || ActiveResource::Formats::JsonFormat
end
# Sets the number of seconds after which requests to the REST API should time out.
@@ -570,7 +570,7 @@ module ActiveResource
attr_accessor_with_default(:primary_key, 'id') #:nodoc:
- # Gets the \prefix for a resource's nested URL (e.g., <tt>prefix/collectionname/1.xml</tt>)
+ # Gets the \prefix for a resource's nested URL (e.g., <tt>prefix/collectionname/1.json</tt>)
# This method is regenerated at runtime based on what the \prefix is set to.
def prefix(options={})
default = site.path
@@ -587,7 +587,7 @@ module ActiveResource
prefix_source
end
- # Sets the \prefix for a resource's nested URL (e.g., <tt>prefix/collectionname/1.xml</tt>).
+ # Sets the \prefix for a resource's nested URL (e.g., <tt>prefix/collectionname/1.json</tt>).
# Default value is <tt>site.path</tt>.
def prefix=(value = '/')
# Replace :placeholders with '#{embedded options[:lookups]}'
@@ -618,21 +618,21 @@ module ActiveResource
#
# ==== Options
# +prefix_options+ - A \hash to add a \prefix to the request for nested URLs (e.g., <tt>:account_id => 19</tt>
- # would yield a URL like <tt>/accounts/19/purchases.xml</tt>).
+ # would yield a URL like <tt>/accounts/19/purchases.json</tt>).
# +query_options+ - A \hash to add items to the query string for the request.
#
# ==== Examples
# Post.element_path(1)
- # # => /posts/1.xml
+ # # => /posts/1.json
#
# Comment.element_path(1, :post_id => 5)
- # # => /posts/5/comments/1.xml
+ # # => /posts/5/comments/1.json
#
# Comment.element_path(1, :post_id => 5, :active => 1)
- # # => /posts/5/comments/1.xml?active=1
+ # # => /posts/5/comments/1.json?active=1
#
# Comment.element_path(1, {:post_id => 5}, {:active => 1})
- # # => /posts/5/comments/1.xml?active=1
+ # # => /posts/5/comments/1.json?active=1
#
def element_path(id, prefix_options = {}, query_options = nil)
check_prefix_options(prefix_options)
@@ -645,14 +645,14 @@ module ActiveResource
#
# ==== Options
# * +prefix_options+ - A hash to add a prefix to the request for nested URLs (e.g., <tt>:account_id => 19</tt>
- # would yield a URL like <tt>/accounts/19/purchases/new.xml</tt>).
+ # would yield a URL like <tt>/accounts/19/purchases/new.json</tt>).
#
# ==== Examples
# Post.new_element_path
- # # => /posts/new.xml
+ # # => /posts/new.json
#
# Comment.collection_path(:post_id => 5)
- # # => /posts/5/comments/new.xml
+ # # => /posts/5/comments/new.json
def new_element_path(prefix_options = {})
"#{prefix(prefix_options)}#{collection_name}/new.#{format.extension}"
end
@@ -662,21 +662,21 @@ module ActiveResource
#
# ==== Options
# * +prefix_options+ - A hash to add a prefix to the request for nested URLs (e.g., <tt>:account_id => 19</tt>
- # would yield a URL like <tt>/accounts/19/purchases.xml</tt>).
+ # would yield a URL like <tt>/accounts/19/purchases.json</tt>).
# * +query_options+ - A hash to add items to the query string for the request.
#
# ==== Examples
# Post.collection_path
- # # => /posts.xml
+ # # => /posts.json
#
# Comment.collection_path(:post_id => 5)
- # # => /posts/5/comments.xml
+ # # => /posts/5/comments.json
#
# Comment.collection_path(:post_id => 5, :active => 1)
- # # => /posts/5/comments.xml?active=1
+ # # => /posts/5/comments.json?active=1
#
# Comment.collection_path({:post_id => 5}, {:active => 1})
- # # => /posts/5/comments.xml?active=1
+ # # => /posts/5/comments.json?active=1
#
def collection_path(prefix_options = {}, query_options = nil)
check_prefix_options(prefix_options)
@@ -745,34 +745,34 @@ module ActiveResource
#
# ==== Examples
# Person.find(1)
- # # => GET /people/1.xml
+ # # => GET /people/1.json
#
# Person.find(:all)
- # # => GET /people.xml
+ # # => GET /people.json
#
# Person.find(:all, :params => { :title => "CEO" })
- # # => GET /people.xml?title=CEO
+ # # => GET /people.json?title=CEO
#
# Person.find(:first, :from => :managers)
- # # => GET /people/managers.xml
+ # # => GET /people/managers.json
#
# Person.find(:last, :from => :managers)
- # # => GET /people/managers.xml
+ # # => GET /people/managers.json
#
- # Person.find(:all, :from => "/companies/1/people.xml")
- # # => GET /companies/1/people.xml
+ # Person.find(:all, :from => "/companies/1/people.json")
+ # # => GET /companies/1/people.json
#
# Person.find(:one, :from => :leader)
- # # => GET /people/leader.xml
+ # # => GET /people/leader.json
#
# Person.find(:all, :from => :developers, :params => { :language => 'ruby' })
- # # => GET /people/developers.xml?language=ruby
+ # # => GET /people/developers.json?language=ruby
#
- # Person.find(:one, :from => "/companies/1/manager.xml")
- # # => GET /companies/1/manager.xml
+ # Person.find(:one, :from => "/companies/1/manager.json")
+ # # => GET /companies/1/manager.json
#
# StreetAddress.find(1, :params => { :person_id => 1 })
- # # => GET /people/1/street_addresses/1.xml
+ # # => GET /people/1/street_addresses/1.json
#
# == Failure or missing data
# A failure to find the requested object raises a ResourceNotFound
@@ -833,7 +833,7 @@ module ActiveResource
# my_event = Event.find(:first) # let's assume this is event with ID 7
# Event.delete(my_event.id) # sends DELETE /events/7
#
- # # Let's assume a request to events/5/cancel.xml
+ # # Let's assume a request to events/5/cancel.json
# Event.delete(params[:id]) # sends DELETE /events/5
def delete(id, options = {})
connection.delete(element_path(id, options))
@@ -1121,7 +1121,7 @@ module ActiveResource
# Saves (+POST+) or \updates (+PUT+) a resource. Delegates to +create+ if the object is \new,
# +update+ if it exists. If the response to the \save includes a body, it will be assumed that this body
- # is XML for the final object as it looked after the \save (which would include attributes like +created_at+
+ # is Json for the final object as it looked after the \save (which would include attributes like +created_at+
# that weren't part of the original submit).
#
# ==== Examples
@@ -1232,9 +1232,16 @@ module ActiveResource
# your_supplier = Supplier.new
# your_supplier.load(my_attrs)
# your_supplier.save
- def load(attributes)
+ def load(attributes, remove_root = false)
raise ArgumentError, "expected an attributes Hash, got #{attributes.inspect}" unless attributes.is_a?(Hash)
@prefix_options, attributes = split_options(attributes)
+
+ if attributes.keys.size == 1
+ remove_root = self.class.element_name == attributes.keys.first.to_s
+ end
+
+ attributes = Formats.remove_root(attributes) if remove_root
+
attributes.each do |key, value|
@attributes[key.to_s] =
case value
@@ -1285,7 +1292,7 @@ module ActiveResource
# resource's attributes, the full body of the request will still be sent
# in the save request to the remote service.
def update_attributes(attributes)
- load(attributes) && save
+ load(attributes, false) && save
end
# For checking <tt>respond_to?</tt> without searching the attributes (which is faster).
@@ -1339,7 +1346,7 @@ module ActiveResource
def load_attributes_from_response(response)
if !response['Content-Length'].blank? && response['Content-Length'] != "0" && !response.body.nil? && response.body.strip.size > 0
- load(self.class.format.decode(response.body))
+ load(self.class.format.decode(response.body), true)
@persisted = true
end
end
diff --git a/activeresource/lib/active_resource/connection.rb b/activeresource/lib/active_resource/connection.rb
index 765575d866..d923204dde 100644
--- a/activeresource/lib/active_resource/connection.rb
+++ b/activeresource/lib/active_resource/connection.rb
@@ -30,7 +30,7 @@ module ActiveResource
# The +site+ parameter is required and will set the +site+
# attribute to the URI for the remote resource service.
- def initialize(site, format = ActiveResource::Formats::XmlFormat)
+ def initialize(site, format = ActiveResource::Formats::JsonFormat)
raise ArgumentError, 'Missing site URI' unless site
@user = @password = nil
self.site = site
diff --git a/activeresource/lib/active_resource/custom_methods.rb b/activeresource/lib/active_resource/custom_methods.rb
index 9879f8cded..c1931b2758 100644
--- a/activeresource/lib/active_resource/custom_methods.rb
+++ b/activeresource/lib/active_resource/custom_methods.rb
@@ -11,10 +11,10 @@ module ActiveResource
#
# This route set creates routes for the following HTTP requests:
#
- # POST /people/new/register.xml # PeopleController.register
- # PUT /people/1/promote.xml # PeopleController.promote with :id => 1
- # DELETE /people/1/deactivate.xml # PeopleController.deactivate with :id => 1
- # GET /people/active.xml # PeopleController.active
+ # POST /people/new/register.json # PeopleController.register
+ # PUT /people/1/promote.json # PeopleController.promote with :id => 1
+ # DELETE /people/1/deactivate.json # PeopleController.deactivate with :id => 1
+ # GET /people/active.json # PeopleController.active
#
# Using this module, Active Resource can use these custom REST methods just like the
# standard methods.
@@ -23,13 +23,13 @@ module ActiveResource
# self.site = "http://37s.sunrise.i:3000"
# end
#
- # Person.new(:name => 'Ryan).post(:register) # POST /people/new/register.xml
+ # Person.new(:name => 'Ryan).post(:register) # POST /people/new/register.json
# # => { :id => 1, :name => 'Ryan' }
#
- # Person.find(1).put(:promote, :position => 'Manager') # PUT /people/1/promote.xml
- # Person.find(1).delete(:deactivate) # DELETE /people/1/deactivate.xml
+ # Person.find(1).put(:promote, :position => 'Manager') # PUT /people/1/promote.json
+ # Person.find(1).delete(:deactivate) # DELETE /people/1/deactivate.json
#
- # Person.get(:active) # GET /people/active.xml
+ # Person.get(:active) # GET /people/active.json
# # => [{:id => 1, :name => 'Ryan'}, {:id => 2, :name => 'Joe'}]
#
module CustomMethods
@@ -41,10 +41,10 @@ module ActiveResource
# Invokes a GET to a given custom REST method. For example:
#
- # Person.get(:active) # GET /people/active.xml
+ # Person.get(:active) # GET /people/active.json
# # => [{:id => 1, :name => 'Ryan'}, {:id => 2, :name => 'Joe'}]
#
- # Person.get(:active, :awesome => true) # GET /people/active.xml?awesome=true
+ # Person.get(:active, :awesome => true) # GET /people/active.json?awesome=true
# # => [{:id => 1, :name => 'Ryan'}]
#
# Note: the objects returned from this method are not automatically converted
@@ -54,7 +54,9 @@ module ActiveResource
#
# Person.find(:all, :from => :active)
def get(custom_method_name, options = {})
- format.decode(connection.get(custom_method_collection_url(custom_method_name, options), headers).body)
+ hashified = format.decode(connection.get(custom_method_collection_url(custom_method_name, options), headers).body)
+ derooted = Formats.remove_root(hashified)
+ derooted.is_a?(Array) ? derooted.map { |e| Formats.remove_root(e) } : derooted
end
def post(custom_method_name, options = {}, body = '')
diff --git a/activeresource/lib/active_resource/formats.rb b/activeresource/lib/active_resource/formats.rb
index 53b75b34e7..f7ad689cc5 100644
--- a/activeresource/lib/active_resource/formats.rb
+++ b/activeresource/lib/active_resource/formats.rb
@@ -10,5 +10,13 @@ module ActiveResource
def self.[](mime_type_reference)
ActiveResource::Formats.const_get(ActiveSupport::Inflector.camelize(mime_type_reference.to_s) + "Format")
end
+
+ def self.remove_root(data)
+ if data.is_a?(Hash) && data.keys.size == 1
+ data.values.first
+ else
+ data
+ end
+ end
end
end
diff --git a/activeresource/lib/active_resource/formats/json_format.rb b/activeresource/lib/active_resource/formats/json_format.rb
index 9980634921..827d1cc23a 100644
--- a/activeresource/lib/active_resource/formats/json_format.rb
+++ b/activeresource/lib/active_resource/formats/json_format.rb
@@ -18,7 +18,7 @@ module ActiveResource
end
def decode(json)
- ActiveSupport::JSON.decode(json)
+ Formats.remove_root(ActiveSupport::JSON.decode(json))
end
end
end
diff --git a/activeresource/lib/active_resource/formats/xml_format.rb b/activeresource/lib/active_resource/formats/xml_format.rb
index 3b2575cfa1..49cb9aa1ac 100644
--- a/activeresource/lib/active_resource/formats/xml_format.rb
+++ b/activeresource/lib/active_resource/formats/xml_format.rb
@@ -18,19 +18,8 @@ module ActiveResource
end
def decode(xml)
- from_xml_data(Hash.from_xml(xml))
+ Formats.remove_root(Hash.from_xml(xml))
end
-
- private
- # Manipulate from_xml Hash, because xml_simple is not exactly what we
- # want for Active Resource.
- def from_xml_data(data)
- if data.is_a?(Hash) && data.keys.size == 1
- data.values.first
- else
- data
- end
- end
end
end
end
diff --git a/activeresource/lib/active_resource/http_mock.rb b/activeresource/lib/active_resource/http_mock.rb
index 3bfd536b29..e90580be4f 100644
--- a/activeresource/lib/active_resource/http_mock.rb
+++ b/activeresource/lib/active_resource/http_mock.rb
@@ -20,10 +20,10 @@ module ActiveResource
# * <tt>path</tt> - A string, starting with a "/", defining the URI that is expected to be
# called.
# * <tt>request_headers</tt> - Headers that are expected along with the request. This argument uses a
- # hash format, such as <tt>{ "Content-Type" => "application/xml" }</tt>. This mock will only trigger
+ # hash format, such as <tt>{ "Content-Type" => "application/json" }</tt>. This mock will only trigger
# if your tests sends a request with identical headers.
# * <tt>body</tt> - The data to be returned. This should be a string of Active Resource parseable content,
- # such as XML.
+ # such as Json.
# * <tt>status</tt> - The HTTP response code, as an integer, to return with the response.
# * <tt>response_headers</tt> - Headers to be returned with the response. Uses the same hash format as
# <tt>request_headers</tt> listed above.
@@ -35,12 +35,12 @@ module ActiveResource
#
# ==== Example
# def setup
- # @matz = { :id => 1, :name => "Matz" }.to_xml(:root => "person")
+ # @matz = { :person => { :id => 1, :name => "Matz" } }.to_json
# ActiveResource::HttpMock.respond_to do |mock|
- # mock.post "/people.xml", {}, @matz, 201, "Location" => "/people/1.xml"
- # mock.get "/people/1.xml", {}, @matz
- # mock.put "/people/1.xml", {}, nil, 204
- # mock.delete "/people/1.xml", {}, nil, 200
+ # mock.post "/people.json", {}, @matz, 201, "Location" => "/people/1.json"
+ # mock.get "/people/1.json", {}, @matz
+ # mock.put "/people/1.json", {}, nil, 204
+ # mock.delete "/people/1.json", {}, nil, 200
# end
# end
#
@@ -85,9 +85,9 @@ module ActiveResource
#
# ==== Example
# def setup
- # @matz = { :id => 1, :name => "Matz" }.to_xml(:root => "person")
+ # @matz = { :person => { :id => 1, :name => "Matz" } }.to_json
# ActiveResource::HttpMock.respond_to do |mock|
- # mock.get "/people/1.xml", {}, @matz
+ # mock.get "/people/1.json", {}, @matz
# end
# end
#
@@ -95,7 +95,7 @@ module ActiveResource
# person = Person.find(1) # Call the remote service
#
# # This request object has the same HTTP method and path as declared by the mock
- # expected_request = ActiveResource::Request.new(:get, "/people/1.xml")
+ # expected_request = ActiveResource::Request.new(:get, "/people/1.json")
#
# # Assert that the mock received, and responded to, the expected request from the model
# assert ActiveResource::HttpMock.requests.include?(expected_request)
@@ -117,12 +117,12 @@ module ActiveResource
#
# === Example
#
- # @matz = { :id => 1, :name => "Matz" }.to_xml(:root => "person")
+ # @matz = { :person => { :id => 1, :name => "Matz" } }.to_json
# ActiveResource::HttpMock.respond_to do |mock|
- # mock.post "/people.xml", {}, @matz, 201, "Location" => "/people/1.xml"
- # mock.get "/people/1.xml", {}, @matz
- # mock.put "/people/1.xml", {}, nil, 204
- # mock.delete "/people/1.xml", {}, nil, 200
+ # mock.post "/people.json", {}, @matz, 201, "Location" => "/people/1.json"
+ # mock.get "/people/1.json", {}, @matz
+ # mock.put "/people/1.json", {}, nil, 204
+ # mock.delete "/people/1.json", {}, nil, 200
# end
#
# Alternatively, accepts a hash of <tt>{Request => Response}</tt> pairs allowing you to generate
@@ -135,11 +135,11 @@ module ActiveResource
#
# Request.new(:#{method}, path, nil, request_headers)
#
- # @matz = { :id => 1, :name => "Matz" }.to_xml(:root => "person")
+ # @matz = { :person => { :id => 1, :name => "Matz" } }.to_json
#
- # create_matz = ActiveResource::Request.new(:post, '/people.xml', @matz, {})
- # created_response = ActiveResource::Response.new("", 201, {"Location" => "/people/1.xml"})
- # get_matz = ActiveResource::Request.new(:get, '/people/1.xml', nil)
+ # create_matz = ActiveResource::Request.new(:post, '/people.json', @matz, {})
+ # created_response = ActiveResource::Response.new("", 201, {"Location" => "/people/1.json"})
+ # get_matz = ActiveResource::Request.new(:get, '/people/1.json', nil)
# ok_response = ActiveResource::Response.new("", 200, {})
#
# pairs = {create_matz => created_response, get_matz => ok_response}
@@ -154,12 +154,12 @@ module ActiveResource
# === Example
#
# ActiveResource::HttpMock.respond_to do |mock|
- # mock.send(:get, "/people/1", {}, "XML1")
+ # mock.send(:get, "/people/1", {}, "JSON1")
# end
# ActiveResource::HttpMock.responses.length #=> 1
#
# ActiveResource::HttpMock.respond_to(false) do |mock|
- # mock.send(:get, "/people/2", {}, "XML2")
+ # mock.send(:get, "/people/2", {}, "JSON2")
# end
# ActiveResource::HttpMock.responses.length #=> 2
#
@@ -169,11 +169,11 @@ module ActiveResource
# === Example
#
# ActiveResource::HttpMock.respond_to do |mock|
- # mock.send(:get, "/people/1", {}, "XML1")
+ # mock.send(:get, "/people/1", {}, "JSON1")
# end
# ActiveResource::HttpMock.responses.length #=> 1
#
- # get_matz = ActiveResource::Request.new(:get, '/people/1.xml', nil)
+ # get_matz = ActiveResource::Request.new(:get, '/people/1.json', nil)
# ok_response = ActiveResource::Response.new("", 200, {})
#
# pairs = {get_matz => ok_response}
diff --git a/activeresource/test/abstract_unit.rb b/activeresource/test/abstract_unit.rb
index 195f93f2a6..948dd94a1d 100644
--- a/activeresource/test/abstract_unit.rb
+++ b/activeresource/test/abstract_unit.rb
@@ -20,16 +20,19 @@ rescue LoadError
end
def setup_response
- @default_request_headers = { 'Content-Type' => 'application/xml' }
- @matz = { :id => 1, :name => 'Matz' }.to_xml(:root => 'person')
- @david = { :id => 2, :name => 'David' }.to_xml(:root => 'person')
- @greg = { :id => 3, :name => 'Greg' }.to_xml(:root => 'person')
- @addy = { :id => 1, :street => '12345 Street', :country => 'Australia' }.to_xml(:root => 'address')
- @rick = { :name => "Rick", :age => 25 }.to_xml(:root => "person")
- @joe = { 'person' => { :id => 6, :name => 'Joe' }}.to_json
- @people = [{ :id => 1, :name => 'Matz' }, { :id => 2, :name => 'David' }].to_xml(:root => 'people')
- @people_david = [{ :id => 2, :name => 'David' }].to_xml(:root => 'people')
- @addresses = [{ :id => 1, :street => '12345 Street', :country => 'Australia' }].to_xml(:root => 'addresses')
+ matz_hash = { 'person' => { :id => 1, :name => 'Matz' } }
+
+ @default_request_headers = { 'Content-Type' => 'application/json' }
+ @matz = matz_hash.to_json
+ @matz_xml = matz_hash.to_xml
+ @david = { :person => { :id => 2, :name => 'David' } }.to_json
+ @greg = { :person => { :id => 3, :name => 'Greg' } }.to_json
+ @addy = { :address => { :id => 1, :street => '12345 Street', :country => 'Australia' } }.to_json
+ @rick = { :person => { :name => "Rick", :age => 25 } }.to_json
+ @joe = { :person => { :id => 6, :name => 'Joe', :likes_hats => true }}.to_json
+ @people = { :people => [ { :person => { :id => 1, :name => 'Matz' } }, { :person => { :id => 2, :name => 'David' } }] }.to_json
+ @people_david = { :people => [ { :person => { :id => 2, :name => 'David' } }] }.to_json
+ @addresses = { :addresses => [{ :address => { :id => 1, :street => '12345 Street', :country => 'Australia' } }] }.to_json
# - deep nested resource -
# - Luis (Customer)
@@ -48,19 +51,38 @@ def setup_response
# - Natacha (Customer::Friend::Brother::Child)
# - Milena (Customer::Friend::Brother)
#
- @luis = {:id => 1, :name => 'Luis',
- :friends => [{:name => 'JK',
- :brothers => [{:name => 'Mateo',
- :children => [{:name => 'Edith'},{:name => 'Martha'}]},
- {:name => 'Felipe',
- :children => [{:name => 'Bryan'},{:name => 'Luke'}]}]},
- {:name => 'Eduardo',
- :brothers => [{:name => 'Sebas',
- :children => [{:name => 'Andres'},{:name => 'Jorge'}]},
- {:name => 'Elsa',
- :children => [{:name => 'Natacha'}]},
- {:name => 'Milena',
- :children => []}]}]}.to_xml(:root => 'customer')
+ @luis = {
+ :customer => {
+ :id => 1,
+ :name => 'Luis',
+ :friends => [{
+ :name => 'JK',
+ :brothers => [
+ {
+ :name => 'Mateo',
+ :children => [{ :name => 'Edith' },{ :name => 'Martha' }]
+ }, {
+ :name => 'Felipe',
+ :children => [{ :name => 'Bryan' },{ :name => 'Luke' }]
+ }
+ ]
+ }, {
+ :name => 'Eduardo',
+ :brothers => [
+ {
+ :name => 'Sebas',
+ :children => [{ :name => 'Andres' },{ :name => 'Jorge' }]
+ }, {
+ :name => 'Elsa',
+ :children => [{ :name => 'Natacha' }]
+ }, {
+ :name => 'Milena',
+ :children => []
+ }
+ ]
+ }]
+ }
+ }.to_json
# - resource with yaml array of strings; for ARs using serialize :bar, Array
@marty = <<-eof.strip
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
@@ -75,49 +97,52 @@ def setup_response
</person>
eof
- @startup_sound = {
- :name => "Mac Startup Sound", :author => { :name => "Jim Reekes" }
- }.to_xml(:root => 'sound')
+ @startup_sound = {
+ :sound => {
+ :name => "Mac Startup Sound", :author => { :name => "Jim Reekes" }
+ }
+ }.to_json
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/people/1.xml", {}, @matz
+ mock.get "/people/1.json", {}, @matz
+ mock.get "/people/1.xml", {}, @matz_xml
mock.get "/people/2.xml", {}, @david
mock.get "/people/5.xml", {}, @marty
- mock.get "/people/Greg.xml", {}, @greg
+ mock.get "/people/Greg.json", {}, @greg
mock.get "/people/6.json", {}, @joe
- mock.get "/people/4.xml", {'key' => 'value'}, nil, 404
- mock.put "/people/1.xml", {}, nil, 204
- mock.delete "/people/1.xml", {}, nil, 200
+ mock.get "/people/4.json", { 'key' => 'value' }, nil, 404
+ mock.put "/people/1.json", {}, nil, 204
+ mock.delete "/people/1.json", {}, nil, 200
mock.delete "/people/2.xml", {}, nil, 400
- mock.get "/people/99.xml", {}, nil, 404
- mock.post "/people.xml", {}, @rick, 201, 'Location' => '/people/5.xml'
- mock.get "/people.xml", {}, @people
- mock.get "/people/1/addresses.xml", {}, @addresses
- mock.get "/people/1/addresses/1.xml", {}, @addy
+ mock.get "/people/99.json", {}, nil, 404
+ mock.post "/people.json", {}, @rick, 201, 'Location' => '/people/5.xml'
+ mock.get "/people.json", {}, @people
+ mock.get "/people/1/addresses.json", {}, @addresses
+ mock.get "/people/1/addresses/1.json", {}, @addy
mock.get "/people/1/addresses/2.xml", {}, nil, 404
- mock.get "/people/2/addresses.xml", {}, nil, 404
+ mock.get "/people/2/addresses.json", {}, nil, 404
mock.get "/people/2/addresses/1.xml", {}, nil, 404
- mock.get "/people/Greg/addresses/1.xml", {}, @addy
- mock.put "/people/1/addresses/1.xml", {}, nil, 204
- mock.delete "/people/1/addresses/1.xml", {}, nil, 200
- mock.post "/people/1/addresses.xml", {}, nil, 201, 'Location' => '/people/1/addresses/5'
- mock.get "/people/1/addresses/99.xml", {}, nil, 404
+ mock.get "/people/Greg/addresses/1.json", {}, @addy
+ mock.put "/people/1/addresses/1.json", {}, nil, 204
+ mock.delete "/people/1/addresses/1.json", {}, nil, 200
+ mock.post "/people/1/addresses.json", {}, nil, 201, 'Location' => '/people/1/addresses/5'
+ mock.get "/people/1/addresses/99.json", {}, nil, 404
mock.get "/people//addresses.xml", {}, nil, 404
mock.get "/people//addresses/1.xml", {}, nil, 404
mock.put "/people//addresses/1.xml", {}, nil, 404
mock.delete "/people//addresses/1.xml", {}, nil, 404
mock.post "/people//addresses.xml", {}, nil, 404
- mock.head "/people/1.xml", {}, nil, 200
- mock.head "/people/Greg.xml", {}, nil, 200
- mock.head "/people/99.xml", {}, nil, 404
- mock.head "/people/1/addresses/1.xml", {}, nil, 200
- mock.head "/people/1/addresses/2.xml", {}, nil, 404
- mock.head "/people/2/addresses/1.xml", {}, nil, 404
- mock.head "/people/Greg/addresses/1.xml", {}, nil, 200
+ mock.head "/people/1.json", {}, nil, 200
+ mock.head "/people/Greg.json", {}, nil, 200
+ mock.head "/people/99.json", {}, nil, 404
+ mock.head "/people/1/addresses/1.json", {}, nil, 200
+ mock.head "/people/1/addresses/2.json", {}, nil, 404
+ mock.head "/people/2/addresses/1.json", {}, nil, 404
+ mock.head "/people/Greg/addresses/1.json", {}, nil, 200
# customer
- mock.get "/customers/1.xml", {}, @luis
+ mock.get "/customers/1.json", {}, @luis
# sound
- mock.get "/sounds/1.xml", {}, @startup_sound
+ mock.get "/sounds/1.json", {}, @startup_sound
end
Person.user = nil
diff --git a/activeresource/test/cases/authorization_test.rb b/activeresource/test/cases/authorization_test.rb
index a6797643e1..69ef9a2821 100644
--- a/activeresource/test/cases/authorization_test.rb
+++ b/activeresource/test/cases/authorization_test.rb
@@ -5,36 +5,36 @@ class AuthorizationTest < Test::Unit::TestCase
def setup
@conn = ActiveResource::Connection.new('http://localhost')
- @matz = { :id => 1, :name => 'Matz' }.to_xml(:root => 'person')
- @david = { :id => 2, :name => 'David' }.to_xml(:root => 'person')
+ @matz = { :person => { :id => 1, :name => 'Matz' } }.to_json
+ @david = { :person => { :id => 2, :name => 'David' } }.to_json
@authenticated_conn = ActiveResource::Connection.new("http://david:test123@localhost")
@basic_authorization_request_header = { 'Authorization' => 'Basic ZGF2aWQ6dGVzdDEyMw==' }
@nonce = "MTI0OTUxMzc4NzpjYWI3NDM3NDNmY2JmODU4ZjQ2ZjcwNGZkMTJiMjE0NA=="
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/people/2.xml", @basic_authorization_request_header, @david
- mock.get "/people/1.xml", @basic_authorization_request_header, nil, 401, { 'WWW-Authenticate' => 'i_should_be_ignored' }
- mock.put "/people/2.xml", @basic_authorization_request_header, nil, 204
- mock.delete "/people/2.xml", @basic_authorization_request_header, nil, 200
- mock.post "/people/2/addresses.xml", @basic_authorization_request_header, nil, 201, 'Location' => '/people/1/addresses/5'
- mock.head "/people/2.xml", @basic_authorization_request_header, nil, 200
+ mock.get "/people/2.json", @basic_authorization_request_header, @david
+ mock.get "/people/1.json", @basic_authorization_request_header, nil, 401, { 'WWW-Authenticate' => 'i_should_be_ignored' }
+ mock.put "/people/2.json", @basic_authorization_request_header, nil, 204
+ mock.delete "/people/2.json", @basic_authorization_request_header, nil, 200
+ mock.post "/people/2/addresses.json", @basic_authorization_request_header, nil, 201, 'Location' => '/people/1/addresses/5'
+ mock.head "/people/2.json", @basic_authorization_request_header, nil, 200
- mock.get "/people/2.xml", { 'Authorization' => blank_digest_auth_header("/people/2.xml", "a10c9bd131c9d4d7755b8f4706fd04af") }, nil, 401, { 'WWW-Authenticate' => response_digest_auth_header }
- mock.get "/people/2.xml", { 'Authorization' => request_digest_auth_header("/people/2.xml", "912c7a643f18cda562b8d9662c47b6f5") }, @david, 200
- mock.get "/people/1.xml", { 'Authorization' => request_digest_auth_header("/people/1.xml", "d76e675c0ecfa2bb1abe01491b068a06") }, @matz, 200
+ mock.get "/people/2.json", { 'Authorization' => blank_digest_auth_header("/people/2.json", "fad396f6a34aeba28e28b9b96ddbb671") }, nil, 401, { 'WWW-Authenticate' => response_digest_auth_header }
+ mock.get "/people/2.json", { 'Authorization' => request_digest_auth_header("/people/2.json", "c064d5ba8891a25290c76c8c7d31fb7b") }, @david, 200
+ mock.get "/people/1.json", { 'Authorization' => request_digest_auth_header("/people/1.json", "f9c0b594257bb8422af4abd429c5bb70") }, @matz, 200
- mock.put "/people/2.xml", { 'Authorization' => blank_digest_auth_header("/people/2.xml", "7de8a265a5be3c4c2d3a246562ecd6bd") }, nil, 401, { 'WWW-Authenticate' => response_digest_auth_header }
- mock.put "/people/2.xml", { 'Authorization' => request_digest_auth_header("/people/2.xml", "3fb3b33d9d0b869cc75815aa11faacd9") }, nil, 204
+ mock.put "/people/2.json", { 'Authorization' => blank_digest_auth_header("/people/2.json", "50a685d814f94665b9d160fbbaa3958a") }, nil, 401, { 'WWW-Authenticate' => response_digest_auth_header }
+ mock.put "/people/2.json", { 'Authorization' => request_digest_auth_header("/people/2.json", "5a75cde841122d8e0f20f8fd1f98a743") }, nil, 204
- mock.delete "/people/2.xml", { 'Authorization' => blank_digest_auth_header("/people/2.xml", "07dfc32769a34ea3510d3a77d64ca495") }, nil, 401, { 'WWW-Authenticate' => response_digest_auth_header }
- mock.delete "/people/2.xml", { 'Authorization' => request_digest_auth_header("/people/2.xml", "5d438610de7ec163b29096c9afcbb254") }, nil, 200
+ mock.delete "/people/2.json", { 'Authorization' => blank_digest_auth_header("/people/2.json", "846f799107eab5ca4285b909ee299a33") }, nil, 401, { 'WWW-Authenticate' => response_digest_auth_header }
+ mock.delete "/people/2.json", { 'Authorization' => request_digest_auth_header("/people/2.json", "9f5b155224edbbb69fd99d8ce094681e") }, nil, 200
- mock.post "/people/2/addresses.xml", { 'Authorization' => blank_digest_auth_header("/people/2/addresses.xml", "966dab13620421f928d051f2b9d7b9af") }, nil, 401, { 'WWW-Authenticate' => response_digest_auth_header }
- mock.post "/people/2/addresses.xml", { 'Authorization' => request_digest_auth_header("/people/2/addresses.xml", "ed540d032c63f8ee34959116c090ec45") }, nil, 201, 'Location' => '/people/1/addresses/5'
+ mock.post "/people/2/addresses.json", { 'Authorization' => blank_digest_auth_header("/people/2/addresses.json", "6984d405ff3d9ed07bbf747dcf16afb0") }, nil, 401, { 'WWW-Authenticate' => response_digest_auth_header }
+ mock.post "/people/2/addresses.json", { 'Authorization' => request_digest_auth_header("/people/2/addresses.json", "4bda6a28dbf930b5af9244073623bd04") }, nil, 201, 'Location' => '/people/1/addresses/5'
- mock.head "/people/2.xml", { 'Authorization' => blank_digest_auth_header("/people/2.xml", "2854eeb92cce2aed29350ea0ce7ba1e2") }, nil, 401, { 'WWW-Authenticate' => response_digest_auth_header }
- mock.head "/people/2.xml", { 'Authorization' => request_digest_auth_header("/people/2.xml", "07cd4d247e9c130f92ba2501a080b328") }, nil, 200
+ mock.head "/people/2.json", { 'Authorization' => blank_digest_auth_header("/people/2.json", "15e5ed84ba5c4cfcd5c98a36c2e4f421") }, nil, 401, { 'WWW-Authenticate' => response_digest_auth_header }
+ mock.head "/people/2.json", { 'Authorization' => request_digest_auth_header("/people/2.json", "d4c6d2bcc8717abb2e2ccb8c49ee6a91") }, nil, 200
end
# Make client nonce deterministic
@@ -48,7 +48,7 @@ class AuthorizationTest < Test::Unit::TestCase
end
def test_authorization_header
- authorization_header = @authenticated_conn.__send__(:authorization_header, :get, URI.parse('/people/2.xml'))
+ authorization_header = @authenticated_conn.__send__(:authorization_header, :get, URI.parse('/people/2.json'))
assert_equal @basic_authorization_request_header['Authorization'], authorization_header['Authorization']
authorization = authorization_header["Authorization"].to_s.split
@@ -58,7 +58,7 @@ class AuthorizationTest < Test::Unit::TestCase
def test_authorization_header_with_username_but_no_password
@conn = ActiveResource::Connection.new("http://david:@localhost")
- authorization_header = @conn.__send__(:authorization_header, :get, URI.parse('/people/2.xml'))
+ authorization_header = @conn.__send__(:authorization_header, :get, URI.parse('/people/2.json'))
authorization = authorization_header["Authorization"].to_s.split
assert_equal "Basic", authorization[0]
@@ -67,7 +67,7 @@ class AuthorizationTest < Test::Unit::TestCase
def test_authorization_header_with_password_but_no_username
@conn = ActiveResource::Connection.new("http://:test123@localhost")
- authorization_header = @conn.__send__(:authorization_header, :get, URI.parse('/people/2.xml'))
+ authorization_header = @conn.__send__(:authorization_header, :get, URI.parse('/people/2.json'))
authorization = authorization_header["Authorization"].to_s.split
assert_equal "Basic", authorization[0]
@@ -76,7 +76,7 @@ class AuthorizationTest < Test::Unit::TestCase
def test_authorization_header_with_decoded_credentials_from_url
@conn = ActiveResource::Connection.new("http://my%40email.com:%31%32%33@localhost")
- authorization_header = @conn.__send__(:authorization_header, :get, URI.parse('/people/2.xml'))
+ authorization_header = @conn.__send__(:authorization_header, :get, URI.parse('/people/2.json'))
authorization = authorization_header["Authorization"].to_s.split
assert_equal "Basic", authorization[0]
@@ -87,7 +87,7 @@ class AuthorizationTest < Test::Unit::TestCase
@authenticated_conn = ActiveResource::Connection.new("http://@localhost")
@authenticated_conn.user = 'david'
@authenticated_conn.password = 'test123'
- authorization_header = @authenticated_conn.__send__(:authorization_header, :get, URI.parse('/people/2.xml'))
+ authorization_header = @authenticated_conn.__send__(:authorization_header, :get, URI.parse('/people/2.json'))
assert_equal @basic_authorization_request_header['Authorization'], authorization_header['Authorization']
authorization = authorization_header["Authorization"].to_s.split
@@ -98,7 +98,7 @@ class AuthorizationTest < Test::Unit::TestCase
def test_authorization_header_explicitly_setting_username_but_no_password
@conn = ActiveResource::Connection.new("http://@localhost")
@conn.user = "david"
- authorization_header = @conn.__send__(:authorization_header, :get, URI.parse('/people/2.xml'))
+ authorization_header = @conn.__send__(:authorization_header, :get, URI.parse('/people/2.json'))
authorization = authorization_header["Authorization"].to_s.split
assert_equal "Basic", authorization[0]
@@ -108,7 +108,7 @@ class AuthorizationTest < Test::Unit::TestCase
def test_authorization_header_explicitly_setting_password_but_no_username
@conn = ActiveResource::Connection.new("http://@localhost")
@conn.password = "test123"
- authorization_header = @conn.__send__(:authorization_header, :get, URI.parse('/people/2.xml'))
+ authorization_header = @conn.__send__(:authorization_header, :get, URI.parse('/people/2.json'))
authorization = authorization_header["Authorization"].to_s.split
assert_equal "Basic", authorization[0]
@@ -117,7 +117,7 @@ class AuthorizationTest < Test::Unit::TestCase
def test_authorization_header_if_credentials_supplied_and_auth_type_is_basic
@authenticated_conn.auth_type = :basic
- authorization_header = @authenticated_conn.__send__(:authorization_header, :get, URI.parse('/people/2.xml'))
+ authorization_header = @authenticated_conn.__send__(:authorization_header, :get, URI.parse('/people/2.json'))
assert_equal @basic_authorization_request_header['Authorization'], authorization_header['Authorization']
authorization = authorization_header["Authorization"].to_s.split
@@ -127,96 +127,96 @@ class AuthorizationTest < Test::Unit::TestCase
def test_authorization_header_if_credentials_supplied_and_auth_type_is_digest
@authenticated_conn.auth_type = :digest
- authorization_header = @authenticated_conn.__send__(:authorization_header, :get, URI.parse('/people/2.xml'))
- assert_equal blank_digest_auth_header("/people/2.xml", "a10c9bd131c9d4d7755b8f4706fd04af"), authorization_header['Authorization']
+ authorization_header = @authenticated_conn.__send__(:authorization_header, :get, URI.parse('/people/2.json'))
+ assert_equal blank_digest_auth_header("/people/2.json", "fad396f6a34aeba28e28b9b96ddbb671"), authorization_header['Authorization']
end
def test_get
- david = decode(@authenticated_conn.get("/people/2.xml"))
+ david = decode(@authenticated_conn.get("/people/2.json"))
assert_equal "David", david["name"]
end
def test_post
- response = @authenticated_conn.post("/people/2/addresses.xml")
+ response = @authenticated_conn.post("/people/2/addresses.json")
assert_equal "/people/1/addresses/5", response["Location"]
end
def test_put
- response = @authenticated_conn.put("/people/2.xml")
+ response = @authenticated_conn.put("/people/2.json")
assert_equal 204, response.code
end
def test_delete
- response = @authenticated_conn.delete("/people/2.xml")
+ response = @authenticated_conn.delete("/people/2.json")
assert_equal 200, response.code
end
def test_head
- response = @authenticated_conn.head("/people/2.xml")
+ response = @authenticated_conn.head("/people/2.json")
assert_equal 200, response.code
end
def test_get_with_digest_auth_handles_initial_401_response_and_retries
@authenticated_conn.auth_type = :digest
- response = @authenticated_conn.get("/people/2.xml")
+ response = @authenticated_conn.get("/people/2.json")
assert_equal "David", decode(response)["name"]
end
def test_post_with_digest_auth_handles_initial_401_response_and_retries
@authenticated_conn.auth_type = :digest
- response = @authenticated_conn.post("/people/2/addresses.xml")
+ response = @authenticated_conn.post("/people/2/addresses.json")
assert_equal "/people/1/addresses/5", response["Location"]
assert_equal 201, response.code
end
def test_put_with_digest_auth_handles_initial_401_response_and_retries
@authenticated_conn.auth_type = :digest
- response = @authenticated_conn.put("/people/2.xml")
+ response = @authenticated_conn.put("/people/2.json")
assert_equal 204, response.code
end
def test_delete_with_digest_auth_handles_initial_401_response_and_retries
@authenticated_conn.auth_type = :digest
- response = @authenticated_conn.delete("/people/2.xml")
+ response = @authenticated_conn.delete("/people/2.json")
assert_equal 200, response.code
end
def test_head_with_digest_auth_handles_initial_401_response_and_retries
@authenticated_conn.auth_type = :digest
- response = @authenticated_conn.head("/people/2.xml")
+ response = @authenticated_conn.head("/people/2.json")
assert_equal 200, response.code
end
def test_get_with_digest_auth_caches_nonce
@authenticated_conn.auth_type = :digest
- response = @authenticated_conn.get("/people/2.xml")
+ response = @authenticated_conn.get("/people/2.json")
assert_equal "David", decode(response)["name"]
# There is no mock for this request with a non-cached nonce.
- response = @authenticated_conn.get("/people/1.xml")
+ response = @authenticated_conn.get("/people/1.json")
assert_equal "Matz", decode(response)["name"]
end
def test_retry_on_401_only_happens_with_digest_auth
- assert_raise(ActiveResource::UnauthorizedAccess) { @authenticated_conn.get("/people/1.xml") }
+ assert_raise(ActiveResource::UnauthorizedAccess) { @authenticated_conn.get("/people/1.json") }
assert_equal "", @authenticated_conn.send(:response_auth_header)
end
def test_raises_invalid_request_on_unauthorized_requests
- assert_raise(ActiveResource::InvalidRequestError) { @conn.get("/people/2.xml") }
- assert_raise(ActiveResource::InvalidRequestError) { @conn.post("/people/2/addresses.xml") }
- assert_raise(ActiveResource::InvalidRequestError) { @conn.put("/people/2.xml") }
- assert_raise(ActiveResource::InvalidRequestError) { @conn.delete("/people/2.xml") }
- assert_raise(ActiveResource::InvalidRequestError) { @conn.head("/people/2.xml") }
+ assert_raise(ActiveResource::InvalidRequestError) { @conn.get("/people/2.json") }
+ assert_raise(ActiveResource::InvalidRequestError) { @conn.post("/people/2/addresses.json") }
+ assert_raise(ActiveResource::InvalidRequestError) { @conn.put("/people/2.json") }
+ assert_raise(ActiveResource::InvalidRequestError) { @conn.delete("/people/2.json") }
+ assert_raise(ActiveResource::InvalidRequestError) { @conn.head("/people/2.json") }
end
def test_raises_invalid_request_on_unauthorized_requests_with_digest_auth
@conn.auth_type = :digest
- assert_raise(ActiveResource::InvalidRequestError) { @conn.get("/people/2.xml") }
- assert_raise(ActiveResource::InvalidRequestError) { @conn.post("/people/2/addresses.xml") }
- assert_raise(ActiveResource::InvalidRequestError) { @conn.put("/people/2.xml") }
- assert_raise(ActiveResource::InvalidRequestError) { @conn.delete("/people/2.xml") }
- assert_raise(ActiveResource::InvalidRequestError) { @conn.head("/people/2.xml") }
+ assert_raise(ActiveResource::InvalidRequestError) { @conn.get("/people/2.json") }
+ assert_raise(ActiveResource::InvalidRequestError) { @conn.post("/people/2/addresses.json") }
+ assert_raise(ActiveResource::InvalidRequestError) { @conn.put("/people/2.json") }
+ assert_raise(ActiveResource::InvalidRequestError) { @conn.delete("/people/2.json") }
+ assert_raise(ActiveResource::InvalidRequestError) { @conn.head("/people/2.json") }
end
def test_client_nonce_is_not_nil
diff --git a/activeresource/test/cases/base/custom_methods_test.rb b/activeresource/test/cases/base/custom_methods_test.rb
index 0fbf94bc0e..3eaa9b1c5b 100644
--- a/activeresource/test/cases/base/custom_methods_test.rb
+++ b/activeresource/test/cases/base/custom_methods_test.rb
@@ -5,32 +5,32 @@ require 'active_support/core_ext/hash/conversions'
class CustomMethodsTest < Test::Unit::TestCase
def setup
- @matz = { :id => 1, :name => 'Matz' }.to_xml(:root => 'person')
- @matz_deep = { :id => 1, :name => 'Matz', :other => 'other' }.to_xml(:root => 'person')
- @matz_array = [{ :id => 1, :name => 'Matz' }].to_xml(:root => 'people')
- @ryan = { :name => 'Ryan' }.to_xml(:root => 'person')
- @addy = { :id => 1, :street => '12345 Street' }.to_xml(:root => 'address')
- @addy_deep = { :id => 1, :street => '12345 Street', :zip => "27519" }.to_xml(:root => 'address')
+ @matz = { :person => { :id => 1, :name => 'Matz' } }.to_json
+ @matz_deep = { :person => { :id => 1, :name => 'Matz', :other => 'other' } }.to_json
+ @matz_array = { :people => [{ :person => { :id => 1, :name => 'Matz' } }] }.to_json
+ @ryan = { :person => { :name => 'Ryan' } }.to_json
+ @addy = { :address => { :id => 1, :street => '12345 Street' } }.to_json
+ @addy_deep = { :address => { :id => 1, :street => '12345 Street', :zip => "27519" } }.to_json
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/people/1.xml", {}, @matz
- mock.get "/people/1/shallow.xml", {}, @matz
- mock.get "/people/1/deep.xml", {}, @matz_deep
- mock.get "/people/retrieve.xml?name=Matz", {}, @matz_array
- mock.get "/people/managers.xml", {}, @matz_array
- mock.post "/people/hire.xml?name=Matz", {}, nil, 201
- mock.put "/people/1/promote.xml?position=Manager", {}, nil, 204
- mock.put "/people/promote.xml?name=Matz", {}, nil, 204, {}
- mock.put "/people/sort.xml?by=name", {}, nil, 204
- mock.delete "/people/deactivate.xml?name=Matz", {}, nil, 200
- mock.delete "/people/1/deactivate.xml", {}, nil, 200
- mock.post "/people/new/register.xml", {}, @ryan, 201, 'Location' => '/people/5.xml'
- mock.post "/people/1/register.xml", {}, @matz, 201
- mock.get "/people/1/addresses/1.xml", {}, @addy
- mock.get "/people/1/addresses/1/deep.xml", {}, @addy_deep
- mock.put "/people/1/addresses/1/normalize_phone.xml?locale=US", {}, nil, 204
- mock.put "/people/1/addresses/sort.xml?by=name", {}, nil, 204
- mock.post "/people/1/addresses/new/link.xml", {}, { :street => '12345 Street' }.to_xml(:root => 'address'), 201, 'Location' => '/people/1/addresses/2.xml'
+ mock.get "/people/1.json", {}, @matz
+ mock.get "/people/1/shallow.json", {}, @matz
+ mock.get "/people/1/deep.json", {}, @matz_deep
+ mock.get "/people/retrieve.json?name=Matz", {}, @matz_array
+ mock.get "/people/managers.json", {}, @matz_array
+ mock.post "/people/hire.json?name=Matz", {}, nil, 201
+ mock.put "/people/1/promote.json?position=Manager", {}, nil, 204
+ mock.put "/people/promote.json?name=Matz", {}, nil, 204, {}
+ mock.put "/people/sort.json?by=name", {}, nil, 204
+ mock.delete "/people/deactivate.json?name=Matz", {}, nil, 200
+ mock.delete "/people/1/deactivate.json", {}, nil, 200
+ mock.post "/people/new/register.json", {}, @ryan, 201, 'Location' => '/people/5.json'
+ mock.post "/people/1/register.json", {}, @matz, 201
+ mock.get "/people/1/addresses/1.json", {}, @addy
+ mock.get "/people/1/addresses/1/deep.json", {}, @addy_deep
+ mock.put "/people/1/addresses/1/normalize_phone.json?locale=US", {}, nil, 204
+ mock.put "/people/1/addresses/sort.json?by=name", {}, nil, 204
+ mock.post "/people/1/addresses/new/link.json", {}, { :address => { :street => '12345 Street' } }.to_json, 201, 'Location' => '/people/1/addresses/2.json'
end
Person.user = nil
@@ -81,14 +81,14 @@ class CustomMethodsTest < Test::Unit::TestCase
def test_custom_new_element_method
# Test POST against a new element URL
ryan = Person.new(:name => 'Ryan')
- assert_equal ActiveResource::Response.new(@ryan, 201, {'Location' => '/people/5.xml'}), ryan.post(:register)
- expected_request = ActiveResource::Request.new(:post, '/people/new/register.xml', @ryan)
+ assert_equal ActiveResource::Response.new(@ryan, 201, { 'Location' => '/people/5.json' }), ryan.post(:register)
+ expected_request = ActiveResource::Request.new(:post, '/people/new/register.json', @ryan)
assert_equal expected_request.body, ActiveResource::HttpMock.requests.first.body
# Test POST against a nested collection URL
addy = StreetAddress.new(:street => '123 Test Dr.', :person_id => 1)
- assert_equal ActiveResource::Response.new({ :street => '12345 Street' }.to_xml(:root => 'address'),
- 201, {'Location' => '/people/1/addresses/2.xml'}),
+ assert_equal ActiveResource::Response.new({ :address => { :street => '12345 Street' } }.to_json,
+ 201, { 'Location' => '/people/1/addresses/2.json' }),
addy.post(:link)
matz = Person.find(1)
diff --git a/activeresource/test/cases/base/load_test.rb b/activeresource/test/cases/base/load_test.rb
index 228dc36d9b..d6b04cfaa8 100644
--- a/activeresource/test/cases/base/load_test.rb
+++ b/activeresource/test/cases/base/load_test.rb
@@ -36,10 +36,10 @@ class BaseLoadTest < Test::Unit::TestCase
def setup
@matz = { :id => 1, :name => 'Matz' }
- @first_address = { :id => 1, :street => '12345 Street' }
- @addresses = [@first_address, { :id => 2, :street => '67890 Street' }]
- @addresses_from_xml = { :street_addresses => @addresses }
- @addresses_from_xml_single = { :street_addresses => [ @first_address ] }
+ @first_address = { :address => { :id => 1, :street => '12345 Street' } }
+ @addresses = [@first_address, { :address => { :id => 2, :street => '67890 Street' } }]
+ @addresses_from_json = { :street_addresses => @addresses }
+ @addresses_from_json_single = { :street_addresses => [ @first_address ] }
@deep = { :id => 1, :street => {
:id => 1, :state => { :id => 1, :name => 'Oregon',
@@ -72,28 +72,29 @@ class BaseLoadTest < Test::Unit::TestCase
def test_after_load_attributes_are_accessible_via_indifferent_access
assert_equal Hash.new, @person.attributes
+ matz_attributes = @matz.values.first
assert_equal @matz.stringify_keys, @person.load(@matz).attributes
assert_equal @matz[:name], @person.attributes['name']
assert_equal @matz[:name], @person.attributes[:name]
end
def test_load_one_with_existing_resource
- address = @person.load(:street_address => @first_address).street_address
+ address = @person.load(:street_address => @first_address.values.first).street_address
assert_kind_of StreetAddress, address
- assert_equal @first_address.stringify_keys, address.attributes
+ assert_equal @first_address.values.first.stringify_keys, address.attributes
end
def test_load_one_with_unknown_resource
- address = silence_warnings { @person.load(:address => @first_address).address }
+ address = silence_warnings { @person.load(@first_address).address }
assert_kind_of Person::Address, address
- assert_equal @first_address.stringify_keys, address.attributes
+ assert_equal @first_address.values.first.stringify_keys, address.attributes
end
def test_load_collection_with_existing_resource
- addresses = @person.load(@addresses_from_xml).street_addresses
+ addresses = @person.load(@addresses_from_json).street_addresses
assert_kind_of Array, addresses
addresses.each { |address| assert_kind_of StreetAddress, address }
- assert_equal @addresses.map(&:stringify_keys), addresses.map(&:attributes)
+ assert_equal @addresses.map { |a| a[:address].stringify_keys }, addresses.map(&:attributes)
end
def test_load_collection_with_unknown_resource
@@ -102,14 +103,14 @@ class BaseLoadTest < Test::Unit::TestCase
addresses = silence_warnings { @person.load(:addresses => @addresses).addresses }
assert Person.const_defined?(:Address), "Address should have been autocreated"
addresses.each { |address| assert_kind_of Person::Address, address }
- assert_equal @addresses.map(&:stringify_keys), addresses.map(&:attributes)
+ assert_equal @addresses.map { |a| a[:address].stringify_keys }, addresses.map(&:attributes)
end
def test_load_collection_with_single_existing_resource
- addresses = @person.load(@addresses_from_xml_single).street_addresses
+ addresses = @person.load(@addresses_from_json_single).street_addresses
assert_kind_of Array, addresses
addresses.each { |address| assert_kind_of StreetAddress, address }
- assert_equal [ @first_address ].map(&:stringify_keys), addresses.map(&:attributes)
+ assert_equal [ @first_address.values.first ].map(&:stringify_keys), addresses.map(&:attributes)
end
def test_load_collection_with_single_unknown_resource
@@ -118,7 +119,7 @@ class BaseLoadTest < Test::Unit::TestCase
addresses = silence_warnings { @person.load(:addresses => [ @first_address ]).addresses }
assert Person.const_defined?(:Address), "Address should have been autocreated"
addresses.each { |address| assert_kind_of Person::Address, address }
- assert_equal [ @first_address ].map(&:stringify_keys), addresses.map(&:attributes)
+ assert_equal [ @first_address.values.first ].map(&:stringify_keys), addresses.map(&:attributes)
end
def test_recursively_loaded_collections
@@ -164,7 +165,7 @@ class BaseLoadTest < Test::Unit::TestCase
end
def test_nested_collections_within_the_same_namespace
- n = Highrise::Note.new(:comments => [{ :name => "1" }])
+ n = Highrise::Note.new(:comments => [{ :comment => { :name => "1" } }])
assert_kind_of Highrise::Comment, n.comments.first
end
diff --git a/activeresource/test/cases/base/schema_test.rb b/activeresource/test/cases/base/schema_test.rb
index 37f30e4353..48fdeb13df 100644
--- a/activeresource/test/cases/base/schema_test.rb
+++ b/activeresource/test/cases/base/schema_test.rb
@@ -118,7 +118,7 @@ class SchemaTest < ActiveModel::TestCase
test "with two instances, default schema should match the attributes of the individual instances - even if they differ" do
matz = Person.find(1)
- rick = Person.find(5)
+ rick = Person.find(6)
m_attrs = matz.attributes.keys.sort
r_attrs = rick.attributes.keys.sort
@@ -376,7 +376,7 @@ class SchemaTest < ActiveModel::TestCase
test "with two instances, known attributes should match the attributes of the individual instances - even if they differ" do
matz = Person.find(1)
- rick = Person.find(5)
+ rick = Person.find(6)
m_attrs = matz.attributes.keys.sort
r_attrs = rick.attributes.keys.sort
diff --git a/activeresource/test/cases/base_test.rb b/activeresource/test/cases/base_test.rb
index 48dacbdf67..f45652d988 100644
--- a/activeresource/test/cases/base_test.rb
+++ b/activeresource/test/cases/base_test.rb
@@ -448,31 +448,31 @@ class BaseTest < Test::Unit::TestCase
end
def test_collection_path
- assert_equal '/people.xml', Person.collection_path
+ assert_equal '/people.json', Person.collection_path
end
def test_collection_path_with_parameters
- assert_equal '/people.xml?gender=male', Person.collection_path(:gender => 'male')
- assert_equal '/people.xml?gender=false', Person.collection_path(:gender => false)
- assert_equal '/people.xml?gender=', Person.collection_path(:gender => nil)
+ assert_equal '/people.json?gender=male', Person.collection_path(:gender => 'male')
+ assert_equal '/people.json?gender=false', Person.collection_path(:gender => false)
+ assert_equal '/people.json?gender=', Person.collection_path(:gender => nil)
- assert_equal '/people.xml?gender=male', Person.collection_path('gender' => 'male')
+ assert_equal '/people.json?gender=male', Person.collection_path('gender' => 'male')
# Use includes? because ordering of param hash is not guaranteed
- assert Person.collection_path(:gender => 'male', :student => true).include?('/people.xml?')
+ assert Person.collection_path(:gender => 'male', :student => true).include?('/people.json?')
assert Person.collection_path(:gender => 'male', :student => true).include?('gender=male')
assert Person.collection_path(:gender => 'male', :student => true).include?('student=true')
- assert_equal '/people.xml?name%5B%5D=bob&name%5B%5D=your+uncle%2Bme&name%5B%5D=&name%5B%5D=false', Person.collection_path(:name => ['bob', 'your uncle+me', nil, false])
+ assert_equal '/people.json?name%5B%5D=bob&name%5B%5D=your+uncle%2Bme&name%5B%5D=&name%5B%5D=false', Person.collection_path(:name => ['bob', 'your uncle+me', nil, false])
- assert_equal '/people.xml?struct%5Ba%5D%5B%5D=2&struct%5Ba%5D%5B%5D=1&struct%5Bb%5D=fred', Person.collection_path(:struct => ActiveSupport::OrderedHash[:a, [2,1], 'b', 'fred'])
+ assert_equal '/people.json?struct%5Ba%5D%5B%5D=2&struct%5Ba%5D%5B%5D=1&struct%5Bb%5D=fred', Person.collection_path(:struct => ActiveSupport::OrderedHash[:a, [2,1], 'b', 'fred'])
end
def test_custom_element_path
- assert_equal '/people/1/addresses/1.xml', StreetAddress.element_path(1, :person_id => 1)
- assert_equal '/people/1/addresses/1.xml', StreetAddress.element_path(1, 'person_id' => 1)
- assert_equal '/people/Greg/addresses/1.xml', StreetAddress.element_path(1, 'person_id' => 'Greg')
- assert_equal '/people/ann%20mary/addresses/ann%20mary.xml', StreetAddress.element_path(:'ann mary', 'person_id' => 'ann mary')
+ assert_equal '/people/1/addresses/1.json', StreetAddress.element_path(1, :person_id => 1)
+ assert_equal '/people/1/addresses/1.json', StreetAddress.element_path(1, 'person_id' => 1)
+ assert_equal '/people/Greg/addresses/1.json', StreetAddress.element_path(1, 'person_id' => 'Greg')
+ assert_equal '/people/ann%20mary/addresses/ann%20mary.json', StreetAddress.element_path(:'ann mary', 'person_id' => 'ann mary')
end
def test_custom_element_path_without_required_prefix_param
@@ -482,7 +482,7 @@ class BaseTest < Test::Unit::TestCase
end
def test_module_element_path
- assert_equal '/sounds/1.xml', Asset::Sound.element_path(1)
+ assert_equal '/sounds/1.json', Asset::Sound.element_path(1)
end
def test_custom_element_path_with_redefined_to_param
@@ -494,10 +494,10 @@ class BaseTest < Test::Unit::TestCase
end
# Class method.
- assert_equal '/people/Greg.xml', Person.element_path('Greg')
+ assert_equal '/people/Greg.json', Person.element_path('Greg')
# Protected Instance method.
- assert_equal '/people/Greg.xml', Person.find('Greg').send(:element_path)
+ assert_equal '/people/Greg.json', Person.find('Greg').send(:element_path)
ensure
# revert back to original
@@ -509,14 +509,14 @@ class BaseTest < Test::Unit::TestCase
end
def test_custom_element_path_with_parameters
- assert_equal '/people/1/addresses/1.xml?type=work', StreetAddress.element_path(1, :person_id => 1, :type => 'work')
- assert_equal '/people/1/addresses/1.xml?type=work', StreetAddress.element_path(1, 'person_id' => 1, :type => 'work')
- assert_equal '/people/1/addresses/1.xml?type=work', StreetAddress.element_path(1, :type => 'work', :person_id => 1)
- assert_equal '/people/1/addresses/1.xml?type%5B%5D=work&type%5B%5D=play+time', StreetAddress.element_path(1, :person_id => 1, :type => ['work', 'play time'])
+ assert_equal '/people/1/addresses/1.json?type=work', StreetAddress.element_path(1, :person_id => 1, :type => 'work')
+ assert_equal '/people/1/addresses/1.json?type=work', StreetAddress.element_path(1, 'person_id' => 1, :type => 'work')
+ assert_equal '/people/1/addresses/1.json?type=work', StreetAddress.element_path(1, :type => 'work', :person_id => 1)
+ assert_equal '/people/1/addresses/1.json?type%5B%5D=work&type%5B%5D=play+time', StreetAddress.element_path(1, :person_id => 1, :type => ['work', 'play time'])
end
def test_custom_element_path_with_prefix_and_parameters
- assert_equal '/people/1/addresses/1.xml?type=work', StreetAddress.element_path(1, {:person_id => 1}, {:type => 'work'})
+ assert_equal '/people/1/addresses/1.json?type=work', StreetAddress.element_path(1, {:person_id => 1}, {:type => 'work'})
end
def test_custom_collection_path_without_required_prefix_param
@@ -526,17 +526,17 @@ class BaseTest < Test::Unit::TestCase
end
def test_custom_collection_path
- assert_equal '/people/1/addresses.xml', StreetAddress.collection_path(:person_id => 1)
- assert_equal '/people/1/addresses.xml', StreetAddress.collection_path('person_id' => 1)
+ assert_equal '/people/1/addresses.json', StreetAddress.collection_path(:person_id => 1)
+ assert_equal '/people/1/addresses.json', StreetAddress.collection_path('person_id' => 1)
end
def test_custom_collection_path_with_parameters
- assert_equal '/people/1/addresses.xml?type=work', StreetAddress.collection_path(:person_id => 1, :type => 'work')
- assert_equal '/people/1/addresses.xml?type=work', StreetAddress.collection_path('person_id' => 1, :type => 'work')
+ assert_equal '/people/1/addresses.json?type=work', StreetAddress.collection_path(:person_id => 1, :type => 'work')
+ assert_equal '/people/1/addresses.json?type=work', StreetAddress.collection_path('person_id' => 1, :type => 'work')
end
def test_custom_collection_path_with_prefix_and_parameters
- assert_equal '/people/1/addresses.xml?type=work', StreetAddress.collection_path({:person_id => 1}, {:type => 'work'})
+ assert_equal '/people/1/addresses.json?type=work', StreetAddress.collection_path({:person_id => 1}, {:type => 'work'})
end
def test_custom_element_name
@@ -626,7 +626,7 @@ class BaseTest < Test::Unit::TestCase
resp = {'Location' => '/foo/bar/1'}
assert_equal '1', p.__send__(:id_from_response, resp)
- resp['Location'] << '.xml'
+ resp['Location'] << '.json'
assert_equal '1', p.__send__(:id_from_response, resp)
end
@@ -698,14 +698,14 @@ class BaseTest < Test::Unit::TestCase
# Test that save exceptions get bubbled up too
ActiveResource::HttpMock.respond_to do |mock|
- mock.post "/people.xml", {}, nil, 409
+ mock.post "/people.json", {}, nil, 409
end
assert_raise(ActiveResource::ResourceConflict) { Person.create(:name => 'Rick') }
end
def test_create_without_location
ActiveResource::HttpMock.respond_to do |mock|
- mock.post "/people.xml", {}, nil, 201
+ mock.post "/people.json", {}, nil, 201
end
person = Person.create(:name => 'Rick')
assert_nil person.id
@@ -772,8 +772,8 @@ class BaseTest < Test::Unit::TestCase
def test_update_conflict
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/people/2.xml", {}, @david
- mock.put "/people/2.xml", @default_request_headers, nil, 409
+ mock.get "/people/2.json", {}, @david
+ mock.put "/people/2.json", @default_request_headers, nil, 409
end
assert_raise(ActiveResource::ResourceConflict) { Person.find(2).save }
end
@@ -830,7 +830,7 @@ class BaseTest < Test::Unit::TestCase
def test_destroy
assert Person.find(1).destroy
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/people/1.xml", {}, nil, 404
+ mock.get "/people/1.json", {}, nil, 404
end
assert_raise(ActiveResource::ResourceNotFound) { Person.find(1).destroy }
end
@@ -838,7 +838,7 @@ class BaseTest < Test::Unit::TestCase
def test_destroy_with_custom_prefix
assert StreetAddress.find(1, :params => { :person_id => 1 }).destroy
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/people/1/addresses/1.xml", {}, nil, 404
+ mock.get "/people/1/addresses/1.json", {}, nil, 404
end
assert_raise(ActiveResource::ResourceNotFound) { StreetAddress.find(1, :params => { :person_id => 1 }) }
end
@@ -846,7 +846,7 @@ class BaseTest < Test::Unit::TestCase
def test_destroy_with_410_gone
assert Person.find(1).destroy
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/people/1.xml", {}, nil, 410
+ mock.get "/people/1.json", {}, nil, 410
end
assert_raise(ActiveResource::ResourceGone) { Person.find(1).destroy }
end
@@ -854,7 +854,7 @@ class BaseTest < Test::Unit::TestCase
def test_delete
assert Person.delete(1)
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/people/1.xml", {}, nil, 404
+ mock.get "/people/1.json", {}, nil, 404
end
assert_raise(ActiveResource::ResourceNotFound) { Person.find(1) }
end
@@ -862,7 +862,7 @@ class BaseTest < Test::Unit::TestCase
def test_delete_with_custom_prefix
assert StreetAddress.delete(1, :person_id => 1)
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/people/1/addresses/1.xml", {}, nil, 404
+ mock.get "/people/1/addresses/1.json", {}, nil, 404
end
assert_raise(ActiveResource::ResourceNotFound) { StreetAddress.find(1, :params => { :person_id => 1 }) }
end
@@ -870,7 +870,7 @@ class BaseTest < Test::Unit::TestCase
def test_delete_with_410_gone
assert Person.delete(1)
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/people/1.xml", {}, nil, 410
+ mock.get "/people/1.json", {}, nil, 410
end
assert_raise(ActiveResource::ResourceGone) { Person.find(1) }
end
@@ -939,13 +939,14 @@ class BaseTest < Test::Unit::TestCase
def test_exists_with_410_gone
ActiveResource::HttpMock.respond_to do |mock|
- mock.head "/people/1.xml", {}, nil, 410
+ mock.head "/people/1.json", {}, nil, 410
end
assert !Person.exists?(1)
end
def test_to_xml
+ Person.format = :xml
matz = Person.find(1)
encode = matz.encode
xml = matz.to_xml
@@ -954,9 +955,12 @@ class BaseTest < Test::Unit::TestCase
assert xml.include?('<?xml version="1.0" encoding="UTF-8"?>')
assert xml.include?('<name>Matz</name>')
assert xml.include?('<id type="integer">1</id>')
+ ensure
+ Person.format = :json
end
def test_to_xml_with_element_name
+ Person.format = :xml
old_elem_name = Person.element_name
matz = Person.find(1)
Person.element_name = 'ruby_creator'
@@ -970,45 +974,45 @@ class BaseTest < Test::Unit::TestCase
assert xml.include?('<id type="integer">1</id>')
assert xml.include?('</ruby-creator>')
ensure
+ Person.format = :json
Person.element_name = old_elem_name
end
def test_to_xml_with_private_method_name_as_attribute
+ Person.format = :xml
assert_nothing_raised(ArgumentError) {
Customer.new(:test => true).to_xml
}
+ ensure
+ Person.format = :json
end
def test_to_json
Person.include_root_in_json = true
- Person.format = :json
joe = Person.find(6)
encode = joe.encode
json = joe.to_json
- Person.format = :xml
assert_equal encode, json
- assert_match %r{^\{"person":\{"person":\{}, json
+ assert_match %r{^\{"person":\{}, json
assert_match %r{"id":6}, json
assert_match %r{"name":"Joe"}, json
- assert_match %r{\}\}\}$}, json
+ assert_match %r{\}\}$}, json
end
def test_to_json_with_element_name
old_elem_name = Person.element_name
Person.include_root_in_json = true
- Person.format = :json
joe = Person.find(6)
Person.element_name = 'ruby_creator'
encode = joe.encode
json = joe.to_json
- Person.format = :xml
assert_equal encode, json
- assert_match %r{^\{"ruby_creator":\{"person":\{}, json
+ assert_match %r{^\{"ruby_creator":\{}, json
assert_match %r{"id":6}, json
assert_match %r{"name":"Joe"}, json
- assert_match %r{\}\}\}$}, json
+ assert_match %r{\}\}$}, json
ensure
Person.element_name = old_elem_name
end
@@ -1043,19 +1047,22 @@ class BaseTest < Test::Unit::TestCase
def test_load_yaml_array
assert_nothing_raised do
+ Person.format = :xml
marty = Person.find(5)
assert_equal 3, marty.colors.size
marty.colors.each do |color|
assert_kind_of String, color
end
end
+ ensure
+ Person.format = :json
end
def test_with_custom_formatter
- @addresses = [{:id => "1", :street => "1 Infinite Loop", :city => "Cupertino", :state => "CA"}].to_xml(:root => 'addresses')
+ addresses = [{ :id => "1", :street => "1 Infinite Loop", :city => "Cupertino", :state => "CA" }].to_xml(:root => :addresses)
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/addresses.xml", {}, @addresses, 200
+ mock.get "/addresses.xml", {}, addresses, 200
end
# late bind the site
@@ -1066,10 +1073,10 @@ class BaseTest < Test::Unit::TestCase
end
def test_create_with_custom_primary_key
- silver_plan = {:code => "silver", :price => 5.00}.to_xml(:root => "plan")
+ silver_plan = { :plan => { :code => "silver", :price => 5.00 } }.to_json
ActiveResource::HttpMock.respond_to do |mock|
- mock.post "/plans.xml", {}, silver_plan, 201, 'Location' => '/plans/silver.xml'
+ mock.post "/plans.json", {}, silver_plan, 201, 'Location' => '/plans/silver.json'
end
plan = SubscriptionPlan.new(:code => "silver", :price => 5.00)
@@ -1080,12 +1087,12 @@ class BaseTest < Test::Unit::TestCase
end
def test_update_with_custom_primary_key
- silver_plan = {:code => "silver", :price => 5.00}.to_xml(:root => "plan")
- silver_plan_updated = {:code => "silver", :price => 10.00}.to_xml(:root => "plan")
+ silver_plan = { :plan => { :code => "silver", :price => 5.00 } }.to_json
+ silver_plan_updated = { :plan => { :code => "silver", :price => 10.00 } }.to_json
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/plans/silver.xml", {}, silver_plan
- mock.put "/plans/silver.xml", {}, silver_plan_updated, 201, 'Location' => '/plans/silver.xml'
+ mock.get "/plans/silver.json", {}, silver_plan
+ mock.put "/plans/silver.json", {}, silver_plan_updated, 201, 'Location' => '/plans/silver.json'
end
plan = SubscriptionPlan.find("silver")
@@ -1097,7 +1104,7 @@ class BaseTest < Test::Unit::TestCase
plan.save!
assert_equal 10.00, plan.price
end
-
+
def test_namespacing
sound = Asset::Sound.find(1)
assert_equal "Asset::Sound::Author", sound.author.class.to_s
diff --git a/activeresource/test/connection_test.rb b/activeresource/test/cases/connection_test.rb
index 7c36393cf2..09df0fb678 100644
--- a/activeresource/test/connection_test.rb
+++ b/activeresource/test/cases/connection_test.rb
@@ -5,29 +5,29 @@ class ConnectionTest < Test::Unit::TestCase
def setup
@conn = ActiveResource::Connection.new('http://localhost')
- @matz = { :id => 1, :name => 'Matz' }
- @david = { :id => 2, :name => 'David' }
- @people = [ @matz, @david ].to_xml(:root => 'people')
- @people_single = [ @matz ].to_xml(:root => 'people-single-elements')
- @people_empty = [ ].to_xml(:root => 'people-empty-elements')
- @matz = @matz.to_xml(:root => 'person')
- @david = @david.to_xml(:root => 'person')
- @header = {'key' => 'value'}.freeze
-
- @default_request_headers = { 'Content-Type' => 'application/xml' }
+ matz = { :person => { :id => 1, :name => 'Matz' } }
+ david = { :person => { :id => 2, :name => 'David' } }
+ @people = { :people => [ matz, david ] }.to_json
+ @people_single = { 'people-single-elements' => [ matz ] }.to_json
+ @people_empty = { 'people-empty-elements' => [ ] }.to_json
+ @matz = matz.to_json
+ @david = david.to_json
+ @header = { 'key' => 'value' }.freeze
+
+ @default_request_headers = { 'Content-Type' => 'application/json' }
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/people/2.xml", @header, @david
- mock.get "/people.xml", {}, @people
- mock.get "/people_single_elements.xml", {}, @people_single
- mock.get "/people_empty_elements.xml", {}, @people_empty
- mock.get "/people/1.xml", {}, @matz
- mock.put "/people/1.xml", {}, nil, 204
- mock.put "/people/2.xml", {}, @header, 204
- mock.delete "/people/1.xml", {}, nil, 200
- mock.delete "/people/2.xml", @header, nil, 200
- mock.post "/people.xml", {}, nil, 201, 'Location' => '/people/5.xml'
- mock.post "/members.xml", {}, @header, 201, 'Location' => '/people/6.xml'
- mock.head "/people/1.xml", {}, nil, 200
+ mock.get "/people/2.json", @header, @david
+ mock.get "/people.json", {}, @people
+ mock.get "/people_single_elements.json", {}, @people_single
+ mock.get "/people_empty_elements.json", {}, @people_empty
+ mock.get "/people/1.json", {}, @matz
+ mock.put "/people/1.json", {}, nil, 204
+ mock.put "/people/2.json", {}, @header, 204
+ mock.delete "/people/1.json", {}, nil, 200
+ mock.delete "/people/2.json", @header, nil, 200
+ mock.post "/people.json", {}, nil, 201, 'Location' => '/people/5.json'
+ mock.post "/members.json", {}, @header, 201, 'Location' => '/people/6.json'
+ mock.head "/people/1.json", {}, nil, 200
end
end
@@ -120,64 +120,64 @@ class ConnectionTest < Test::Unit::TestCase
end
def test_get
- matz = decode(@conn.get("/people/1.xml"))
+ matz = decode(@conn.get("/people/1.json"))
assert_equal "Matz", matz["name"]
end
def test_head
- response = @conn.head("/people/1.xml")
+ response = @conn.head("/people/1.json")
assert response.body.blank?
assert_equal 200, response.code
end
def test_get_with_header
- david = decode(@conn.get("/people/2.xml", @header))
+ david = decode(@conn.get("/people/2.json", @header))
assert_equal "David", david["name"]
end
def test_get_collection
- people = decode(@conn.get("/people.xml"))
- assert_equal "Matz", people[0]["name"]
- assert_equal "David", people[1]["name"]
+ people = decode(@conn.get("/people.json"))
+ assert_equal "Matz", people[0]["person"]["name"]
+ assert_equal "David", people[1]["person"]["name"]
end
def test_get_collection_single
- people = decode(@conn.get("/people_single_elements.xml"))
- assert_equal "Matz", people[0]["name"]
+ people = decode(@conn.get("/people_single_elements.json"))
+ assert_equal "Matz", people[0]["person"]["name"]
end
def test_get_collection_empty
- people = decode(@conn.get("/people_empty_elements.xml"))
+ people = decode(@conn.get("/people_empty_elements.json"))
assert_equal [], people
end
def test_post
- response = @conn.post("/people.xml")
- assert_equal "/people/5.xml", response["Location"]
+ response = @conn.post("/people.json")
+ assert_equal "/people/5.json", response["Location"]
end
def test_post_with_header
- response = @conn.post("/members.xml", @header)
- assert_equal "/people/6.xml", response["Location"]
+ response = @conn.post("/members.json", @header)
+ assert_equal "/people/6.json", response["Location"]
end
def test_put
- response = @conn.put("/people/1.xml")
+ response = @conn.put("/people/1.json")
assert_equal 204, response.code
end
def test_put_with_header
- response = @conn.put("/people/2.xml", @header)
+ response = @conn.put("/people/2.json", @header)
assert_equal 204, response.code
end
def test_delete
- response = @conn.delete("/people/1.xml")
+ response = @conn.delete("/people/1.json")
assert_equal 200, response.code
end
def test_delete_with_header
- response = @conn.delete("/people/2.xml", @header)
+ response = @conn.delete("/people/2.json", @header)
assert_equal 200, response.code
end
@@ -185,7 +185,7 @@ class ConnectionTest < Test::Unit::TestCase
@http = mock('new Net::HTTP')
@conn.expects(:http).returns(@http)
@http.expects(:get).raises(Timeout::Error, 'execution expired')
- assert_raise(ActiveResource::TimeoutError) { @conn.get('/people_timeout.xml') }
+ assert_raise(ActiveResource::TimeoutError) { @conn.get('/people_timeout.json') }
end
def test_setting_timeout
@@ -203,8 +203,8 @@ class ConnectionTest < Test::Unit::TestCase
@http = mock('new Net::HTTP')
@conn.expects(:http).returns(@http)
path = '/people/1.xml'
- @http.expects(:get).with(path, {'Accept' => 'application/xhtml+xml'}).returns(ActiveResource::Response.new(@matz, 200, {'Content-Type' => 'text/xhtml'}))
- assert_nothing_raised(Mocha::ExpectationError) { @conn.get(path, {'Accept' => 'application/xhtml+xml'}) }
+ @http.expects(:get).with(path, { 'Accept' => 'application/xhtml+xml' }).returns(ActiveResource::Response.new(@matz, 200, { 'Content-Type' => 'text/xhtml' }))
+ assert_nothing_raised(Mocha::ExpectationError) { @conn.get(path, { 'Accept' => 'application/xhtml+xml' }) }
end
def test_ssl_options_get_applied_to_http
@@ -222,7 +222,7 @@ class ConnectionTest < Test::Unit::TestCase
http = Net::HTTP.new('')
@conn.expects(:http).returns(http)
http.expects(:get).raises(OpenSSL::SSL::SSLError, 'Expired certificate')
- assert_raise(ActiveResource::SSLError) { @conn.get('/people/1.xml') }
+ assert_raise(ActiveResource::SSLError) { @conn.get('/people/1.json') }
end
def test_auth_type_can_be_string
diff --git a/activeresource/test/cases/finder_test.rb b/activeresource/test/cases/finder_test.rb
index ebb783996d..9c51f2a390 100644
--- a/activeresource/test/cases/finder_test.rb
+++ b/activeresource/test/cases/finder_test.rb
@@ -100,23 +100,23 @@ class FinderTest < Test::Unit::TestCase
end
def test_find_all_by_from
- ActiveResource::HttpMock.respond_to { |m| m.get "/companies/1/people.xml", {}, @people_david }
+ ActiveResource::HttpMock.respond_to { |m| m.get "/companies/1/people.json", {}, @people_david }
- people = Person.find(:all, :from => "/companies/1/people.xml")
+ people = Person.find(:all, :from => "/companies/1/people.json")
assert_equal 1, people.size
assert_equal "David", people.first.name
end
def test_find_all_by_from_with_options
- ActiveResource::HttpMock.respond_to { |m| m.get "/companies/1/people.xml", {}, @people_david }
+ ActiveResource::HttpMock.respond_to { |m| m.get "/companies/1/people.json", {}, @people_david }
- people = Person.find(:all, :from => "/companies/1/people.xml")
+ people = Person.find(:all, :from => "/companies/1/people.json")
assert_equal 1, people.size
assert_equal "David", people.first.name
end
def test_find_all_by_symbol_from
- ActiveResource::HttpMock.respond_to { |m| m.get "/people/managers.xml", {}, @people_david }
+ ActiveResource::HttpMock.respond_to { |m| m.get "/people/managers.json", {}, @people_david }
people = Person.find(:all, :from => :managers)
assert_equal 1, people.size
@@ -124,14 +124,14 @@ class FinderTest < Test::Unit::TestCase
end
def test_find_single_by_from
- ActiveResource::HttpMock.respond_to { |m| m.get "/companies/1/manager.xml", {}, @david }
+ ActiveResource::HttpMock.respond_to { |m| m.get "/companies/1/manager.json", {}, @david }
- david = Person.find(:one, :from => "/companies/1/manager.xml")
+ david = Person.find(:one, :from => "/companies/1/manager.json")
assert_equal "David", david.name
end
def test_find_single_by_symbol_from
- ActiveResource::HttpMock.respond_to { |m| m.get "/people/leader.xml", {}, @david }
+ ActiveResource::HttpMock.respond_to { |m| m.get "/people/leader.json", {}, @david }
david = Person.find(:one, :from => :leader)
assert_equal "David", david.name
diff --git a/activeresource/test/cases/format_test.rb b/activeresource/test/cases/format_test.rb
index f8d33f99fa..174142ec52 100644
--- a/activeresource/test/cases/format_test.rb
+++ b/activeresource/test/cases/format_test.rb
@@ -51,28 +51,30 @@ class FormatTest < Test::Unit::TestCase
end
def test_formats_on_custom_element_method
- for format in [ :json, :xml ]
+ [:json, :xml].each do |format|
using_format(Person, format) do
+ david = (format == :json ? { :person => @david } : @david)
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/people/2.#{format}", {'Accept' => ActiveResource::Formats[format].mime_type}, ActiveResource::Formats[format].encode(@david)
- mock.get "/people/2/shallow.#{format}", {'Accept' => ActiveResource::Formats[format].mime_type}, ActiveResource::Formats[format].encode(@david)
+ mock.get "/people/2.#{format}", { 'Accept' => ActiveResource::Formats[format].mime_type }, ActiveResource::Formats[format].encode(david)
+ mock.get "/people/2/shallow.#{format}", { 'Accept' => ActiveResource::Formats[format].mime_type }, ActiveResource::Formats[format].encode(david)
end
+
remote_programmer = Person.find(2).get(:shallow)
assert_equal @david[:id], remote_programmer['id']
assert_equal @david[:name], remote_programmer['name']
end
- end
- for format in [ :json, :xml ]
- ryan = ActiveResource::Formats[format].encode({ :name => 'Ryan' })
+ ryan_hash = { :name => 'Ryan' }
+ ryan_hash = (format == :json ? { :person => ryan_hash } : ryan_hash)
+ ryan = ActiveResource::Formats[format].encode(ryan_hash)
using_format(Person, format) do
remote_ryan = Person.new(:name => 'Ryan')
- ActiveResource::HttpMock.respond_to.post "/people.#{format}", {'Content-Type' => ActiveResource::Formats[format].mime_type}, ryan, 201, {'Location' => "/people/5.#{format}"}
+ ActiveResource::HttpMock.respond_to.post "/people.#{format}", { 'Content-Type' => ActiveResource::Formats[format].mime_type}, ryan, 201, { 'Location' => "/people/5.#{format}" }
remote_ryan.save
remote_ryan = Person.new(:name => 'Ryan')
- ActiveResource::HttpMock.respond_to.post "/people/new/register.#{format}", {'Content-Type' => ActiveResource::Formats[format].mime_type}, ryan, 201, {'Location' => "/people/5.#{format}"}
- assert_equal ActiveResource::Response.new(ryan, 201, {'Location' => "/people/5.#{format}"}), remote_ryan.post(:register)
+ ActiveResource::HttpMock.respond_to.post "/people/new/register.#{format}", { 'Content-Type' => ActiveResource::Formats[format].mime_type}, ryan, 201, { 'Location' => "/people/5.#{format}" }
+ assert_equal ActiveResource::Response.new(ryan, 201, { 'Location' => "/people/5.#{format}" }), remote_ryan.post(:register)
end
end
end
diff --git a/activeresource/test/cases/http_mock_test.rb b/activeresource/test/cases/http_mock_test.rb
index cd5155924a..d2fd911314 100644
--- a/activeresource/test/cases/http_mock_test.rb
+++ b/activeresource/test/cases/http_mock_test.rb
@@ -11,10 +11,10 @@ class HttpMockTest < ActiveSupport::TestCase
[:post, :put, :get, :delete, :head].each do |method|
test "responds to simple #{method} request" do
ActiveResource::HttpMock.respond_to do |mock|
- mock.send(method, "/people/1", {FORMAT_HEADER[method] => "application/xml"}, "Response")
+ mock.send(method, "/people/1", { FORMAT_HEADER[method] => "application/json" }, "Response")
end
- assert_equal "Response", request(method, "/people/1", FORMAT_HEADER[method] => "application/xml").body
+ assert_equal "Response", request(method, "/people/1", FORMAT_HEADER[method] => "application/json").body
end
test "adds format header by default to #{method} request" do
@@ -22,7 +22,7 @@ class HttpMockTest < ActiveSupport::TestCase
mock.send(method, "/people/1", {}, "Response")
end
- assert_equal "Response", request(method, "/people/1", FORMAT_HEADER[method] => "application/xml").body
+ assert_equal "Response", request(method, "/people/1", FORMAT_HEADER[method] => "application/json").body
end
test "respond only when headers match header by default to #{method} request" do
@@ -53,8 +53,8 @@ class HttpMockTest < ActiveSupport::TestCase
test "responds correctly when format header is given to #{method} request" do
ActiveResource::HttpMock.respond_to do |mock|
- mock.send(method, "/people/1", {FORMAT_HEADER[method] => "application/xml"}, "XML")
- mock.send(method, "/people/1", {FORMAT_HEADER[method] => "application/json"}, "Json")
+ mock.send(method, "/people/1", { FORMAT_HEADER[method] => "application/xml" }, "XML")
+ mock.send(method, "/people/1", { FORMAT_HEADER[method] => "application/json" }, "Json")
end
assert_equal "XML", request(method, "/people/1", FORMAT_HEADER[method] => "application/xml").body
@@ -63,22 +63,22 @@ class HttpMockTest < ActiveSupport::TestCase
test "raises InvalidRequestError if no response found for the #{method} request" do
ActiveResource::HttpMock.respond_to do |mock|
- mock.send(method, "/people/1", {FORMAT_HEADER[method] => "application/xml"}, "XML")
+ mock.send(method, "/people/1", { FORMAT_HEADER[method] => "application/json" }, "json")
end
assert_raise(::ActiveResource::InvalidRequestError) do
- request(method, "/people/1", FORMAT_HEADER[method] => "application/json")
+ request(method, "/people/1", FORMAT_HEADER[method] => "application/xml")
end
end
end
test "allows you to send in pairs directly to the respond_to method" do
- matz = { :id => 1, :name => "Matz" }.to_xml(:root => "person")
+ matz = { :person => { :id => 1, :name => "Matz" } }.to_json
- create_matz = ActiveResource::Request.new(:post, '/people.xml', matz, {})
- created_response = ActiveResource::Response.new("", 201, {"Location" => "/people/1.xml"})
- get_matz = ActiveResource::Request.new(:get, '/people/1.xml', nil)
+ create_matz = ActiveResource::Request.new(:post, '/people.json', matz, {})
+ created_response = ActiveResource::Response.new("", 201, { "Location" => "/people/1.json" })
+ get_matz = ActiveResource::Request.new(:get, '/people/1.json', nil)
ok_response = ActiveResource::Response.new(matz, 200, {})
pairs = {create_matz => created_response, get_matz => ok_response}
@@ -91,24 +91,24 @@ class HttpMockTest < ActiveSupport::TestCase
test "resets all mocked responses on each call to respond_to with a block by default" do
ActiveResource::HttpMock.respond_to do |mock|
- mock.send(:get, "/people/1", {}, "XML1")
+ mock.send(:get, "/people/1", {}, "JSON1")
end
assert_equal 1, ActiveResource::HttpMock.responses.length
ActiveResource::HttpMock.respond_to do |mock|
- mock.send(:get, "/people/2", {}, "XML2")
+ mock.send(:get, "/people/2", {}, "JSON2")
end
assert_equal 1, ActiveResource::HttpMock.responses.length
end
test "resets all mocked responses on each call to respond_to by passing pairs by default" do
ActiveResource::HttpMock.respond_to do |mock|
- mock.send(:get, "/people/1", {}, "XML1")
+ mock.send(:get, "/people/1", {}, "JSON1")
end
assert_equal 1, ActiveResource::HttpMock.responses.length
- matz = { :id => 1, :name => "Matz" }.to_xml(:root => "person")
- get_matz = ActiveResource::Request.new(:get, '/people/1.xml', nil)
+ matz = { :person => { :id => 1, :name => "Matz" } }.to_json
+ get_matz = ActiveResource::Request.new(:get, '/people/1.json', nil)
ok_response = ActiveResource::Response.new(matz, 200, {})
ActiveResource::HttpMock.respond_to({get_matz => ok_response})
@@ -117,24 +117,24 @@ class HttpMockTest < ActiveSupport::TestCase
test "allows you to add new responses to the existing responses by calling a block" do
ActiveResource::HttpMock.respond_to do |mock|
- mock.send(:get, "/people/1", {}, "XML1")
+ mock.send(:get, "/people/1", {}, "JSON1")
end
assert_equal 1, ActiveResource::HttpMock.responses.length
ActiveResource::HttpMock.respond_to(false) do |mock|
- mock.send(:get, "/people/2", {}, "XML2")
+ mock.send(:get, "/people/2", {}, "JSON2")
end
assert_equal 2, ActiveResource::HttpMock.responses.length
end
test "allows you to add new responses to the existing responses by passing pairs" do
ActiveResource::HttpMock.respond_to do |mock|
- mock.send(:get, "/people/1", {}, "XML1")
+ mock.send(:get, "/people/1", {}, "JSON1")
end
assert_equal 1, ActiveResource::HttpMock.responses.length
- matz = { :id => 1, :name => "Matz" }.to_xml(:root => "person")
- get_matz = ActiveResource::Request.new(:get, '/people/1.xml', nil)
+ matz = { :person => { :id => 1, :name => "Matz" } }.to_json
+ get_matz = ActiveResource::Request.new(:get, '/people/1.json', nil)
ok_response = ActiveResource::Response.new(matz, 200, {})
ActiveResource::HttpMock.respond_to({get_matz => ok_response}, false)
@@ -143,23 +143,23 @@ class HttpMockTest < ActiveSupport::TestCase
test "allows you to replace the existing reponse with the same request by calling a block" do
ActiveResource::HttpMock.respond_to do |mock|
- mock.send(:get, "/people/1", {}, "XML1")
+ mock.send(:get, "/people/1", {}, "JSON1")
end
assert_equal 1, ActiveResource::HttpMock.responses.length
ActiveResource::HttpMock.respond_to(false) do |mock|
- mock.send(:get, "/people/1", {}, "XML2")
+ mock.send(:get, "/people/1", {}, "JSON2")
end
assert_equal 1, ActiveResource::HttpMock.responses.length
end
test "allows you to replace the existing reponse with the same request by passing pairs" do
ActiveResource::HttpMock.respond_to do |mock|
- mock.send(:get, "/people/1", {}, "XML1")
+ mock.send(:get, "/people/1", {}, "JSON1")
end
assert_equal 1, ActiveResource::HttpMock.responses.length
- matz = { :id => 1, :name => "Matz" }.to_xml(:root => "person")
+ matz = { :person => { :id => 1, :name => "Matz" } }.to_json
get_matz = ActiveResource::Request.new(:get, '/people/1', nil)
ok_response = ActiveResource::Response.new(matz, 200, {})
@@ -169,19 +169,19 @@ class HttpMockTest < ActiveSupport::TestCase
test "do not replace the response with the same path but different method by calling a block" do
ActiveResource::HttpMock.respond_to do |mock|
- mock.send(:get, "/people/1", {}, "XML1")
+ mock.send(:get, "/people/1", {}, "JSON1")
end
assert_equal 1, ActiveResource::HttpMock.responses.length
ActiveResource::HttpMock.respond_to(false) do |mock|
- mock.send(:put, "/people/1", {}, "XML2")
+ mock.send(:put, "/people/1", {}, "JSON2")
end
assert_equal 2, ActiveResource::HttpMock.responses.length
end
test "do not replace the response with the same path but different method by passing pairs" do
ActiveResource::HttpMock.respond_to do |mock|
- mock.send(:get, "/people/1", {}, "XML1")
+ mock.send(:get, "/people/1", {}, "JSON1")
end
assert_equal 1, ActiveResource::HttpMock.responses.length
diff --git a/activeresource/test/cases/log_subscriber_test.rb b/activeresource/test/cases/log_subscriber_test.rb
index 3cd96007db..b9143f5b67 100644
--- a/activeresource/test/cases/log_subscriber_test.rb
+++ b/activeresource/test/cases/log_subscriber_test.rb
@@ -10,9 +10,9 @@ class LogSubscriberTest < ActiveSupport::TestCase
def setup
super
- @matz = { :id => 1, :name => 'Matz' }.to_xml(:root => 'person')
+ @matz = { :person => { :id => 1, :name => 'Matz' } }.to_json
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/people/1.xml", {}, @matz
+ mock.get "/people/1.json", {}, @matz
end
ActiveResource::LogSubscriber.attach_to :active_resource
@@ -26,7 +26,7 @@ class LogSubscriberTest < ActiveSupport::TestCase
matz = Person.find(1)
wait
assert_equal 2, @logger.logged(:info).size
- assert_equal "GET http://37s.sunrise.i:3000/people/1.xml", @logger.logged(:info)[0]
- assert_match(/\-\-\> 200 200 106/, @logger.logged(:info)[1])
+ assert_equal "GET http://37s.sunrise.i:3000/people/1.json", @logger.logged(:info)[0]
+ assert_match(/\-\-\> 200 200 33/, @logger.logged(:info)[1])
end
end
diff --git a/activeresource/test/cases/observing_test.rb b/activeresource/test/cases/observing_test.rb
index 925ec7a84a..ca3ab5d03d 100644
--- a/activeresource/test/cases/observing_test.rb
+++ b/activeresource/test/cases/observing_test.rb
@@ -20,13 +20,13 @@ class ObservingTest < Test::Unit::TestCase
end
def setup
- @matz = { :id => 1, :name => 'Matz' }.to_xml(:root => 'person')
+ @matz = { 'person' => { :id => 1, :name => 'Matz' } }.to_json
ActiveResource::HttpMock.respond_to do |mock|
- mock.get "/people/1.xml", {}, @matz
- mock.post "/people.xml", {}, @matz, 201, 'Location' => '/people/1.xml'
- mock.put "/people/1.xml", {}, nil, 204
- mock.delete "/people/1.xml", {}, nil, 200
+ mock.get "/people/1.json", {}, @matz
+ mock.post "/people.json", {}, @matz, 201, 'Location' => '/people/1.json'
+ mock.put "/people/1.json", {}, nil, 204
+ mock.delete "/people/1.json", {}, nil, 200
end
PersonObserver.instance
diff --git a/activeresource/test/cases/validations_test.rb b/activeresource/test/cases/validations_test.rb
index 3b1caecb04..c6c6e1d786 100644
--- a/activeresource/test/cases/validations_test.rb
+++ b/activeresource/test/cases/validations_test.rb
@@ -8,9 +8,9 @@ require 'active_support/core_ext/hash/conversions'
class ValidationsTest < ActiveModel::TestCase
VALID_PROJECT_HASH = { :name => "My Project", :description => "A project" }
def setup
- @my_proj = VALID_PROJECT_HASH.to_xml(:root => "person")
+ @my_proj = { "person" => VALID_PROJECT_HASH }.to_json
ActiveResource::HttpMock.respond_to do |mock|
- mock.post "/projects.xml", {}, @my_proj, 201, 'Location' => '/projects/5.xml'
+ mock.post "/projects.json", {}, @my_proj, 201, 'Location' => '/projects/5.json'
end
end
diff --git a/activeresource/test/setter_trap.rb b/activeresource/test/setter_trap.rb
index 437fbdad32..7cfd9ca111 100644
--- a/activeresource/test/setter_trap.rb
+++ b/activeresource/test/setter_trap.rb
@@ -1,5 +1,3 @@
-require 'abstract_unit'
-
class SetterTrap < ActiveSupport::BasicObject
class << self
def rollback_sets(obj)
diff --git a/activesupport/lib/active_support/buffered_logger.rb b/activesupport/lib/active_support/buffered_logger.rb
index a14f008be5..b937d4c50d 100644
--- a/activesupport/lib/active_support/buffered_logger.rb
+++ b/activesupport/lib/active_support/buffered_logger.rb
@@ -48,14 +48,17 @@ module ActiveSupport
if log.respond_to?(:write)
@log = log
elsif File.exist?(log)
- @log = open(log, (File::WRONLY | File::APPEND))
- @log.binmode
- @log.sync = true
+ @log = open_log(log, (File::WRONLY | File::APPEND))
else
FileUtils.mkdir_p(File.dirname(log))
- @log = open(log, (File::WRONLY | File::APPEND | File::CREAT))
- @log.binmode
- @log.sync = true
+ @log = open_log(log, (File::WRONLY | File::APPEND | File::CREAT))
+ end
+ end
+
+ def open_log(log, mode)
+ open(log, mode).tap do |log|
+ log.set_encoding(Encoding::BINARY) if log.respond_to?(:set_encoding)
+ log.sync = true
end
end
diff --git a/activesupport/lib/active_support/core_ext/numeric/time.rb b/activesupport/lib/active_support/core_ext/numeric/time.rb
index e73915ffcf..58a03d508e 100644
--- a/activesupport/lib/active_support/core_ext/numeric/time.rb
+++ b/activesupport/lib/active_support/core_ext/numeric/time.rb
@@ -1,4 +1,6 @@
require 'active_support/duration'
+require 'active_support/core_ext/time/calculations'
+require 'active_support/core_ext/time/acts_like'
class Numeric
# Enables the use of time calculations and declarations, like 45.minutes + 2.hours + 4.years.
diff --git a/activesupport/lib/active_support/core_ext/object/duplicable.rb b/activesupport/lib/active_support/core_ext/object/duplicable.rb
index 02cb5dfee7..9d044eba71 100644
--- a/activesupport/lib/active_support/core_ext/object/duplicable.rb
+++ b/activesupport/lib/active_support/core_ext/object/duplicable.rb
@@ -1,3 +1,4 @@
+#--
# Most objects are cloneable, but not all. For example you can't dup +nil+:
#
# nil.dup # => TypeError: can't dup NilClass
@@ -14,6 +15,7 @@
#
# That's why we hardcode the following cases and check duplicable? instead of
# using that rescue idiom.
+#++
class Object
# Can you safely dup this object?
#
diff --git a/activesupport/lib/active_support/core_ext/time/calculations.rb b/activesupport/lib/active_support/core_ext/time/calculations.rb
index dcac17536a..00fda2b370 100644
--- a/activesupport/lib/active_support/core_ext/time/calculations.rb
+++ b/activesupport/lib/active_support/core_ext/time/calculations.rb
@@ -1,4 +1,5 @@
require 'active_support/duration'
+require 'active_support/core_ext/time/zones'
class Time
COMMON_YEAR_DAYS_IN_MONTH = [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
diff --git a/activesupport/test/option_merger_test.rb b/activesupport/test/option_merger_test.rb
index 5b2e16a212..2bdd3034e5 100644
--- a/activesupport/test/option_merger_test.rb
+++ b/activesupport/test/option_merger_test.rb
@@ -66,11 +66,11 @@ class OptionMergerTest < Test::Unit::TestCase
end
end
- def test_nested_method_with_options_using_lamdba
- local_lamdba = lambda { { :lambda => true } }
+ def test_nested_method_with_options_using_lambda
+ local_lambda = lambda { { :lambda => true } }
with_options(@options) do |o|
- assert_equal @options.merge(local_lamdba.call),
- o.method_with_options(local_lamdba).call
+ assert_equal @options.merge(local_lambda.call),
+ o.method_with_options(local_lambda).call
end
end
diff --git a/railties/guides/source/layout.html.erb b/railties/guides/source/layout.html.erb
index 911655e0f4..5dcac8e74c 100644
--- a/railties/guides/source/layout.html.erb
+++ b/railties/guides/source/layout.html.erb
@@ -27,7 +27,7 @@
<a href="http://rubyonrails.org/">Overview</a> |
<a href="http://rubyonrails.org/download">Download</a> |
<a href="http://rubyonrails.org/deploy">Deploy</a> |
- <a href="http://rails.lighthouseapp.com/projects/8994-ruby-on-rails/overview">Code</a> |
+ <a href="https://github.com/rails/rails">Code</a> |
<a href="http://rubyonrails.org/screencasts">Screencasts</a> |
<a href="http://rubyonrails.org/documentation">Documentation</a> |
<a href="http://rubyonrails.org/ecosystem">Ecosystem</a> |
diff --git a/railties/guides/source/migrations.textile b/railties/guides/source/migrations.textile
index 27f8a9303e..d60b68ec7f 100644
--- a/railties/guides/source/migrations.textile
+++ b/railties/guides/source/migrations.textile
@@ -386,7 +386,7 @@ class ExampleMigration < ActiveRecord::Migration
end
</ruby>
-Sometimes your migration will do something which is just plain irreversible, for example it might destroy some data. In cases like those when you can't reverse the migration you can raise +IrreversibleMigration+ from your +down+ method. If someone tries to revert your migration an error message will be displayed saying that it can't be done.
+Sometimes your migration will do something which is just plain irreversible, for example it might destroy some data. In cases like those when you can't reverse the migration you can raise +ActiveRecord::IrreversibleMigration+ from your +down+ method. If someone tries to revert your migration an error message will be displayed saying that it can't be done.
h3. Running Migrations
diff --git a/railties/lib/rails/engine.rb b/railties/lib/rails/engine.rb
index 6a125685d0..e26f73ed8d 100644
--- a/railties/lib/rails/engine.rb
+++ b/railties/lib/rails/engine.rb
@@ -522,9 +522,9 @@ module Rails
end
initializer :append_assets_path do |app|
- app.config.assets.paths.unshift *paths["vendor/assets"].existent
- app.config.assets.paths.unshift *paths["lib/assets"].existent
- app.config.assets.paths.unshift *paths["app/assets"].existent
+ app.config.assets.paths.unshift(*paths["vendor/assets"].existent)
+ app.config.assets.paths.unshift(*paths["lib/assets"].existent)
+ app.config.assets.paths.unshift(*paths["app/assets"].existent)
end
initializer :prepend_helpers_path do |app|
diff --git a/railties/lib/rails/generators/actions.rb b/railties/lib/rails/generators/actions.rb
index c323df3e95..d31a3262e3 100644
--- a/railties/lib/rails/generators/actions.rb
+++ b/railties/lib/rails/generators/actions.rb
@@ -278,7 +278,7 @@ module Rails
say args.first.to_s unless options.quiet?
else
args << (self.behavior == :invoke ? :green : :red)
- say_status *args
+ say_status(*args)
end
end
diff --git a/railties/lib/rails/generators/app_base.rb b/railties/lib/rails/generators/app_base.rb
index a5743762e5..8512b1ca4a 100644
--- a/railties/lib/rails/generators/app_base.rb
+++ b/railties/lib/rails/generators/app_base.rb
@@ -165,7 +165,7 @@ module Rails
end
def gem_for_ruby_debugger
- if RUBY_VERSION < "1.9.2"
+ if RUBY_VERSION < "1.9"
"gem 'ruby-debug'"
else
"gem 'ruby-debug19', :require => 'ruby-debug'"
@@ -173,7 +173,7 @@ module Rails
end
def gem_for_turn
- unless RUBY_VERSION < "1.9.2"
+ unless RUBY_VERSION < "1.9.2" || options[:skip_test_unit]
<<-GEMFILE.strip_heredoc
group :test do
# Pretty printed test output
diff --git a/railties/lib/rails/generators/erb/scaffold/templates/_form.html.erb b/railties/lib/rails/generators/erb/scaffold/templates/_form.html.erb
index d12b2ff0e5..32546936e3 100644
--- a/railties/lib/rails/generators/erb/scaffold/templates/_form.html.erb
+++ b/railties/lib/rails/generators/erb/scaffold/templates/_form.html.erb
@@ -11,7 +11,7 @@
</div>
<%% end %>
-<% for attribute in attributes -%>
+<% attributes.each do |attribute| -%>
<div class="field">
<%%= f.label :<%= attribute.name %> %><br />
<%%= f.<%= attribute.field_type %> :<%= attribute.name %> %>
diff --git a/railties/lib/rails/generators/erb/scaffold/templates/index.html.erb b/railties/lib/rails/generators/erb/scaffold/templates/index.html.erb
index a7393cfe18..7b1a2a1841 100644
--- a/railties/lib/rails/generators/erb/scaffold/templates/index.html.erb
+++ b/railties/lib/rails/generators/erb/scaffold/templates/index.html.erb
@@ -2,7 +2,7 @@
<table>
<tr>
-<% for attribute in attributes -%>
+<% attributes.each do |attribute| -%>
<th><%= attribute.human_name %></th>
<% end -%>
<th></th>
@@ -12,7 +12,7 @@
<%% @<%= plural_table_name %>.each do |<%= singular_table_name %>| %>
<tr>
-<% for attribute in attributes -%>
+<% attributes.each do |attribute| -%>
<td><%%= <%= singular_table_name %>.<%= attribute.name %> %></td>
<% end -%>
<td><%%= link_to 'Show', <%= singular_table_name %> %></td>
diff --git a/railties/lib/rails/generators/erb/scaffold/templates/show.html.erb b/railties/lib/rails/generators/erb/scaffold/templates/show.html.erb
index c0e5ccff1e..67f263efbb 100644
--- a/railties/lib/rails/generators/erb/scaffold/templates/show.html.erb
+++ b/railties/lib/rails/generators/erb/scaffold/templates/show.html.erb
@@ -1,6 +1,6 @@
<p id="notice"><%%= notice %></p>
-<% for attribute in attributes -%>
+<% attributes.each do |attribute| -%>
<p>
<b><%= attribute.human_name %>:</b>
<%%= @<%= singular_table_name %>.<%= attribute.name %> %>
diff --git a/railties/lib/rails/generators/named_base.rb b/railties/lib/rails/generators/named_base.rb
index cf317eb21f..7e7f8d2d08 100644
--- a/railties/lib/rails/generators/named_base.rb
+++ b/railties/lib/rails/generators/named_base.rb
@@ -13,6 +13,7 @@ module Rails
:desc => "Force using old style hash (:foo => 'bar') on Ruby >= 1.9"
def initialize(args, *options) #:nodoc:
+ @inside_template = nil
# Unfreeze name in case it's given as a frozen string
args[0] = args[0].dup if args[0].is_a?(String) && args[0].frozen?
super
diff --git a/railties/lib/rails/generators/rails/app/templates/config/databases/mysql.yml b/railties/lib/rails/generators/rails/app/templates/config/databases/mysql.yml
index 62dc7b2c48..cce166c7c3 100644
--- a/railties/lib/rails/generators/rails/app/templates/config/databases/mysql.yml
+++ b/railties/lib/rails/generators/rails/app/templates/config/databases/mysql.yml
@@ -1,4 +1,7 @@
# MySQL. Versions 4.1 and 5.0 are recommended.
+#
+# Install the MYSQL driver
+# gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
# gem 'mysql2'
diff --git a/railties/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml b/railties/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml
index 5989eaf9dd..51a4dd459d 100644
--- a/railties/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml
+++ b/railties/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml
@@ -1,4 +1,6 @@
# SQLite version 3.x
+# gem install sqlite3
+#
# Ensure the SQLite 3 gem is defined in your Gemfile
# gem 'sqlite3'
development:
diff --git a/railties/lib/rails/generators/rails/controller/templates/controller.rb b/railties/lib/rails/generators/rails/controller/templates/controller.rb
index c61ea4b510..8f5f78556f 100644
--- a/railties/lib/rails/generators/rails/controller/templates/controller.rb
+++ b/railties/lib/rails/generators/rails/controller/templates/controller.rb
@@ -1,6 +1,6 @@
<% module_namespacing do -%>
class <%= class_name %>Controller < ApplicationController
-<% for action in actions -%>
+<% actions.each do |action| -%>
def <%= action %>
end
diff --git a/railties/lib/rails/generators/test_unit/controller/templates/functional_test.rb b/railties/lib/rails/generators/test_unit/controller/templates/functional_test.rb
index 0bc5fd8ca2..509bd60564 100644
--- a/railties/lib/rails/generators/test_unit/controller/templates/functional_test.rb
+++ b/railties/lib/rails/generators/test_unit/controller/templates/functional_test.rb
@@ -7,7 +7,7 @@ class <%= class_name %>ControllerTest < ActionController::TestCase
# assert true
# end
<% else -%>
-<% for action in actions -%>
+<% actions.each do |action| -%>
test "should get <%= action %>" do
get :<%= action %>
assert_response :success
diff --git a/railties/lib/rails/generators/test_unit/mailer/templates/functional_test.rb b/railties/lib/rails/generators/test_unit/mailer/templates/functional_test.rb
index c05102290c..7e204105a3 100644
--- a/railties/lib/rails/generators/test_unit/mailer/templates/functional_test.rb
+++ b/railties/lib/rails/generators/test_unit/mailer/templates/functional_test.rb
@@ -2,7 +2,7 @@ require 'test_helper'
<% module_namespacing do -%>
class <%= class_name %>Test < ActionMailer::TestCase
-<% for action in actions -%>
+<% actions.each do |action| -%>
test "<%= action %>" do
mail = <%= class_name %>.<%= action %>
assert_equal <%= action.to_s.humanize.inspect %>, mail.subject
diff --git a/railties/lib/rails/generators/test_unit/model/templates/fixtures.yml b/railties/lib/rails/generators/test_unit/model/templates/fixtures.yml
index 6465a6a6e2..d4138ca2f5 100644
--- a/railties/lib/rails/generators/test_unit/model/templates/fixtures.yml
+++ b/railties/lib/rails/generators/test_unit/model/templates/fixtures.yml
@@ -2,12 +2,12 @@
<% unless attributes.empty? -%>
one:
-<% for attribute in attributes -%>
+<% attributes.each do |attribute| -%>
<%= attribute.name %>: <%= attribute.default %>
<% end -%>
two:
-<% for attribute in attributes -%>
+<% attributes.each do |attribute| -%>
<%= attribute.name %>: <%= attribute.default %>
<% end -%>
<% else -%>
@@ -20,4 +20,4 @@ one: {}
#
two: {}
# column: value
-<% end -%> \ No newline at end of file
+<% end -%>
diff --git a/railties/test/generators/actions_test.rb b/railties/test/generators/actions_test.rb
index 68d4c17623..597746c4aa 100644
--- a/railties/test/generators/actions_test.rb
+++ b/railties/test/generators/actions_test.rb
@@ -118,8 +118,8 @@ class ActionsTest < Rails::Generators::TestCase
end
assert_file 'config/application.rb' do |content|
- assert_match /# This will be added/, content
- assert_no_match /# This wont be added/, content
+ assert_match(/# This will be added/, content)
+ assert_no_match(/# This wont be added/, content)
end
end
diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb
index 9e1d47cd2f..42fe7a7fea 100644
--- a/railties/test/generators/app_generator_test.rb
+++ b/railties/test/generators/app_generator_test.rb
@@ -155,7 +155,7 @@ class AppGeneratorTest < Rails::Generators::TestCase
run_generator [destination_root, "--skip-active-record"]
assert_no_file "config/database.yml"
assert_file "test/test_helper.rb" do |helper_content|
- assert_no_match /fixtures :all/, helper_content
+ assert_no_match(/fixtures :all/, helper_content)
end
assert_file "test/performance/browsing_test.rb"
end
@@ -178,7 +178,7 @@ class AppGeneratorTest < Rails::Generators::TestCase
assert_match %r{^//= require jquery_ujs}, contents
end
assert_file 'Gemfile' do |contents|
- assert_match /^gem 'jquery-rails'/, contents
+ assert_match(/^gem 'jquery-rails'/, contents)
end
end
@@ -190,7 +190,7 @@ class AppGeneratorTest < Rails::Generators::TestCase
assert_match %r{^//= require prototype_ujs}, contents
end
assert_file 'Gemfile' do |contents|
- assert_match /^gem 'prototype-rails'/, contents
+ assert_match(/^gem 'prototype-rails'/, contents)
end
end
@@ -202,9 +202,38 @@ class AppGeneratorTest < Rails::Generators::TestCase
end
end
+ def test_inclusion_of_turn_gem_in_gemfile
+ run_generator
+ assert_file "Gemfile" do |contents|
+ assert_match(/gem 'turn'/, contents) unless RUBY_VERSION < '1.9.2'
+ assert_no_match(/gem 'turn'/, contents) if RUBY_VERSION < '1.9.2'
+ end
+ end
+
+ def test_turn_gem_is_not_included_in_gemfile_if_skipping_test_unit
+ run_generator [destination_root, "--skip-test-unit"]
+ assert_file "Gemfile" do |contents|
+ assert_no_match(/gem 'turn'/, contents) unless RUBY_VERSION < '1.9.2'
+ end
+ end
+
+ def test_inclusion_of_ruby_debug
+ run_generator
+ assert_file "Gemfile" do |contents|
+ assert_match(/gem 'ruby-debug'/, contents) if RUBY_VERSION < '1.9'
+ end
+ end
+
+ def test_inclusion_of_ruby_debug19_if_ruby19
+ run_generator
+ assert_file "Gemfile" do |contents|
+ assert_match(/gem 'ruby-debug19', :require => 'ruby-debug'/, contents) unless RUBY_VERSION < '1.9'
+ end
+ end
+
def test_template_from_dir_pwd
FileUtils.cd(Rails.root)
- assert_match /It works from file!/, run_generator([destination_root, "-m", "lib/template.rb"])
+ assert_match(/It works from file!/, run_generator([destination_root, "-m", "lib/template.rb"]))
end
def test_usage_read_from_file
@@ -214,7 +243,7 @@ class AppGeneratorTest < Rails::Generators::TestCase
def test_default_usage
File.expects(:exist?).returns(false)
- assert_match /Create rails files for app generator/, Rails::Generators::AppGenerator.desc
+ assert_match(/Create rails files for app generator/, Rails::Generators::AppGenerator.desc)
end
def test_default_namespace
@@ -241,9 +270,9 @@ class AppGeneratorTest < Rails::Generators::TestCase
run_generator [destination_root]
assert_file "config/initializers/session_store.rb" do |file|
if RUBY_VERSION < "1.9"
- assert_match /config.session_store :cookie_store, :key => '_.+_session'/, file
+ assert_match(/config.session_store :cookie_store, :key => '_.+_session'/, file)
else
- assert_match /config.session_store :cookie_store, key: '_.+_session'/, file
+ assert_match(/config.session_store :cookie_store, key: '_.+_session'/, file)
end
end
end
@@ -251,7 +280,7 @@ class AppGeneratorTest < Rails::Generators::TestCase
def test_force_old_style_hash
run_generator [destination_root, "--old-style-hash"]
assert_file "config/initializers/session_store.rb" do |file|
- assert_match /config.session_store :cookie_store, :key => '_.+_session'/, file
+ assert_match(/config.session_store :cookie_store, :key => '_.+_session'/, file)
end
end
diff --git a/railties/test/generators/controller_generator_test.rb b/railties/test/generators/controller_generator_test.rb
index 2dfc91c683..46533b70be 100644
--- a/railties/test/generators/controller_generator_test.rb
+++ b/railties/test/generators/controller_generator_test.rb
@@ -9,7 +9,7 @@ class ControllerGeneratorTest < Rails::Generators::TestCase
def test_help_does_not_show_invoked_generators_options_if_they_already_exist
content = run_generator ["--help"]
- assert_no_match /Helper options\:/, content
+ assert_no_match(/Helper options\:/, content)
end
def test_controller_skeleton_is_created
@@ -20,7 +20,7 @@ class ControllerGeneratorTest < Rails::Generators::TestCase
def test_check_class_collision
Object.send :const_set, :ObjectController, Class.new
content = capture(:stderr){ run_generator ["object"] }
- assert_match /The name 'ObjectController' is either already used in your application or reserved/, content
+ assert_match(/The name 'ObjectController' is either already used in your application or reserved/, content)
ensure
Object.send :remove_const, :ObjectController
end
diff --git a/railties/test/generators/helper_generator_test.rb b/railties/test/generators/helper_generator_test.rb
index f0bfebd57f..8da3aa61a4 100644
--- a/railties/test/generators/helper_generator_test.rb
+++ b/railties/test/generators/helper_generator_test.rb
@@ -20,17 +20,17 @@ class HelperGeneratorTest < Rails::Generators::TestCase
def test_logs_if_the_test_framework_cannot_be_found
content = run_generator ["admin", "--test-framework=rspec"]
- assert_match /rspec \[not found\]/, content
+ assert_match(/rspec \[not found\]/, content)
end
def test_check_class_collision
content = capture(:stderr){ run_generator ["object"] }
- assert_match /The name 'ObjectHelper' is either already used in your application or reserved/, content
+ assert_match(/The name 'ObjectHelper' is either already used in your application or reserved/, content)
end
def test_check_class_collision_on_tests
content = capture(:stderr){ run_generator ["another_object"] }
- assert_match /The name 'AnotherObjectHelperTest' is either already used in your application or reserved/, content
+ assert_match(/The name 'AnotherObjectHelperTest' is either already used in your application or reserved/, content)
end
def test_namespaced_and_not_namespaced_helpers
diff --git a/railties/test/generators/mailer_generator_test.rb b/railties/test/generators/mailer_generator_test.rb
index bf1cfe5305..139d6b1421 100644
--- a/railties/test/generators/mailer_generator_test.rb
+++ b/railties/test/generators/mailer_generator_test.rb
@@ -9,11 +9,11 @@ class MailerGeneratorTest < Rails::Generators::TestCase
def test_mailer_skeleton_is_created
run_generator
assert_file "app/mailers/notifier.rb" do |mailer|
- assert_match /class Notifier < ActionMailer::Base/, mailer
+ assert_match(/class Notifier < ActionMailer::Base/, mailer)
if RUBY_VERSION < "1.9"
- assert_match /default :from => "from@example.com"/, mailer
+ assert_match(/default :from => "from@example.com"/, mailer)
else
- assert_match /default from: "from@example.com"/, mailer
+ assert_match(/default from: "from@example.com"/, mailer)
end
end
end
@@ -21,35 +21,35 @@ class MailerGeneratorTest < Rails::Generators::TestCase
def test_mailer_with_i18n_helper
run_generator
assert_file "app/mailers/notifier.rb" do |mailer|
- assert_match /en\.notifier\.foo\.subject/, mailer
- assert_match /en\.notifier\.bar\.subject/, mailer
+ assert_match(/en\.notifier\.foo\.subject/, mailer)
+ assert_match(/en\.notifier\.bar\.subject/, mailer)
end
end
def test_check_class_collision
content = capture(:stderr){ run_generator ["object"] }
- assert_match /The name 'Object' is either already used in your application or reserved/, content
+ assert_match(/The name 'Object' is either already used in your application or reserved/, content)
end
def test_invokes_default_test_framework
run_generator
assert_file "test/functional/notifier_test.rb" do |test|
- assert_match /class NotifierTest < ActionMailer::TestCase/, test
- assert_match /test "foo"/, test
- assert_match /test "bar"/, test
+ assert_match(/class NotifierTest < ActionMailer::TestCase/, test)
+ assert_match(/test "foo"/, test)
+ assert_match(/test "bar"/, test)
end
end
def test_invokes_default_template_engine
run_generator
assert_file "app/views/notifier/foo.text.erb" do |view|
- assert_match %r(app/views/notifier/foo\.text\.erb), view
- assert_match /<%= @greeting %>/, view
+ assert_match(%r(app/views/notifier/foo\.text\.erb), view)
+ assert_match(/<%= @greeting %>/, view)
end
assert_file "app/views/notifier/bar.text.erb" do |view|
- assert_match %r(app/views/notifier/bar\.text\.erb), view
- assert_match /<%= @greeting %>/, view
+ assert_match(%r(app/views/notifier/bar\.text\.erb), view)
+ assert_match(/<%= @greeting %>/, view)
end
end
@@ -60,14 +60,14 @@ class MailerGeneratorTest < Rails::Generators::TestCase
def test_logs_if_the_template_engine_cannot_be_found
content = run_generator ["notifier", "foo", "bar", "--template-engine=haml"]
- assert_match /haml \[not found\]/, content
+ assert_match(/haml \[not found\]/, content)
end
def test_mailer_with_namedspaced_mailer
run_generator ["Farm::Animal", "moos"]
assert_file "app/mailers/farm/animal.rb" do |mailer|
- assert_match /class Farm::Animal < ActionMailer::Base/, mailer
- assert_match /en\.farm\.animal\.moos\.subject/, mailer
+ assert_match(/class Farm::Animal < ActionMailer::Base/, mailer)
+ assert_match(/en\.farm\.animal\.moos\.subject/, mailer)
end
assert_file "app/views/farm/animal/moos.text.erb"
end
@@ -78,20 +78,20 @@ class MailerGeneratorTest < Rails::Generators::TestCase
assert_file "app/mailers/notifier.rb" do |mailer|
assert_instance_method :foo, mailer do |foo|
if RUBY_VERSION < "1.9"
- assert_match /mail :to => "to@example.org"/, foo
+ assert_match(/mail :to => "to@example.org"/, foo)
else
- assert_match /mail to: "to@example.org"/, foo
+ assert_match(/mail to: "to@example.org"/, foo)
end
- assert_match /@greeting = "Hi"/, foo
+ assert_match(/@greeting = "Hi"/, foo)
end
assert_instance_method :bar, mailer do |bar|
if RUBY_VERSION < "1.9"
- assert_match /mail :to => "to@example.org"/, bar
+ assert_match(/mail :to => "to@example.org"/, bar)
else
- assert_match /mail to: "to@example.org"/, bar
+ assert_match(/mail to: "to@example.org"/, bar)
end
- assert_match /@greeting = "Hi"/, bar
+ assert_match(/@greeting = "Hi"/, bar)
end
end
end
@@ -99,10 +99,10 @@ class MailerGeneratorTest < Rails::Generators::TestCase
def test_force_old_style_hash
run_generator ["notifier", "foo", "--old-style-hash"]
assert_file "app/mailers/notifier.rb" do |mailer|
- assert_match /default :from => "from@example.com"/, mailer
+ assert_match(/default :from => "from@example.com"/, mailer)
assert_instance_method :foo, mailer do |foo|
- assert_match /mail :to => "to@example.org"/, foo
+ assert_match(/mail :to => "to@example.org"/, foo)
end
end
end
diff --git a/railties/test/generators/migration_generator_test.rb b/railties/test/generators/migration_generator_test.rb
index 6eecfc8e2e..337257df7d 100644
--- a/railties/test/generators/migration_generator_test.rb
+++ b/railties/test/generators/migration_generator_test.rb
@@ -35,8 +35,8 @@ class MigrationGeneratorTest < Rails::Generators::TestCase
assert_migration "db/migrate/#{migration}.rb" do |content|
assert_method :change, content do |up|
- assert_match /add_column :posts, :title, :string/, up
- assert_match /add_column :posts, :body, :text/, up
+ assert_match(/add_column :posts, :title, :string/, up)
+ assert_match(/add_column :posts, :body, :text/, up)
end
end
end
@@ -47,13 +47,13 @@ class MigrationGeneratorTest < Rails::Generators::TestCase
assert_migration "db/migrate/#{migration}.rb" do |content|
assert_method :up, content do |up|
- assert_match /remove_column :posts, :title/, up
- assert_match /remove_column :posts, :body/, up
+ assert_match(/remove_column :posts, :title/, up)
+ assert_match(/remove_column :posts, :body/, up)
end
assert_method :down, content do |down|
- assert_match /add_column :posts, :title, :string/, down
- assert_match /add_column :posts, :body, :text/, down
+ assert_match(/add_column :posts, :title, :string/, down)
+ assert_match(/add_column :posts, :body, :text/, down)
end
end
end
@@ -64,11 +64,11 @@ class MigrationGeneratorTest < Rails::Generators::TestCase
assert_migration "db/migrate/#{migration}.rb" do |content|
assert_method :up, content do |up|
- assert_match /^\s*$/, up
+ assert_match(/^\s*$/, up)
end
assert_method :down, content do |down|
- assert_match /^\s*$/, down
+ assert_match(/^\s*$/, down)
end
end
end
diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb
index 3d773b4134..8c5ba9926b 100644
--- a/railties/test/generators/model_generator_test.rb
+++ b/railties/test/generators/model_generator_test.rb
@@ -7,14 +7,14 @@ class ModelGeneratorTest < Rails::Generators::TestCase
def test_help_shows_invoked_generators_options
content = run_generator ["--help"]
- assert_match /ActiveRecord options:/, content
- assert_match /TestUnit options:/, content
+ assert_match(/ActiveRecord options:/, content)
+ assert_match(/TestUnit options:/, content)
end
def test_model_with_missing_attribute_type
content = capture(:stderr) { run_generator ["post", "title:string", "body"] }
- assert_match /Missing type for attribute 'body'/, content
- assert_match /Example: 'body:string' where string is the type/, content
+ assert_match(/Missing type for attribute 'body'/, content)
+ assert_match(/Example: 'body:string' where string is the type/, content)
end
def test_invokes_default_orm
@@ -100,9 +100,9 @@ class ModelGeneratorTest < Rails::Generators::TestCase
assert_migration "db/migrate/create_products.rb" do |m|
assert_method :change, m do |up|
- assert_match /create_table :products/, up
- assert_match /t\.string :name/, up
- assert_match /t\.integer :supplier_id/, up
+ assert_match(/create_table :products/, up)
+ assert_match(/t\.string :name/, up)
+ assert_match(/t\.integer :supplier_id/, up)
end
end
end
@@ -138,7 +138,7 @@ class ModelGeneratorTest < Rails::Generators::TestCase
assert_migration "db/migrate/create_accounts.rb" do |m|
assert_method :change, m do |up|
- assert_no_match /t.timestamps/, up
+ assert_no_match(/t.timestamps/, up)
end
end
end
@@ -164,7 +164,7 @@ class ModelGeneratorTest < Rails::Generators::TestCase
def test_migration_error_is_not_shown_on_revoke
run_generator
error = capture(:stderr){ run_generator ["Account"], :behavior => :revoke }
- assert_no_match /Another migration is already named create_accounts/, error
+ assert_no_match(/Another migration is already named create_accounts/, error)
end
def test_migration_is_removed_on_revoke
@@ -177,7 +177,7 @@ class ModelGeneratorTest < Rails::Generators::TestCase
run_generator
old_migration = Dir["#{destination_root}/db/migrate/*_create_accounts.rb"].first
error = capture(:stderr) { run_generator ["Account", "--force"] }
- assert_no_match /Another migration is already named create_accounts/, error
+ assert_no_match(/Another migration is already named create_accounts/, error)
assert_no_file old_migration
assert_migration 'db/migrate/create_accounts.rb'
end
@@ -195,13 +195,13 @@ class ModelGeneratorTest < Rails::Generators::TestCase
def test_fixture_is_skipped_if_fixture_replacement_is_given
content = run_generator ["account", "-r", "factory_girl"]
- assert_match /factory_girl \[not found\]/, content
+ assert_match(/factory_girl \[not found\]/, content)
assert_no_file "test/fixtures/accounts.yml"
end
def test_check_class_collision
content = capture(:stderr){ run_generator ["object"] }
- assert_match /The name 'Object' is either already used in your application or reserved/, content
+ assert_match(/The name 'Object' is either already used in your application or reserved/, content)
end
def test_index_is_added_for_belongs_to_association
@@ -209,7 +209,7 @@ class ModelGeneratorTest < Rails::Generators::TestCase
assert_migration "db/migrate/create_accounts.rb" do |m|
assert_method :change, m do |up|
- assert_match /add_index/, up
+ assert_match(/add_index/, up)
end
end
end
@@ -219,7 +219,7 @@ class ModelGeneratorTest < Rails::Generators::TestCase
assert_migration "db/migrate/create_accounts.rb" do |m|
assert_method :change, m do |up|
- assert_match /add_index/, up
+ assert_match(/add_index/, up)
end
end
end
@@ -229,7 +229,7 @@ class ModelGeneratorTest < Rails::Generators::TestCase
assert_migration "db/migrate/create_accounts.rb" do |m|
assert_method :change, m do |up|
- assert_no_match /add_index/, up
+ assert_no_match(/add_index/, up)
end
end
end
@@ -239,9 +239,8 @@ class ModelGeneratorTest < Rails::Generators::TestCase
assert_migration "db/migrate/create_accounts.rb" do |m|
assert_method :change, m do |up|
- assert_no_match /add_index/, up
+ assert_no_match(/add_index/, up)
end
end
end
-
end
diff --git a/railties/test/generators/namespaced_generators_test.rb b/railties/test/generators/namespaced_generators_test.rb
index 38f024f061..6f8a9b4280 100644
--- a/railties/test/generators/namespaced_generators_test.rb
+++ b/railties/test/generators/namespaced_generators_test.rb
@@ -161,12 +161,12 @@ class NamespacedMailerGeneratorTest < NamespacedGeneratorTestCase
def test_mailer_skeleton_is_created
run_generator
assert_file "app/mailers/test_app/notifier.rb" do |mailer|
- assert_match /module TestApp/, mailer
- assert_match /class Notifier < ActionMailer::Base/, mailer
+ assert_match(/module TestApp/, mailer)
+ assert_match(/class Notifier < ActionMailer::Base/, mailer)
if RUBY_VERSION < "1.9"
- assert_match /default :from => "from@example.com"/, mailer
+ assert_match(/default :from => "from@example.com"/, mailer)
else
- assert_match /default from: "from@example.com"/, mailer
+ assert_match(/default from: "from@example.com"/, mailer)
end
end
end
@@ -174,31 +174,31 @@ class NamespacedMailerGeneratorTest < NamespacedGeneratorTestCase
def test_mailer_with_i18n_helper
run_generator
assert_file "app/mailers/test_app/notifier.rb" do |mailer|
- assert_match /en\.notifier\.foo\.subject/, mailer
- assert_match /en\.notifier\.bar\.subject/, mailer
+ assert_match(/en\.notifier\.foo\.subject/, mailer)
+ assert_match(/en\.notifier\.bar\.subject/, mailer)
end
end
def test_invokes_default_test_framework
run_generator
assert_file "test/functional/test_app/notifier_test.rb" do |test|
- assert_match /module TestApp/, test
- assert_match /class NotifierTest < ActionMailer::TestCase/, test
- assert_match /test "foo"/, test
- assert_match /test "bar"/, test
+ assert_match(/module TestApp/, test)
+ assert_match(/class NotifierTest < ActionMailer::TestCase/, test)
+ assert_match(/test "foo"/, test)
+ assert_match(/test "bar"/, test)
end
end
def test_invokes_default_template_engine
run_generator
assert_file "app/views/test_app/notifier/foo.text.erb" do |view|
- assert_match %r(app/views/test_app/notifier/foo\.text\.erb), view
- assert_match /<%= @greeting %>/, view
+ assert_match(%r(app/views/test_app/notifier/foo\.text\.erb), view)
+ assert_match(/<%= @greeting %>/, view)
end
assert_file "app/views/test_app/notifier/bar.text.erb" do |view|
- assert_match %r(app/views/test_app/notifier/bar\.text\.erb), view
- assert_match /<%= @greeting %>/, view
+ assert_match(%r(app/views/test_app/notifier/bar\.text\.erb), view)
+ assert_match(/<%= @greeting %>/, view)
end
end
diff --git a/railties/test/generators/observer_generator_test.rb b/railties/test/generators/observer_generator_test.rb
index 45fe8dfbd3..afcee0a2dc 100644
--- a/railties/test/generators/observer_generator_test.rb
+++ b/railties/test/generators/observer_generator_test.rb
@@ -22,6 +22,6 @@ class ObserverGeneratorTest < Rails::Generators::TestCase
def test_logs_if_the_test_framework_cannot_be_found
content = run_generator ["account", "--test-framework=rspec"]
- assert_match /rspec \[not found\]/, content
+ assert_match(/rspec \[not found\]/, content)
end
end
diff --git a/railties/test/generators/plugin_generator_test.rb b/railties/test/generators/plugin_generator_test.rb
index e6686a6af4..5c0774ddbd 100644
--- a/railties/test/generators/plugin_generator_test.rb
+++ b/railties/test/generators/plugin_generator_test.rb
@@ -32,7 +32,7 @@ class PluginGeneratorTest < Rails::Generators::TestCase
def test_check_class_collision
content = capture(:stderr){ run_generator ["object"] }
- assert_match /The name 'Object' is either already used in your application or reserved/, content
+ assert_match(/The name 'Object' is either already used in your application or reserved/, content)
end
def test_invokes_default_test_framework
@@ -44,7 +44,7 @@ class PluginGeneratorTest < Rails::Generators::TestCase
def test_logs_if_the_test_framework_cannot_be_found
content = nil
silence(:stderr) { content = run_generator ["plugin_fu", "--test-framework=rspec"] }
- assert_match /rspec \[not found\]/, content
+ assert_match(/rspec \[not found\]/, content)
end
def test_creates_tasks_if_required
@@ -66,6 +66,6 @@ class PluginGeneratorTest < Rails::Generators::TestCase
def test_deprecation
output = capture(:stderr) { run_generator }
- assert_match /Plugin generator is deprecated, please use 'rails plugin new' command to generate plugin structure./, output
+ assert_match(/Plugin generator is deprecated, please use 'rails plugin new' command to generate plugin structure./, output)
end
end
diff --git a/railties/test/generators/resource_generator_test.rb b/railties/test/generators/resource_generator_test.rb
index 71b3619351..73804dae45 100644
--- a/railties/test/generators/resource_generator_test.rb
+++ b/railties/test/generators/resource_generator_test.rb
@@ -9,8 +9,8 @@ class ResourceGeneratorTest < Rails::Generators::TestCase
def test_help_with_inherited_options
content = run_generator ["--help"]
- assert_match /ActiveRecord options:/, content
- assert_match /TestUnit options:/, content
+ assert_match(/ActiveRecord options:/, content)
+ assert_match(/TestUnit options:/, content)
end
def test_files_from_inherited_invocation
@@ -55,7 +55,7 @@ class ResourceGeneratorTest < Rails::Generators::TestCase
run_generator
assert_file "config/routes.rb" do |route|
- assert_match /resources :accounts$/, route
+ assert_match(/resources :accounts$/, route)
end
end
@@ -63,19 +63,19 @@ class ResourceGeneratorTest < Rails::Generators::TestCase
content = run_generator ["accounts".freeze]
assert_file "app/models/account.rb", /class Account < ActiveRecord::Base/
assert_file "test/unit/account_test.rb", /class AccountTest/
- assert_match /Plural version of the model detected, using singularized version. Override with --force-plural./, content
+ assert_match(/Plural version of the model detected, using singularized version. Override with --force-plural./, content)
end
def test_plural_names_can_be_forced
content = run_generator ["accounts", "--force-plural"]
assert_file "app/models/accounts.rb", /class Accounts < ActiveRecord::Base/
assert_file "test/unit/accounts_test.rb", /class AccountsTest/
- assert_no_match /Plural version of the model detected/, content
+ assert_no_match(/Plural version of the model detected/, content)
end
def test_mass_nouns_do_not_throw_warnings
content = run_generator ["sheep".freeze]
- assert_no_match /Plural version of the model detected/, content
+ assert_no_match(/Plural version of the model detected/, content)
end
def test_route_is_removed_on_revoke
@@ -83,7 +83,7 @@ class ResourceGeneratorTest < Rails::Generators::TestCase
run_generator ["account"], :behavior => :revoke
assert_file "config/routes.rb" do |route|
- assert_no_match /resources :accounts$/, route
+ assert_no_match(/resources :accounts$/, route)
end
end
end
diff --git a/railties/test/generators/scaffold_controller_generator_test.rb b/railties/test/generators/scaffold_controller_generator_test.rb
index c7f45a807d..65b30b9fbd 100644
--- a/railties/test/generators/scaffold_controller_generator_test.rb
+++ b/railties/test/generators/scaffold_controller_generator_test.rb
@@ -14,39 +14,39 @@ class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase
run_generator
assert_file "app/controllers/users_controller.rb" do |content|
- assert_match /class UsersController < ApplicationController/, content
+ assert_match(/class UsersController < ApplicationController/, content)
assert_instance_method :index, content do |m|
- assert_match /@users = User\.all/, m
+ assert_match(/@users = User\.all/, m)
end
assert_instance_method :show, content do |m|
- assert_match /@user = User\.find\(params\[:id\]\)/, m
+ assert_match(/@user = User\.find\(params\[:id\]\)/, m)
end
assert_instance_method :new, content do |m|
- assert_match /@user = User\.new/, m
+ assert_match(/@user = User\.new/, m)
end
assert_instance_method :edit, content do |m|
- assert_match /@user = User\.find\(params\[:id\]\)/, m
+ assert_match(/@user = User\.find\(params\[:id\]\)/, m)
end
assert_instance_method :create, content do |m|
- assert_match /@user = User\.new\(params\[:user\]\)/, m
- assert_match /@user\.save/, m
- assert_match /@user\.errors/, m
+ assert_match(/@user = User\.new\(params\[:user\]\)/, m)
+ assert_match(/@user\.save/, m)
+ assert_match(/@user\.errors/, m)
end
assert_instance_method :update, content do |m|
- assert_match /@user = User\.find\(params\[:id\]\)/, m
- assert_match /@user\.update_attributes\(params\[:user\]\)/, m
- assert_match /@user\.errors/, m
+ assert_match(/@user = User\.find\(params\[:id\]\)/, m)
+ assert_match(/@user\.update_attributes\(params\[:user\]\)/, m)
+ assert_match(/@user\.errors/, m)
end
assert_instance_method :destroy, content do |m|
- assert_match /@user = User\.find\(params\[:id\]\)/, m
- assert_match /@user\.destroy/, m
+ assert_match(/@user = User\.find\(params\[:id\]\)/, m)
+ assert_match(/@user\.destroy/, m)
end
end
end
@@ -73,8 +73,8 @@ class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase
run_generator
assert_file "test/functional/users_controller_test.rb" do |content|
- assert_match /class UsersControllerTest < ActionController::TestCase/, content
- assert_match /test "should get index"/, content
+ assert_match(/class UsersControllerTest < ActionController::TestCase/, content)
+ assert_match(/test "should get index"/, content)
end
end
@@ -93,10 +93,10 @@ class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase
run_generator ["User", "--orm=unknown"]
assert_file "app/controllers/users_controller.rb" do |content|
- assert_match /class UsersController < ApplicationController/, content
+ assert_match(/class UsersController < ApplicationController/, content)
assert_instance_method :index, content do |m|
- assert_match /@users = User\.all/, m
+ assert_match(/@users = User\.all/, m)
end
end
end
@@ -112,11 +112,11 @@ class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase
run_generator ["User", "--orm=unknown"]
assert_file "app/controllers/users_controller.rb" do |content|
- assert_match /class UsersController < ApplicationController/, content
+ assert_match(/class UsersController < ApplicationController/, content)
assert_instance_method :index, content do |m|
- assert_match /@users = User\.find\(:all\)/, m
- assert_no_match /@users = User\.all/, m
+ assert_match(/@users = User\.find\(:all\)/, m)
+ assert_no_match(/@users = User\.all/, m)
end
end
ensure
@@ -127,9 +127,9 @@ class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase
run_generator
assert_file "app/controllers/users_controller.rb" do |content|
if RUBY_VERSION < "1.9"
- assert_match /\{ render :action => "new" \}/, content
+ assert_match(/\{ render :action => "new" \}/, content)
else
- assert_match /\{ render action: "new" \}/, content
+ assert_match(/\{ render action: "new" \}/, content)
end
end
end
@@ -137,7 +137,7 @@ class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase
def test_force_old_style_hash
run_generator ["User", "--old-style-hash"]
assert_file "app/controllers/users_controller.rb" do |content|
- assert_match /\{ render :action => "new" \}/, content
+ assert_match(/\{ render :action => "new" \}/, content)
end
end
end
diff --git a/railties/test/generators/session_migration_generator_test.rb b/railties/test/generators/session_migration_generator_test.rb
index 9fee948d7c..b590047ff0 100644
--- a/railties/test/generators/session_migration_generator_test.rb
+++ b/railties/test/generators/session_migration_generator_test.rb
@@ -18,8 +18,8 @@ class SessionMigrationGeneratorTest < Rails::Generators::TestCase
ActiveRecord::SessionStore::Session.table_name = "custom_table_name"
run_generator
assert_migration "db/migrate/add_sessions_table.rb" do |migration|
- assert_match /class AddSessionsTable < ActiveRecord::Migration/, migration
- assert_match /create_table :custom_table_name/, migration
+ assert_match(/class AddSessionsTable < ActiveRecord::Migration/, migration)
+ assert_match(/create_table :custom_table_name/, migration)
end
ensure
ActiveRecord::SessionStore::Session.table_name = "sessions"
diff --git a/railties/test/generators_test.rb b/railties/test/generators_test.rb
index 99c9d790eb..1264ac7764 100644
--- a/railties/test/generators_test.rb
+++ b/railties/test/generators_test.rb
@@ -28,7 +28,7 @@ class GeneratorsTest < Rails::Generators::TestCase
def test_help_when_a_generator_with_required_arguments_is_invoked_without_arguments
output = capture(:stdout){ Rails::Generators.invoke :model, [] }
- assert_match /Description:/, output
+ assert_match(/Description:/, output)
end
def test_should_give_higher_preference_to_rails_generators
@@ -90,8 +90,8 @@ class GeneratorsTest < Rails::Generators::TestCase
def test_find_by_namespace_show_warning_if_generator_cant_be_loaded
output = capture(:stderr) { Rails::Generators.find_by_namespace(:wrong) }
- assert_match /\[WARNING\] Could not load generator/, output
- assert_match /Rails 2\.x generator/, output
+ assert_match(/\[WARNING\] Could not load generator/, output)
+ assert_match(/Rails 2\.x generator/, output)
end
def test_invoke_with_nested_namespaces
@@ -104,38 +104,38 @@ class GeneratorsTest < Rails::Generators::TestCase
def test_rails_generators_help_with_builtin_information
output = capture(:stdout){ Rails::Generators.help }
- assert_match /Rails:/, output
- assert_match /^ model$/, output
- assert_match /^ scaffold_controller$/, output
- assert_no_match /^ app$/, output
+ assert_match(/Rails:/, output)
+ assert_match(/^ model$/, output)
+ assert_match(/^ scaffold_controller$/, output)
+ assert_no_match(/^ app$/, output)
end
def test_rails_generators_help_does_not_include_app_nor_plugin_new
output = capture(:stdout){ Rails::Generators.help }
- assert_no_match /app/, output
- assert_no_match /plugin_new/, output
+ assert_no_match(/app/, output)
+ assert_no_match(/plugin_new/, output)
end
def test_rails_generators_with_others_information
output = capture(:stdout){ Rails::Generators.help }
- assert_match /Fixjour:/, output
- assert_match /^ fixjour$/, output
+ assert_match(/Fixjour:/, output)
+ assert_match(/^ fixjour$/, output)
end
def test_rails_generators_does_not_show_active_record_hooks
output = capture(:stdout){ Rails::Generators.help }
- assert_match /ActiveRecord:/, output
- assert_match /^ active_record:fixjour$/, output
+ assert_match(/ActiveRecord:/, output)
+ assert_match(/^ active_record:fixjour$/, output)
end
def test_default_banner_should_show_generator_namespace
klass = Rails::Generators.find_by_namespace(:foobar)
- assert_match /^rails generate foobar:foobar/, klass.banner
+ assert_match(/^rails generate foobar:foobar/, klass.banner)
end
def test_default_banner_should_not_show_rails_generator_namespace
klass = Rails::Generators.find_by_namespace(:model)
- assert_match /^rails generate model/, klass.banner
+ assert_match(/^rails generate model/, klass.banner)
end
def test_no_color_sets_proper_shell