corefines 1.2.0 → 1.3.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +8 -0
- data/README.adoc +10 -3
- data/lib/corefines/hash.rb +82 -0
- data/lib/corefines/string.rb +89 -0
- data/lib/corefines/version.rb +1 -1
- data/spec/hash/except_spec.rb +65 -0
- data/spec/hash/only_spec.rb +67 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/string/relative_path_from_spec.rb +29 -0
- data/spec/string/to_regexp_spec.rb +75 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de04dfa5cd06fc172ea71b0f428f04b76b6b0527
|
4
|
+
data.tar.gz: 0deb05f19ce1dddd0ca60d13e8f9101dee5d49c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 078f83c0f36e11534267b88cb445aad00f8483c6ddf9e1e3c2f804044d09f619655b75560038bc2f99cafccf577f0468ea0e32fca166069ed2c5ff7bcb78e5e2
|
7
|
+
data.tar.gz: 366f0084b4bac8eec6666fc40fb6091896be88c1d3d90f9c59047227e354bcd99ce82b991a26935639c35f1b483e59471ea0a717492dd94918d281846cbc72a5
|
data/CHANGELOG.adoc
CHANGED
@@ -3,6 +3,14 @@
|
|
3
3
|
:doc-base-url: http://www.rubydoc.info/github/jirutka/corefines/Corefines
|
4
4
|
:issue-uri: {repo-uri}/issues
|
5
5
|
|
6
|
+
== 1.3.0 (2015-04-29)
|
7
|
+
|
8
|
+
* Add new refinement {doc-base-url}/String/ToRegexp[String#to_regexp].
|
9
|
+
* Add new refinement {doc-base-url}/String/RelativePathFrom[String#relative_path_from].
|
10
|
+
* Add new refinement {doc-base-url}/Hash/Except[Hash#except].
|
11
|
+
* Add new refinement {doc-base-url}/Hash/Only[Hash#only].
|
12
|
+
|
13
|
+
|
6
14
|
== 1.2.0 (2015-04-27)
|
7
15
|
|
8
16
|
* Add new refinement {doc-base-url}/String/Indent[String#indent].
|
data/README.adoc
CHANGED
@@ -41,12 +41,12 @@ TODO
|
|
41
41
|
Add this line to your application’s Gemfile:
|
42
42
|
|
43
43
|
[source]
|
44
|
-
gem 'corefines', '~> 1.
|
44
|
+
gem 'corefines', '~> 1.3'
|
45
45
|
|
46
46
|
or to your gemspec:
|
47
47
|
|
48
48
|
[source]
|
49
|
-
s.add_runtime_dependency 'corefines', '~> 1.
|
49
|
+
s.add_runtime_dependency 'corefines', '~> 1.3'
|
50
50
|
|
51
51
|
and then execute:
|
52
52
|
|
@@ -139,6 +139,10 @@ Not ideal indeed, but probably the best of what we can achieve.
|
|
139
139
|
** {doc-base-url}/Hash/OpAdd[#+]
|
140
140
|
** {doc-base-url}/Hash/Compact[#compact]
|
141
141
|
** {doc-base-url}/Hash/Compact[#compact!]
|
142
|
+
** {doc-base-url}/Hash/Except[#except]
|
143
|
+
** {doc-base-url}/Hash/Except[#except!]
|
144
|
+
** {doc-base-url}/Hash/Only[#only]
|
145
|
+
** {doc-base-url}/Hash/Only[#only!]
|
142
146
|
** {doc-base-url}/Hash/Rekey[#rekey]
|
143
147
|
** {doc-base-url}/Hash/Rekey[#rekey!]
|
144
148
|
** {doc-base-url}/Hash/SymbolizeKeys[#symbolize_keys]
|
@@ -159,11 +163,13 @@ Not ideal indeed, but probably the best of what we can achieve.
|
|
159
163
|
** {doc-base-url}/Object/Try[#try!]
|
160
164
|
* {doc-base-url}/String[String]
|
161
165
|
** {doc-base-url}/String/Color[#color]
|
162
|
-
** {doc-base-url}/String/Concat[#concat]
|
166
|
+
** {doc-base-url}/String/Concat[#concat!]
|
163
167
|
** {doc-base-url}/String/Decolor[#decolor]
|
164
168
|
** {doc-base-url}/String/Indent[#indent]
|
169
|
+
** {doc-base-url}/String/RelativePathFrom[#relative_path_from]
|
165
170
|
** {doc-base-url}/String/Remove[#remove]
|
166
171
|
** {doc-base-url}/String/ToB[#to_b]
|
172
|
+
** {doc-base-url}/String/ToRegexp[#to_regexp]
|
167
173
|
** {doc-base-url}/String/Unindent[#unindent] (alias `#strip_heredoc`)
|
168
174
|
* {doc-base-url}/Symbol[Symbol]
|
169
175
|
** {doc-base-url}/Symbol/Call[#call]
|
@@ -177,6 +183,7 @@ Most of the extension methods are based on, or highly inspired from:
|
|
177
183
|
* https://github.com/rubyworks/facets[Ruby Facets]
|
178
184
|
* https://github.com/gregwebs/methodchain[methodchain]
|
179
185
|
* https://github.com/fazibear/colorize[colorize]
|
186
|
+
* https://github.com/seamusabshere/to_regexp[to_regexp]
|
180
187
|
|
181
188
|
Very useful articles about refinements and how to “trick” them:
|
182
189
|
|
data/lib/corefines/hash.rb
CHANGED
@@ -31,6 +31,86 @@ module Corefines
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
##
|
35
|
+
# @!method except(*keys)
|
36
|
+
# @example
|
37
|
+
# hash = { a: 1, b: 2, c: 3, d: 4 }
|
38
|
+
# hash.except(:a, :d) # => { b: 2, c: 3 }
|
39
|
+
# hash # => { a: 1, b: 2, c: 3, d: 4 }
|
40
|
+
#
|
41
|
+
# @param *keys the keys to exclude from the hash.
|
42
|
+
# @return [Hash] a new hash without the specified key/value pairs.
|
43
|
+
#
|
44
|
+
# @!method except!(*keys)
|
45
|
+
# Removes the specified keys/value pairs in-place.
|
46
|
+
#
|
47
|
+
# @example
|
48
|
+
# hash = { a: 1, b: 2, c: 3, d: 4 }
|
49
|
+
# hash.except(:a, :d) # => { b: 2, c: 3 }
|
50
|
+
# hash # => { b: 2, c: 3 }
|
51
|
+
#
|
52
|
+
# @see #except
|
53
|
+
# @param *keys (see #except)
|
54
|
+
# @return [Hash] a hash containing the removed key/value pairs.
|
55
|
+
#
|
56
|
+
module Except
|
57
|
+
refine ::Hash do
|
58
|
+
def except(*keys)
|
59
|
+
keys.each_with_object(dup) do |k, hash|
|
60
|
+
hash.delete(k)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def except!(*keys)
|
65
|
+
keys.each_with_object(dup.clear) do |k, deleted|
|
66
|
+
deleted[k] = delete(k) if has_key? k
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
##
|
73
|
+
# @!method only(*keys)
|
74
|
+
# @example
|
75
|
+
# hash = { a: 1, b: 2, c: 3, d: 4 }
|
76
|
+
# hash.only(:a, :d) # => { a: 1, d: 4 }
|
77
|
+
# hash # => { a: 1, b: 2, c: 3, d: 4 }
|
78
|
+
#
|
79
|
+
# @param *keys the keys to include in the hash.
|
80
|
+
# @return [Hash] a new hash with only the specified key/value pairs.
|
81
|
+
#
|
82
|
+
# @!method only!(*keys)
|
83
|
+
# Removes all key/value pairs except the ones specified by _keys_.
|
84
|
+
#
|
85
|
+
# @example
|
86
|
+
# hash = { a: 1, b: 2, c: 3, d: 4 }
|
87
|
+
# hash.only(:a, :d) # => { a: 1, d: 4 }
|
88
|
+
# hash # => { a: 1, d: 4 }
|
89
|
+
#
|
90
|
+
# @see #only
|
91
|
+
# @param *keys (see #only)
|
92
|
+
# @return [Hash] a hash containing the removed key/value pairs.
|
93
|
+
#
|
94
|
+
module Only
|
95
|
+
refine ::Hash do
|
96
|
+
def only(*keys)
|
97
|
+
# Note: self.dup is used to preserve the default_proc.
|
98
|
+
keys.each_with_object(dup.clear) do |k, hash|
|
99
|
+
hash[k] = self[k] if has_key? k
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def only!(*keys)
|
104
|
+
deleted = keys.each_with_object(dup) do |k, hash|
|
105
|
+
hash.delete(k)
|
106
|
+
end
|
107
|
+
replace only(*keys)
|
108
|
+
|
109
|
+
deleted
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
34
114
|
##
|
35
115
|
# @!method +(other_hash)
|
36
116
|
# Alias for +#merge+.
|
@@ -157,6 +237,8 @@ module Corefines
|
|
157
237
|
|
158
238
|
class << self
|
159
239
|
alias_method :compact!, :compact
|
240
|
+
alias_method :except!, :except
|
241
|
+
alias_method :only!, :only
|
160
242
|
alias_method :rekey!, :rekey
|
161
243
|
alias_method :symbolize_keys!, :symbolize_keys
|
162
244
|
end
|
data/lib/corefines/string.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
require 'corefines/support/alias_submodules'
|
2
3
|
|
3
4
|
module Corefines
|
@@ -170,6 +171,32 @@ module Corefines
|
|
170
171
|
end
|
171
172
|
end
|
172
173
|
|
174
|
+
##
|
175
|
+
# @!method relative_path_from(base_dir)
|
176
|
+
# Returns a relative path from the given _base_dir_ to the path
|
177
|
+
# represented by this _str_. This method doesn't access the filesystem
|
178
|
+
# and assumes no symlinks.
|
179
|
+
#
|
180
|
+
# If _str_ is absolute, then _base_dir_ must be absolute too.
|
181
|
+
# If _str_ is relative, then _base_dir_ must be relative too.
|
182
|
+
#
|
183
|
+
# @example
|
184
|
+
# '/home/flynn/tron'.relative_path_from('/home') # => flynn/tron
|
185
|
+
# '/home'.relative_path_from('/home/flynn/tron') # => ../..
|
186
|
+
#
|
187
|
+
# @param base_dir [String, Pathname] the base directory to calculate
|
188
|
+
# relative path from.
|
189
|
+
# @return [String] a relative path from _base_dir_ to this _str_.
|
190
|
+
# @raise ArgumentError if it cannot find a relative path.
|
191
|
+
#
|
192
|
+
module RelativePathFrom
|
193
|
+
refine ::String do
|
194
|
+
def relative_path_from(base_dir)
|
195
|
+
::Pathname.new(self).relative_path_from(::Pathname.new(base_dir)).to_s
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
173
200
|
##
|
174
201
|
# @!method remove(*patterns)
|
175
202
|
# Returns a copy of this string with *all* occurrences of the _patterns_
|
@@ -236,6 +263,68 @@ module Corefines
|
|
236
263
|
end
|
237
264
|
end
|
238
265
|
|
266
|
+
##
|
267
|
+
# @!method to_regexp(opts = {})
|
268
|
+
# Returns a regular expression represented by this string.
|
269
|
+
#
|
270
|
+
# @example
|
271
|
+
# '/^foo/'.to_regexp # => /^foo/
|
272
|
+
# '/foo/i'.to_regexp # => /foo/i
|
273
|
+
# 'foo'.to_regexp # => nil
|
274
|
+
#
|
275
|
+
# 'foo'.to_regexp(literal: true) # => /foo/
|
276
|
+
# '^foo*'.to_regexp(literal: true) # => /\^foo\*/
|
277
|
+
#
|
278
|
+
# '/foo/'.to_regexp(detect: true) # => /foo/
|
279
|
+
# '$foo/'.to_regexp(detect: true) # => /\$foo\//
|
280
|
+
# ''.to_regexp(detect: true) # => nil
|
281
|
+
#
|
282
|
+
# '/foo/'.to_regexp(multiline: true) # => /foo/m
|
283
|
+
#
|
284
|
+
# @param opts [Hash] options
|
285
|
+
# @option opts :literal [Boolean] treat meta characters and other regexp
|
286
|
+
# codes as just a text. Never returns +nil+. (default: false)
|
287
|
+
# @option opts :detect [Boolean] if string starts and ends with a slash,
|
288
|
+
# treat it as a regexp, otherwise interpret it literally.
|
289
|
+
# (default: false)
|
290
|
+
# @option opts :ignore_case [Boolean] same as +/foo/i+. (default: false)
|
291
|
+
# @option opts :multiline [Boolean] same as +/foo/m+. (default: false)
|
292
|
+
# @option opts :extended [Boolean] same as +/foo/x+. (default: false)
|
293
|
+
#
|
294
|
+
# @return [Regexp, nil] a regexp, or +nil+ if +:literal+ is not set or
|
295
|
+
# +false+ and this string doesn't represent a valid regexp or is empty.
|
296
|
+
#
|
297
|
+
module ToRegexp
|
298
|
+
refine ::String do
|
299
|
+
def to_regexp(opts = {})
|
300
|
+
|
301
|
+
if opts[:literal]
|
302
|
+
content = ::Regexp.escape(self)
|
303
|
+
|
304
|
+
elsif self =~ %r{\A/(.*)/([imxnesu]*)\z}
|
305
|
+
content, inline_opts = $1, $2
|
306
|
+
content.gsub! '\\/', '/'
|
307
|
+
|
308
|
+
{ ignore_case: 'i', multiline: 'm', extended: 'x' }.each do |k, v|
|
309
|
+
opts[k] ||= inline_opts.include? v
|
310
|
+
end if inline_opts
|
311
|
+
|
312
|
+
elsif opts[:detect] && !self.empty?
|
313
|
+
content = ::Regexp.escape(self)
|
314
|
+
else
|
315
|
+
return
|
316
|
+
end
|
317
|
+
|
318
|
+
options = 0
|
319
|
+
options |= ::Regexp::IGNORECASE if opts[:ignore_case]
|
320
|
+
options |= ::Regexp::MULTILINE if opts[:multiline]
|
321
|
+
options |= ::Regexp::EXTENDED if opts[:extended]
|
322
|
+
|
323
|
+
::Regexp.new(content, options)
|
324
|
+
end
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
239
328
|
##
|
240
329
|
# @!method unindent
|
241
330
|
# Remove excessive indentation. Useful for multi-line strings embeded in
|
data/lib/corefines/version.rb
CHANGED
@@ -0,0 +1,65 @@
|
|
1
|
+
describe Hash do
|
2
|
+
using Corefines::Hash::except
|
3
|
+
|
4
|
+
subject(:hash) { {:one => 'ONE', 'two' => 'TWO', 3 => 'THREE'} }
|
5
|
+
|
6
|
+
let(:hash_with_proc) { Hash.new(&default_proc) }
|
7
|
+
let(:default_proc) { proc {} }
|
8
|
+
|
9
|
+
let(:hash_with_default) { Hash.new(default_value) }
|
10
|
+
let(:default_value) { 42 }
|
11
|
+
|
12
|
+
|
13
|
+
describe '#except' do
|
14
|
+
|
15
|
+
context "existing keys" do
|
16
|
+
it "returns a copy of the hash without the specified keys" do
|
17
|
+
expect( hash.except(:one, 3) ).to eql({'two' => 'TWO'})
|
18
|
+
expect( hash.except('two') ).to eql({:one => 'ONE', 3 => 'THREE'})
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "non-existing key" do
|
23
|
+
it "returns a copy of the hash unchanged" do
|
24
|
+
expect( hash.except(:x) ).to eql hash
|
25
|
+
expect( hash.except(:x) ).to_not equal(hash)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "preserves the default_proc" do
|
30
|
+
expect( hash_with_proc.except(:one).default_proc ).to equal default_proc
|
31
|
+
end
|
32
|
+
|
33
|
+
it "preserves the default" do
|
34
|
+
expect( hash_with_default.except(:one).default ).to eq default_value
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
describe '#except!' do
|
40
|
+
|
41
|
+
context "existing keys" do
|
42
|
+
it "removes the specified keys/value pairs and returns them" do
|
43
|
+
expect( hash.except!(:one, 3) ).to eql({:one => 'ONE', 3 => 'THREE'})
|
44
|
+
is_expected.to eq({'two' => 'TWO'})
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "non-existing key" do
|
49
|
+
it "keeps the hash unchanged and returns an empty hash" do
|
50
|
+
expect( hash.except!(:x) ).to eq({})
|
51
|
+
expect( hash ).to equal hash
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it "preserves the default_proc" do
|
56
|
+
expect( hash_with_proc.except!(:one).default_proc ).to equal default_proc
|
57
|
+
expect( hash_with_proc.default_proc ).to equal default_proc
|
58
|
+
end
|
59
|
+
|
60
|
+
it "preserves the default" do
|
61
|
+
expect( hash_with_default.except!(:one).default ).to eq default_value
|
62
|
+
expect( hash_with_default.default ).to eq default_value
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
describe Hash do
|
2
|
+
using Corefines::Hash::only
|
3
|
+
|
4
|
+
let(:hash) { {:one => 'ONE', 'two' => 'TWO', 3 => 'THREE'} }
|
5
|
+
let!(:original) { hash.dup }
|
6
|
+
|
7
|
+
let(:hash_with_proc) { Hash.new(&default_proc) }
|
8
|
+
let(:default_proc) { proc {} }
|
9
|
+
|
10
|
+
let(:hash_with_default) { Hash.new(default_value) }
|
11
|
+
let(:default_value) { 42 }
|
12
|
+
|
13
|
+
|
14
|
+
describe '#only' do
|
15
|
+
|
16
|
+
context "existing keys" do
|
17
|
+
it "returns a copy of the hash with only the specified keys" do
|
18
|
+
expect( hash.only(:one, 3) ).to eq({:one => 'ONE', 3 => 'THREE'})
|
19
|
+
expect( hash.only('two') ).to eq({'two' => 'TWO'})
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "non-existing key" do
|
24
|
+
it "returns an empty hash" do
|
25
|
+
expect( hash.only(:x) ).to eq({})
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "preserves the default_proc" do
|
30
|
+
expect( hash_with_proc.only(:one).default_proc ).to equal default_proc
|
31
|
+
end
|
32
|
+
|
33
|
+
it "preserves the default" do
|
34
|
+
expect( hash_with_default.only(:one).default ).to eq default_value
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
describe '#only!' do
|
40
|
+
|
41
|
+
context "existing keys" do
|
42
|
+
it "removes all key/value pairs except the specified and returns the removed" do
|
43
|
+
expect( hash.only!(:one, 3) ).to eq({'two' => 'TWO'})
|
44
|
+
expect( hash ).to eq({:one => 'ONE', 3 => 'THREE'})
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "non-existing key" do
|
49
|
+
it "removes all key/value pairs and returns a copy of the original hash" do
|
50
|
+
result = hash.only!(:x)
|
51
|
+
expect( result ).to eq original
|
52
|
+
expect( result ).to_not equal original
|
53
|
+
expect( hash ).to eq({})
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it "preserves the default_proc" do
|
58
|
+
expect( hash_with_proc.only!(:one).default_proc ).to equal default_proc
|
59
|
+
expect( hash_with_proc.default_proc ).to equal default_proc
|
60
|
+
end
|
61
|
+
|
62
|
+
it "preserves the default" do
|
63
|
+
expect( hash_with_default.only!(:one).default ).to eq default_value
|
64
|
+
expect( hash_with_default.default ).to eq default_value
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
describe String do
|
2
|
+
using Corefines::String::relative_path_from
|
3
|
+
|
4
|
+
describe '#relative_path_from' do
|
5
|
+
|
6
|
+
[
|
7
|
+
[ '/home/flynn/tron', '/home', 'flynn/tron' ],
|
8
|
+
[ '/home', '/home/flynn/tron', '../..' ],
|
9
|
+
[ 'home/flynn/tron', 'home', 'flynn/tron' ],
|
10
|
+
[ '../bin/run', '.', '../bin/run' ],
|
11
|
+
[ '/usr/bin/../lib', '/', 'usr/lib' ]
|
12
|
+
]
|
13
|
+
.each do |path, base, expected|
|
14
|
+
it "returns '#{expected}' for path '#{path}' and base '#{base}'" do
|
15
|
+
expect(path.relative_path_from(base)).to eql expected
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "mismatched relative and absolute path" do
|
20
|
+
{
|
21
|
+
'/home/flynn' => 'home',
|
22
|
+
'home/flynn' => '/home'
|
23
|
+
}
|
24
|
+
.each do |path, base|
|
25
|
+
it { expect { path.relative_path_from(base) }.to raise_error ArgumentError }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
describe String do
|
4
|
+
using Corefines::String::to_regexp
|
5
|
+
|
6
|
+
describe 'to_regexp' do
|
7
|
+
|
8
|
+
context "with defaults" do
|
9
|
+
{
|
10
|
+
'/foo/' => /foo/,
|
11
|
+
'/foo/i' => /foo/i,
|
12
|
+
'/foo/m' => /foo/m,
|
13
|
+
'/foo/x' => /foo/x,
|
14
|
+
'/foo/imx' => /foo/imx,
|
15
|
+
'/foo.*(o)/' => /foo.*(o)/,
|
16
|
+
'/česk[yý]/' => /česk[yý]/,
|
17
|
+
'/foo\/bar/' => %r{foo/bar},
|
18
|
+
'/foo' => nil,
|
19
|
+
'/foo/z' => nil
|
20
|
+
}
|
21
|
+
.each do |str, expected|
|
22
|
+
it "returns regexp '#{expected.inspect}' for string '#{str}'" do
|
23
|
+
expect(str.to_regexp).to eql expected
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
%w[n e s u nesu].each do |kcode|
|
28
|
+
it "ignores encoding option: #{kcode}" do
|
29
|
+
expect("/foo/#{kcode}".to_regexp).to eql /foo/
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "with literal" do
|
35
|
+
{
|
36
|
+
'/(foo)*/' => %r{/\(foo\)\*/},
|
37
|
+
'^foo)' => /\^foo\)/
|
38
|
+
}
|
39
|
+
.each do |str, expected|
|
40
|
+
it "returns regexp '#{expected.inspect}' for string '#{str}" do
|
41
|
+
expect(str.to_regexp(literal: true)).to eql expected
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "with detect" do
|
47
|
+
{
|
48
|
+
'' => nil,
|
49
|
+
'foo' => /foo/,
|
50
|
+
'(foo)*' => /\(foo\)\*/,
|
51
|
+
'/[a-z]' => %r{/\[a\-z\]},
|
52
|
+
'^.foo/x' => %r{\^\.foo/x},
|
53
|
+
'//' => //,
|
54
|
+
'/(foo)*/im' => /(foo)*/im
|
55
|
+
}
|
56
|
+
.each do |str, expected|
|
57
|
+
it "returns regexp '#{expected.inspect}' for string '#{str}'" do
|
58
|
+
expect(str.to_regexp(detect: true)).to eql expected
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "with ignore_case" do
|
64
|
+
it { expect('/foo/'.to_regexp(ignore_case: true)).to eql /foo/i }
|
65
|
+
end
|
66
|
+
|
67
|
+
context "with multiline" do
|
68
|
+
it { expect('/foo/'.to_regexp(multiline: true)).to eql /foo/m }
|
69
|
+
end
|
70
|
+
|
71
|
+
context "with extended" do
|
72
|
+
it { expect('/foo/'.to_regexp(extended: true)).to eql /foo/x }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: corefines
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jakub Jirutka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|
@@ -125,6 +125,8 @@ files:
|
|
125
125
|
- spec/enumerable/index_by_spec.rb
|
126
126
|
- spec/enumerable/map_send_spec.rb
|
127
127
|
- spec/hash/compact_spec.rb
|
128
|
+
- spec/hash/except_spec.rb
|
129
|
+
- spec/hash/only_spec.rb
|
128
130
|
- spec/hash/op_add_spec.rb
|
129
131
|
- spec/hash/rekey_spec.rb
|
130
132
|
- spec/hash/symbolize_keys_spec.rb
|
@@ -143,8 +145,10 @@ files:
|
|
143
145
|
- spec/string/concat_spec.rb
|
144
146
|
- spec/string/decolor_spec.rb
|
145
147
|
- spec/string/indent_spec.rb
|
148
|
+
- spec/string/relative_path_from_spec.rb
|
146
149
|
- spec/string/remove_spec.rb
|
147
150
|
- spec/string/to_b_spec.rb
|
151
|
+
- spec/string/to_regexp_spec.rb
|
148
152
|
- spec/string/unindent_spec.rb
|
149
153
|
- spec/support/alias_submodules_spec.rb
|
150
154
|
- spec/support/classes_including_module_spec.rb
|