sixarm_ruby_ramp 2.1.3 → 3.0.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 +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
|
|