ruuuby-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
  SHA1:
3
- metadata.gz: 354997ed4a057826b15bc626d33b66114776f7be
4
- data.tar.gz: 81569622b15dbbbb62f3021d1551dc9b89ca7d82
3
+ metadata.gz: ebb8cfb655ee14c5bc77da717475557ffb107948
4
+ data.tar.gz: a66269f18ae8a11459a03bb774837a6391e57efe
5
5
  SHA512:
6
- metadata.gz: d216915d34808cb1f9c8e73fe0474afe8247fe539e557e054ec8f35a979c957e0c7606e0352a8eada96c45728605d16fc807591191dbcb3ba8e4400c8b29f6b9
7
- data.tar.gz: 4c95498758e15119c9ffab770058d04ac61e8da44f5d450a8c53a34c4a32e140aa9e3e311a1824eaf24f730c9f7597acd1a57ea7aee86ea9bb4b27bda7b4261f
6
+ metadata.gz: a83abc7ef9025837d1e73970a91fced98be816612988a64b5cdaab8762bbc6fc6ad101be036e6e39756beca19755121c826d181a5a62f496abefccbed9bae7c3
7
+ data.tar.gz: 461540a3cdc6e31dce7b334f02a26043aece0345a96990e8b0c12983d23821cf8a174367bfde680db475eeca391dd51705530839b761ac44d1caf0a7c64eeff1
data/CHANGELOG.md CHANGED
@@ -1,6 +1,8 @@
1
+ #0.1.1
2
+ - Further extend classes(Array, String)
3
+ - Add additional RSpecs
4
+ - Start abstraction work for type checking and exception throwing
5
+ - Start tracking code coverage
1
6
  #0.1.0
2
7
  - GEM created, first configurations set
3
8
  - Add function extensions to class(Array)
4
-
5
-
6
-
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in ruuuby-extensions.gemspec
4
4
  gemspec
5
5
 
6
- gem "rdoc"
6
+ gem "rdoc", require: false
7
7
  gem 'simplecov', require: false, group: :test
8
8
  gem "rake", "~> 12.0"
9
9
  gem "rspec", "~> 3.0"
@@ -1,47 +1,111 @@
1
1
  require "ruuuby/extensions/version"
2
2
 
3
+ # This module + gem simply aims to provide coding quality of life extensions to core classes, somewhat similar to Python's approach.
3
4
  module Ruuuby
5
+
6
+ # Empty module. To be used for documenting Ruuuby.
4
7
  module Extensions
8
+ # Placeholder error class for errors specifically caused by Ruuuby.
5
9
  class Error < StandardError; end
10
+ end
11
+
12
+ # Utility functionalities for checking data types and throw exceptions.
13
+ module Params
14
+ # @param [String|*] str
15
+ #
16
+ # @return [Boolean] true, if provided param is not nil and inherits from String class.
17
+ def self.not_string?(str)
18
+ str == nil || !str.is_a?(String)
19
+ end
20
+
21
+ # @param [Array|*] str
22
+ #
23
+ # @return [Boolean] true, if provided param is not nil and inherits from Array class.
24
+ def self.not_array?(ary)
25
+ ary == nil || !ary.is_a?(Array)
26
+ end
27
+
28
+ # @param [String|nil|*] param
29
+ #
30
+ # @raise [ArgumentError]
31
+ #
32
+ # @return [Boolean] true only, exception raised otherwise
33
+ def self.check_string(param)
34
+ raise ArgumentError.new(self::bad_type(caller_locations.first.label.to_s, String, param)) if Ruuuby::Params::not_string?(param)
35
+ true
36
+ end
37
+
38
+ # @param [Array|nil|*] param
39
+ #
40
+ # @raise [ArgumentError]
41
+ #
42
+ # @return [Boolean] true only, exception raised otherwise
43
+ def self.check_array(param)
44
+ raise ArgumentError.new(self::bad_type(caller_locations.first.label.to_s, Array, param)) if Ruuuby::Params::not_array?(param)
45
+ true
46
+ end
6
47
 
