aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Do not use conditionals at GemfileRafael Mendonça França2015-09-142-12/+7
| | | | This will make the Gemfile.lock be dirty in some environments
* create a new renderer instance on calls to `for`Aaron Patterson2015-09-142-55/+49
| | | | | | | | | | | | This changes the renderer class to store the controller and defaults as an instance variable rather than allocating a new class. You can create a new renderer with an new env by calling `Renderer#new` or use new defaults by calling `Renderer#with_defaults` and saving the return value somewhere. Also I want to keep the `env` private since I would like to change the keys in the future. This commit only translates particular keys that the user requested.
* eagerly allocate the renderer objectAaron Patterson2015-09-143-9/+10
| | | | | this means the reader doesn't need to lock, but does have the added cost of a new object created for every controller
* initialize `@renderer` to avoid ivar warningsAaron Patterson2015-09-141-1/+8
|
* add a lock when allocating the rendererAaron Patterson2015-09-141-1/+5
| | | | | The controller class is shared among threads, so we need to lock when allocating the Renderer.
* Merge pull request #21616 from claudiob/fix-21122Rafael Mendonça França2015-09-141-68/+6
|\ | | | | Remove methods that are never invoked
| * Remove AS methods that are never invokedclaudiob2015-09-131-68/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes #21122 - does not change any current behavior; simply reflects the fact that two conditions of the if/else statement are never reached. The reason is #17227 which adds a default terminator to AS::Callbacks. Therefore, even callback chains that do not define a terminator now have a terminator, and `chain_config.key?(:terminator)` is always true. Of course, if no terminator was defined, then we want this new default terminator not to do anything special. What the terminator actually does (or should do) is discussed in #21218 but the simple fact that a default terminator exists makes this current PR valid. *Note* that the conditional/simple methods have not been removed in AS::Conditionals::Filter::After because of `:skip_after_callbacks_if_terminated` which lets a user decide **not** to skip after callbacks even if the chain was terminated.
* | `rack_response` should use the status it's givenAaron Patterson2015-09-141-1/+1
| |
* | Merge pull request #21619 from kamipo/fix_doc_of_text_limitClaudio B.2015-09-141-2/+2
|\ \ | | | | | | Fix doc of limit option for a text column [ci skip]
| * | Fix doc of limit option for a text column [ci skip]Ryuta Kamizono2015-09-141-2/+2
|/ / | | | | | | | | | | | | | | | | Follow up #21591. The document of limit option for a text column is incorrect. MySQL: the limit is byte length, not character length Pg, Sqlite3: variable unlimited length
* | Merge pull request #21617 from lunks/patch-1Claudio B.2015-09-131-1/+2
|\ \ | | | | | | Fix HSTS default expire in ActionDispatch::SSL docs.
| * | Fix HSTS default expire in ActionDispatch::SSL docs.Pedro Nascimento2015-09-141-1/+2
|/ /
* | Merge pull request #21611 from amitsuroliya/improve_docsXavier Noria2015-09-131-1/+1
|\ \ | | | | | | fix typo intance -> instance in ActionView [ci skip]
| * | fix typo intance -> instance in ActionView [ci skip] amitkumarsuroliya2015-09-131-1/+1
|/ / | | | | `intance` should be `instance`
* | Merge pull request #21591 from kamipo/text_and_blob_limit_is_byte_lengthRafael Mendonça França2015-09-131-2/+2
|\ \ | | | | | | TEXT and BLOB limit is byte length, not character length.
| * | TEXT and BLOB limit is byte length, not character length.Ryuta Kamizono2015-09-111-2/+2
| | |
* | | Merge pull request #21568 from amitsuroliya/mysql_version_updateRafael Mendonça França2015-09-138-12/+12
|\ \ \ | | | | | | | | Updated MySQL documentation link to MySQL latest version 5.7 everywhe…
| * | | Updated MySQL documentation link to MySQL latest version 5.7 everywhere [ci ↵amitkumarsuroliya2015-09-108-12/+12
| | | | | | | | | | | | | | | | | | | | skip] Bumps from `5.6` to `5.7`
* | | | Merge pull request #21604 from amitsuroliya/remove_wrong_docsRafael Mendonça França2015-09-121-2/+1
|\ \ \ \ | | | | | | | | | | Improving `in_time_zone` docs [ci skip]
| * | | | Improving `in_time_zone` docs [ci skip]amitkumarsuroliya2015-09-131-2/+1
|/ / / / | | | | | | | | `DateTime.utc` is not a valid method. It gives `NoMethodError: undefined method `utc` for DateTime:Class`. As we know that we can calculate `utc` time from `Time` Class, but we can’t calculate `utc` time from `DateTime` Class.
* | | | Merge pull request #21602 from Eric-Guo/masterRafael Mendonça França2015-09-122-29/+38
|\ \ \ \ | | | | | | | | | | Ruby 2.2.3 in windows need nokogiri 1.6.7.rc3
| * | | | Ruby 2.2.3 in windows need nokogiri 1.6.7.rc3 as it's the only version ↵Eric Guo2015-09-122-29/+38
| | | | | | | | | | | | | | | | | | | | having correct pre-compiled so
* | | | | Merge pull request #21603 from Eric-Guo/dev_edge_commonYves Senn2015-09-121-10/+7
|\ \ \ \ \ | |/ / / / |/| | | | dev and edge have some common, so factor it out.
| * | | | dev and edge have some common, so factor it out.Eric Guo2015-09-131-10/+7
|/ / / /
* | | | Merge pull request #21596 from JuanitoFatas/perf/strip-heredocXavier Noria2015-09-121-2/+1
|\ \ \ \ | |_|/ / |/| | | Improve String#strip_heredoc
| * | | Improve String#strip_heredocJuanito Fatas2015-09-121-2/+1
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Saves about 6 MB, about 40% faster. **strip_heredoc.rb** ```ruby require "active_support/core_ext/object/try" require "get_process_mem" class String def strip_heredoc indent = scan(/^[ \t]*(?=\S)/).min.try(:size) || 0 gsub(/^[ \t]{#{indent}}/, '') end end if ENV["MEASURE_MEMORY"] == "yes" mem = GetProcessMem.new GC.start GC.disable 10000.times do <<-MSG.strip_heredoc xhr and xml_http_request methods are deprecated in favor of `get :index, xhr: true` and `post :create, xhr: true` MSG end before = mem.mb after = mem.mb GC.enable puts "Before: #{before} MiB" puts "After: #{after} MiB" puts "Diff: #{after - before} MiB" end ``` **patched_strip_heredoc.rb** ```ruby require "active_support/core_ext/object/try" require "get_process_mem" class String def patched_strip_heredoc gsub(/^#{scan(/^[ \t]*(?=\S)/).min}/, "".freeze) end end if ENV["MEASURE_MEMORY"] == "yes" mem = GetProcessMem.new GC.start GC.disable 10000.times do <<-MSG.patched_strip_heredoc xhr and xml_http_request methods are deprecated in favor of `get :index, xhr: true` and `post :create, xhr: true` MSG end before = mem.mb after = mem.mb GC.enable puts "Before: #{before} MiB" puts "After: #{after} MiB" puts "Diff: #{after - before} MiB" end ``` **Before** ``` $ MEASURE_MEMORY=yes ruby strip_heredoc.rb Before: 44.73828125 MiB After: 44.7734375 MiB Diff: 0.03515625 MiB ``` **After** ``` $ MEASURE_MEMORY=yes ruby patched_strip_heredoc.rb Before: 37.9765625 MiB After: 38.015625 MiB Diff: 0.0390625 MiB ``` `44.7734375 - 38.015625 = 6.75` => **Saves about 6.75 MiB** **benchmark.rb** ```ruby require "benchmark/ips" require_relative "./strip_heredoc" require_relative "./patched_strip_heredoc" def original <<-MSG.strip_heredoc xhr and xml_http_request methods are deprecated in favor of `get :index, xhr: true` and `post :create, xhr: true` MSG end def patched <<-MSG.patched_strip_heredoc xhr and xml_http_request methods are deprecated in favor of `get :index, xhr: true` and `post :create, xhr: true` MSG end Benchmark.ips do |x| x.report("original") { original } x.report(" patched") { patched } x.compare! end ``` ``` $ ruby -v benchmark.rb ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14] Calculating ------------------------------------- original 5.652k i/100ms patched 6.477k i/100ms ------------------------------------------------- original 54.076k (± 5.7%) i/s - 271.296k patched 74.557k (± 6.2%) i/s - 375.666k Comparison: patched: 74557.0 i/s original: 54076.4 i/s - 1.38x slower ``` => **About 38% faster** 1. Clone rails project `git clone git@github.com:rails/rails.git` 2. Apply this patch to `activesupport/lib/active_support/core_ext/string/strip.rb` 3. `cd activesupport` 4. run `rake` 5. And tests passed: ``` ➜ activesupport $ rake /Users/Juan/.rubies/ruby-2.2.2/bin/ruby -w -I"lib:test" "/Users/Juan/.rubies/ruby-2.2.2/lib/ruby/2.2.0/rake/rake_test_loader.rb" "test/**/*_test.rb" ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ......................................................................S. SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS Finished in 15.343004s, 214.2344 runs/s, 24902.4898 assertions/s. 3287 runs, 382079 assertions, 0 failures, 0 errors, 48 skips You have skipped tests. Run with --verbose for details. ```
* | | Merge pull request #21585 from lachlanjc/patch-1Eileen M. Uchitelle2015-09-101-1/+1
|\ \ \ | | | | | | | | Remove RHTML reference in Action Controller docs
| * | | Remove RHTML reference in Action Controller docs [ci skip]Lachlan Campbell2015-09-101-1/+1
|/ / /
* | | Merge pull request #21584 from claudiob/remove-hawd-docClaudio B.2015-09-101-3/+2
|\ \ \ | | | | | | | | Remove wrong doc line about AC::Parameters
| * | | Remove wrong doc line about AC::Parametersclaudiob2015-09-101-3/+2
| | |/ | |/| | | | | | | | | | AC::Parameters does not inherit from HashWithIndifferentAccess since #20868 by @sikachu
* | | Merge pull request #21575 from y-yagi/description_of_passing_block_to_add_sourceYves Senn2015-09-101-1/+9
|\ \ \ | | | | | | | | add description of passing a block to `add_source` [ci skip]
| * | | add description of passing a block to `add_source` [ci skip]yuuji.yaginuma2015-09-101-1/+9
|/ / / | | | | | | | | | block support added in 8cc01e0b2bfa75a613720c535d34e451f5de769c
* | / Explicitly require AR/attribute where using itAkira Matsuda2015-09-101-0/+2
| |/ |/| | | | | | | autoloading this could possibly cause some weird race condition when calling an AR::Attribute's singleton method on a threaded server.
* | Merge pull request #21567 from y-yagi/fix_inspect_docZachary Scott2015-09-091-1/+1
|\ \ | | | | | | fix wrong method used in the TimeWithZone#inspect method docs [ci skip]
| * | fix wrong method used in the TimeWithZone#inspect method docs [ci skip]yuuji.yaginuma2015-09-101-1/+1
| | |
* | | Merge pull request #21333 from imtayadeway/ar-querying-docsEileen M. Uchitelle2015-09-091-17/+16
|\ \ \ | | | | | | | | Improve the AR querying docs
| * | | [ci skip] Update MySQL docs reference to latestTim Wade2015-09-091-1/+1
| | | | | | | | | | | | | | | | Bumps to 5.7
| * | | [ci skip] Improve readability in AR querying guideTim Wade2015-09-091-16/+15
| | | | | | | | | | | | | | | | | | | | | | | | * rewords a few awkwardly worded sentences * adds some punctuation * adds a few missing words
* | | | remove dead code.Yves Senn2015-09-092-7/+1
| | | | | | | | | | | | | | | | | | | | | | | | The last call site of `last_version` was removed with: 838e18321118ee3ec6669217e5ea0216f79c969a
* | | | Update documentation to reflect Rack::Session::Abstract changeseileencodes2015-09-091-1/+1
| | | | | | | | | | | | | | | | | | | | `Rack::Session::Abstract::ID` is now deprecated and `Rack::Session::Abstract::Persisted` should be used instead.
* | | | Handle Content-Types that are not :json, :xml, or :url_encoded_formeileencodes2015-09-092-2/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In c546a2b this was changed to mimic how the browser behaves in a real situation but left out types that were registered. When this was changed it didn't take `text/plain` or `text/html` content types into account. This is a problem if you're manipulating the `Content-Type` headers in your controller tests, and expect a certain result. The reason I changed this to use `to_sym` is because if the `Content-Type` is not registered then the symbol will not exist. If it's one of the special types we handle that specifically (:json, :xml, or :url_encoded_form). If it's any registered type we handle it by setting the `path_parameters` and then the `request_parameters`. If the `to_sym` returns nil an error will be thrown. If the controller test sets a `Content-Type` on the request that `Content-Type` should remain in the header and pass along the filename. For example: If a test sets a content type on a post ``` @request.headers['CONTENT_TYPE'] = 'text/plain' post :create, params: { name: 'foo.txt' } ``` Then `foo.txt` should be in the `request_parameters` and params related to the path should be in the `path_parameters` and the `Content-Type` header should match the one set in the `@request`. When c546a2b was committed `text/plain` and `text/html` types were throwing a "Unknown Content-Type" error which is misleading and incorrect. Note: this does not affect how this is handled in the browser, just how the controller tests handle setting `Content-Type`.
* | | | Merge pull request #21486 from bogdan/refactor-has-many-counter-cacheEileen M. Uchitelle2015-09-094-71/+61
|\ \ \ \ | | | | | | | | | | HasManyAssociation: moved half of counter cache code to reflection
| * | | | HasManyAssociation: moved half of counter cache code to reflectionBogdan Gusiev2015-09-034-71/+61
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Current implementation has a lot of utility methods that accept reflection call a lot of methods on it and exit. E.g. has_counter_cache?(reflection) It causes confusion and inability to cache result of the method even through it always returns the same result for the same reflection object. It can be done easier without access to the association context by moving code into reflection itself. e.g. reflection.has_counter_cache? Reflection is less complex object than association so moving code there automatically makes it simplier to understand.
* | | | | Merge pull request #21529 from rngtng/move-migrations-paths-to-database-taskYves Senn2015-09-091-7/+7
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | Use `ActiveRecord::Tasks::DatabaseTasks.migrations_paths` explicit for db tasks
| * | | | | Use `ActiveRecord::Tasks::DatabaseTasks.migrations_paths` instead of ↵Tobias Bielohlawek2015-09-071-9/+8
| | | | | | | | | | | | | | | | | | | | | | | | `Migrator.migrations_paths`
* | | | | | remove dead code.Yves Senn2015-09-091-4/+0
| | | | | | | | | | | | | | | | | | | | | | | | This method is private API and never used. Let's remove it.
* | | | | | adjust method visibility according to it's usage.Yves Senn2015-09-091-18/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `Schema#migrations_paths` is not supposed to be public API. In fact it's only used inside `Schema` itself, so let's make it private.
* | | | | | Don't set the default argumentRafael Mendonça França2015-09-091-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | It is always passed in
* | | | | | Invert the conditionalRafael Mendonça França2015-09-091-1/+1
| | | | | |
* | | | | | Remove dead codeRafael Mendonça França2015-09-091-6/+0
| | | | | | | | | | | | | | | | | | | | | | | | Usage was removed in 5c4495538b