| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
Using `(raise FooError, "error")` is like forcing a "new scope" around
the `raise` call, it's simpler to just wrap the `raise` arguments with
parentheses just like any other method call would.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
```ruby
class String
def to1(position)
position = [position + length, -1].max if position < 0
self[0, position + 1]
end
def to2(position)
position += size if position < 0
self[0, position + 1] || +""
end
end
Benchmark.ips do |x|
x.report("'foo'.to(1)") { 'foo'.to(1) }
x.report("'foo'.to1(1)") { 'foo'.to1(1) }
x.report("'foo'.to2(1)") { 'foo'.to2(1) }
x.report("'foo'.to(-1)") { 'foo'.to(-1) }
x.report("'foo'.to1(-1)") { 'foo'.to1(-1) }
x.report("'foo'.to2(-1)") { 'foo'.to2(-1) }
x.report("'foo'.to(-10)") { 'foo'.to(-10) }
x.report("'foo'.to1(-10)") { 'foo'.to1(-10) }
x.report("'foo'.to2(-10)") { 'foo'.to2(-10) }
end
```
Result:
```
Warming up --------------------------------------
'foo'.to(1) 199.859k i/100ms
'foo'.to1(1) 220.293k i/100ms
'foo'.to2(1) 221.522k i/100ms
'foo'.to(-1) 205.032k i/100ms
'foo'.to1(-1) 195.837k i/100ms
'foo'.to2(-1) 214.975k i/100ms
'foo'.to(-10) 214.331k i/100ms
'foo'.to1(-10) 182.666k i/100ms
'foo'.to2(-10) 224.696k i/100ms
Calculating -------------------------------------
'foo'.to(1) 4.685M (± 4.2%) i/s - 23.583M in 5.042568s
'foo'.to1(1) 5.233M (± 5.8%) i/s - 26.215M in 5.026778s
'foo'.to2(1) 5.180M (± 5.7%) i/s - 25.918M in 5.020735s
'foo'.to(-1) 4.253M (± 7.0%) i/s - 21.323M in 5.043133s
'foo'.to1(-1) 4.438M (±11.2%) i/s - 21.934M in 5.025751s
'foo'.to2(-1) 4.716M (± 9.8%) i/s - 23.432M in 5.028088s
'foo'.to(-10) 4.678M (± 9.5%) i/s - 23.148M in 5.007379s
'foo'.to1(-10) 4.428M (± 5.1%) i/s - 22.103M in 5.005155s
'foo'.to2(-10) 5.243M (± 4.6%) i/s - 26.289M in 5.024695s
```
|
|\
| |
| | |
Improve String#first and #last performance
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Removes unnecessary conditional and method call for significant
performance improvement. As a side effect, this fixes an unexpected
behavior where passing a limit of 0 would return a frozen string.
This also implements the Rails 6.1 intended behavior with regards to
negative limits, and removes the previous deprecation warnings.
String#first Comparison:
new: 3056515.0 i/s
old: 1943310.2 i/s - 1.57x slower
String#last Comparison:
new: 2691919.0 i/s
old: 1924256.6 i/s - 1.40x slower
(Note: "old" benchmarks have deprecation warnings commented out, for a
more fair comparison.)
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In case a negative position is provided that exceeds the size of the
string, we're relying on -1 returned from max to get 0 length by + 1
and let [] with a 0 length returning "" for us.
E.g. "hello".to(-7), where -7 + 5 size = -2. That's
lower than -1, so we use -1 instead and + 1 would turn it into 0.
Instead allow outer bounds access and always return "".
|
|\ \
| | |
| | | |
Avoid extra allocation in String#from and #to
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Removes unnecessary Range object allocations for a significant speed-up.
String#from Comparison:
new: 3378594.0 i/s
old: 2380129.8 i/s - 1.42x slower
String#to Comparison:
new: 2866175.7 i/s
old: 2304406.4 i/s - 1.24x slower
|
|/
|
|
|
|
|
|
|
|
|
| |
We sometimes say "✂️ newline after `private`" in a code review (e.g.
https://github.com/rails/rails/pull/18546#discussion_r23188776,
https://github.com/rails/rails/pull/34832#discussion_r244847195).
Now `Layout/EmptyLinesAroundAccessModifier` cop have new enforced style
`EnforcedStyle: only_before` (https://github.com/rubocop-hq/rubocop/pull/7059).
That cop and enforced style will reduce the our code review cost.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add test asserting truncate returns unfrozen string
* Ensure strings returned from truncate are not frozen
This fixes an issue where strings too short to be truncated were
returned unfrozen, where as long-enough strings were returned
frozen. Now retuned strings will not be frozen whether or not
the string returned was shortened.
* Update changelog w/ new truncate behavior description
[Jordan Thomas + Rafael Mendonça França]
|
| |
|
|\
| |
| | |
sub, sub!, gsub, and gsub! should set back references
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
|/
|
|
|
|
| |
Parameterize is triggering I18n#transliterate. This method already
accepts a locale. It would be cleaner if similar to other string inflection
methods #parameterize also accepted 'locale' as a parameter.
|
|\
| |
| | |
Add deprecation warning when String#first and String#last receive neg…
|
| |
| |
| |
| |
| |
| | |
integers
[Gannon McGibbon + Eric Turner]
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since Rails 6.0 will support Ruby 2.4.1 or higher
`# frozen_string_literal: true` magic comment is enough to make string object frozen.
This magic comment is enabled by `Style/FrozenStringLiteralComment` cop.
* Exclude these files not to auto correct false positive `Regexp#freeze`
- 'actionpack/lib/action_dispatch/journey/router/utils.rb'
- 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb'
It has been fixed by https://github.com/rubocop-hq/rubocop/pull/6333
Once the newer version of RuboCop released and available at Code Climate these exclude entries should be removed.
* Replace `String#freeze` with `String#-@` manually if explicit frozen string objects are required
- 'actionpack/test/controller/test_case_test.rb'
- 'activemodel/test/cases/type/string_test.rb'
- 'activesupport/lib/active_support/core_ext/string/strip.rb'
- 'activesupport/test/core_ext/string_ext_test.rb'
- 'railties/test/generators/actions_test.rb'
|
|
|
|
|
|
|
|
|
|
| |
* Handle more unsafe String methods
* Fix codeclimate issue
* Revert stylistic change
[Janosch Müller + Rafael Mendonça França]
|
|
|
|
|
|
| |
original buffer was safe.
Co-Authored-By: no-itsbackpack <no-itsbackpack@github.com>
|
|
|
|
|
| |
This faithfully preserves grapheme clusters (characters composed of other
characters and combining marks) and other multibyte characters.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
```ruby
"foo".freeze.strip_heredoc.frozen? # => true
```
Fixes the case where frozen string literals would inadvertently become
unfrozen:
```ruby
foo = <<-MSG.strip_heredoc
la la la
MSG
foo.frozen? # => false !??
```
|
|
|
|
|
|
| |
Skipping over 2.4.0 to sidestep the `"symbol_from_string".to_sym.dup` bug.
References #32028
|
|
|
|
|
| |
(#31275)
https://www.ruby-lang.org/en/news/2016/09/08/ruby-2-4-0-preview2-released/
|
| |
|
|
|
| |
[ci skip]
|
|
|
|
| |
This basically reverts 8da30ad6be34339124ba4cb4e36aea260dda12bc
|
|
|
|
|
| |
Instructions to use `h` or `html_escape` in ERB templates were added to
`actionpack/lib/action_view/template_handlers/erb.rb` in a1b0349 (Rails
2.1), but ERB has automatically escaped values since Rails 3.
|
|
|
|
|
|
|
|
|
| |
Don't use remove_method or remove_possible_method just before a new
definition: at best the purpose is unclear, and at worst it creates a
race condition.
Instead, prefer redefine_method when practical, and
silence_redefinition_of_method otherwise.
|
|
|
|
|
|
|
|
|
| |
String#camelize was returning nil without any feedback when an
invalid option was passed as parameter. This update makes the method
to raises an ArgumentError when the option passed is invalid, similar
to what Ruby does for String#downcase (and others) in 2.4.1.
https://ruby-doc.org/core-2.4.1/String.html#method-i-downcase
|
| |
|
| |
|
| |
|
| |
|
|\
| |
| |
| |
| |
| | |
mubashirhanif/add_keep_id_suffix_option_to_humanize_new
Add keep id suffix option to humanize new
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
some documentation
remove extra whitespace.
Added id in the middle test case and corrected some testcases.
Some Coding standard guidelines corrections as suggested by codeclimate.
Some more corrections suggested by codeclimate.
|
| | |
|
|/ |
|
| |
|
|\
| |
| | |
Add missing `+` around a some literals.
|
| |
| |
| |
| |
| |
| | |
Mainly around `nil`
[ci skip]
|
|/ |
|
|
|
|
|
|
|
|
| |
Style/SpaceBeforeBlockBraces
Style/SpaceInsideBlockBraces
Style/SpaceInsideHashLiteralBraces
Fix all violations in the repository.
|
|
|
|
|
|
|
|
|
| |
A few have been left for aesthetic reasons, but have made a pass
and removed most of them.
Note that if the method `foo` returns an array, `foo << 1`
is a regular push, nothing to do with assignments, so
no self required.
|
| |
|
|
|
|
|
| |
The current code base is not uniform. After some discussion,
we have chosen to go with double quotes by default.
|
| |
|