sixarm_ruby_ramp 2.1.3 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +1 -0
- data.tar.gz.sig +1 -1
- data/CONTRIBUTING.md +28 -0
- data/{README.rdoc → README.md} +112 -42
- data/VERSION +1 -1
- data/lib/sixarm_ruby_ramp.rb +1 -1
- data/lib/sixarm_ruby_ramp/array.rb +39 -16
- data/lib/sixarm_ruby_ramp/hash.rb +1 -1
- data/lib/sixarm_ruby_ramp/kernel.rb +11 -5
- data/lib/sixarm_ruby_ramp/numeric.rb +49 -35
- data/lib/sixarm_ruby_ramp/process.rb +5 -20
- data/lib/sixarm_ruby_ramp/string.rb +3 -4
- data/lib/sixarm_ruby_ramp/xml.rb +0 -204
- data/test/sixarm_ruby_ramp_test.rb +2 -2
- data/test/sixarm_ruby_ramp_test/array_test.rb +330 -0
- data/test/sixarm_ruby_ramp_test/class_test.rb +87 -0
- data/test/sixarm_ruby_ramp_test/csv_test.rb +47 -0
- data/test/sixarm_ruby_ramp_test/date_test.rb +60 -0
- data/test/sixarm_ruby_ramp_test/enumerable_test.rb +303 -0
- data/test/sixarm_ruby_ramp_test/file_test.rb +17 -0
- data/test/sixarm_ruby_ramp_test/fixnum_test.rb +25 -0
- data/test/sixarm_ruby_ramp_test/hash_test.rb +209 -0
- data/test/sixarm_ruby_ramp_test/integer_test.rb +21 -0
- data/test/sixarm_ruby_ramp_test/io_test.rb +30 -0
- data/test/{sixarm_ruby_ramp → sixarm_ruby_ramp_test}/io_test.txt +0 -0
- data/test/sixarm_ruby_ramp_test/kernel_test.rb +55 -0
- data/test/sixarm_ruby_ramp_test/math_test.rb +19 -0
- data/test/sixarm_ruby_ramp_test/nil_test.rb +16 -0
- data/test/sixarm_ruby_ramp_test/numeric_test.rb +57 -0
- data/test/sixarm_ruby_ramp_test/object_test.rb +13 -0
- data/test/sixarm_ruby_ramp_test/process_test.rb +67 -0
- data/test/sixarm_ruby_ramp_test/string_test.rb +131 -0
- data/test/sixarm_ruby_ramp_test/symbol_test.rb +27 -0
- data/test/sixarm_ruby_ramp_test/time_test.rb +29 -0
- data/test/sixarm_ruby_ramp_test/xml_test.rb +10 -0
- data/test/sixarm_ruby_ramp_test/yaml_test.rb +8 -0
- metadata +100 -48
- metadata.gz.sig +0 -0
- data/CHANGELOG.txt +0 -53
- data/INSTALL.txt +0 -32
- data/LICENSE.txt +0 -25
- data/test/sixarm_ruby_ramp/xml_test_1.xml +0 -5
- data/test/sixarm_ruby_ramp/xml_test_2.xml +0 -5
- data/test/sixarm_ruby_ramp/xml_test_msword_clean.html +0 -1
- data/test/sixarm_ruby_ramp/xml_test_msword_dirty.html +0 -148
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5dbd872b8c2a8f3732dad03323ac18e1e818a7a0
|
4
|
+
data.tar.gz: 89e1ed1eb27a9249bb1742f13b50db9e25babe0c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9636b6fc7048ba889b1f46d5887bf07778045ebd4544ab18a20204e81095b17ea25dd51ed3e3de6b2744d11d301b4597ec91016050ffd3d6792cf46260e70170
|
7
|
+
data.tar.gz: 9359784e5fd0ad168d5a618334a06e18b6d4fd8d420654331ea8ff540f09fd5b85d29469665464ce901620fdb1d561d9593a628129c775e7f3f5da585e39ea3a
|
checksums.yaml.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
����YP����F�cU3��X��}���k�ŕE�wd��5�T�U�'e�U�X_*���6���r��D;
|
data.tar.gz.sig
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
X�1��L��e��o�
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
Thank you for contributing!
|
4
|
+
|
5
|
+
If you would like to contribute a donation, an easy way is to use PayPal to sixarm@sixarm.com.
|
6
|
+
|
7
|
+
If you would like to contribute help, the next section is for you.
|
8
|
+
|
9
|
+
|
10
|
+
## Contributing to the source
|
11
|
+
|
12
|
+
We love pull requests for improvments to the source code and documentation.
|
13
|
+
|
14
|
+
There are three easy steps:
|
15
|
+
|
16
|
+
1. Fork the repo.
|
17
|
+
|
18
|
+
* Before you do any work please run our existing tests to make sure the code runs cleanly.
|
19
|
+
|
20
|
+
2. Work as you like.
|
21
|
+
|
22
|
+
* Please create tests. This helps us know that all your code runs cleanly.
|
23
|
+
|
24
|
+
3. Push to your fork and submit a pull request.
|
25
|
+
|
26
|
+
* We'll take a look as soon as we can; this is typically within a business day.
|
27
|
+
|
28
|
+
Thank you again!
|
data/{README.rdoc → README.md}
RENAMED
@@ -1,24 +1,57 @@
|
|
1
|
-
|
1
|
+
# SixArm.com » Ruby » <br> Ramp gem is a toolkit of Ruby base class extensions
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
* Doc: <http://sixarm.com/sixarm_ruby_ramp/doc>
|
4
|
+
* Gem: <http://rubygems.org/gems/sixarm_ruby_ramp>
|
5
|
+
* Repo: <http://github.com/sixarm/sixarm_ruby_ramp>
|
6
|
+
* Email: Joel Parker Henderson, <joel@sixarm.com>
|
6
7
|
|
7
|
-
Ramp is a library of extensions to Ruby base classes, including Array, Date, Enumerable, Hash, Kernel, Numeric, Object, Process, String, Time, and YAML.
|
8
8
|
|
9
|
-
|
9
|
+
## Introduction
|
10
10
|
|
11
|
-
|
12
|
-
* The easy way to run the tests: gem install sixarm_ruby_ramp --test
|
11
|
+
Ramp is a library of extensions to Ruby base classes.
|
13
12
|
|
13
|
+
We extend Array, Date, Enumerable, Hash, Kernel, Numeric, Object, Process, String, Time, and YAML.
|
14
14
|
|
15
|
-
|
15
|
+
For docs go to <http://sixarm.com/sixarm_ruby_ramp/doc>
|
16
|
+
|
17
|
+
Want to help? We're happy to get pull requests.
|
18
|
+
|
19
|
+
|
20
|
+
## Install quickstart
|
21
|
+
|
22
|
+
Install:
|
23
|
+
|
24
|
+
gem install sixarm_ruby_ramp
|
25
|
+
|
26
|
+
Bundler:
|
27
|
+
|
28
|
+
gem "sixarm_ruby_ramp", "~>3.0.0"
|
29
|
+
|
30
|
+
Require:
|
31
|
+
|
32
|
+
require "sixarm_ruby_ramp"
|
33
|
+
|
34
|
+
|
35
|
+
## Install with security (optional)
|
36
|
+
|
37
|
+
To enable high security for all our gems:
|
38
|
+
|
39
|
+
wget http://sixarm.com/sixarm.pem
|
40
|
+
gem cert --add sixarm.pem
|
41
|
+
gem sources --add http://sixarm.com
|
42
|
+
|
43
|
+
To install with high security:
|
44
|
+
|
45
|
+
gem install sixarm_ruby_ramp --test --trust-policy HighSecurity
|
46
|
+
|
47
|
+
|
48
|
+
## Array
|
16
49
|
|
17
50
|
* car, cdr: aka first, rest (see shifted)
|
18
51
|
* choice, choices: one or more random elements from an array
|
19
52
|
* cross: return the cross pairings of an array with another array
|
20
53
|
* divvy: divides an array, like a pie, into a specified number of slices (deprecated - see method rdoc)
|
21
|
-
* join:
|
54
|
+
* join, join_prefix_suffix, join_prefix_suffix_infix: like Array#join with improvements
|
22
55
|
* onto: return a hash that maps an array's keys on to another array's values
|
23
56
|
* rotate: moves the first element of an array to the end
|
24
57
|
* rest: return the rest of the items of the array (aka cdr, aka shifted)
|
@@ -31,17 +64,17 @@ Testing:
|
|
31
64
|
* union: builds an array containing each of the unique elements of sub-arrays ([[1,2,3,4],[2,3,4,5],[3,4,5,6]].union => [1,2,3,4,5,6])
|
32
65
|
|
33
66
|
|
34
|
-
|
67
|
+
## Class
|
35
68
|
|
36
69
|
* publicize_methods: make all methods public for a block, e.g. to unit test private methods
|
37
70
|
|
38
71
|
|
39
|
-
|
72
|
+
## CSV
|
40
73
|
|
41
74
|
* http_headers: provides web file download headers for text/csv content type and disposition.
|
42
75
|
|
43
76
|
|
44
|
-
|
77
|
+
## Date
|
45
78
|
|
46
79
|
* age_days, age_years
|
47
80
|
* between: a random date between two specified dates
|
@@ -49,7 +82,7 @@ Testing:
|
|
49
82
|
* weekday?, weekend?: is date a weekday or on the weekend
|
50
83
|
|
51
84
|
|
52
|
-
|
85
|
+
## Enumerable
|
53
86
|
|
54
87
|
* cartesian_product: return an array of all possible ordered tuples from arrays.
|
55
88
|
* hash_by: convert the array to a hash by mapping each item to a key=>value pair.
|
@@ -64,18 +97,18 @@ Testing:
|
|
64
97
|
* power_set: return an array with all subsets of the enum's elements
|
65
98
|
|
66
99
|
|
67
|
-
|
100
|
+
## File
|
68
101
|
|
69
102
|
* File.joindir: wrapper for File.join(File.dirname(...),string,...)
|
70
103
|
|
71
104
|
|
72
|
-
|
105
|
+
## Fixnum
|
73
106
|
|
74
107
|
* even?: is the number even?
|
75
108
|
* odd?: is the number odd?
|
76
109
|
|
77
110
|
|
78
|
-
|
111
|
+
## Hash
|
79
112
|
|
80
113
|
* size?: return true if hash has any keys
|
81
114
|
* sort_by_keys: return a new Hash sorted by keys
|
@@ -87,48 +120,49 @@ Testing:
|
|
87
120
|
* pivot: aggregates subtotals by keys and values, such as a rollup and rolldown
|
88
121
|
|
89
122
|
|
90
|
-
|
123
|
+
## Integer
|
91
124
|
|
92
125
|
* maps: syntactic sugar to yield n times to a block, returning an array of any results
|
93
126
|
* odd?: is the number odd?
|
94
127
|
|
95
128
|
|
96
|
-
|
129
|
+
## IO
|
97
130
|
|
98
131
|
* readrow: reads a row line as with IO#readline, and return the row split it into fields
|
99
132
|
* IO.readrows: reads the entire file specified by name as individual row lines, and return those rows split into fields, in an array of arrays.
|
100
133
|
|
101
134
|
|
102
|
-
|
135
|
+
## Kernel
|
103
136
|
|
104
137
|
* my_method_name: return the name of the current method
|
105
138
|
* caller_method_name: return the name of the caller method, or the Nth parent up the call stack if the optional caller_index parameter is passed.
|
106
139
|
|
107
140
|
|
108
|
-
|
141
|
+
## Math
|
109
142
|
|
110
143
|
* ln(x): natural log of x
|
111
144
|
* logn(x,b): log of x in base b
|
112
145
|
|
113
146
|
|
114
|
-
|
147
|
+
## NilClass
|
115
148
|
|
116
149
|
* blank?: return true (same as Rails)
|
117
150
|
|
118
151
|
|
119
|
-
|
152
|
+
## Numeric
|
120
153
|
|
121
154
|
* if: return 0 if the passed flag is any of: nil, false, 0, [], {} and otherwise return self
|
122
155
|
* unless: return 0 unless the passed flag is any of: nil, false, 0, [], {} and otherwise return self
|
123
156
|
* percent: return the number as a percentage with optional rounding to decimal points
|
157
|
+
* floor_precision: return the number truncated to a given precision, i.e. decimal points
|
124
158
|
|
125
159
|
|
126
|
-
|
160
|
+
## Object
|
127
161
|
|
128
162
|
* in?: return boolean indicating whether the object is a member of the specified array parameter
|
129
163
|
|
130
164
|
|
131
|
-
|
165
|
+
## Process
|
132
166
|
|
133
167
|
Extensions that help debug Ruby programs.
|
134
168
|
|
@@ -136,22 +170,22 @@ Extensions that help debug Ruby programs.
|
|
136
170
|
* (class) pss: output of the system 'ps' command as a hash with each value set to the right type, e.g., integer, float, etc..
|
137
171
|
|
138
172
|
|
139
|
-
|
173
|
+
## REXML::Attributes
|
140
174
|
|
141
175
|
* hash: flattens the attributes hash set into a more useful ruby hash, e.g. {:height => 100, :width => 400 }
|
142
176
|
|
143
177
|
|
144
|
-
|
178
|
+
## REXML::Document
|
145
179
|
|
146
180
|
* remove_attributes: remove all the attributes from the document's elements
|
147
181
|
|
148
182
|
|
149
|
-
|
183
|
+
## REXML::Element
|
150
184
|
|
151
185
|
* remove_attributes: remove all the attributes from the element
|
152
186
|
|
153
187
|
|
154
|
-
|
188
|
+
## String
|
155
189
|
|
156
190
|
* capitalize_words (alias to titleize/titlecase): ensures the first character of each word is uppercase.
|
157
191
|
* decrement: decrease the rightmost natural number, defaults to one value lower or by the optional step parameter value.
|
@@ -167,30 +201,66 @@ Extensions that help debug Ruby programs.
|
|
167
201
|
* words: split the string into an array of words
|
168
202
|
|
169
203
|
|
170
|
-
|
204
|
+
## Symbol
|
171
205
|
|
172
206
|
* <=> and include the comparable mixin to compare symbols as strings
|
173
207
|
|
174
208
|
|
175
|
-
|
209
|
+
## Time
|
176
210
|
|
177
211
|
* (class) stamp: current time in UTC as a timestamp string ("YYYYMMDDHHMMSS")
|
178
212
|
* to_sql: time as a string formatted as expected for MySQL
|
179
213
|
|
180
214
|
|
181
|
-
|
182
|
-
|
183
|
-
* (class) load_dir: specify a one or more directory patterns and pass each XML file in the matching directories to a block; see [Dir#glob](http://www.ruby-doc.org/core/classes/Dir.html#M002347) for pattern details.
|
184
|
-
* (class) strip_all: delete exraneous junk from an XML text string, typically for sanitizing input
|
185
|
-
* (class) strip_attributes: delete all attributes from an XML text string
|
186
|
-
* (class) strip_comments: delete all comments from an XML text string
|
187
|
-
* (class) strip_microsoft: delete all proprietary Microsoft code from an XML text string
|
188
|
-
* (class) strip_unprintables: delete all unprintable characters from an XML text string
|
189
|
-
|
190
|
-
|
191
|
-
== YAML
|
215
|
+
## YAML
|
192
216
|
|
193
217
|
* (class) load_dir: specify directory patterns and pass each YAML file in the matching directories to a block; see [Dir#glob](http://www.ruby-doc.org/core/classes/Dir.html#M002347) for pattern details.
|
194
218
|
* (class) load_dir_pairs: specify directory patterns and pass each YAML file in the matching directories to a block to process key/value pairs.
|
195
219
|
|
196
220
|
|
221
|
+
## Changes
|
222
|
+
|
223
|
+
* 2013-08-18 3.0.0 Upgrade to Ruby 2
|
224
|
+
* 2012-09-01 2.1.7 Add Numeric#floor_precision
|
225
|
+
* 2012-03-14 2.1.6 Update docs, tests
|
226
|
+
* 2.1.6 Refactor XML#strip* methods to new sixarm_ruby_xml_strip gem.
|
227
|
+
* 2.1.5 Refactor XML#load* methods to new sixarm_ruby_xml_load gem.
|
228
|
+
* 2.1.4 Refactor REXML extensions to new sixarm_ruby_rexml gem.
|
229
|
+
* 2.1.3 Remove dependency on sixarm_ruby_array_slice
|
230
|
+
* 2.1.2 Refactor Array#slices and #divvy to sixarm_ruby_array_slice gem with better method names.
|
231
|
+
* 2.1.0 Upgrades for Ruby 1.9.3; better README, new CHANGELOG, less YAML, etc.
|
232
|
+
* 2.0.x Upgrades for Ruby 1.9.2; add methods; lift some methods to their own gems
|
233
|
+
* 1.8.x 100% rcov coverage; add methods
|
234
|
+
* 1.7.x Enable gemcutter; add methods; remove sqlite dependency
|
235
|
+
* 1.6.x Upgrades for Ruby 1.9.1; improve structure; add methods
|
236
|
+
* 1.5.0 Combined all Ruby extension files into one gem
|
237
|
+
* 1.0.0 Original
|
238
|
+
|
239
|
+
|
240
|
+
## License
|
241
|
+
|
242
|
+
You may choose any of these open source licenses:
|
243
|
+
|
244
|
+
* Apache License
|
245
|
+
* BSD License
|
246
|
+
* CreativeCommons License, Non-commercial Share Alike
|
247
|
+
* GNU General Public License Version 2 (GPL 2)
|
248
|
+
* GNU Lesser General Public License (LGPL)
|
249
|
+
* MIT License
|
250
|
+
* Perl Artistic License
|
251
|
+
* Ruby License
|
252
|
+
|
253
|
+
The software is provided "as is", without warranty of any kind,
|
254
|
+
express or implied, including but not limited to the warranties of
|
255
|
+
merchantability, fitness for a particular purpose and noninfringement.
|
256
|
+
|
257
|
+
In no event shall the authors or copyright holders be liable for any
|
258
|
+
claim, damages or other liability, whether in an action of contract,
|
259
|
+
tort or otherwise, arising from, out of or in connection with the
|
260
|
+
software or the use or other dealings in the software.
|
261
|
+
|
262
|
+
This license is for the included software that is created by SixArm;
|
263
|
+
some of the included software may have its own licenses, copyrights,
|
264
|
+
authors, etc. and these do take precedence over the SixArm license.
|
265
|
+
|
266
|
+
Copyright (c) 2005-2012 Joel Parker Henderson
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
3.0.0
|
data/lib/sixarm_ruby_ramp.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
=begin rdoc
|
3
|
-
Please see README
|
3
|
+
Please see README
|
4
4
|
=end
|
5
5
|
|
6
6
|
['array','class','csv','date','enumerable','file','fixnum','hash','integer','io','kernel','math','nil','numeric','object','process','string','symbol','time','xml','yaml'].map{|x|
|
@@ -16,39 +16,62 @@ class Array
|
|
16
16
|
#
|
17
17
|
# @return [String] concatenated string
|
18
18
|
#
|
19
|
-
# @example
|
19
|
+
# @example Join with infix
|
20
20
|
# list=['a','b','c']
|
21
21
|
# list.join("*") => "a*b*c"
|
22
22
|
#
|
23
|
-
# @example
|
23
|
+
# @example Join with prefix and suffix
|
24
24
|
# list=['a','b','c']
|
25
|
-
# list.join("
|
25
|
+
# list.join("[","]") => "[a][b][c]"
|
26
26
|
#
|
27
|
-
# @example
|
27
|
+
# @example Join with prefix, suffix, and infix
|
28
28
|
# list=['a','b','c']
|
29
|
-
# list.join("[","]") => "[a][b][c]"
|
30
|
-
|
29
|
+
# list.join("*","[","]") => "[a]*[b]*[c]"
|
30
|
+
#
|
31
31
|
def join(*fixes)
|
32
32
|
if fixes.is_a?(String) then return self.ruby_join(fixes) end
|
33
|
-
case fixes.size
|
33
|
+
return case fixes.size
|
34
34
|
when 0
|
35
|
-
|
35
|
+
ruby_join
|
36
36
|
when 1
|
37
|
-
|
37
|
+
ruby_join(fixes[0].to_s)
|
38
38
|
when 2
|
39
|
-
|
40
|
-
suffix=fixes[1].to_s
|
41
|
-
return self.map{|item| prefix + item.to_s + suffix}.ruby_join()
|
39
|
+
join_prefix_suffix(*fixes)
|
42
40
|
when 3
|
43
|
-
|
44
|
-
prefix=fixes[1].to_s
|
45
|
-
suffix=fixes[2].to_s
|
46
|
-
return self.map{|item| prefix + item.to_s + suffix}.ruby_join(infix)
|
41
|
+
join_prefix_suffix_infix(*fixes)
|
47
42
|
else
|
48
43
|
raise ArgumentError, "join() takes 0-3 arguments; you gave #{fixes.size}]"
|
49
44
|
end
|
50
45
|
end
|
51
46
|
|
47
|
+
# Concatenate the items by joining using a prefix string and suffix string.
|
48
|
+
#
|
49
|
+
# @return [String] concatenated string
|
50
|
+
#
|
51
|
+
# @example
|
52
|
+
# list=['a','b','c']
|
53
|
+
# list.join("[","]") => "[a][b][c]"
|
54
|
+
#
|
55
|
+
def join_prefix_suffix(prefix, suffix)
|
56
|
+
prefix = prefix.to_s
|
57
|
+
suffix = suffix.to_s
|
58
|
+
return self.map{|item| prefix + item.to_s + suffix}.ruby_join()
|
59
|
+
end
|
60
|
+
|
61
|
+
# Concatenate the items by joining using a prefix string, suffix string, and infix string.
|
62
|
+
#
|
63
|
+
# @return [String] concatenated string
|
64
|
+
#
|
65
|
+
# @example
|
66
|
+
# list=['a','b','c']
|
67
|
+
# list.join("*","[","]") => "[a]*[b]*[c]"
|
68
|
+
#
|
69
|
+
def join_prefix_suffix_infix(prefix, suffix, infix)
|
70
|
+
prefix = prefix.to_s
|
71
|
+
suffix = suffix.to_s
|
72
|
+
infix = infix.to_s
|
73
|
+
return self.map{|item| prefix + item.to_s + suffix}.ruby_join(infix)
|
74
|
+
end
|
52
75
|
|
53
76
|
# @return [Boolean] true if size > 0
|
54
77
|
#
|
@@ -10,11 +10,13 @@ module Kernel
|
|
10
10
|
# - http://www.ruby-forum.com/topic/75258
|
11
11
|
# - In 1.9 (Ruby CVS HEAD) there is #__method__ and #__callee__
|
12
12
|
# - http://eigenclass.org/hiki.rb?Changes+in+Ruby+1.9#l90
|
13
|
-
|
13
|
+
#
|
14
|
+
# See http://stackoverflow.com/questions/5100299/how-to-get-the-name-of-the-calling-method
|
15
|
+
#
|
14
16
|
# Make this fast because its often doing logging & reporting.
|
15
17
|
# Inline this and use $1 because it's empirically faster than /1
|
16
18
|
#
|
17
|
-
# These two methods
|
19
|
+
# These two methods must always be equal:
|
18
20
|
# caller_method_name(0) === my_method_name
|
19
21
|
#
|
20
22
|
# @example
|
@@ -27,7 +29,9 @@ module Kernel
|
|
27
29
|
# @return [String] my method name
|
28
30
|
|
29
31
|
def my_method_name
|
30
|
-
|
32
|
+
RUBY_VERSION > '2.0' \
|
33
|
+
? caller_locations(1,1).first.base_label \
|
34
|
+
: caller[0][/`([^']*)'/, 1]
|
31
35
|
end
|
32
36
|
|
33
37
|
|
@@ -39,7 +43,7 @@ module Kernel
|
|
39
43
|
# Make this fast because its often doing logging & reporting.
|
40
44
|
# Inline this and use $1 because it's empirically faster than /1
|
41
45
|
#
|
42
|
-
# These two methods
|
46
|
+
# These two methods must always be equal:
|
43
47
|
# caller_method_name(0) === my_method_name
|
44
48
|
#
|
45
49
|
# @example
|
@@ -54,7 +58,9 @@ module Kernel
|
|
54
58
|
# @return [String] the method name of the caller at the index
|
55
59
|
|
56
60
|
def caller_method_name(caller_index=0)
|
57
|
-
|
61
|
+
RUBY_VERSION > '2.0' \
|
62
|
+
? caller_locations(caller_index + 1,1).first.base_label \
|
63
|
+
: caller[caller_index][/`([^']*)'/, 1]
|
58
64
|
end
|
59
65
|
|
60
66
|
|