sleeping_king_studios-ext 0.1.0 → 0.2.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.md +7 -0
- data/README.md +57 -1
- data/lib/sleeping_king_studios/ext/integer/digits.rb +12 -0
- data/lib/sleeping_king_studios/ext/integer/romanize.rb +64 -0
- data/lib/sleeping_king_studios/ext/version.rb +1 -1
- metadata +17 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc326e56033ad5f5c95eb5b7a7ff96d7ad6ec487
|
4
|
+
data.tar.gz: 1f533dac8c8088c63a786dcf2f9c1fc8c5531c4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aebc561b0ec814631dc6c70206bde62a7c3505c8663053d48979ae06072c1c4dc0bacd7fb4d7962035703aeeb5f3485e8828b23bce27899558243327c0d9d912
|
7
|
+
data.tar.gz: 2ec1bbe818e887f7741d1ebadf296c045a834f05292189c55059944f1e76e81de7e4d9a9d76d4adc649935c699235a491d8dcd539cde99b542c4bb710425df9e
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -2,6 +2,9 @@
|
|
2
2
|
|
3
3
|
A collection of extensions to core classes.
|
4
4
|
|
5
|
+
YARD documentation is available at
|
6
|
+
[RubyDoc.info](http://rubydoc.info/github/sleepingkingstudios/sleeping_king_studios-ext).
|
7
|
+
|
5
8
|
## The Extensions
|
6
9
|
|
7
10
|
### Array\#fold
|
@@ -14,7 +17,7 @@ result of yielding the block is counted instead.
|
|
14
17
|
|
15
18
|
_Example:_ Find the number of times each item appears in the array.
|
16
19
|
|
17
|
-
items
|
20
|
+
items = %w(foo foo foo bar bar baz wibble wobble)
|
18
21
|
items.fold
|
19
22
|
#=> { 'foo' => 3, 'bar' => 2, 'baz' => 1, 'wibble' => 1, 'wobble' => 1 }
|
20
23
|
|
@@ -33,6 +36,59 @@ _Example:_ Count the items in the array with each status value.
|
|
33
36
|
items.fold { |item| item.status }
|
34
37
|
#=> { :approved => 3, :rejected => 2, :error => 1, nil => 1 }
|
35
38
|
|
39
|
+
### Integer\#digits
|
40
|
+
|
41
|
+
require 'sleeping_king_studios/ext/integer/digits'
|
42
|
+
|
43
|
+
Breaks the number into its component digits in the specified base.
|
44
|
+
|
45
|
+
_Example:_ Get the digits of a number in base 10.
|
46
|
+
|
47
|
+
23154.digits
|
48
|
+
#=> ['2', '3', '1', '5', '4']
|
49
|
+
|
50
|
+
_Example:_ Get the digits of a number in base 2.
|
51
|
+
|
52
|
+
80.digits(2)
|
53
|
+
#=> ['1', '0', '1', '0', '0', '0', '0']
|
54
|
+
|
55
|
+
_Example:_ Get digits of a number in base 16.
|
56
|
+
|
57
|
+
3894.digits(16)
|
58
|
+
#=> ['f', '3', '6']
|
59
|
+
|
60
|
+
### Integer\#romanize
|
61
|
+
|
62
|
+
require 'sleeping_king_studios/ext/integer/romanize'
|
63
|
+
|
64
|
+
Returns the value as a string of Roman numerals, i.e. the number 7 becomes the
|
65
|
+
string "VII". The number must be greater than 0 and less than 5000.
|
66
|
+
|
67
|
+
_Example:_ Get the number's representation in Roman numerals.
|
68
|
+
|
69
|
+
7.romanize
|
70
|
+
#=> 'VII'
|
71
|
+
|
72
|
+
18.romanize
|
73
|
+
#=> 'XVIII'
|
74
|
+
|
75
|
+
49.romanize
|
76
|
+
#=> 'XLIX'
|
77
|
+
|
78
|
+
3894.romanize
|
79
|
+
#=> 'MMMDCCCXCIV'
|
80
|
+
|
81
|
+
#### Additive
|
82
|
+
|
83
|
+
If the additive flag is set to true, uses the form 'IIII' for 4 and 'VIIII'
|
84
|
+
for 9, as well instead of 'IV' and 'IX', respectively. Also applies to the tens
|
85
|
+
and hundreds places, e.g. 40, 90, 400, and 900.
|
86
|
+
|
87
|
+
_Example:_ Get the number's representation in additive Roman numerals.
|
88
|
+
|
89
|
+
499.romanize :additive => true
|
90
|
+
#=> 'CCCCLXXXXVIIII'
|
91
|
+
|
36
92
|
### Object\#metaclass
|
37
93
|
|
38
94
|
require 'sleeping_king_studios/ext/object/metaclass'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# lib/sleeping_king_studios/ext/integer/digits.rb
|
2
|
+
|
3
|
+
class Integer
|
4
|
+
# Breaks the number into its component digits in the specified base.
|
5
|
+
#
|
6
|
+
# @param [Integer] base The base to use when breaking down the number.
|
7
|
+
#
|
8
|
+
# @return [Array<String>]
|
9
|
+
def digits base = 10
|
10
|
+
to_s(base).split ''
|
11
|
+
end # method digits
|
12
|
+
end # class
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# lib/sleeping_king_studios/ext/integer/romanize.rb
|
2
|
+
|
3
|
+
require 'sleeping_king_studios/ext/integer/digits'
|
4
|
+
|
5
|
+
class Integer
|
6
|
+
# Minimum allowed value for the #romanize method.
|
7
|
+
ROMANIZE_MIN = 1
|
8
|
+
|
9
|
+
# Maximum allowed value for the #romanize method.
|
10
|
+
ROMANIZE_MAX = 4999
|
11
|
+
|
12
|
+
# Returns the value as a string of Roman numerals. The number must be greater
|
13
|
+
# than 0 and less than 5000 (numbers between 4000 and 4999 are represented by
|
14
|
+
# the string MMMM in the thousands place).
|
15
|
+
#
|
16
|
+
# @param [Hash] options The romanization options.
|
17
|
+
# @option options [Boolean] additive If true, uses the structure IIII for 4
|
18
|
+
# and the VIIII structure for 9 instead of IV and IX, respectively. Also
|
19
|
+
# applies to the tens and hundreds places, e.g. 40, 90, 400, etc (the
|
20
|
+
# thousands place is always additive).
|
21
|
+
#
|
22
|
+
# @return [String] The Roman numerals.
|
23
|
+
#
|
24
|
+
# @raise [RangeError] If the number is too large or too small to represent
|
25
|
+
# using Roman numerals.
|
26
|
+
def romanize options = {}
|
27
|
+
unless (ROMANIZE_MIN..ROMANIZE_MAX).include? self
|
28
|
+
raise RangeError.new "integer to romanize must be within range #{ROMANIZE_MIN} to #{ROMANIZE_MAX}"
|
29
|
+
end # unless
|
30
|
+
|
31
|
+
rules = [
|
32
|
+
'',
|
33
|
+
'%one',
|
34
|
+
'%one%one',
|
35
|
+
'%one%one%one',
|
36
|
+
'%one%five',
|
37
|
+
'%five',
|
38
|
+
'%five%one',
|
39
|
+
'%five%one%one',
|
40
|
+
'%five%one%one%one',
|
41
|
+
'%one%ten',
|
42
|
+
'%ten'
|
43
|
+
] # end array rules
|
44
|
+
|
45
|
+
if Hash === options && options.fetch(:additive, false)
|
46
|
+
rules[4] = '%one%one%one%one'
|
47
|
+
rules[9] = '%five%one%one%one%one'
|
48
|
+
end # if
|
49
|
+
|
50
|
+
numerals = [
|
51
|
+
%w(I V X),
|
52
|
+
%w(X L C),
|
53
|
+
%w(C D M),
|
54
|
+
['M', 'MMM', '']
|
55
|
+
] # end array numerals
|
56
|
+
|
57
|
+
digits.reverse.map.with_index do |digit, index|
|
58
|
+
rules[digit.to_i]
|
59
|
+
.gsub('%one', numerals[index][0])
|
60
|
+
.gsub('%five', numerals[index][1])
|
61
|
+
.gsub('%ten', numerals[index][2])
|
62
|
+
end.reverse.join ''
|
63
|
+
end # method romanize
|
64
|
+
end # class
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sleeping_king_studios-ext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob "Merlin" Smith
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.8.7
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec-sleeping_king_studios
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.0.0.rc.3
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.0.0.rc.3
|
55
69
|
description: |2
|
56
70
|
A collection of extensions to core classes, gemified to prevent a
|
57
71
|
maintenance nightmare if multiple library or application projects require
|
@@ -63,6 +77,8 @@ extensions: []
|
|
63
77
|
extra_rdoc_files: []
|
64
78
|
files:
|
65
79
|
- lib/sleeping_king_studios/ext/array/fold.rb
|
80
|
+
- lib/sleeping_king_studios/ext/integer/digits.rb
|
81
|
+
- lib/sleeping_king_studios/ext/integer/romanize.rb
|
66
82
|
- lib/sleeping_king_studios/ext/object/metaclass.rb
|
67
83
|
- lib/sleeping_king_studios/ext/version.rb
|
68
84
|
- LICENSE
|