rafini 3.1.221212 → 3.3.230213
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +22 -5
- data/lib/rafini/array.rb +7 -7
- data/lib/rafini/exception.rb +13 -13
- data/lib/rafini/hash.rb +7 -7
- data/lib/rafini/integer.rb +1 -1
- data/lib/rafini/object.rb +9 -0
- data/lib/rafini/odometers.rb +14 -13
- data/lib/rafini/requires.rb +4 -1
- data/lib/rafini/string.rb +25 -3
- data/lib/rafini.rb +2 -1
- metadata +147 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10beafcb6f8375979eba53ce6c8b1bfa75bf43caed120f1f9bc3c9a2275825a2
|
4
|
+
data.tar.gz: e5b55701451aed75917b02de376e8198b56466933fa17ac92e4e9672206496cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12690de6469959ccbf5b7ad87c739045be1b025a06e94a2c6d585713def66d8c8820f2010d7011a6096abb6d29ab787be822d0576657786ac98ba62793fbcad6
|
7
|
+
data.tar.gz: 76c99a2f7fc92ac6c6a5e8f6bd192abf683c9267181d2ce033d7067f369b1504044effaa4b66f85d49caa2f1ca0d8ba0ef6cf60611768a2b733812e7e5f16f63
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Rafini
|
2
2
|
|
3
|
-
* [VERSION 3.
|
3
|
+
* [VERSION 3.3.230213](https://github.com/carlosjhr64/rafini/releases)
|
4
4
|
* [github](https://github.com/carlosjhr64/rafini)
|
5
5
|
* [rubygems](https://rubygems.org/gems/rafini)
|
6
6
|
|
@@ -13,6 +13,8 @@ Just a collection of useful refinements.
|
|
13
13
|
$ gem install rafini
|
14
14
|
```
|
15
15
|
## SYNOPSIS:
|
16
|
+
|
17
|
+
Note that `Rafini` auto-loads assets as requested.
|
16
18
|
```ruby
|
17
19
|
require 'rafini'
|
18
20
|
```
|
@@ -65,12 +67,22 @@ using Rafini::Integer
|
|
65
67
|
123.odometer(10,10) #=> [3, 2, 1]
|
66
68
|
30.odometer(2,3,5) #=> [0, 0, 0, 1]
|
67
69
|
```
|
70
|
+
### using Rafini::Object
|
71
|
+
```ruby
|
72
|
+
using Rafini::Object
|
73
|
+
|
74
|
+
''.as{_1.empty? ? :empty : _1.length} #=> :empty
|
75
|
+
'123'.as{_1.empty? ? :empty : _1.length} #=> 3
|
76
|
+
```
|
68
77
|
### using Rafini::String
|
69
78
|
```ruby
|
70
79
|
using Rafini::String
|
71
80
|
|
72
|
-
#
|
73
|
-
'
|
81
|
+
# cases
|
82
|
+
'My name is ruby'.pascal_case #=> MyNameIsRuby
|
83
|
+
'My name is ruby'.camel_case #=> myNameIsRuby
|
84
|
+
'My name is ruby'.snake_case #=> my_name_is_ruby
|
85
|
+
'My name is ruby'.kebab_case #=> my-name-is-ruby
|
74
86
|
|
75
87
|
# semantic
|
76
88
|
'1.2.3'.semantic(0..1) #=> "1.2"
|
@@ -126,14 +138,19 @@ using Rafini::Requires
|
|
126
138
|
|
127
139
|
requires'
|
128
140
|
ruby ~>3.0
|
129
|
-
rafini ~>3.
|
141
|
+
rafini ~>3.2
|
130
142
|
json ~>2.0' #=> ["json"]
|
143
|
+
## You can also say:
|
144
|
+
# require 'rafini/requires'
|
145
|
+
# Rafini.requires...
|
146
|
+
## But you wont be able to test for Rafini's VERSION
|
147
|
+
## unless you've also required 'rafini'.
|
131
148
|
```
|
132
149
|
## LICENSE:
|
133
150
|
|
134
151
|
(The MIT License)
|
135
152
|
|
136
|
-
Copyright (c)
|
153
|
+
Copyright (c) 2023 CarlosJHR64
|
137
154
|
|
138
155
|
Permission is hereby granted, free of charge, to any person obtaining
|
139
156
|
a copy of this software and associated documentation files (the
|
data/lib/rafini/array.rb
CHANGED
@@ -4,9 +4,9 @@ module Rafini
|
|
4
4
|
# classify:
|
5
5
|
# Like Set#classify
|
6
6
|
def classify(hash: ::Hash.new{|h,k|h[k]=[]}, &block)
|
7
|
-
block ||=
|
8
|
-
|
9
|
-
|
7
|
+
block ||= ->(v){v.class}
|
8
|
+
each{|v| hash[block[v]] << v}
|
9
|
+
hash
|
10
10
|
end
|
11
11
|
|
12
12
|
# is:
|
@@ -15,7 +15,7 @@ module Rafini
|
|
15
15
|
# Updates a hash with the keys given by the array to the given value.
|
16
16
|
def is(value, hash={})
|
17
17
|
each{|key| hash[key]=value}
|
18
|
-
|
18
|
+
hash
|
19
19
|
end
|
20
20
|
|
21
21
|
# joins:
|
@@ -41,14 +41,14 @@ module Rafini
|
|
41
41
|
string = ::String.new previous.to_s
|
42
42
|
return string if items.empty?
|
43
43
|
seps.flatten!
|
44
|
-
while item
|
45
|
-
if sep
|
44
|
+
while (item=items.shift)
|
45
|
+
if (sep=(seps.shift&.to_s || block&.call(previous,item)&.to_s))
|
46
46
|
string << sep
|
47
47
|
end
|
48
48
|
string << item.to_s
|
49
49
|
previous = item
|
50
50
|
end
|
51
|
-
|
51
|
+
string
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
data/lib/rafini/exception.rb
CHANGED
@@ -11,11 +11,11 @@ module Rafini
|
|
11
11
|
# # exact output depends on $VERBOSE and $DEBUG
|
12
12
|
# $!.puts('Nice message')
|
13
13
|
# end
|
14
|
-
def puts(
|
15
|
-
unless $VERBOSE.nil?
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
def puts(msg=nil)
|
15
|
+
unless $VERBOSE.nil?
|
16
|
+
warn msg if msg
|
17
|
+
warn message if $VERBOSE || !msg
|
18
|
+
warn backtrace.to_s if $DEBUG
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -29,14 +29,14 @@ using Rafini::Exception
|
|
29
29
|
# value = Rafini.bang!('Ooops! Not perfect?') do
|
30
30
|
# # Perfect code here...
|
31
31
|
# end
|
32
|
-
def Rafini.bang!(
|
33
|
-
|
32
|
+
def Rafini.bang!(msg=nil, bang=Exception, &block)
|
33
|
+
e = nil
|
34
34
|
begin
|
35
|
-
|
36
|
-
rescue bang =>
|
37
|
-
|
35
|
+
e = block.call
|
36
|
+
rescue bang => e
|
37
|
+
e.puts(msg)
|
38
38
|
end
|
39
|
-
|
39
|
+
e
|
40
40
|
end
|
41
41
|
|
42
42
|
# The Thread wrapped version of bang!
|
@@ -52,6 +52,6 @@ end
|
|
52
52
|
# end
|
53
53
|
# With the following below, I'll be able to say
|
54
54
|
# Rafini.thread_bang!('blah blah...'){ ...stuff... }
|
55
|
-
def Rafini.thread_bang!(header=nil, bang
|
56
|
-
Thread.new{Rafini.bang!(header, bang, &
|
55
|
+
def Rafini.thread_bang!(header=nil, bang=Exception, &)
|
56
|
+
Thread.new{Rafini.bang!(header, bang, &)}
|
57
57
|
end
|
data/lib/rafini/hash.rb
CHANGED
@@ -3,8 +3,8 @@ module Rafini
|
|
3
3
|
refine ::Hash do
|
4
4
|
# struct = hash.to_struct
|
5
5
|
# Why not?
|
6
|
-
def to_struct(&
|
7
|
-
Struct.new(*keys, &
|
6
|
+
def to_struct(&)
|
7
|
+
Struct.new(*keys, &).new(*values)
|
8
8
|
end
|
9
9
|
|
10
10
|
# hash0.supplement!(hash1,...) #=> hash
|
@@ -16,13 +16,13 @@ module Rafini
|
|
16
16
|
def supplement!(*hashes)
|
17
17
|
hashes.each do |hash|
|
18
18
|
hash.each do |key, value|
|
19
|
-
self[key] = value unless
|
19
|
+
self[key] = value unless key?(key)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
self
|
23
23
|
end
|
24
24
|
def supplement(...)
|
25
|
-
|
25
|
+
dup.supplement!(...)
|
26
26
|
end
|
27
27
|
|
28
28
|
# hash0.amend(hash1,...)
|
@@ -32,13 +32,13 @@ module Rafini
|
|
32
32
|
# only with first key value found in amending hashes.
|
33
33
|
# {a:'A',b:'B'}.amend({b:'X',c:'C'},{c:'Y',d:'D'}) #=> {a:'A',b:'X'}
|
34
34
|
def amend!(*hashes)
|
35
|
-
|
36
|
-
value=hashes.find{_1.
|
35
|
+
each_key do |key|
|
36
|
+
value=hashes.find{_1.key? key}&.fetch(key) and self[key]=value
|
37
37
|
end
|
38
38
|
self
|
39
39
|
end
|
40
40
|
def amend(...)
|
41
|
-
|
41
|
+
dup.amend!(...)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
data/lib/rafini/integer.rb
CHANGED
@@ -9,7 +9,7 @@ module Rafini
|
|
9
9
|
# #=> [30, 15, 12, 3]
|
10
10
|
# Useful for making clocks, number scales, mayan long count... etc.
|
11
11
|
def odometer(*levels, factors: true)
|
12
|
-
raise RangeError, 'negative odometer' if
|
12
|
+
raise RangeError, 'negative odometer' if negative?
|
13
13
|
readings, remainder = [], self
|
14
14
|
|
15
15
|
levels = levels.inject([1]){|m, f| m.push(m.last*f)} if factors
|
data/lib/rafini/odometers.rb
CHANGED
@@ -47,15 +47,15 @@ module Rafini
|
|
47
47
|
def description
|
48
48
|
string = ''
|
49
49
|
reverse_each do |key, count|
|
50
|
-
s =
|
50
|
+
s = count==1 ? '' : 's'
|
51
51
|
unless string.empty?
|
52
|
-
string << " and #{count} #{key}#{s}" if count
|
52
|
+
string << " and #{count} #{key}#{s}" if count.positive?
|
53
53
|
break
|
54
54
|
end
|
55
|
-
next if count
|
55
|
+
next if count.zero?
|
56
56
|
string << "#{count} #{key}#{s}"
|
57
57
|
end
|
58
|
-
|
58
|
+
string
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
@@ -63,9 +63,9 @@ module Rafini
|
|
63
63
|
using Rafini::Integer # Need Rafini::Integer for #odometer
|
64
64
|
using Rafini::Hash # Need Rafini::Hash for #to_struct
|
65
65
|
|
66
|
-
def odoread(scale, **kw, &
|
66
|
+
def odoread(scale, **kw, &)
|
67
67
|
counts = odometer(*scale.values, **kw)
|
68
|
-
|
68
|
+
scale.keys.zip(counts).to_h.to_struct(&)
|
69
69
|
end
|
70
70
|
|
71
71
|
# Integer#sec2time
|
@@ -73,23 +73,24 @@ module Rafini
|
|
73
73
|
# 10_000.sec2time.to_s #=> "2 hours and 46 minutes"
|
74
74
|
# 10_000.sec2time.hour #=> 2
|
75
75
|
def sec2time
|
76
|
+
# Struct.new(*scale.keys).new(*counts){ method definitions }
|
76
77
|
odoread(SEC2TIME, factors:false) do
|
77
78
|
def to_s
|
78
79
|
string = nil
|
79
80
|
SEC2TIME.keys.reverse_each do |key|
|
80
81
|
count=self[key]
|
81
82
|
if string
|
82
|
-
if count
|
83
|
+
if count.positive?
|
83
84
|
string << " and #{count} #{key}"
|
84
85
|
string << 's' if count > 1
|
85
86
|
end
|
86
87
|
break
|
87
88
|
end
|
88
|
-
next if count
|
89
|
+
next if count.zero?
|
89
90
|
string = "#{count} #{key}"
|
90
91
|
string << 's' if count > 1
|
91
92
|
end
|
92
|
-
string
|
93
|
+
string ||= "0 #{SEC2TIME.first[0]}s"
|
93
94
|
string
|
94
95
|
end
|
95
96
|
def to_i
|
@@ -126,16 +127,16 @@ module Rafini
|
|
126
127
|
number = to_i
|
127
128
|
return number.to_s if number < 1_000
|
128
129
|
if number < 1_000_000
|
129
|
-
precision =
|
130
|
+
precision = number<10_000 ? 2 : number<100_000 ? 1 : 0
|
130
131
|
return "#{(number/1000.0).round(precision)}K"
|
131
132
|
end
|
132
133
|
keys = @scale.keys.reverse_each
|
133
134
|
loop do
|
134
135
|
key = keys.next
|
135
136
|
n = self[key]
|
136
|
-
next if n
|
137
|
+
next if n.zero?
|
137
138
|
if n < 1_000
|
138
|
-
precision =
|
139
|
+
precision = n<10 ? 2 : n<100 ? 1 : 0
|
139
140
|
scale = @scale[key].to_f
|
140
141
|
f = (number/scale).round(precision)
|
141
142
|
return "#{f}#{key[0].upcase}"
|
@@ -149,7 +150,7 @@ module Rafini
|
|
149
150
|
end
|
150
151
|
struct.type = type
|
151
152
|
struct.scale = scale
|
152
|
-
|
153
|
+
struct
|
153
154
|
end
|
154
155
|
end
|
155
156
|
end
|
data/lib/rafini/requires.rb
CHANGED
data/lib/rafini/string.rb
CHANGED
@@ -1,11 +1,33 @@
|
|
1
1
|
module Rafini
|
2
2
|
module String
|
3
3
|
refine ::String do
|
4
|
+
def name_split
|
5
|
+
split(/[ _-]|(?=[A-Z])/)
|
6
|
+
end
|
7
|
+
# MyNameIsRuby
|
8
|
+
def pascal_case
|
9
|
+
name_split.map(&:capitalize).join
|
10
|
+
end
|
11
|
+
alias_method :title_case, :pascal_case
|
12
|
+
# myNameIsRuby
|
13
|
+
def camel_case
|
14
|
+
pascal_case.tap{_1[0]=_1[0].downcase}
|
15
|
+
end
|
16
|
+
# my_name_is_ruby
|
17
|
+
def snake_case(sep='_')
|
18
|
+
name_split.map(&:downcase).join(sep)
|
19
|
+
end
|
20
|
+
# my-name-is-ruby
|
21
|
+
def kebab_case
|
22
|
+
snake_case('-')
|
23
|
+
end
|
24
|
+
|
4
25
|
# camelize:
|
5
26
|
# 1) A camel kick, as in "I gotz camelized".
|
6
27
|
# 2) "a_camel_kick" => "ACamelKick"
|
7
28
|
def camelize(sep='_')
|
8
|
-
|
29
|
+
warn 'DEPRECATED: use #pascal_case instead'
|
30
|
+
split(sep).map(&:capitalize).join
|
9
31
|
end
|
10
32
|
|
11
33
|
# semantic:
|
@@ -14,14 +36,14 @@ module Rafini
|
|
14
36
|
# 'a.b.c'.semantic(0..2, join:'/') #=> 'b/c'
|
15
37
|
# 'a/b/c'.semantic(0..2, split:'/', join:'.') #=> 'a.b.c'
|
16
38
|
def semantic(v=(0..2), split:'.', join:'.')
|
17
|
-
[*
|
39
|
+
[*split(split)[v]].join(join)
|
18
40
|
end
|
19
41
|
|
20
42
|
# shellescape:
|
21
43
|
# Same funtionality as Shellword's String#shellescape
|
22
44
|
def shellescape
|
23
45
|
# This is a contraction of Shellwords.escape function
|
24
|
-
|
46
|
+
gsub(/[^\w\-.,:+\/@\n]/,'\\\\\\&').gsub(/\n/,"'\n'")
|
25
47
|
end
|
26
48
|
end
|
27
49
|
end
|
data/lib/rafini.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
module Rafini
|
2
|
-
VERSION = '3.
|
2
|
+
VERSION = '3.3.230213'
|
3
3
|
# Constants
|
4
4
|
autoload :Empty, 'rafini/empty'
|
5
5
|
# Pure
|
6
6
|
autoload :Array, 'rafini/array'
|
7
7
|
autoload :Hash, 'rafini/hash'
|
8
8
|
autoload :Integer, 'rafini/integer'
|
9
|
+
autoload :Object, 'rafini/object'
|
9
10
|
autoload :String, 'rafini/string'
|
10
11
|
# Hybrid
|
11
12
|
autoload :Exception, 'rafini/exception'
|
metadata
CHANGED
@@ -1,15 +1,155 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rafini
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.230213
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CarlosJHR64
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
11
|
+
date: 2023-02-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colorize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.8'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.8.1
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.8'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.8.1
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: cucumber
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '8.0'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 8.0.0
|
43
|
+
type: :development
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '8.0'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 8.0.0
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: help_parser
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '8.2'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 8.2.230210
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '8.2'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 8.2.230210
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: parser
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '3.2'
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.2.1
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.2'
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 3.2.1
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: rubocop
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '1.45'
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 1.45.1
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '1.45'
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 1.45.1
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: stringio
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '3.0'
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: 3.0.5
|
123
|
+
type: :development
|
124
|
+
prerelease: false
|
125
|
+
version_requirements: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - "~>"
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '3.0'
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 3.0.5
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
name: test-unit
|
135
|
+
requirement: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '3.5'
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 3.5.7
|
143
|
+
type: :development
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - "~>"
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '3.5'
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 3.5.7
|
13
153
|
description: 'Just a collection of useful refinements.
|
14
154
|
|
15
155
|
'
|
@@ -25,6 +165,7 @@ files:
|
|
25
165
|
- lib/rafini/exception.rb
|
26
166
|
- lib/rafini/hash.rb
|
27
167
|
- lib/rafini/integer.rb
|
168
|
+
- lib/rafini/object.rb
|
28
169
|
- lib/rafini/odometers.rb
|
29
170
|
- lib/rafini/requires.rb
|
30
171
|
- lib/rafini/string.rb
|
@@ -47,8 +188,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
47
188
|
- !ruby/object:Gem::Version
|
48
189
|
version: '0'
|
49
190
|
requirements:
|
50
|
-
- '
|
51
|
-
|
191
|
+
- 'git: 2.30'
|
192
|
+
- 'ruby: 3.2'
|
193
|
+
rubygems_version: 3.4.6
|
52
194
|
signing_key:
|
53
195
|
specification_version: 4
|
54
196
|
summary: Just a collection of useful refinements.
|