fast_underscore 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path('../lib', __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require 'fast_underscore/version'
6
6
 
@@ -24,9 +24,10 @@ Gem::Specification.new do |spec|
24
24
  spec.extensions = ['ext/fast_underscore/extconf.rb']
25
25
 
26
26
  spec.add_development_dependency 'benchmark-ips', '~> 2'
27
- spec.add_development_dependency 'bundler', '~> 1'
27
+ spec.add_development_dependency 'bundler', '~> 2'
28
28
  spec.add_development_dependency 'minitest', '~> 5'
29
- spec.add_development_dependency 'rake', '~> 12'
29
+ spec.add_development_dependency 'rake', '~> 13'
30
30
  spec.add_development_dependency 'rake-compiler', '~> 1'
31
- spec.add_development_dependency 'rubocop', '~> 0.52'
31
+ spec.add_development_dependency 'rubocop', '~> 1.12'
32
+ spec.add_development_dependency 'steep'
32
33
  end
data/gemfiles/5.1.gemfile CHANGED
@@ -4,4 +4,4 @@ source 'https://rubygems.org'
4
4
 
5
5
  gemspec path: '..'
6
6
 
7
- gem 'activesupport', '~> 5.1'
7
+ gem 'activesupport', '~> 5.1.7'
data/gemfiles/5.2.gemfile CHANGED
@@ -4,4 +4,4 @@ source 'https://rubygems.org'
4
4
 
5
5
  gemspec path: '..'
6
6
 
7
- gem 'activesupport', '~> 5.2'
7
+ gem 'activesupport', '~> 5.2.5'
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec path: '..'
6
+
7
+ gem 'activesupport', '~> 6.0.3'
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec path: '..'
6
+
7
+ gem 'activesupport', '~> 6.1.3'
@@ -4,42 +4,85 @@ require 'fast_underscore/version'
4
4
  require 'fast_underscore/fast_underscore'
5
5
 
6
6
  module FastUnderscore
7
- # Depending on `ActiveSupport::VERSION`, `::install` determines the manner in
8
- # which acronyms are handled, then it redefines the
9
- # `ActiveSupport::Inflector::underscore` method to use the `FastUnderscore`
10
- # native extension. It leaves the existing `ActiveSupport` monkeypatch on
11
- # `String` that allows it to call into the newly redefined `Inflector` method.
12
- def self.install
7
+ # Override ActiveSupport::Inflector::underscore to use
8
+ # FastUnderscore::underscore for ActiveSupport < 5.2.0.
9
+ module ActiveSupportInflectorOldPatch
10
+ def self.pattern
11
+ return @pattern if defined?(@pattern)
12
+
13
+ acronym_regex = ActiveSupport::Inflector.inflections.acronym_regex
14
+ @pattern = /(?:(?<=([A-Za-z\d]))|\b)(#{acronym_regex})(?=\b|[^a-z])/
15
+ end
16
+
17
+ def underscore(string)
18
+ return string unless /[A-Z-]|::/.match?(string)
19
+
20
+ response = string.dup
21
+ response.gsub!(ActiveSupportInflectorOldPatch.pattern) do
22
+ "#{$1 && '_'}#{$2.downcase}"
23
+ end
24
+
25
+ FastUnderscore.underscore(response)
26
+ end
27
+ end
28
+
29
+ # Override ActiveSupport::Inflector::underscore to use
30
+ # FastUnderscore::underscore for ActiveSupport >= 5.2.0.
31
+ module ActiveSupportInflectorPatch
32
+ def underscore(string)
33
+ return string unless /[A-Z-]|::/.match?(string)
34
+
35
+ response = string.dup
36
+ acronyms = ActiveSupport::Inflector.inflections.acronyms_underscore_regex
37
+
38
+ response.gsub!(acronyms) { "#{$1 && '_'}#{$2.downcase}" }
39
+
40
+ FastUnderscore.underscore(response)
41
+ end
42
+ end
43
+
44
+ # Hooks into ActiveSupport::Inflector and waits for the #underscore method to
45
+ # be defined. When it is, it automatically redefines it.
46
+ module ActiveSupportedDelayedPatch
47
+ def method_added(method)
48
+ FastUnderscore.active_support if method == :underscore
49
+ super
50
+ end
51
+ end
52
+
53
+ # Override the String#underscore method no matter when it was defined so that
54
+ # we're sure it's going to call the correct implementation.
55
+ module ActiveSupportStringPatch
56
+ def underscore
57
+ ActiveSupport::Inflector.underscore(self)
58
+ end
59
+ end
60
+
61
+ # Depending on ActiveSupport::VERSION, ::active_support determines the manner
62
+ # in which acronyms are handled, then it redefines the
63
+ # ActiveSupport::Inflector::underscore method to use the FastUnderscore
64
+ # native extension.
65
+ def self.active_support
13
66
  require 'active_support/version'
14
67
  gem_version = Gem::Version.new(ActiveSupport::VERSION::STRING)
15
68
 
16
69
  if gem_version >= Gem::Version.new('5.2.0')
17
- require 'fast_underscore/acronym_underscore_regex'
70
+ ActiveSupport::Inflector.prepend(ActiveSupportInflectorPatch)
18
71
  else
19
- require 'fast_underscore/acronym_regex'
72
+ ActiveSupport::Inflector.prepend(ActiveSupportInflectorOldPatch)
20
73
  end
74
+
75
+ ActiveSupport::Inflector.alias_method(:as_underscore, :underscore)
76
+ String.prepend(ActiveSupportStringPatch)
21
77
  end
22
78
  end
23
79
 
24
80
  if defined?(ActiveSupport)
25
- FastUnderscore.install
81
+ FastUnderscore.active_support
26
82
  else
27
83
  module ActiveSupport
28
84
  module Inflector
29
- class << self
30
- prepend(
31
- Module.new do
32
- # Hooks into ActiveSupport::Inflector and waits for the #underscore
33
- # method to be defined. When it is, it automatically redefines it.
34
- # Using this `prepend` trick to attempt to be a good citizen in the
35
- # case that someone else has already hooked into `method_added` on
36
- # `Inflector`.
37
- def method_added(method)
38
- method == :underscore ? FastUnderscore.install : super
39
- end
40
- end
41
- )
42
- end
85
+ prepend(FastUnderscore::ActiveSupportedDelayedPatch)
43
86
  end
44
87
  end
45
88
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FastUnderscore
4
- VERSION = '0.3.1'
4
+ VERSION = '0.3.2'
5
5
  end
@@ -0,0 +1,10 @@
1
+ module FastUnderscore
2
+ VERSION: String
3
+
4
+ def self.active_support: () -> void
5
+ def self.underscore: (String string) -> String
6
+ end
7
+
8
+ class String
9
+ def underscore: () -> String
10
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fast_underscore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Deisz
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-18 00:00:00.000000000 Z
11
+ date: 2021-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: benchmark-ips
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1'
33
+ version: '2'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1'
40
+ version: '2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '12'
61
+ version: '13'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '12'
68
+ version: '13'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake-compiler
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,28 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.52'
89
+ version: '1.12'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.52'
96
+ version: '1.12'
97
+ - !ruby/object:Gem::Dependency
98
+ name: steep
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  description: Provides a C-optimized method for underscoring a string
98
112
  email:
99
113
  - kevin.deisz@gmail.com
@@ -102,18 +116,20 @@ extensions:
102
116
  - ext/fast_underscore/extconf.rb
103
117
  extra_rdoc_files: []
104
118
  files:
119
+ - ".github/dependabot.yml"
120
+ - ".github/workflows/main.yml"
105
121
  - ".gitignore"
106
122
  - ".rubocop.yml"
107
- - ".travis.yml"
123
+ - CHANGELOG.md
124
+ - CODE_OF_CONDUCT.md
108
125
  - Gemfile
109
126
  - Gemfile.lock
110
- - LICENSE.txt
127
+ - LICENSE
111
128
  - README.md
112
129
  - Rakefile
113
- - bin/benchmark
130
+ - Steepfile
131
+ - bin/bench
114
132
  - bin/console
115
- - bin/rake
116
- - bin/rubocop
117
133
  - bin/setup
118
134
  - ext/fast_underscore/extconf.rb
119
135
  - ext/fast_underscore/fast_underscore.c
@@ -121,15 +137,16 @@ files:
121
137
  - fast_underscore.gemspec
122
138
  - gemfiles/5.1.gemfile
123
139
  - gemfiles/5.2.gemfile
140
+ - gemfiles/6.0.gemfile
141
+ - gemfiles/6.1.gemfile
124
142
  - lib/fast_underscore.rb
125
- - lib/fast_underscore/acronym_regex.rb
126
- - lib/fast_underscore/acronym_underscore_regex.rb
127
143
  - lib/fast_underscore/version.rb
144
+ - sig/fast_underscore.rbs
128
145
  homepage: https://github.com/kddeisz/fast_underscore
129
146
  licenses:
130
147
  - MIT
131
148
  metadata: {}
132
- post_install_message:
149
+ post_install_message:
133
150
  rdoc_options: []
134
151
  require_paths:
135
152
  - lib
@@ -144,9 +161,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
161
  - !ruby/object:Gem::Version
145
162
  version: '0'
146
163
  requirements: []
147
- rubyforge_project:
148
- rubygems_version: 2.7.6
149
- signing_key:
164
+ rubygems_version: 3.2.3
165
+ signing_key:
150
166
  specification_version: 4
151
167
  summary: Fast String#underscore implementation
152
168
  test_files: []
data/.travis.yml DELETED
@@ -1,9 +0,0 @@
1
- language: ruby
2
- rvm: 2.5.1
3
- branches:
4
- only: master
5
- cache: bundler
6
- script: bin/rubocop && bin/rake
7
- gemfile:
8
- - gemfiles/5.1.gemfile
9
- - gemfiles/5.2.gemfile
data/bin/rake DELETED
@@ -1,29 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- #
5
- # This file was generated by Bundler.
6
- #
7
- # The application 'rake' is installed as part of a gem, and
8
- # this file is here to facilitate running it.
9
- #
10
-
11
- require "pathname"
12
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
- Pathname.new(__FILE__).realpath)
14
-
15
- bundle_binstub = File.expand_path("../bundle", __FILE__)
16
-
17
- if File.file?(bundle_binstub)
18
- if File.read(bundle_binstub, 150) =~ /This file was generated by Bundler/
19
- load(bundle_binstub)
20
- else
21
- abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
- Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
- end
24
- end
25
-
26
- require "rubygems"
27
- require "bundler/setup"
28
-
29
- load Gem.bin_path("rake", "rake")
data/bin/rubocop DELETED
@@ -1,29 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- #
5
- # This file was generated by Bundler.
6
- #
7
- # The application 'rubocop' is installed as part of a gem, and
8
- # this file is here to facilitate running it.
9
- #
10
-
11
- require "pathname"
12
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
- Pathname.new(__FILE__).realpath)
14
-
15
- bundle_binstub = File.expand_path("../bundle", __FILE__)
16
-
17
- if File.file?(bundle_binstub)
18
- if File.read(bundle_binstub, 150) =~ /This file was generated by Bundler/
19
- load(bundle_binstub)
20
- else
21
- abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
- Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
- end
24
- end
25
-
26
- require "rubygems"
27
- require "bundler/setup"
28
-
29
- load Gem.bin_path("rubocop", "rubocop")
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module FastUnderscore
4
- # Uses ActiveSupport's `acronym_regex` method to construct a memoized pattern
5
- # for replacing acronyms within strings that need to be underscored.
6
- module AcronymRegex
7
- def self.pattern
8
- return @pattern if defined?(@pattern)
9
-
10
- acronym_regex = ActiveSupport::Inflector.inflections.acronym_regex
11
- @pattern ||= /(?:(?<=([A-Za-z\d]))|\b)(#{acronym_regex})(?=\b|[^a-z])/
12
- end
13
-
14
- def underscore(string)
15
- return string unless /[A-Z-]|::/.match?(string)
16
-
17
- response = string.dup
18
- response.gsub!(AcronymRegex.pattern) { "#{$1 && '_'}#{$2.downcase}" }
19
-
20
- FastUnderscore.underscore(response)
21
- end
22
- end
23
-
24
- class << ActiveSupport::Inflector
25
- alias as_underscore underscore
26
- include AcronymRegex
27
- end
28
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module FastUnderscore
4
- # Uses ActiveSupport's `acronym_underscore_regex` method for replacing
5
- # acronyms within strings that need to be underscored.
6
- module AcronymUnderscoreRegex
7
- def underscore(string)
8
- return string unless /[A-Z-]|::/.match?(string)
9
-
10
- response = string.dup
11
- acronyms = ActiveSupport::Inflector.inflections.acronyms_underscore_regex
12
-
13
- response.gsub!(acronyms) { "#{$1 && '_'}#{$2.downcase}" }
14
-
15
- FastUnderscore.underscore(response)
16
- end
17
- end
18
-
19
- class << ActiveSupport::Inflector
20
- alias as_underscore underscore
21
- include AcronymUnderscoreRegex
22
- end
23
- end