Commit Graph

917 Commits

Author SHA1 Message Date
Anthony
78f5874c82 Following the false issue reporting I did here : https://github.com/rails/rails/issues/6958
- Enable propagation of :skip_types, :dasherize and :camelize on included models by default
- Adding the option to override this propagation on a per-include basis (:include => { :model => { :dasherize => false } }
- Enough tests to prove it works
- Updated activemodel CHANGELOG.md

Squashed my commits
2012-08-13 19:14:24 -07:00
Carlos Antonio da Silva
ce06b8a56c Refactor model name logic and make it a real private class method
Under a "private" call, class methods are not real private methods,
they're public just like any other method.

Make model_name_from_record_or_class a private class method, and nodoc it.
2012-08-11 13:33:28 -03:00
Bert Goethals
920d9ee4d8 Naming helpers should first check if passed object responds to model_name 2012-08-08 22:40:06 +02:00
andrea longhi
d7f0e434dd add around_create callback documentation for ActiveModel::Callbacks 2012-08-08 00:16:28 +02:00
Bogdan Gusiev
2e4f7986b8 AM::Validation#validates: ability to pass custom exception to :strict option 2012-08-06 13:45:27 +03:00
Xavier Noria
447b6a4e67 removes usage of Object#in? from the code base (the method remains defined by Active Support)
Selecting which key extensions to include in active_support/rails
made apparent the systematic usage of Object#in? in the code base.
After some discussion in

    5ea6b0df9a

we decided to remove it and use plain Ruby, which seems enough
for this particular idiom.

In this commit the refactor has been made case by case. Sometimes
include? is the natural alternative, others a simple || is the
way you actually spell the condition in your head, others a case
statement seems more appropriate. I have chosen the one I liked
the most in each case.
2012-08-06 00:30:02 +02:00
Vijay Dev
3d3fa165e4 Merge branch 'master' of github.com:lifo/docrails
Conflicts:
	activemodel/lib/active_model/secure_password.rb
	activerecord/lib/active_record/associations/collection_proxy.rb
2012-08-04 15:18:35 +05:30
Vijay Dev
b51201242a copy edits [ci skip] 2012-08-04 15:09:33 +05:30
Rafael Mendonça França
9895f6ca2b Merge pull request #7253 from acapilleri/lenght_validator_errors_options
calculate errors_options one time in validate_each
2012-08-03 09:57:37 -07:00
Angelo Capilleri
93b6fafe3c calculate errors_options one time in validate_each
errors_options is calculated for every *CHECKS* but it could be
calculated one time  because options and RESERVED_OPTIONS
not change during this cycle
2012-08-03 17:42:38 +02:00
Jon Leighton
55b24888bb Remove ActiveRecord::Base.to_a
On reflection, it seems like a bit of a weird method to have on
ActiveRecord::Base, and it shouldn't be needed most of the time anyway.
2012-08-03 11:51:52 +01:00
Robert Pankowecki
ad9b6a3f94 Fix ActiveModel::Serializers::Xml#to_xml reference
Link to ActiveRecord::Serialization#to_xml for more details
2012-08-02 23:47:02 +02:00
Xavier Noria
077372b20d load active_support/deprecation in active_support/rails 2012-08-02 21:59:23 +02:00
Xavier Noria
4aee8dd486 load active_support/core_ext/module/delegation in active_support/rails 2012-08-02 21:59:23 +02:00
Xavier Noria
5e1b92044c load active_support/core_ext/class/attribute in active_support/rails 2012-08-02 21:59:23 +02:00
Xavier Noria
64bc8447c2 load active_support/concern in active_support/rails 2012-08-02 21:59:23 +02:00
Xavier Noria
5ea6b0df9a load active_support/core_ext/object/inclusion in active_support/rails 2012-08-02 21:59:22 +02:00
Xavier Noria
8f58d6e507 load active_support/core_ext/object/blank in active_support/rails 2012-08-02 21:59:22 +02:00
Xavier Noria
1a7b2e8fad defines a private require-hub active_support/rails
This is a private place to put those AS features that are used
by every component. Nowadays we cherry-pick individual files
wherever they are used, but that it is not worth the effort
for stuff that is going to be loaded for sure sooner or later,
like blank?, autoload, concern, etc.
2012-08-02 21:59:22 +02:00
Robby Grossman
ad7f9cdf00 has_secure_password should not raise a 'digest missing' error if the calling class has specified for validations to be skipped. 2012-07-31 16:16:21 -04:00
Francesco Rodriguez
7b7501b2e5 update ActiveModel::Observer documentation [ci skip] 2012-07-31 11:46:13 -05:00
Francesco Rodriguez
ab53cc7b2e update ActiveModel::ObserverArray documentation [ci skip] 2012-07-30 23:32:48 -05:00
Francesco Rodriguez
1d537fdc47 add :nodoc: to ActiveModel::Observing#inherited [ci skip] 2012-07-30 23:19:15 -05:00
Francesco Rodriguez
cb15fe55da update ActiveModel::Observing documentation [ci skip] 2012-07-30 23:15:27 -05:00
Francesco Rodriguez
d67b289796 update ActiveModel::Serializers documentation [ci skip] 2012-07-30 21:34:03 -05:00
Francesco Rodriguez
4ff5a5df4d add documentation to ActiveModel #from_json method [ci skip] 2012-07-30 21:34:03 -05:00
Francesco Rodriguez
1ca957c5bb fix #after_validation example [ci skip] 2012-07-30 10:55:06 -05:00
Francesco Rodriguez
4d1794713e add :nodoc: directives to ActiveModel Sanitizers [ci skip] 2012-07-29 23:09:24 -05:00
Francesco Rodriguez
c57b8d236b fix class reference in AM::MassAssignmentSecurity documentation [ci skip] 2012-07-29 22:56:04 -05:00
Francesco Rodriguez
cb6c3e28af update ActiveModel::Validations::Callbacks documentation [ci skip] 2012-07-29 22:40:37 -05:00
Francesco Rodriguez
097bfc8296 update #validates and #validates! documentation [ci skip] 2012-07-29 20:08:42 -05:00
Francesco Rodriguez
0557273f38 update ActiveModel::Valdations#validates_with docs [ci skip] 2012-07-29 19:57:48 -05:00
Francesco Rodriguez
01e61eed6a update ActiveModel::Validations docs [ci skip] 2012-07-29 19:52:25 -05:00
Francesco Rodriguez
78502673ac update ActiveModel::Validator docs [ci skip] 2012-07-29 13:35:33 -05:00
Francesco Rodriguez
f0f7786aab update ActiveModel::SecurePassword docs [ci skip] 2012-07-29 12:04:43 -05:00
Francesco Rodriguez
79b8778721 add example to ActiveModel::StrictValidationFailed [ci skip] 2012-07-28 14:24:56 -05:00
Francesco Rodriguez
b8672914b7 add example to ActiveModel::MissingAttributeError [ci skip] 2012-07-28 01:19:38 -05:00
Francesco Rodriguez
ac18d642e9 update ActiveModel::MassAssignmentSecurity docs [ci skip] 2012-07-28 00:58:21 -05:00
Francesco Rodriguez
b8e4f7155b add example to ActiveModel::Naming#model_name [ci skip] 2012-07-27 23:38:34 -05:00
Francesco Rodriguez
36ebafdce9 fix AM::Naming examples [ci skip] 2012-07-27 23:16:51 -05:00
Jon Leighton
6a81ccd69d ActiveRecord::Base.all returns a Relation.
Previously it returned an Array.

If you want an array, call e.g. `Post.to_a` rather than `Post.all`. This
is more explicit.

In most cases this should not break existing code, since
Relations use method_missing to delegate unknown methods to #to_a
anyway.
2012-07-27 13:34:12 +01:00
Francesco Rodriguez
b7b97fadc1 add :nodoc: directive to AM::ObserverArray internal methods [ci skip] 2012-07-22 13:26:43 -05:00
Rafael Mendonça França
a63f7a1364 Update documentation and change the range method name to delimiter. 2012-07-20 14:23:05 -03:00
Rafael Mendonça França
770fa81bba Don't pass :within option to the i18n 2012-07-20 14:10:25 -03:00
Rafael Mendonça França
53edd32684 validates_inclusion_of and validates_exclusion_of now accept
`:within` option as alias of `:in` as documented.

Fix #7118
2012-07-20 13:53:31 -03:00
Bogdan Gusiev
c175563b88 AM::Validations: remove documentation duplicates 2012-07-10 10:07:38 +03:00
Vijay Dev
ee20be7c33 Merge branch 'master' of github.com:lifo/docrails 2012-07-07 20:44:49 +05:30
Carlos Antonio da Silva
d4f59783d2 Merge pull request #6938 from acapilleri/as_json_refactoring
Small refactoring of as_json method
2012-07-07 06:39:56 -07:00
Francesco Rodriguez
ca802fda66 add :nodoc: to internal implementations of AM::Validator [ci skip] 2012-07-06 00:17:13 -05:00
Francesco Rodriguez
9a7702a1df update ActiveModel::Serialization documentation [ci skip] 2012-07-06 00:09:08 -05:00
Francesco Rodriguez
70c4676d88 fix syntax of AM::Validations::HelperMethods examples [ci skip] 2012-07-05 11:19:20 -05:00
Francesco Rodriguez
68df230255 update ActiveModel::Validations::HelperMethods documentation [ci skip] 2012-07-05 00:09:29 -05:00
Francesco Rodriguez
6e00099a28 update ActiveModel::Conversion documentation [ci skip] 2012-07-04 23:11:47 -05:00
Angelo Capilleri
fde7fd8693 small refactoring of as_json method
with this change root has always one assignment
2012-07-03 15:11:41 +02:00
Angelo Capilleri
17fa4ef666 observer update refactoring 2012-07-03 09:08:33 +02:00
Laknath
0149a6eef9 Changed attr_accessible example to reflect grouped roles
Related to the request #5699 - https://github.com/rails/rails/pull/5699 and
not documented.
2012-07-01 10:14:13 +05:30
Vijay Dev
6b9d1a0db2 Merge branch 'master' of github.com:lifo/docrails
Conflicts:
	activemodel/lib/active_model/errors.rb
2012-06-30 23:15:22 +05:30
Carlos Antonio da Silva
4a20fcf7b2 Refactor attribute method matcher to use Hash#fetch 2012-06-26 22:21:19 -03:00
Carlos Antonio da Silva
7fad77fcc7 Cleanup attribute methods a bit, use map! when accepting *args
Since we're dealing with a new array instance, it's safe to use map! and
we avoid an extra array object.

Also remove the symbolize_keys! from AttributeMethodMatcher, since it's
an internal class that always receives symbol keys from the prefix/suffix
methods implementations.
2012-06-26 22:21:18 -03:00
Carlos Antonio da Silva
fef781cac4 Use default + merge! instead of reverse_merge
Since we're not directly requiring the reverse_merge extension, we can
avoid another hash creation by using default_hash.merge! instead.
2012-06-26 22:21:18 -03:00
Carlos Antonio da Silva
0ee6aa749c Set hash value instead of merge a single key, and use flatten! if possible
There's no need to create two extra hashes with options.merge(another_hash),
with the goal of setting only one value, so lets just set it.

Also refactor validates_each to use _merge_attributes, like other
validates_* helpers do.
2012-06-26 22:21:18 -03:00
Francesco Rodriguez
65362af7a8 add :nodoc: to internal implementations [ci skip] 2012-06-25 12:14:50 -05:00
Carlos Antonio da Silva
2a7cfee13e Make internal callback model definitions private in AMo
These _define class methods don't need to be exposed to objects that
extend ActiveModel::Callbacks.

Also use merge! options to avoid the creation of an extra hash.
2012-06-25 13:21:26 -03:00
Francesco Rodriguez
809d4f8eb2 update ActiveModel::Name documentation [ci skip] 2012-06-25 10:40:54 -05:00
Francesco Rodriguez
5130d862a5 fix punctuation in activemodel/errors [ci skip] 2012-06-25 02:23:33 -05:00
Francesco Rodriguez
87615f28e0 update ActiveModel::Naming documentation 2012-06-23 16:58:36 -05:00
Francesco Rodriguez
cca9a21a82 update ActiveModel::Model documentation [ci skip] 2012-06-23 15:12:33 -05:00
Francesco Rodriguez
ffe16b16cd add description ActiveModel::StrictValidationField [ci skip] 2012-06-23 14:49:22 -05:00
Francesco Rodriguez
62a13093c0 update ActiveModel::Lint documentation [ci skip] 2012-06-22 18:01:12 -05:00
Francesco Rodriguez
311810b8b2 update ActiveModel::Errors#include? documentation [ci skip] 2012-06-22 16:48:50 -05:00
Francesco Rodriguez
bc7ac33846 add :nodoc: to internal implementations [ci skip] 2012-06-22 16:29:59 -05:00
Francesco Rodriguez
1727f4330c add documentation and examples to ActiveModel::Errors [ci skip] 2012-06-22 16:04:16 -05:00
Francesco Rodriguez
629bc03bf8 change param name to improve documentation
The keys of the error messages are actually attribute names. It makes
the documentation easier to understand:

    # Returns +true+ if the error messages include an error for the given
    # +attribute+, +false+ otherwise.
    #
    #   person.errors.messages # => { :name => ["can not be nil"] }
    #   person.errors.include?(:name) # => true
    #   person.errors.include?(:age)  # => false
    def include?(attribute)
      (v = messages[attribute]) && v.any?
    end
2012-06-22 12:42:32 -05:00
Francesco Rodriguez
bc818e4bc5 update ActiveModel::Errors documentation and minor fixes [ci skip] 2012-06-22 11:54:15 -05:00
Francesco Rodriguez
d9238d044a update ActiveModel::Conversion documentation [ci skip] 2012-06-22 11:54:15 -05:00
Vijay Dev
35ee8fa3d8 Merge branch 'master' of github.com:lifo/docrails 2012-06-22 22:15:27 +05:30
Vijay Dev
6285675db1 fixes a few mistakes in api docs [ci skip] 2012-06-22 22:14:29 +05:30
Rafael Mendonça França
fb8cf55868 Merge pull request #6800 from mschneider/dynamic_finders_for_aliased_attributes
Dynamic finders for aliased attributes
2012-06-22 07:51:11 -07:00
Maximilian Schneider
f984b8152f made dynamic finders alias_attribute aware
previously dynamic finders only worked in combination with the actual
column name and not its alias defined with #alias_attribute
2012-06-22 16:44:01 +02:00
Francesco Rodriguez
d569bfed0d update ActiveModel::Callbacks documentation [ci skip] 2012-06-22 00:32:54 -05:00
Francesco Rodriguez
c3025e8d59 add description to ActiveModel::MissingAttributeError [ci skip] 2012-06-21 16:56:40 -05:00
Francesco Rodriguez
1ce803d091 add :nodoc: to AM::AttributeMethods#instance_method_already_implemented? [ci skip] 2012-06-21 16:40:17 -05:00
Francesco Rodriguez
95a938a5e6 add example to ActiveModel::AttributeMethods#undefine_attribute_methods [ci skip] 2012-06-21 16:19:40 -05:00
Francesco Rodriguez
f975c4b641 add docs to AM::AttributeMethods#define_attribute_method [ci skip] 2012-06-21 15:51:37 -05:00
Francesco Rodriguez
1cb2cb8bea add :nodoc: to AM::AttributeMethods::AttributeMethodMatcher [ci skip] 2012-06-21 15:37:09 -05:00
Francesco Rodriguez
b5b350ad5c fix ActiveModel::AttributeMethods#alias_attribute documentation [ci skip] 2012-06-21 12:51:39 -05:00
Francesco Rodriguez
bf3332bfdf update ActiveModel::AttributeMethods documentation [ci skip] 2012-06-21 12:26:14 -05:00
Jon Leighton
e030f26ad3 Simplify AR configuration code.
Get rid of ActiveModel::Configuration, make better use of
ActiveSupport::Concern + class_attribute, etc.
2012-06-15 19:15:36 +01:00
Francesco Rodriguez
62f6277c53 add example to ActiveModel::Validations#validators [ci skip] 2012-06-15 11:38:07 -05:00
Vijay Dev
c1474ff2e7 Merge branch 'master' of github.com:lifo/docrails 2012-06-14 22:52:38 +05:30
MrBrdo
bc7c0b5c10 prevent users from unknowingly using bad regexps that can compromise security (http://homakov.blogspot.co.uk/2012/05/saferweb-injects-in-various-ruby.html) 2012-06-14 18:10:49 +02:00
Akira Matsuda
588bb6b987 Range#cover? is not implemented in AS now 2012-06-12 02:29:21 +09:00
Robb Kidd
f20208842a Make observer enable/disable documentation more informative.
* Moved the simplest case--enable/disable all on all--to the top.
* Made clear what "ORM" means to avoid having to teach people how to solve "uninitialized constant ORM"
  errors in their test reports.
2012-06-09 16:04:01 -03:00
Piotr Sarnacki
41d63710f2 Merge pull request #6668 from pomnikita/master
Compact array of values added to PermissionSet instance
2012-06-08 11:35:13 -07:00
Nikita Pomyashchiy
00ff0a6776 Compact array of values added to PermissionSet instance 2012-06-08 01:00:34 +04:00
Francesco Rodriguez
ab11a2780f change AMS::JSON.include_root_in_json default value to false
Changes:

* Update `include_root_in_json` default value to false for default value
  to false for `ActiveModel::Serializers::JSON`.
* Remove unnecessary change to include_root_in_json option in
  wrap_parameters template.
* Update `as_json` documentation.
* Fix JSONSerialization tests.

Problem:

It's confusing that AM serializers behave differently from AR,
even when AR objects include AM serializers module.

    class User < ActiveRecord::Base; end

    class Person
      include ActiveModel::Model
      include ActiveModel::AttributeMethods
      include ActiveModel::Serializers::JSON

      attr_accessor :name, :age

      def attributes
        instance_values
      end
    end

    user.as_json
    => {"id"=>1, "name"=>"Konata Izumi", "age"=>16, "awesome"=>true}
    # root is not included

    person.as_json
    => {"person"=>{"name"=>"Francesco", "age"=>22}}
    # root is included

    ActiveRecord::Base.include_root_in_json
    => false

    Person.include_root_in_json
    => true

    # different default values for include_root_in_json

Proposal:

Change the default value of AM serializers to false, update
the misleading documentation and remove unnecessary change
to false of include_root_in_json option with AR objects.

    class User < ActiveRecord::Base; end

    class Person
      include ActiveModel::Model
      include ActiveModel::AttributeMethods
      include ActiveModel::Serializers::JSON

      attr_accessor :name, :age

      def attributes
        instance_values
      end
    end

    user.as_json
    => {"id"=>1, "name"=>"Konata Izumi", "age"=>16, "awesome"=>true}
    # root is not included

    person.as_json
    => {"name"=>"Francesco", "age"=>22}
    # root is not included

    ActiveRecord::Base.include_root_in_json
    => false

    Person.include_root_in_json
    => false

    # same behaviour, more consistent

Fixes #6578.
2012-06-06 01:11:39 -05:00
Francesco Rodriguez
f87820d00a update ActiveModel::Dirty documentation 2012-05-31 05:06:00 -05:00
José Valim
555d8152c7 Merge pull request #5843 from kuroda/translation_of_deeply_nested_model_attributes
Fix human attribute_name to handle deeply nested attributes
2012-05-29 23:26:26 -07:00
Steve Purcell
b3ccd7b27a Don't enable validations when passing false hash values to ActiveModel.validates
Passing a falsey option value for a validator currently causes that validator to
be enabled, just like "true":

    ActiveModel.validates :foo, :presence => false

This is rather counterintuitive, and makes it inconvenient to wrap `validates` in
methods which may conditionally enable different validators.

As an example, one is currently forced to write:

      def has_slug(source_field, options={:unique => true})
        slugger = Proc.new { |r| r[:slug] = self.class.sluggify(r[source_field]) if r[:slug].blank? }
        before_validation slugger
        validations = { :presence => true, :slug => true }
        if options[:unique]
          validations[:uniqueness] = true
        end
        validates :slug, validations
      end

because the following reasonable-looking alternative fails to work as expected:

      def has_slug(source_field, options={:unique => true})
        slugger = Proc.new { |r| r[:slug] = self.class.sluggify(r[source_field]) if r[:slug].blank? }
        before_validation slugger
        validates :slug, :presence => true, :slug => true, :uniqueness => options[:unique]
      end

(This commit includes a test, and all activemodel and activerecord tests pass as before.)
2012-05-28 15:02:02 +01:00
Vijay Dev
575e77ba16 Merge branch 'master' of github.com:lifo/docrails 2012-05-26 17:49:59 +05:30