aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Speed up String#blank? Regexschneems2016-04-201-6/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Follow up on https://github.com/rails/rails/commit/697384df36a939e565b7c08725017d49dc83fe40#commitcomment-17184696. The regex to detect a blank string `/\A[[:space:]]*\z/` will loop through every character in the string to ensure that all of them are a `:space:` type. We can invert this logic and instead look for any non-`:space:` characters. When that happens, we would return on the first character found and the regex engine does not need to keep looking. Thanks @nellshamrell for the regex talk at LSRC. By defining a "blank" string as any string that does not have a non-whitespace character (yes, double negative) we can get a substantial speed bump. Also an inline regex is (barely) faster than a regex in a constant, since it skips the constant lookup. A regex literal is frozen by default. ```ruby require 'benchmark/ips' def string_generate str = " abcdefghijklmnopqrstuvwxyz\t".freeze str[rand(0..(str.length - 1))] * rand(0..23) end strings = 100.times.map { string_generate } ALL_WHITESPACE_STAR = /\A[[:space:]]*\z/ Benchmark.ips do |x| x.report('current regex ') { strings.each {|str| str.empty? || ALL_WHITESPACE_STAR === str } } x.report('+ instead of * ') { strings.each {|str| str.empty? || /\A[[:space:]]+\z/ === str } } x.report('not a non-whitespace char') { strings.each {|str| str.empty? || !(/[[:^space:]]/ === str) } } x.compare! end # Warming up -------------------------------------- # current regex # 1.744k i/100ms # not a non-whitespace char # 2.264k i/100ms # Calculating ------------------------------------- # current regex # 18.078k (± 8.9%) i/s - 90.688k # not a non-whitespace char # 23.580k (± 7.1%) i/s - 117.728k # Comparison: # not a non-whitespace char: 23580.3 i/s # current regex : 18078.2 i/s - 1.30x slower ``` This makes the method roughly 30% faster `(23.580 - 18.078)/18.078 * 100`. cc/ @fxn
* ~3.5x speedup of String#blank? for empty stringsXavier Noria2016-04-201-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | See the rationale in the comment in this patch. To benchmark this I ran a number of variations, ultimately narrowing to require 'benchmark/ips' str = '' regexp = /\A[[:space:]]*\z/ Benchmark.ips do |x| x.report('regexp') { regexp === str } x.report('empty') { str.empty? || regexp === str } x.compare! end This benchmark has consistently reported speedups around 3.5x: Calculating ------------------------------------- regexp 69.197k i/100ms empty 115.468k i/100ms ------------------------------------------------- regexp 2. 6.3%) i/s - 13.839M empty 9. 8.8%) i/s - 47.804M Comparison: empty: 9642607.6 i/s regexp: 2768351.9 i/s - 3.48x slower Sometimes even reaching 4x. Running the same bechmark on strings of 10 or 100 characters (with whitespace or present) has shown a slowdown of just about 1.01/1.02. Marginal, we seem to have a worthwhile trade-off here.
* Merge pull request #24650 from y-yagi/use_rails_command_in_zones_task_descVipul A M2016-04-201-1/+1
|\ | | | | use rails command in `time:zones` task desc [ci skip]
| * use rails command in `time:zones` task desc [ci skip]yuuji.yaginuma2016-04-201-1/+1
|/
* Merge pull request #24642 from prathamesh-sonpatki/fix-with-css-classes-exampleRafael França2016-04-201-6/+6
|\ | | | | Fix example for css_class_attribute and fix indentation
| * Fix example for css_class_attribute and fix indentationPrathamesh Sonpatki2016-04-201-6/+6
|/
* Merge pull request #24644 from abhishekjain16/grammar_date_helperप्रथमेश Sonpatki2016-04-201-1/+1
|\ | | | | [ci skip] Small grammar fix
| * [ci skip] Small grammar fixAbhishek Jain2016-04-201-1/+1
|/
* `undef_method` is not neededRyuta Kamizono2016-04-191-2/+3
|
* Merge pull request #20625 from Envek/add_country_zones_methodJeremy Daer2016-04-195-11/+57
|\ | | | | | | Add ActiveSupport::TimeZone.country_zones helper
| * Add ActiveSupport::TimeZone.country_zones helperAndrey Novikov2016-04-193-1/+25
| | | | | | | | | | | | That helper will return time zones for any country that tzdata knows about. So it will be much simpler for non-US people to list own country time zones in HTML selects or anywhere.
* | Merge pull request #24225 from ↵Rafael Mendonça França2016-04-203-3/+439
|\ \ | | | | | | | | | | | | | | | neumayr/date_select_helper_with_css_classes_accept_hash date_select helper with_css_classes option also accept a hash
| * | date_select helper with_css_classes option also accept a hashneumayr2016-04-053-3/+439
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `date_select` helper `:with_css_classes` option now accepts a hash of strings for `:year`, `:month`, `:day`, `:hour`, `:minute`, `:second` that will extend the select type with the given css class value. ```erb <%= f.date_select :birthday, with_css_classes: { month: "my-month", year: "my-year" } %> ``` ```html <select id="user_birthday_3i" name="user[birthday(3i)]">…</select> <select id="user_birthday_2i" name="user[birthday(2i)]" class="my-month">…</select> <select id="user_birthday_1i" name="user[birthday(1i)]" class="my-year">…</select> ``` Optional, add global `html_options` to modify every select tag in the set. ```erb <%= f.date_select :birthday, with_css_classes: { month: "my-month", year: "my-year" }, { class: "my-date optional" } %> ``` Supported DateHelper methods: `select_day`, `select_month`, `select_year`, `select_hour`, `select_minute`, `select_second`, `select_datetime`, `select_time`, `time_select`, `date_select` and `datetime_select`. `:with_css_classes` option was added to the `date_select` with #7975.
* | | Add CHANGELOG entry for #23869Rafael Mendonça França2016-04-201-0/+4
| | | | | | | | | | | | [ci skip]
* | | Merge pull request #23869 from oreoshake/to-sentence-html-safetyRafael França2016-04-202-0/+85
|\ \ \ | | | | | | | | Add html_safe support to ActionView Array#OutputSafetyHelper
| * | | mimic ActiveSupport's Array#to_sentence in an html_safe-aware wayNeil Matatall2016-03-152-0/+85
| | | |
* | | | Ensure Cache#inspect doesn't block concurrent cache writesJeremy Daer2016-04-192-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Object#inspect recursively inspects instance variables, exposing all internal state, including sensitive internal cache objects. Override Cache#inspect to give a high-level summary that never interferes with concurrent cache writes.
* | | | Merge pull request #24640 from kamipo/fix_test_blank_columns_created_in_blockRafael França2016-04-191-1/+1
|\ \ \ \ | | | | | | | | | | Fix `test_blank_columns_created_in_block`
| * | | | Fix `test_blank_columns_created_in_block`Ryuta Kamizono2016-04-201-1/+1
|/ / / / | | | | | | | | | | | | Follow up to 1683410.
* | | | Merge pull request #24031 from ↵Jeremy Daer2016-04-192-2/+14
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | samphilipd/sam/do_not_clobber_options_in_route_definitions Do not destructively mutate passed options hash in route definitions
| * | | | Do not destructively mutate passed options hash in route definitionsSam Davies2016-03-032-2/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Fixes #24030 An example scope might be specified as such: ```ruby HTML = { constraints: { format: :html } }.freeze scope HTML do get 'x' end ``` This currently raises an error because the mapper attempts to destructively modify the passed options hash. This is dangerous because this options hash might even be shared with other scopes. We should instead always instantiate a new object instead of modifying the passed options.
* | | | | Merge pull request #24619 from BenMorganIO/use-rails-5-in-rails-engine-binYves Senn2016-04-191-1/+2
|\ \ \ \ \ | | | | | | | | | | | | remove rails 4 specification in bin/rails for plugins [ci skip]
| * | | | | mention rails 5 instead of rails 4 in bin/rails for pluginsBen A. Morgan2016-04-191-1/+2
| | | | | |
* | | | | | Merge pull request #24638 from maclover7/jm-rm-commentKasper Timm Hansen2016-04-191-1/+1
|\ \ \ \ \ \ | | | | | | | | | | | | | | Remove unecessary comment
| * | | | | | Remove unecessary commentJon Moss2016-04-191-1/+1
|/ / / / / /
* | | | | | Database comments: Treat blank comments as no comment. Don't dump blank ↵Jeremy Daer2016-04-193-57/+98
| | | | | | | | | | | | | | | | | | | | | | | | comments.
* | | | | | Merge pull request #24635 from mohitnatoo/doc-queue-adapterVipul A M2016-04-201-0/+12
|\ \ \ \ \ \ | |_|_|_|_|/ |/| | | | | Added documentation for ActiveJob queue adapter for a specific job. [ci skip]
| * | | | | - Added documentation for ActiveJob queue adapter for a specific job.Mohit Natoo2016-04-201-0/+12
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [ci skip] Added note on child class maintaining parent's queue adapter. [ci skip] Added note on child class maintaining parent's queue adapter. [ci skip] removed documentation for child class inheriting the queue adapter.
* | | | | Merge pull request #24634 from kamipo/arel_visitors_definitions_was_removedRafael França2016-04-194-1/+13
|\ \ \ \ \ | | | | | | | | | | | | Define `arel_visitor` method on all adapters
| * | | | | Define `arel_visitor` method on all adaptersRyuta Kamizono2016-04-204-1/+13
|/ / / / / | | | | | | | | | | | | | | | `Arel::Visitors::VISITORS` was removed at https://github.com/rails/arel/pull/412.
* | | | | Merge pull request #24567 from Edouard-chin/ec-method-typoSean Griffin2016-04-191-2/+2
|\ \ \ \ \ | | | | | | | | | | | | Small typo on a method name:
| * | | | | Small typo on a method name:Edouard CHIN2016-04-151-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | - clear_test_deliviers -> clear_test_deliveries
* | | | | | Merge pull request #24632 from vipulnsward/rm-reference-to-methodSantiago Pastorino2016-04-191-2/+0
|\ \ \ \ \ \ | | | | | | | | | | | | | | Remove reference to unknown method `dirty?` in docs [ci skip]
| * | | | | | Remove reference to unknown method `dirty?` to docsVipul A M2016-04-191-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | [ci skip]
* | | | | | | Merge pull request #24630 from aried3r/patch-1Vipul A M2016-04-191-1/+1
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Update send_data documentation [ci skip]
| * | | | | | | Update send_data documentation [ci skip]Anton Rieder2016-04-191-1/+1
|/ / / / / / / | | | | | | | | | | | | | | Add missing period after sentence.
* | | | | | | Merge pull request #24626 from JustinJruby/masterJon Moss2016-04-191-1/+1
|\ \ \ \ \ \ \ | |/ / / / / / |/| | | | | | Change the Hash.to_xml with a lamda example
| * | | | | | Change the Hash.to_xml with a lamda example Justin2016-04-191-1/+1
|/ / / / / / | | | | | | | | | | | | | | | | | | Update 'foo'.to_xml(lambda { |options, key| options[:builder].b(key) }) to {foo: lambda { |options, key| options[:builder].b(key) }}.to_xml
* | | | | | Merge pull request #24621 from kamipo/remove_unused_table_with_autoincrementJeremy Daer2016-04-191-4/+0
|\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | Remove unused `table_with_autoincrement` table
| * | | | | | Remove unused `table_with_autoincrement` tableRyuta Kamizono2016-04-191-4/+0
|/ / / / / /
* | | | | | Merge pull request #24317 from Gaurav2728/unused_set_in_active_recordJeremy Daer2016-04-192-3/+0
|\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | connection adapters column, delegation in Active Record have not use …
| * | | | | | connection adapters column, delegation in Active Record have not use of ↵Gaurav Sharma2016-03-312-3/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ‘set’ found these commits https://github.com/rails/rails/commit/9cc8c6f3730df3d94c81a55be9ee1b7b4ffd29f6, https://github.com/rails/rails/commit/9d79334a1dee67e31222c790e231772deafcaeb8 that also should remove it.
* | | | | | | Merge pull request #24503 from ↵Jeremy Daer2016-04-191-11/+23
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | prathamesh-sonpatki/add-test-for-warn-on-records-fetched-greater-than Add missing test case for record_fetched_greater_than config
| * | | | | | | Add missing test case for record_fetched_greater_than configPrathamesh Sonpatki2016-04-111-11/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - The negative scenario test case was missing earlier.
* | | | | | | | Merge pull request #24576 from yahonda/quote_column_name_for_reserved_word_sizeJeremy Daer2016-04-191-1/+1
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | Address ORA-00923 error by quoting a reserved word "SIZE"
| * | | | | | | | Address ORA-00923 error by quoting a reserved word "SIZE"Yasuo Honda2016-04-161-1/+1
| | |_|/ / / / / | |/| | | | | |
* | | | | | | | Ruby 2.4 Array#sum: ficauses -> cases changelog typo [ci skip]Jeremy Daer2016-04-191-1/+1
| | | | | | | |
* | | | | | | | Ruby 2.4 Array#sum: fix non-numeric #sum feature detectionJeremy Daer2016-04-191-1/+1
| | | | | | | |
* | | | | | | | Merge pull request #24552 from yui-knk/raise_argument_errorJeremy Daer2016-04-192-0/+5
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | Raise `ArgumentError` when an invalid form is passed to `Date#to_time`
| * | | | | | | | Raise `ArgumentError` when an invalid form is passed to `Date#to_time`yui-knk2016-04-172-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before this commit `NoMethodError: undefined method `form_name' for Time:Class` is raised when an invalid argument is passed. It is better to raise `ArgumentError` and show list of valid arguments to developers.