regeng 0.2.3 → 0.2.4
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/Gemfile.lock +1 -1
- data/README.md +3 -1
- data/changelog.md +2 -0
- data/lib/regeng.rb +45 -2
- data/lib/regeng/version.rb +3 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 793b1fe234f31d0436bd4897e1790b58866446ab38d26e7bafef3a2c259abaf2
|
4
|
+
data.tar.gz: 20b8ee94808bfa33dca2bebec6a370892f18aebdf545b949a5ca4797fb618d29
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8abc45f0202349ae23642cf86d5ce9ce03a7340dc757cce58f2449c092352874d1dbc1b315aa3ae8ef124b5f1ebc09e70ce5d5f59c6d9e227355e29c766709eb
|
7
|
+
data.tar.gz: 5a30c9135b3b2d6b662258c996bbc281603346d4d8380d6bfeeee8a168afeb4b892a8f8914de736af65224a730c942f86119d8ee7c4e81f646c9c36a796db8ef
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
|
5
5
|
Regeng or regular english, is a gem aimed to make regular expressions a bit more noob friendly.
|
6
6
|
|
7
|
+
[Regeng Gem](https://rubygems.org/gems/regeng)
|
8
|
+
|
7
9
|
## Installation
|
8
10
|
|
9
11
|
Add this line to your application's Gemfile:
|
@@ -25,7 +27,7 @@ Or install it yourself as:
|
|
25
27
|
```ruby
|
26
28
|
require 'regeng'
|
27
29
|
=> true
|
28
|
-
Regeng.
|
30
|
+
Regeng.new 'any character except e-z at start of string'
|
29
31
|
=> /\A[^e-z]/
|
30
32
|
```
|
31
33
|
|
data/changelog.md
CHANGED
data/lib/regeng.rb
CHANGED
@@ -7,7 +7,7 @@ module Regeng
|
|
7
7
|
CHARACTER_COND = /((any )?(character)(s)?( except)?( between)?( [a-zA-Z])+((-)|( through )|( to )|( and )){1}[a-zA-Z]){1}/.freeze
|
8
8
|
CHARACTER_SIMP = /((any )?((uppercase )?|(lowercase )?)(character)(s)?){1}/.freeze
|
9
9
|
|
10
|
-
DIGIT_COND = /((any )?((digit)|(number))(s)?( except)?( between)?( [0-9])
|
10
|
+
DIGIT_COND = /((any )?((digit)|(number))(s)?( except)?( between)?( [0-9])(0)*((-)|( through )|( to )|( and )){1}([0-9])(0)*){1}/.freeze
|
11
11
|
DIGIT_SIMPLE = /(any ((digit)|(number))(s)?){1}/.freeze
|
12
12
|
|
13
13
|
AT_COND = /( at )((start)|(end))( of )((line)|(string))/.freeze
|
@@ -80,6 +80,7 @@ module Regeng
|
|
80
80
|
|
81
81
|
# Processes conditional digit/number expressions.
|
82
82
|
def self.digit_condition(string)
|
83
|
+
complex = false
|
83
84
|
except = '^' if /(except)/.match?(string)
|
84
85
|
multiples = '+' if /((digit)|(number))(s)/.match?(string)
|
85
86
|
if /( ([0-9])(-)(([0-9])))/.match?(string)
|
@@ -93,11 +94,19 @@ module Regeng
|
|
93
94
|
elsif /( ([0-9] )+(and )([0-9])+)/.match?(string)
|
94
95
|
unfiltered_mod = string.match(/( ([0-9] )+(and )([0-9]))/)
|
95
96
|
digit_mod = unfiltered_mod.to_s.gsub(/( )|(and )/, '')
|
97
|
+
elsif /( ([0-9](0)+ )((and )|(to ))([1-9](0)+))/.match?(string)
|
98
|
+
unfiltered_mod = string.match(/(([0-9](0)+ )((and )|(to ))([1-9](0)+))/)
|
99
|
+
digit_mod = complex_numbers(unfiltered_mod.to_s)
|
100
|
+
complex = true
|
96
101
|
end
|
97
102
|
|
98
103
|
Error.invalid_expression if digit_mod.nil? || digit_mod == '-'
|
99
104
|
|
100
|
-
|
105
|
+
if complex
|
106
|
+
"#{digit_mod}"
|
107
|
+
else
|
108
|
+
"[#{except}#{digit_mod}]#{multiples}"
|
109
|
+
end
|
101
110
|
end
|
102
111
|
|
103
112
|
# Processes simple digit expressions.
|
@@ -115,4 +124,38 @@ module Regeng
|
|
115
124
|
at_mod = '\z' if /(end of string)/.match?(string)
|
116
125
|
at_mod
|
117
126
|
end
|
127
|
+
|
128
|
+
# Helpers
|
129
|
+
def self.complex_numbers(string)
|
130
|
+
# extracts first number
|
131
|
+
first_number = string.match(/([0-9](0)* )((and )|(to ))/)
|
132
|
+
first_number = first_number.to_s.gsub(/( )|(and )/, '')
|
133
|
+
|
134
|
+
# extracts second number
|
135
|
+
second_number = string.match(/( [1-9](0)+)/)
|
136
|
+
second_number = second_number.to_s.sub(/( )/, '')
|
137
|
+
|
138
|
+
process_complex_numbers(first_number, second_number)
|
139
|
+
end
|
140
|
+
|
141
|
+
def self.process_complex_numbers(first_number, second_number)
|
142
|
+
mod_array = []
|
143
|
+
|
144
|
+
first_digit = first_number.sub(/(0)+/, '')
|
145
|
+
first_zeros = first_number.match(/(0)+/)
|
146
|
+
zeros_length = first_zeros.to_s.length
|
147
|
+
|
148
|
+
second_digit = second_number.sub(/(0)+/, '')
|
149
|
+
|
150
|
+
(first_digit...second_digit).to_a.each do |digit|
|
151
|
+
modifier = "(#{digit}"
|
152
|
+
zeros_length.times do |_|
|
153
|
+
modifier = "#{modifier}[0-9]"
|
154
|
+
end
|
155
|
+
modifier = "#{modifier})"
|
156
|
+
mod_array.push(modifier)
|
157
|
+
end
|
158
|
+
|
159
|
+
"#{mod_array.join('|')}|(#{second_number})"
|
160
|
+
end
|
118
161
|
end
|
data/lib/regeng/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: regeng
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- LucHighwalker
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|