rb_core_extensions 0.1.1 → 0.1.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8debb12bba2cbb5357f52feaaf7c9bb9eb3a2c54bdca4e7f9438857e985dc4fb
4
- data.tar.gz: 95bfeab24e32c5bbd5e60e3fb278282754efb7f7a080c4be765cd647d8ca778f
3
+ metadata.gz: eaab7679a1e5cedcdfd17b5abaed34ac040d6d5f0bc7ab91e8e3d52695d78720
4
+ data.tar.gz: e61962df11083b76b1198b1762854142dd9e160d8e127fbdc6f11021d27f1d13
5
5
  SHA512:
6
- metadata.gz: 5ba7dfc16cfa492cacbfc41df35c59f6f00610ff5f28ff6247540eefab0bf8362bc86ff4bff340e39db67d75990ea0e31823a5d9efd56aa147c6b6ce866b22e2
7
- data.tar.gz: 4e42b2b57b2600654c8accd9f9349fe5ce575f9e2a82b5013012b820500df59253901b2b8dfa0219a11c499d09b3035dc50e99e77c074be4e6e3938d32319b66
6
+ metadata.gz: 889d4bb5b68918c8feaf3bf3ac4cac823f78b2899af9a0f3a7afe5f9d63fbef3c357e1da85c31bf07e893172ccaf540d70f9594ec756b0c82361a7c504f17b43
7
+ data.tar.gz: 3712ca130c9031070b2ec4d01edea3f88e8e991db450e6c3d229e39eeab21df2f34363b9a7464d66ee88970752f2ecfca4352d0d9a645954640f610b7e3ebd17
@@ -27,4 +27,4 @@ jobs:
27
27
  - name: Run test cases
28
28
  run: bundle exec rake
29
29
  - name: Publish code coverage
30
- uses: paambaati/codeclimate-action@v4.0.0
30
+ uses: paambaati/codeclimate-action@v5.0.0
data/CHANGELOG.md CHANGED
@@ -1,4 +1,25 @@
1
- ## [0.1.1](https://github.com/shivam091/core_extensions/compare/main...0.1.1) - 2023-07-05
1
+ ## [0.1.3](https://github.com/shivam091/core_extensions/compare/v0.1.2...v0.1.3) - 2023-07-07
2
+
3
+ ### What's new
4
+
5
+ - Added core extension methods `hierarchy`, `lineage`, and `leaf_subclasses` in `Class`
6
+ - Added extensions `to_i` and `to_b` in `TrueClass` and `FalseClass`
7
+ - Added `to_b` core ext. in `NilClass`
8
+
9
+ ## [0.1.2](https://github.com/shivam091/core_extensions/compare/v0.1.1...v0.1.2) - 2023-07-06
10
+
11
+ ### What's new
12
+
13
+ - Added core extension methods `keys?`, `slice!`, and `keys_at` in `Hash`
14
+ - Added core extension method `namespaces` in `Module`
15
+ - Added core extension method `blank?` in `NilClass`
16
+ - Added core extension methods `is_one_of?`, `deep_send`, and `in_namespace?` in `Object`
17
+
18
+ ### What's changed
19
+
20
+ - Bumped version of `paambaati/codeclimate-action` workflow action to `5.0.0`
21
+
22
+ ## [0.1.1](https://github.com/shivam091/core_extensions/compare/v0.1.0...v0.1.1) - 2023-07-05
2
23
 
3
24
  ### What's new
4
25
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rb_core_extensions (0.1.1)
4
+ rb_core_extensions (0.1.3)
5
5
  activesupport (~> 7.0)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -47,27 +47,73 @@ require "core_extensions/date"
47
47
 
48
48
  ## Extensions Provided
49
49
 
