aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | Removed the Ruby encoder and switched to using the JSON gemGodfrey Chan2013-11-262-80/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Got all the tests passing again. Support for `encode_json` has been removed (and consequently the ability to encode `BigDecimal`s as numbers, as mentioned in the previous commit). Install the `activesupport-json_encoder` gem to get it back.
* | | | Removed support for encoding BigDecimal as a JSON numberGodfrey Chan2013-11-262-14/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is because the new encoder will no longer support encode_json. Therefore our only choice is to return `to_i` or `to_s` in `BigDecimal#as_json`. Since casting a BigDecimal to an integer is most likely a lossy operation, we chose to encode it as a string. Support for encoding BigDecimal as a string will return via the `activesupport-json_encoder` gem.
* | | | Merge remote-tracking branch 'docrails/master'Xavier Noria2013-11-2412-76/+76
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: activesupport/lib/active_support/core_ext/hash/deep_merge.rb activesupport/lib/active_support/core_ext/hash/keys.rb
| * | | | The option is called encode_big_decimal_as_string [ci-skip]Godfrey Chan2013-11-151-1/+1
| | | | |
| * | | | Change syntax format for example returned valuesPrem Sichanugrist2013-11-1112-79/+79
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | According to our guideline, we leave 1 space between `#` and `=>`, so we want `# =>` instead of `#=>`. Thanks to @fxn for the suggestion. [ci skip]
* | | | | When Array#as_json and Hash#as_json are called without options, theyGodfrey Chan2013-11-221-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | should also call #as_json on the children without options (instead of nil)
* | | | | doc `travel` and `travel_to` stubs are removed in teardown. [ci skip]Yves Senn2013-11-211-4/+4
| | | | |
* | | | | Expand double-negative in String#blank? regexAman Gupta2013-11-201-1/+1
| | | | |
* | | | | Add `#travel` and `#travel_to` to AS::TestCasePrem Sichanugrist2013-11-202-0/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add `ActiveSupport::Testing::TimeHelpers#travel` and `#travel_to`. These methods change current time to the given time or time difference by stubbing `Time.now` and `Date.today` to return the time or date after the difference calculation, or the time or date that got passed into the method respectively. These methods also accept a block, which will return current time back to its original state at the end of the block. Example for `#travel`: Time.now # => 2013-11-09 15:34:49 -05:00 travel 1.day Time.now # => 2013-11-10 15:34:49 -05:00 Date.today # => Sun, 10 Nov 2013 Example for `#travel_to`: Time.now # => 2013-11-09 15:34:49 -05:00 travel_to Time.new(2004, 11, 24, 01, 04, 44) Time.now # => 2004-11-24 01:04:44 -05:00 Date.today # => Wed, 24 Nov 2004 Both of these methods also accept a block, which will return the current time back to its original state at the end of the block: Time.now # => 2013-11-09 15:34:49 -05:00 travel 1.day do User.create.created_at # => Sun, 10 Nov 2013 15:34:49 EST -05:00 end travel_to Time.new(2004, 11, 24, 01, 04, 44) do User.create.created_at # => Wed, 24 Nov 2004 01:04:44 EST -05:00 end Time.now # => 2013-11-09 15:34:49 -05:00 This module is included in `ActiveSupport::TestCase` automatically.
* | | | | rm minitest monkey patchAaron Patterson2013-11-161-17/+0
| | | | |
* | | | | Unify `cattr_*` interface: allow to pass a block to `cattr_reader`.Alexey Chernenkov2013-11-151-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Example: class A cattr_reader(:defr) { 'default_reader_value' } end A.defr # => 'default_reader_value'
* | | | | Improved compatibility with the stdlib JSON gem.Godfrey Chan2013-11-141-3/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, calling `::JSON.{generate,dump}` sometimes causes unexpected failures such as intridea/multi_json#86. `::JSON.{generate,dump}` now bypasses the ActiveSupport JSON encoder completely and yields the same result with or without ActiveSupport. This means that it will **not** call `as_json` and will ignore any options that the JSON gem does not natively understand. To invoke ActiveSupport's JSON encoder instead, use `obj.to_json(options)` or `ActiveSupport::JSON.encode(obj, options)`.
* | | | | Clean up `require ‘active_support/deprecation’` and remove circular requireDmitry Vorotilin2013-11-142-3/+0
| | | | |
* | | | | Get rid of unused variableGuillermo Iguaran2013-11-141-1/+1
| | | | |
* | | | | Merge pull request #12882 from charliesome/use-rescue-splat-in-suppressGuillermo Iguaran2013-11-131-2/+1
|\ \ \ \ \ | | | | | | | | | | | | Use rescue with a splat rather and catching all exceptions and manually filtering in Kernel#suppress
| * | | | | Use rescue with a splat rather and catching all and filteringCharlie Somerville2013-11-131-2/+1
| | | | | |
* | | | | | Merge pull request #12857 from kuldeepaggarwal/f-indentationXavier Noria2013-11-111-3/+3
|\ \ \ \ \ \ | | | | | | | | | | | | | | updated documentation for Integer [ci skip]
| * | | | | | updated documentation for IntegerKuldeep Aggarwal2013-11-121-3/+3
| | | | | | |
* | | | | | | Merge pull request #12854 from kuldeepaggarwal/f-indentationRafael Mendonça França2013-11-114-14/+18
|\| | | | | | | | | | | | | | | | | | | | methods and outputs indented [ci skip]
| * | | | | | documentation updated for Hashes [ci skip]KD2013-11-114-14/+18
| | | | | | |
* | | | | | | Merge pull request #12842 from kuldeepaggarwal/array_splitGuillermo Iguaran2013-11-111-3/+3
|\| | | | | | | | | | | | | | | | | | | | Speed up Array#split when block is passed
| * | | | | | Speed up Array#splitKD2013-11-111-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ruby 2.0.0p247 Rehearsal --------------------------------------- old 10.670000 0.150000 10.820000 ( 10.822651) new 8.520000 0.050000 8.570000 ( 8.571825) ----------------------------- total: 19.390000sec user system total real old 10.620000 0.170000 10.790000 ( 10.790409) new 8.570000 0.110000 8.680000 ( 8.686051)
* | | | | | | Merge pull request #12841 from kuldeepaggarwal/in-group-documentationYves Senn2013-11-101-1/+1
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Array#in_groups: documentation updated [ci skip]
| * | | | | | | Array#in_groups: documentation updatedKD2013-11-111-1/+1
| | |_|/ / / / | |/| | | | |
* | | | | | | Merge pull request #12839 from kuldeepaggarwal/array_splitGuillermo Iguaran2013-11-101-2/+2
|\ \ \ \ \ \ \ | | |/ / / / / | |/| | | | | Array#split preserving the calling array
| * | | | | | Array#split preserving the calling arrayKD2013-11-111-2/+2
| |/ / / / /
* / / / / / Use the method provided by minitest to make tests order dependentGuillermo Iguaran2013-11-091-4/+2
|/ / / / /
* | | | | Standardize all JSON encoded times to use 3 decimal fractional secondsRyan Glover2013-11-071-2/+2
| | | | |
* | | | | Merge pull request #12771 from bogdan/patch-1Yves Senn2013-11-071-4/+4
|\ \ \ \ \ | | | | | | | | | | | | Fix AS::TimeWithZone#as_json docs [ci skip]
| * | | | | Fix AS::TimeWithZone#as_json docsBogdan Gusiev2013-11-071-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | According to 28ab79d7c579fa1d76ac868be02b38b02818428a
* | | | | | Move the JSON extension require statements to the right place.Godfrey Chan2013-11-062-8/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In #12203, the JSON core extensions were moved into the `core_ext` folder. Unfortunately, there are some corresponding requires that were left behind. The problem is partially addressed in #12710, this commit fixes the rest.
* | | | | | Do not expose internal state in the public encoder API (i.e. as_json)Godfrey Chan2013-11-062-52/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | See [1] for why this is not a good idea. As part of this refactor, circular reference protection in as_json has been removed and the corresponding error class has been deprecated. As discussed with @jeremy, circular reference error is considered programmer errors and protecting against it is out of scope for the encoder. This is again based on the excellent work by @sergiocampama in #11728. [1]: https://github.com/intridea/multi_json/pull/138#issuecomment-24468223
* | | | | | Moved AS::JSON::DATE_REGEX as it's only used for decodingGodfrey Chan2013-11-062-3/+3
| | | | | |
* | | | | | Stop using method missing for singleton delegation.Aaron Patterson2013-11-064-9/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This saved about 46 array allocations per request on an extremely simple application. The delegation happened in the notification subsystem which is a hotspot, so this should result in even more savings with larger apps. Squashed commit of the following: commit 41eef0d1479526f7de25fd4391d98e61c126d9f5 Author: Aaron Patterson <aaron.patterson@gmail.com> Date: Wed Nov 6 16:32:31 2013 -0800 speed up notifications commit 586b4a18656f66fb2c518fb8e8fee66a016e8ae6 Author: Aaron Patterson <aaron.patterson@gmail.com> Date: Wed Nov 6 16:31:05 2013 -0800 speed up runtime registry methods commit b67d074cb4314df9a88438f785868cef77e583d7 Author: Aaron Patterson <aaron.patterson@gmail.com> Date: Wed Nov 6 16:28:12 2013 -0800 change method name and make it public
* | | | | | Add +capitalize+ option to Inflector.humanizeclaudiob2013-11-062-14/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | So strings can be humanized without being capitalized: 'employee_salary'.humanize # => "Employee salary" 'employee_salary'.humanize(capitalize: false) # => "employee salary"
* | | | | | Eliminate `JSON.{parse,load,generate,dump}` and `def to_json`Godfrey Chan2013-11-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | JSON.{dump,generate} offered by the JSON gem is not compatiable with Rails at the moment and can cause a lot of subtle bugs when passed certain data structures. This changed all direct usage of the JSON gem in internal Rails code to always go through AS::JSON.{decode,encode}. We also shouldn't be implementing `to_json` most of the time, and these occurances are replaced with an equivilent `as_json` implementation to avoid problems down the road. See [1] for all the juicy details. [1]: intridea/multi_json#138 (comment)
* | | | | | Fixed Object#as_json and Struct#as_json with optionsGodfrey Chan2013-11-051-3/+3
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These methods now takes the same options as Hash#as_json, for example: struct = Struct.new(:foo, :bar).new struct.foo = "hello" struct.bar = "world" json = struct.as_json(only: [:foo]) # => {foo: "hello"} This is extracted from PR #11728 from @sergiocampama, see also the discussion in #11460.
* | | | | AestheticsDavid Heinemeier Hansson2013-11-031-22/+30
| | | | |
* | | | | Added Numeric#in_milliseconds, like 1.hour.in_milliseconds, so we can feed ↵David Heinemeier Hansson2013-11-021-0/+6
| | | | | | | | | | | | | | | | | | | | them to JavaScript functions like getTime().
* | | | | Warnings removed for ruby trunkArun Agrawal2013-11-011-1/+1
| | | | | | | | | | | | | | | Same as 4d4ff531b8807ee88a3fc46875c7e76f613956fb
* | | | | Merge pull request #12713 from utenmiki/documentYves Senn2013-11-011-0/+2
|\ \ \ \ \ | | | | | | | | | | | | Add Rdoc document for Array#forty_two [ci skip]
| * | | | | Add Rdoc document for Array#forty_twoutenmiki2013-10-311-0/+2
| | | | | |
* | | | | | clean up some warnings on trunk rubyAaron Patterson2013-10-311-1/+1
| | | | | |
* | | | | | Require time before monkey-patching itRobin Dupret2013-10-312-1/+1
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | Same as #12710 but for the time module this time. This time it should fix the Active Model test suite in isolation avoiding a TypeError to be raised about the superclass of the DateTime object.
* | | | | Require bigdecimal before monkey-patching itRobin Dupret2013-10-312-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If we try to monkey-patch the class before requiring it, then a "superclass mismatch" (TypeError) error is raised and the build can't run correctly. Fixes #12708
* | | | | Raise an error when AS::JSON.decode is called with optionsGodfrey Chan2013-10-301-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rails 4.1 has switched away from MultiJson, and does not currently support any options on `ActiveSupport::JSON.decode`. Passing in unsupported options (i.e. any non-empty options hash) will now raise an ArgumentError. Rationale: 1. We cannot guarantee the underlying JSON parser won't change in the future, hence we cannot guarantee a consistent set of options the method could take 2. The `json` gem, which happens to be the current JSON parser, takes many dangerous options that is irrelevant to the purpose of AS's JSON decoding API 3. To reserve the options hash for future use, e.g. overriding default global options like ActiveSupport.parse_json_times This change *DOES NOT* introduce any changes in the public API. The signature of the method is still decode(json_text, options). The difference is this method previously accepted undocumented options which does different things when the underlying adapter changes. It now correctly raises an ArgumentError when it encounters options that it does not recognize (and currently it does not support any options).
* | | | | Merge pull request #12203 from chancancode/eager_load_jsonJeremy Kemper2013-10-304-222/+222
|\ \ \ \ \ | | | | | | | | | | | | Eagerload active_support/json/encoding in active_support/core_ext/object/to_json
| * | | | | Moved all JSON core extensions into core_ext/object/jsonGodfrey Chan2013-09-134-222/+222
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | TL;DR The primary driver is to remove autoload surprise. This is related to #12106. (The root cause for that ticket is that json/add defines Regexp#to_json among others, but here I'll reproduce the problem without json/add.) Before: >> require 'active_support/core_ext/to_json' => true >> //.as_json NoMethodError: undefined method `as_json' for //:Regexp from (irb):3 from /Users/godfrey/.rvm/rubies/ruby-2.0.0-p195/bin/irb:16:in `<main>' >> //.to_json => "\"(?-mix:)\"" >> //.as_json => "(?-mix:)" After: >> require 'active_support/core_ext/to_json' => true >> //.as_json => "(?-mix:)" This is because ActiveSupport::JSON is autoloaded the first time Object#to_json is called, which causes additional core extentions (previously defined in active_support/json/encoding.rb) to be loaded. When someone require 'active_support/core_ext', the expectation is that it would add certain methods to the core classes NOW. The previous behaviour causes additional methods to be loaded the first time you call `to_json`, which could cause nasty surprises and other unplesant side-effects. This change moves all core extensions in to core_ext/json. AS::JSON is still autoloaded on first #to_json call, but since it nolonger include the core extensions, it should address the aforementioned bug. *Requiring core_ext/object/to_json now causes a deprecation warnning*
* | | | | | use a thread local rather than a queue so events are in the right orderAaron Patterson2013-10-301-7/+4
| | | | | |
* | | | | | Merge pull request #11785 from grosser/grosser/file-unless-existRafael Mendonça França2013-10-281-0/+1
|\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | support :unless_exist for FileCache Conflicts: activesupport/CHANGELOG.md activesupport/test/caching_test.rb