7
- module Arrays
8
- def self.already_loaded?
9
- Array.respond_to?(:equal_contents?)
48
+ # @param [Array|nil|*] param
49
+ #
50
+ # @raise [ArgumentError]
51
+ #
52
+ # @return [Boolean] true only, exception raised otherwise
53
+ def self.check_char(param)
54
+ if param == nil || !param.is_a?(String)
55
+ error_message = "a param of type{#{String.to_s}}, instead got{#{param.class.to_s}}!"
56
+ elsif param.chars.length != 1
57
+ error_message = "a String of length 1, instead got{#{param.length.to_s}}"
58
+ else
59
+ return true
10
60
  end
61
+ raise ArgumentError.new("#{caller_locations.first.label.to_s} requires #{error_message}")
11
62
  end
12
63
 
64
+ private
65
+
66
+ # @param [String] func | the name of the original function that triggered this exception
67
+ # @param [*] required_type | the required data type for the param
68
+ # @param [*] param | the variable with mis-mitached type
69
+ #
70
+ # @return [String]
71
+ def self.bad_type(func_name, required_type, param)
72
+ "#{func_name} requires param of type{#{required_type.to_s}}, instead got{#{param.class.to_s}}!"
73
+ end
13
74
  end
14
75
  end
15
76
 
16
- unless Ruuuby::Extensions::Arrays::already_loaded?
77
+ unless Array.respond_to?(:equal_contents?)
78
+
79
+ # Add extensions to the default class(*String*).
17
80
  class Array
81
+
18
82
  # @param [Array] them | another array to be compared against
19
83
  #
84
+ # @raise [ArgumentError]
85
+ #
20
86
  # @return [Array] a new array instance containing values only appearing in base array (and not in provided array)
21
87
  def uniq_to_me(them)
22
- unless them.is_a?(Array)
23
- raise ArgumentError.new("Array.uniq_to_me requires array param, not the provided{#{them.class.to_s}}!")
24
- end
88
+ Ruuuby::Params::check_array(them)
25
89
  self.uniq - them.uniq
26
90
  end
27
91
 
28
92
  # @param [Array] them | an array to be compared against
29
93
  #
94
+ # @raise [ArgumentError]
95
+ #
30
96
  # @return [Array] a new array instance containing values only appearing in provided array (and not in base array)
31
97
  def uniq_to_them(them)
32
- unless them.is_a?(Array)
33
- raise ArgumentError.new("Array.uniq_to_them requires array param, not the provided{#{them.class.to_s}}!")
34
- end
98
+ Ruuuby::Params::check_array(them)
35
99
  them.uniq - self.uniq
36
100
  end
37
101
 
38
102
  # @param [Array] them | an array to be compared against
39
103
  #
104
+ # @raise [ArgumentError]
105
+ #
40
106
  # @return [Array] a new array instance containing values only appearing in provided array (and not in base array)
41
107
  def shared_between(them)
42
- unless them.is_a?(Array)
43
- raise ArgumentError.new("Array.shared_between requires array param, not the provided{#{them.class.to_s}}!")
44
- end
108
+ Ruuuby::Params::check_array(them)
45
109
  self.uniq & them.uniq
46
110
  end
47
111
 
@@ -53,15 +117,97 @@ unless Ruuuby::Extensions::Arrays::already_loaded?
53
117
 
54
118
  # @param [Array] them
55
119
  #
56
- # @return [Boolean] true, if this array and provided array both have same content (order-matters: false, duplicates-matter: false)
120
+ # @raise [ArgumentError]
121
+ #
122
+ # @return [Boolean] true, if this array and provided array both have same content (*order-matters*: false, *duplicates-matter*: false)
57
123
  def equal_contents?(them)