50
- Below are the extension methods which are provided by `rb_core_extensions`. Please refer [documentation](https://shivam091.github.io/core_extensions) or rspec for examples of how to use these methods.
50
+ Below are the extension methods provided by `rb_core_extensions`. Please refer [documentation](https://shivam091.github.io/core_extensions) for examples of how to use these methods.
51
51
 
52
- ### Array
52
+ ### [Array](https://shivam091.github.io/core_extensions/Array.html)
53
53
 
54
- * ***core_extensions/array/delete.rb***
55
- 1. **[`#take!`](https://shivam091.github.io/core_extensions/Array.html#method-i-take-21)** - Alters the array by removing first `n` elements.
54
+ #### ***core_extensions/array/delete.rb***
55
+ 1. **[`#take!`](https://shivam091.github.io/core_extensions/Array.html#method-i-take-21)** - Alters the array by removing first `n` elements.
56
56
 
57
- * ***core_extensions/array/math.rb***
58
- 1. **[`round`](https://shivam091.github.io/core_extensions/Array.html#method-i-round)** - Rounds each element of the numeric array up to specified `precision`.
59
- 2. **[`mean`](https://shivam091.github.io/core_extensions/Array.html#method-i-mean)** - Returns the mean of the array of `Numeric`.
60
- 3. **[`variance`](https://shivam091.github.io/core_extensions/Array.html#method-i-variance)** - Returns the variance of the array of `Numeric`.
61
- 4. **[`stddev`](https://shivam091.github.io/core_extensions/Array.html#method-i-stddev)** - Returns the standard deviation of the array of `Numeric`.
57
+ #### ***core_extensions/array/math.rb***
58
+ 1. **[`round`](https://shivam091.github.io/core_extensions/Array.html#method-i-round)** - Rounds each element of the numeric array up to specified `precision`.
59
+ 2. **[`mean`](https://shivam091.github.io/core_extensions/Array.html#method-i-mean)** - Returns the mean of the array of `Numeric`.
60
+ 3. **[`variance`](https://shivam091.github.io/core_extensions/Array.html#method-i-variance)** - Returns the variance of the array of `Numeric`.
61
+ 4. **[`stddev`](https://shivam091.github.io/core_extensions/Array.html#method-i-stddev)** - Returns the standard deviation of the array of `Numeric`.
62
62
 
63
- * ***core_extensions/array/duplicates.rb***
64
- 1. **[`duplicates`](https://shivam091.github.io/core_extensions/Array.html#method-i-duplicates)** - Returns an array of the duplicate elements.
63
+ #### ***core_extensions/array/duplicates.rb***
64
+ 1. **[`duplicates`](https://shivam091.github.io/core_extensions/Array.html#method-i-duplicates)** - Returns an array of the duplicate elements.
65
65
 
66
- * ***core_extensions/array/inclusion.rb***
67
- 1. **[`include_any?`](https://shivam091.github.io/core_extensions/Array.html#method-i-include_any-3F)** - Returns whether the array contains any of the `elements`.
68
- 2. **[`include_none?`](https://shivam091.github.io/core_extensions/Array.html#method-i-include_none-3F)** - Returns whether the array contains none of the `elements`.
69
- 3. **[`include_all?`](https://shivam091.github.io/core_extensions/Array.html#method-i-include_all-3F)** - Returns whether the array contains all of the `elements`.
70
- 4. **[`includes_index?`](https://shivam091.github.io/core_extensions/Array.html#method-i-includes_index-3F)** - Returns whether the array has a value at the specified `index`.
66
+ #### ***core_extensions/array/inclusion.rb***
67
+ 1. **[`include_any?`](https://shivam091.github.io/core_extensions/Array.html#method-i-include_any-3F)** - Returns whether the array contains any of the `elements`.
68
+ 2. **[`include_none?`](https://shivam091.github.io/core_extensions/Array.html#method-i-include_none-3F)** - Returns whether the array contains none of the `elements`.
69
+ 3. **[`include_all?`](https://shivam091.github.io/core_extensions/Array.html#method-i-include_all-3F)** - Returns whether the array contains all of the `elements`.
70
+ 4. **[`includes_index?`](https://shivam091.github.io/core_extensions/Array.html#method-i-includes_index-3F)** - Returns whether the array has a value at the specified `index`.
71
+
72
+ ### [Hash](https://shivam091.github.io/core_extensions/Hash.html)
73
+
74
+ #### ***core_extensions/hash/inclusion.rb***
75
+ 1. **[`#keys?`](https://shivam091.github.io/core_extensions/Hash.html#method-i-keys-3F)** - Returns whether the hash contains all of the specified `keys`.
76
+ #### ***core_extensions/hash/access.rb***
77
+ 1. **[`#keys_at`](https://shivam091.github.io/core_extensions/Hash.html#method-i-keys_at)** - Returns the array of keys of an occurrence of given `values`.
78
+ #### ***core_extensions/hash/delete.rb***
79
+ 1. **[`#slice!`](https://shivam091.github.io/core_extensions/Hash.html#method-i-slice-21)** - Alters the hash by keeping only specified `keys` and returns it.
80
+
81
+ ### [TrueClass](https://shivam091.github.io/core_extensions/TrueClass.html)
82
+
83
+ #### ***core_extensions/true_class.rb***
84
+ 1. **[`#to_i`](https://shivam091.github.io/core_extensions/TrueClass.html#method-i-to_i)** - Returns `1` if invoked on `TrueClass` instance.
85
+ 2. **[`#to_b`](https://shivam091.github.io/core_extensions/TrueClass.html#method-i-to_b)** - Returns `true` if invoked on `TrueClass` instance.
86
+
87
+ ### [FalseClass](https://shivam091.github.io/core_extensions/FalseClass.html)
88
+
89
+ #### ***core_extensions/false_class.rb***
90
+ 1. **[`#to_i`](https://shivam091.github.io/core_extensions/FalseClass.html#method-i-to_i)** - Returns `0` if invoked on `FalseClass` instance.
91
+ 2. **[`#to_b`](https://shivam091.github.io/core_extensions/FalseClass.html#method-i-to_b)** - Returns `false` if invoked on `FalseClass` instance.
92
+
93
+ ### [NilClass](https://shivam091.github.io/core_extensions/NilClass.html)
94
+
95
+ #### ***core_extensions/nil_class.rb***
96
+ 1. **[`#blank?`](https://shivam091.github.io/core_extensions/NilClass.html#method-i-blank-3F)** - Returns `true` if invoked on `NilClass` instance.
97
+ 2. **[`#to_b`](https://shivam091.github.io/core_extensions/NilClass.html#method-i-to_b)** - Returns `false` if invoked on `NilClass` instance.
98
+
99
+ ### [Object](https://shivam091.github.io/core_extensions/Object.html)
100
+
101
+ #### ***core_extensions/object.rb***
102
+ 1. **[`#is_one_of?`](https://shivam091.github.io/core_extensions/Object.html#method-i-is_one_of-3F)** - Returns `true` if the receiver object is an instance of at least one of the classes specified by `args`.
103
+ 2. **[`#deep_send`](https://shivam091.github.io/core_extensions/Object.html#method-i-deep_send)** - Invokes the specified methods continuously, unless encountering a `nil` value.
104
+ 3. **[`#in_namespace?`](https://shivam091.github.io/core_extensions/Object.html#method-i-in_namespace-3F)** - Returns whether or not the object is in the given namespace.
105
+
106
+ ### [Module](https://shivam091.github.io/core_extensions/Module.html)
107
+
108
+ #### ***core_extensions/module.rb***
109
+ 1. **[`#namespaces`](https://shivam091.github.io/core_extensions/Module.html#method-i-namespaces)** - Returns an `Array` with the namespaces to the current `Module`.
110
+
111
+ ### [Class](https://shivam091.github.io/core_extensions/Class.html)
112
+
113
+ #### ***core_extensions/class.rb***
114
+ 1. **[`#hierarchy`](https://shivam091.github.io/core_extensions/Class.html#method-i-hierarchy)** - Returns a tree-like `Hash` structure of all descendants.
115
+ 2. **[`#lineage`](https://shivam091.github.io/core_extensions/Class.html#method-i-lineage)** - Returns an `Array` of all superclasses.
116
+ 3. **[`#leaf_subclasses`](https://shivam091.github.io/core_extensions/Class.html#method-i-leaf_subclasses)** - Returns an `Array` of all descendants which have no subclasses.
71
117
 
72
118
  ## Contributing
73
119
 
data/bin/console CHANGED
@@ -4,7 +4,7 @@
4
4
  # -*- warn_indent: true -*-
5
5
 
6
6
  require "bundler/setup"
7
- require "core_extensions"
7
+ require "core_extensions/all"
8
8
 
9
9
  # You can add fixtures and/or initialization code here to make experimenting
10
10
  # with your gem easier. You can also use a different console, if you like.
@@ -3,3 +3,11 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  require "core_extensions/array"
6
+ require "core_extensions/hash"
7
+ require "core_extensions/true_class"
8
+ require "core_extensions/false_class"
9
+ require "core_extensions/nil_class"
10
+
11
+ require "core_extensions/class"
12
+ require "core_extensions/module"
13
+ require "core_extensions/object"
@@ -13,9 +13,9 @@ class Array
13
13
  #
14
14
  # ==== Examples
15
15
  #
16
- # [].take!(3) # => []
17
- # [1, 2, 3, 4, 5].take!(3) #=> [1, 2, 3]
18
- # [1, 2, 3, 4, 5].take!(6) #=> [1, 2, 3, 4, 5]
16
+ # [].take!(3) # => []
17
+ # [1, 2, 3, 4, 5].take!(3) #=> [1, 2, 3]
18
+ # [1, 2, 3, 4, 5].take!(6) #=> [1, 2, 3, 4, 5]
19
19
  def take!(n)
20
20
  replace(take(n))
21
21
  end
@@ -3,13 +3,12 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  class Array
6
- #
7
6
  # Returns an array of the duplicate elements.
8
7
  #
9
8
  # ==== Examples
10
9
  #
11
- # [1, 2, 3, 2, 4, 1, 5].duplicates #=> [1, 2]
12
- # [1, 2, 3, 4, 2, 4].duplicates #=> [2, 4]
10
+ # [1, 2, 3, 2, 4, 1, 5].duplicates #=> [1, 2]
11
+ # [1, 2, 3, 4, 2, 4].duplicates #=> [2, 4]
13
12
  def duplicates
14
13
  self.select { |element| self.count(element) > 1 }.uniq
15
14
  end
@@ -11,11 +11,10 @@ class Array
11
11
  #
12
12
  # ==== Examples
13
13
  #
14
- # [1, 2, 3].include_any?(1, 2) #=> true
15
- # [1, 2, 3].include_any?(1, 4) #=> true
16
- # [1, 2, 3].include_any?(4, 5) #=> false
14
+ # [1, 2, 3].include_any?(1, 2) #=> true
15
+ # [1, 2, 3].include_any?(1, 4) #=> true
16
+ # [1, 2, 3].include_any?(4, 5) #=> false
17
17
  def include_any?(*elements)
18
- elements = elements.first if elements.length == 1 && elements.first.kind_of?(Array)
19
18
  !(self & elements).empty?
20
19
  end
21
20
 
@@ -27,11 +26,10 @@ class Array
27
26
  #
28
27
  # ==== Examples
29
28
  #
30
- # [1, 2, 3].include_none?(1, 2) #=> false
31
- # [1, 2, 3].include_none?(1, 4) #=> false
32
- # [1, 2, 3].include_none?(4, 5) #=> true
29
+ # [1, 2, 3].include_none?(1, 2) #=> false
30
+ # [1, 2, 3].include_none?(1, 4) #=> false
31
+ # [1, 2, 3].include_none?(4, 5) #=> true
33
32
  def include_none?(*elements)
34
- elements = elements.first if elements.length == 1 && elements.first.kind_of?(Array)
35
33
  (self & elements).empty?
36
34
  end
37
35
 
@@ -43,11 +41,10 @@ class Array
43
41
  #
44
42
  # ==== Examples
45
43
  #
46
- # [1, 2, 3].include_all?(1, 2) #=> true
47
- # [1, 2, 3].include_all?(1, 4) #=> false
48
- # [1, 2, 3].include_all?(4, 5) #=> false
44
+ # [1, 2, 3].include_all?(1, 2) #=> true
45
+ # [1, 2, 3].include_all?(1, 4) #=> false
46
+ # [1, 2, 3].include_all?(4, 5) #=> false
49
47
  def include_all?(*elements)
50
- elements = elements.first if elements.length == 1 && elements.first.kind_of?(Array)
51
48
  (elements - self).empty?
52
49
  end
53
50
 
@@ -59,8 +56,8 @@ class Array
59
56
  #
60
57
  # ==== Examples
61
58
  #
62
- # [1, 2, 3].includes_index?(-4) #=> false
63
- # [1, 2, 3].includes_index?(-3) #=> true
59
+ # [1, 2, 3].includes_index?(-4) #=> false
60
+ # [1, 2, 3].includes_index?(-3) #=> true
64
61
  # [1, 2, 3].includes_index?(1) #=> true
65
62
  # [1, 2, 3].includes_index?(2) #=> true
66
63
  # [1, 2, 3].includes_index?(3) #=> false
@@ -13,9 +13,9 @@ class Array
13
13
  #
14
14
  # ==== Examples
15
15
  #
16
- # [1.342, 2.876, 3.546, 5.623, 5.245].round #=> [1.34, 2.88, 3.55, 5.62, 5.25]
17
- # [1.342, 2.876, 3.546, 5.623, 5.245].round(1) #=> [1.3, 2.9, 3.5, 5.6, 5.2]
18
- # [1.342, 2.876, 3.546, 5.623, 5.245].round(0) #=> [1, 3, 4, 6, 5]
16
+ # [1.342, 2.876, 3.546, 5.623, 5.245].round #=> [1.34, 2.88, 3.55, 5.62, 5.25]
17
+ # [1.342, 2.876, 3.546, 5.623, 5.245].round(1) #=> [1.3, 2.9, 3.5, 5.6, 5.2]
18
+ # [1.342, 2.876, 3.546, 5.623, 5.245].round(0) #=> [1, 3, 4, 6, 5]
19
19
  def round(precision = 2)
20
20
  map { |element| element.round(precision) }
21
21
  end
@@ -24,18 +24,19 @@ class Array
24
24
  #
25
25
  # ==== Examples
26
26
  #
27
- # [1, 2, 3, 4, 5].mean #=> 3.0
28
- # [1.0, 2.0, 3.0].mean #=> 2.0
27
+ # [1, 2, 3, 4, 5].mean #=> 3.0
28
+ # [1.0, 2.0, 3.0].mean #=> 2.0
29
29
  def mean
30
- sum.to_f / length
30
+ sum.to_f / size
31
31
  end
32
+ alias_method :average, :mean
32
33
 
33
34
  # Returns the variance of the array of +Numeric+.
34
35
  #
35
36
  # ==== Examples
36
37
  #
37
- # [1, 2, 3, 4, 5].variance #=> 2.0
38
- # [1.0, 2.0, 3.0].variance #=> 0.6666666666666666
38
+ # [1, 2, 3, 4, 5].variance #=> 2.0
39
+ # [1.0, 2.0, 3.0].variance #=> 0.6666666666666666
39
40
  def variance
40
41
  return 0 if empty?
41
42
 
@@ -46,8 +47,8 @@ class Array
46
47
  #
47
48
  # ==== Examples
48
49
  #
49
- # [1, 2, 3, 4, 5].stddev #=> 1.4142135623730951
50
- # [1.0, 2.0, 3.0].stddev #=> 0.816496580927726
50
+ # [1, 2, 3, 4, 5].stddev #=> 1.4142135623730951
51
+ # [1.0, 2.0, 3.0].stddev #=> 0.816496580927726
51
52
  def stddev
52
53
  Math.sqrt(variance)
53
54
  end
@@ -0,0 +1,40 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ require "active_support/core_ext/class/subclasses"
6
+
7
+ class Class
8
+ # Returns a tree-like +Hash+ structure of all descendants.
9
+ #
10
+ # ==== Examples
11
+ #
12
+ # require 'socket'
13
+ # IO.hierarchy
14
+ # #=> {BasicSocket=>{UNIXSocket=>{UNIXServer=>{}}, IPSocket=>{UDPSocket=>{}, TCPSocket=>{TCPServer=>{}}}, Socket=>{}}, File=>{}}
15
+ def hierarchy
16
+ subclasses.each_with_object({}) { |k, h| h[k] = k.hierarchy }
17
+ end
18
+
19
+ # Returns an +Array+ of all superclasses.
20
+ #
21
+ # ==== Examples
22
+ #
23
+ # require 'socket'
24
+ # TCPServer.lineage
25
+ # #=> [TCPSocket, IPSocket, BasicSocket, IO, Object, BasicObject]
26
+ def lineage
27
+ superclass.nil? ? [] : superclass.lineage.unshift(superclass)
28
+ end
29
+
30
+ # Returns an +Array+ of all descendants which have no subclasses.
31
+ #
32
+ # ==== Examples
33
+ #
34
+ # require 'socket'
35
+ # BasicSocket.leaf_subclasses
36
+ # #=> [Socket, UNIXServer, UDPSocket, TCPServer]
37
+ def leaf_subclasses
38
+ descendants.select { |d| d.subclasses.empty? }
39
+ end
40
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ class FalseClass
6
+ # Returns +0+ if invoked on +FalseClass+ instance.
7
+ #
8
+ # ==== Examples
9
+ #
10
+ # false.to_i #=> 0
11
+ def to_i
12
+ 0
13
+ end
14
+
15
+ # Returns +false+ if invoked on +FalseClass+ instance.
16
+ #
17
+ # ==== Examples
18
+ #
19
+ # false.to_b #=> false
20
+ def to_b
21
+ false
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ class Hash
6
+ # Returns the array of keys of an occurrence of given +values+.
7
+ # If the value is not found, returns empty array.
8
+ #
9
+ # ==== Arguments
10
+ #
11
+ # * +values+ - +values+ for which keys are to be retrieved.
12
+ #
13
+ # ==== Examples
14
+ #
15
+ # {a: 1, b: 2}.keys_at(1, 2) #=> [:a, :b]
16
+ # {a: 1, b: 2}.keys_at(1, 3) #=> [:a]
17
+ # {a: 1, b: 2}.keys_at(3) #=> []
18
+ def keys_at(*values)
19
+ select { |_, value| values.include?(value) }.keys
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ class Hash
6
+ # Alters the hash by keeping only specified `keys` and returns it.
7
+ # If the key is not present, returns empty `Hash`.
8
+ #
9
+ # ==== Arguments
10
+ #
11
+ # * +keys+ - +keys+ to be kept in the original `Hash`.
12
+ #
13
+ # ==== Examples
14
+ #
15
+ # {name: 'John', age: 30, occupation: 'Engineer', gender: 'Male'}.slice!(:name, :age) #=> {name: 'John', age: 30}
16
+ # {name: 'John', age: 30, occupation: 'Engineer', gender: 'Male'}.slice!(:address) #=> {}
17
+ def slice!(*keys)
18
+ keep_if { |key, _| keys.include?(key) }
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ class Hash
6
+ # Returns whether the hash contains all of the specified +keys+.
7
+ # This method is similar to Hash#key?, but it accepts several keys.
8
+ #
9
+ # ==== Arguments
10
+ #
11
+ # * +keys+ - +keys+ that needs to be checked in the hash.
12
+ #
13
+ # ==== Examples
14
+ #
15
+ # {a: 1, b: 2}.keys?(:a, :b) #=> true
16
+ # {a: 1, b: 2}.keys?(:a, :c) #=> false
17
+ def keys?(*keys)
18
+ keys.all? { |key| self.key?(key) }
19
+ end
20
+ alias_method :has_keys?, :keys?
21
+ end
@@ -0,0 +1,7 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ require "core_extensions/hash/access"
6
+ require "core_extensions/hash/delete"
7
+ require "core_extensions/hash/inclusion"
@@ -0,0 +1,14 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ class Module
6
+ # Returns an +Array+ with the namespaces to the current Module.
7
+ #
8
+ # ==== Examples
9
+ #
10
+ # Aaa::Bbb::Ccc::Ddd.namespaces #=> ["Aaa", "Bbb", "Ccc", "Ddd"]
11
+ def namespaces
12
+ name.to_s.split("::")
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ class NilClass
6
+ # Returns +true+ if invoked on `NilClass` instance.
7
+ #
8
+ # ==== Examples
9
+ #
10
+ # nil.blank? #=> true
11
+ def blank?
12
+ true
13
+ end
14
+
15
+ # Returns +false+ if invoked on +NilClass+ instance.
16
+ #
17
+ # ==== Examples
18
+ #
19
+ # nil.to_b #=> false
20
+ def to_b
21
+ false
22
+ end
23
+ end
@@ -0,0 +1,64 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ class Object
6
+ # Returns +true+ if the receiver object is an instance of at least one of the classes specified by +args+.
7
+ # This method is similar to {Object#is_a?}[https://www.rubydoc.info/stdlib/core/Object#is_a%3F-instance_method], but it accepts multiple arguments.
8
+ #
9
+ # ==== Arguments
10
+ #
11
+ # * +args+ - The classes to check against. One or more classes can be passed. Each argument represents a class that the object will be checked against.
12
+ #
13
+ # ==== Examples
14
+ #
15
+ # 1.is_one_of?(Numeric, TrueClass) #=> true
16
+ # true.is_one_of?(Numeric, TrueClass) #=> true
17
+ # false.is_one_of?(Numeric, TrueClass) #=> false
18
+ #
19
+ # ==== Returns
20
+ # (Boolean)
21
+ def is_one_of?(*args)
22
+ args.any? { |arg| is_a?(arg) }
23
+ end
24
+
25
+ # Invokes the specified methods continuously, unless encountering a +nil+ value.
26
+ #
27
+ # ==== Examples
28
+ #
29
+ # 10.deep_send("to_s.length") # => 2
30
+ # 10.deep_send("to_s", "length") # => 2
31
+ # 10.deep_send(:to_s, :length) # => 2
32
+ # 10.deep_send(["to_s", "length"]) # => 2
33
+ # [].deep_send("first.length") # => nil
34
+ def deep_send(*args)
35
+ args = args.first.dup if args.length == 1 && args.first.kind_of?(Array)
36
+ args = args.shift.to_s.strip.split('.') + args
37
+
38
+ arg = args.shift
39
+ raise ArgumentError if arg.nil?
40
+
41
+ result = send(arg)
42
+ return nil if result.nil?
43
+ return result if args.empty?
44
+
45
+ result.deep_send(args)
46
+ end
47
+
48
+ # Returns whether or not the object is in the given namespace.
49
+ #
50
+ # ==== Arguments
51
+ #
52
+ # * +val+ - The object to be checked in the namespace.
53
+ #
54
+ # ==== Examples
55
+ #
56
+ # Aaa::Bbb::Ccc::Ddd.in_namespace?(Aaa::Bbb) #=> true
57
+ # Aaa::Bbb::Ccc::Ddd.new.in_namespace?(Aaa::Bbb) #=> true
58
+ # Aaa::Bbb::Ccc::Eee.in_namespace?("Aaa::Bbb") #=> true
59
+ # Aaa::Bbb::Ccc::Eee.in_namespace?(Aaa::Bbb::Ccc::Ddd) #=> false
60
+ def in_namespace?(val)
61
+ namespaces = val.to_s.split("::")
62
+ namespaces == (kind_of?(Module) ? namespaces : self.class.namespaces)[0, namespaces.length]
63
+ end
64
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ class TrueClass
6
+ # Returns +1+ if invoked on +TrueClass+ instance.
7
+ #
8
+ # ==== Examples
9
+ #
10
+ # true.to_i #=> 1
11
+ def to_i
12
+ 1
13
+ end
14
+
15
+ # Returns +true+ if invoked on +TrueClass+ instance.
16
+ #
17
+ # ==== Examples
18
+ #
19
+ # true.to_b #=> true
20
+ def to_b
21
+ true
22
+ end
23
+ end
@@ -3,5 +3,5 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  module CoreExtensions #:nodoc:
6
- VERSION = "0.1.1"
6
+ VERSION = "0.1.3"
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rb_core_extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harshal LADHE
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-07-05 00:00:00.000000000 Z
11
+ date: 2023-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -70,6 +70,16 @@ files:
70
70
  - lib/core_extensions/array/duplicates.rb
71
71
  - lib/core_extensions/array/inclusion.rb
72
72
  - lib/core_extensions/array/math.rb
73
+ - lib/core_extensions/class.rb
74
+ - lib/core_extensions/false_class.rb
75
+ - lib/core_extensions/hash.rb
76
+ - lib/core_extensions/hash/access.rb
77
+ - lib/core_extensions/hash/delete.rb
78
+ - lib/core_extensions/hash/inclusion.rb
79
+ - lib/core_extensions/module.rb
80
+ - lib/core_extensions/nil_class.rb
81
+ - lib/core_extensions/object.rb
82
+ - lib/core_extensions/true_class.rb
73
83
  - lib/core_extensions/version.rb
74
84
  - rb_core_extensions.gemspec
75
85
  homepage: https://github.com/shivam091/core_extensions