rb_core_extensions 0.1.0 → 0.1.1

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: a6e1b20ef1ca0581de4193e3035e1d4e060f3714e8b81912cbc6d3d2a240a35b
4
- data.tar.gz: a590f507ea31525383242987cca723c208617baea3f66c76967680044d154e3b
3
+ metadata.gz: 8debb12bba2cbb5357f52feaaf7c9bb9eb3a2c54bdca4e7f9438857e985dc4fb
4
+ data.tar.gz: 95bfeab24e32c5bbd5e60e3fb278282754efb7f7a080c4be765cd647d8ca778f
5
5
  SHA512:
6
- metadata.gz: 4d229736ef48c958c4d844b11d1d186f8832248e759875bc3322b268ca05f98905df2455049c7416a8752364f93fd79991e9c50bf5f785d93f79ec380b011872
7
- data.tar.gz: 3bcd013b138d899c6566552d564acc61331ac4db63a255d6f1bbe3917e46a4276cb4802664434489b3ccd5cd064556f1d296ca4413835144687cf341b7830d02
6
+ metadata.gz: 5ba7dfc16cfa492cacbfc41df35c59f6f00610ff5f28ff6247540eefab0bf8362bc86ff4bff340e39db67d75990ea0e31823a5d9efd56aa147c6b6ce866b22e2
7
+ data.tar.gz: 4e42b2b57b2600654c8accd9f9349fe5ce575f9e2a82b5013012b820500df59253901b2b8dfa0219a11c499d09b3035dc50e99e77c074be4e6e3938d32319b66
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [0.1.1](https://github.com/shivam091/core_extensions/compare/main...0.1.1) - 2023-07-05
2
+
3
+ ### What's new
4
+
5
+ - Added core extension methods `take!`, `round`, `duplicates`, `include_all?`, `include_any?`, `include_none?`, `includes_index?`, `mean`, `stddev`, and `variance` in `Array`
6
+
1
7
  ## [0.1.0] - 2023-07-05
2
8
 
3
9
  - Initial release
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
- # frozen_string_literal: true
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
2
4
 
3
5
  source "https://rubygems.org"
4
6
 
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rb_core_extensions (0.1.0)
5
- activesupport
4
+ rb_core_extensions (0.1.1)
5
+ activesupport (~> 7.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
@@ -48,7 +48,7 @@ DEPENDENCIES
48
48
  rake (~> 13.0)
49
49
  rb_core_extensions!
50
50
  rspec (~> 3.0)
51
- simplecov (>= 0.21.2)
51
+ simplecov (~> 0.21, >= 0.21.2)
52
52
 
53
53
  BUNDLED WITH
54
54
  2.4.10
data/README.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  `rb_core_extensions` is a set of core extensions beyond those provided by `Ruby` and `ActiveSupport`.
4
4
 
5
+ [![Ruby](https://github.com/shivam091/core_extensions/actions/workflows/main.yml/badge.svg)](https://github.com/shivam091/rb_core_extensions/actions/workflows/main.yml)
6
+ [![Gem Version](https://badge.fury.io/rb/rb_core_extensions.svg)](https://badge.fury.io/rb/rb_core_extensions)
7
+ [![Gem Downloads](https://img.shields.io/gem/dt/rb_core_extensions.svg)](http://rubygems.org/gems/rb_core_extensions)
8
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/592b82a5336ee551a8f1/test_coverage)](https://codeclimate.com/github/shivam091/core_extensions/test_coverage)
9
+ [![Maintainability](https://api.codeclimate.com/v1/badges/592b82a5336ee551a8f1/maintainability)](https://codeclimate.com/github/shivam091/core_extensions/maintainability)
10
+ [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/shivam091/core_extensions/blob/main/LICENSE.txt)
11
+
5
12
  ## Minimum Requirements
6
13
 
7
14
  * Ruby 3.2.2+ (https://www.ruby-lang.org/en/downloads/branches/)
@@ -22,6 +29,46 @@ Or otherwise simply install it yourself as:
22
29
 
23
30
  `$ gem install rb_core_extensions`
24
31
 
32
+ ### Usage
33
+
34
+ Loading all core extensions at once:
35
+
36
+ ```ruby
37
+ require "core_extensions/all"
38
+ ```
39
+
40
+ Cherry-picking only what you want:
41
+
42
+ ```ruby
43
+ require "core_extensions/array"
44
+ require "core_extensions/array/math"
45
+ require "core_extensions/date"
46
+ ```
47
+
48
+ ## Extensions Provided
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.
51
+
52
+ ### Array
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.
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`.
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.
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`.
71
+
25
72
  ## Contributing
26
73
 
27
74
  1. Fork it
data/Rakefile CHANGED
@@ -1,4 +1,6 @@
1
- # frozen_string_literal: true
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
2
4
 
3
5
  require "bundler/gem_tasks"
4
6
  require "rspec/core/rake_task"
@@ -0,0 +1,5 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ require "core_extensions/array"
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ class Array
6
+ # Alters the array by removing first +n+ elements.
7
+ #
8
+ # If a negative number is given, raises an +ArgumentError+.
9
+ #
10
+ # ==== Attributes
11
+ #
12
+ # * +n+ - Number of elements to take from the array.
13
+ #
14
+ # ==== Examples
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]
19
+ def take!(n)
20
+ replace(take(n))
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ class Array
6
+ #
7
+ # Returns an array of the duplicate elements.
8
+ #
9
+ # ==== Examples
10
+ #
11
+ # [1, 2, 3, 2, 4, 1, 5].duplicates #=> [1, 2]
12
+ # [1, 2, 3, 4, 2, 4].duplicates #=> [2, 4]
13
+ def duplicates
14
+ self.select { |element| self.count(element) > 1 }.uniq
15
+ end
16
+ end
@@ -0,0 +1,70 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ class Array
6
+ # Returns whether the array contains any of the +elements+.
7
+ #
8
+ # ==== Arguments
9
+ #
10
+ # * +elements+ - +elements+ that needs to be checked in the array.
11
+ #
12
+ # ==== Examples
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
17
+ def include_any?(*elements)
18
+ elements = elements.first if elements.length == 1 && elements.first.kind_of?(Array)
19
+ !(self & elements).empty?
20
+ end
21
+
22
+ # Returns whether the array contains none of the +elements+.
23
+ #
24
+ # ==== Arguments
25
+ #
26
+ # * +elements+ - +elements+ that needs to be checked in the array.
27
+ #
28
+ # ==== Examples
29
+ #
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
33
+ def include_none?(*elements)
34
+ elements = elements.first if elements.length == 1 && elements.first.kind_of?(Array)
35
+ (self & elements).empty?
36
+ end
37
+
38
+ # Returns whether the array contains all of the +elements+.
39
+ #
40
+ # ==== Arguments
41
+ #
42
+ # * +elements+ - +elements+ that needs to be checked in the array.
43
+ #
44
+ # ==== Examples
45
+ #
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
49
+ def include_all?(*elements)
50
+ elements = elements.first if elements.length == 1 && elements.first.kind_of?(Array)
51
+ (elements - self).empty?
52
+ end
53
+
54
+ # Returns whether the array has a value at the specified +index+.
55
+ #
56
+ # ==== Arguments
57
+ #
58
+ # * +index+ - +index+ that needs to be checked in the array.
59
+ #
60
+ # ==== Examples
61
+ #
62
+ # [1, 2, 3].includes_index?(-4) #=> false
63
+ # [1, 2, 3].includes_index?(-3) #=> true
64
+ # [1, 2, 3].includes_index?(1) #=> true
65
+ # [1, 2, 3].includes_index?(2) #=> true
66
+ # [1, 2, 3].includes_index?(3) #=> false
67
+ def includes_index?(index)
68
+ (-self.length...self.length).cover?(index)
69
+ end
70
+ end
@@ -0,0 +1,54 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ class Array
6
+ # Rounds each element of the array up to specified +precision+.
7
+ #
8
+ # If +precision+ is +zero+, array elements will be rounded to integers.
9
+ #
10
+ # ==== Attributes
11
+ #
12
+ # * +precision+ - Returns float rounded to the nearest value with a precision of +precision+.
13
+ #
14
+ # ==== Examples
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]
19
+ def round(precision = 2)
20
+ map { |element| element.round(precision) }
21
+ end
22
+
23
+ # Returns the mean of the array of +Numeric+.
24
+ #
25
+ # ==== Examples
26
+ #
27
+ # [1, 2, 3, 4, 5].mean #=> 3.0
28
+ # [1.0, 2.0, 3.0].mean #=> 2.0
29
+ def mean
30
+ sum.to_f / length
31
+ end
32
+
33
+ # Returns the variance of the array of +Numeric+.
34
+ #
35
+ # ==== Examples
36
+ #
37
+ # [1, 2, 3, 4, 5].variance #=> 2.0
38
+ # [1.0, 2.0, 3.0].variance #=> 0.6666666666666666
39
+ def variance
40
+ return 0 if empty?
41
+
42
+ map { |element| (element - mean) ** 2 }.sum / length
43
+ end
44
+
45
+ # Returns the standard deviation of the array of +Numeric+.
46
+ #
47
+ # ==== Examples
48
+ #
49
+ # [1, 2, 3, 4, 5].stddev #=> 1.4142135623730951
50
+ # [1.0, 2.0, 3.0].stddev #=> 0.816496580927726
51
+ def stddev
52
+ Math.sqrt(variance)
53
+ end
54
+ end
@@ -0,0 +1,8 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ require "core_extensions/array/delete"
6
+ require "core_extensions/array/duplicates"
7
+ require "core_extensions/array/inclusion"
8
+ require "core_extensions/array/math"
@@ -2,6 +2,6 @@
2
2
  # -*- frozen_string_literal: true -*-
3
3
  # -*- warn_indent: true -*-
4
4
 
5
- module CoreExtensions
6
- VERSION = "0.1.0"
5
+ module CoreExtensions #:nodoc:
6
+ VERSION = "0.1.1"
7
7
  end
@@ -1,4 +1,6 @@
1
- # frozen_string_literal: true
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
2
4
 
3
5
  require_relative "lib/core_extensions/version"
4
6
 
@@ -31,7 +33,7 @@ Gem::Specification.new do |spec|
31
33
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
32
34
  spec.require_paths = ["lib"]
33
35
 
34
- spec.add_runtime_dependency "activesupport"
36
+ spec.add_runtime_dependency "activesupport", "~> 7.0"
35
37
 
36
- spec.add_development_dependency "simplecov", ">= 0.21.2"
38
+ spec.add_development_dependency "simplecov", "~> 0.21", ">= 0.21.2"
37
39
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rb_core_extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harshal LADHE
@@ -14,20 +14,23 @@ dependencies:
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '7.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '7.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: simplecov
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.21'
31
34
  - - ">="
32
35
  - !ruby/object:Gem::Version
33
36
  version: 0.21.2
@@ -35,6 +38,9 @@ dependencies:
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '0.21'
38
44
  - - ">="
39
45
  - !ruby/object:Gem::Version
40
46
  version: 0.21.2
@@ -58,6 +64,12 @@ files:
58
64
  - bin/console
59
65
  - bin/setup
60
66
  - lib/core_extensions.rb
67
+ - lib/core_extensions/all.rb
68
+ - lib/core_extensions/array.rb
69
+ - lib/core_extensions/array/delete.rb
70
+ - lib/core_extensions/array/duplicates.rb
71
+ - lib/core_extensions/array/inclusion.rb
72
+ - lib/core_extensions/array/math.rb
61
73
  - lib/core_extensions/version.rb
62
74
  - rb_core_extensions.gemspec
63
75
  homepage: https://github.com/shivam091/core_extensions