58
- return false if (them == nil || !them.is_a?(Array))
59
- len_this = self.length
60
- len_them = them.length
61
- return true if (len_this == 0 && len_them == 0)
62
- return false if (len_this != len_them)
124
+ Ruuuby::Params::check_array(them)
125
+ return true if (self.length == 0 && them.length == 0)
126
+ return false if (self.length != them.length)
63
127
  uniq_to_me(them).empty? && uniq_to_them(them).empty?
64
128
  end
129
+
130
+ # @param [Array] ending
131
+ #
132
+ # @raise [ArgumentError]
133
+ #
134
+ # @return [Boolean] true, if this array ends with the elements in the provided parameter array (*order-matters*: true, *duplicates-matter*: true)
135
+ def end_with?(ending)
136
+ Ruuuby::Params::check_array(ending)
137
+ if ending.length == 0
138
+ self.length == 0
139
+ else
140
+ self[(self.length-ending.length)..(self.length-1)] == ending[(0)..(ending.length-1)]
141
+ end
142
+ end
143
+
144
+ # @param [Array] ending
145
+ #
146
+ # @raise [ArgumentError]
147
+ #
148
+ # @return [Array]
149
+ def ensure_ending!(ending)
150
+ Ruuuby::Params::check_array(ending)
151
+ len_ending = ending.length
152
+ return self if len_ending == 0 || self.end_with?(ending)
153
+ len_this = self.length
154
+ return self << ending[0] if len_ending == 1
155
+ if len_this == 0
156
+ ending.each { |element| self << element }
157
+ return self
158
+ end
159
+ delta = 0
160
+ last_matched = nil
161
+ while delta <= len_this && delta <= len_ending
162
+ ending_of_this = self[(len_this-1-delta)..(len_this-1)]
163
+ starting_of_end = ending[0..delta]
164
+ last_matched = starting_of_end if ending_of_this == starting_of_end
165
+ delta += 1
166
+ end
167
+ if last_matched == nil
168
+ ending.each { |element| self << element }
169
+ else
170
+ ending[(last_matched.length)..(len_ending-1)].each { |element| self << element }
171
+ end
172
+ self
173
+ end
65
174
  end
66
- end
67
175
 
176
+ # Add extensions to the default class(*String*).
177
+ class String
178
+
179
+ # @param [String] ending
180
+ #
181
+ # @raise [ArgumentError]
182
+ #
183
+ # @return [String]
184
+ def ensure_ending!(ending)
185
+ Ruuuby::Params::check_string(ending)
186
+ return self if ending == '' || self.end_with?(ending)
187
+ len_this = self.length
188
+ return self << ending if len_this == 0
189
+ last_matched = ''
190
+ len_ending = ending.length
191
+ delta = 0
192
+ while delta <= len_this && delta <= len_ending
193
+ ending_of_this = self[(len_this-1-delta)..(len_this-1)]
194
+ starting_of_end = ending[0..delta]
195
+ last_matched = starting_of_end if ending_of_this == starting_of_end
196
+ delta += 1
197
+ end
198
+ self << (last_matched == '' ? ending : ending[last_matched.length..len_ending-1])
199
+ end
200
+
201
+ # @param [String] ending
202
+ #
203
+ # @raise [ArgumentError]
204
+ #
205
+ # @return [String]
206
+ def ensure_ending_char!(ending)
207
+ Ruuuby::Params::check_char(ending)
208
+ self << ending if self.length == 0 || self[-1] != ending
209
+ self
210
+ end
211
+ end
212
+
213
+ end
@@ -1,5 +1,8 @@
1
+ # This module + gem simply aims to provide coding quality of life extensions to core classes, somewhat similar to Python's approach.
1
2
  module Ruuuby
3
+ # Empty module. To be used for documenting Ruuuby.
2
4
  module Extensions
3
- VERSION = "0.1.0"
5
+ # Current version of *Ruuuby*.
6
+ VERSION = "0.1.1"
4
7
  end
5
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruuuby-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
  - Uladzislau Tarsunou