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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6ed0b6773d2d8d9fa35aafce95be9e7791a825afb9db98693cfc70cdb20a129a
4
- data.tar.gz: 13c38505d60b9497796dfdc7068b6f08301ded0c03498af6a0e4e31993a6b7cd
3
+ metadata.gz: 793b1fe234f31d0436bd4897e1790b58866446ab38d26e7bafef3a2c259abaf2
4
+ data.tar.gz: 20b8ee94808bfa33dca2bebec6a370892f18aebdf545b949a5ca4797fb618d29
5
5
  SHA512:
6
- metadata.gz: '06820b558828006ed09a74f4be4f6382c886bef6696cf1037d31cb61dbe03833a76568e7f68a50cc358633f4c4c38cc86cf7acea336a9f23f42ba8e375ac91ab'
7
- data.tar.gz: 4e7d195e367f54d0b67baf20bd094a7dfe2f8ca39b1196cfdc775de98ae4a4178e37500e6489d2d0772f7c4a97314d16119f68ad863ad73400a46fbede91d314
6
+ metadata.gz: 8abc45f0202349ae23642cf86d5ce9ce03a7340dc757cce58f2449c092352874d1dbc1b315aa3ae8ef124b5f1ebc09e70ce5d5f59c6d9e227355e29c766709eb
7
+ data.tar.gz: 5a30c9135b3b2d6b662258c996bbc281603346d4d8380d6bfeeee8a168afeb4b892a8f8914de736af65224a730c942f86119d8ee7c4e81f646c9c36a796db8ef
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- regeng (0.2.3)
4
+ regeng (0.2.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
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.expression('any character except e-z at start of string')
30
+ Regeng.new 'any character except e-z at start of string'
29
31
  => /\A[^e-z]/
30
32
  ```
31
33
 
@@ -1,3 +1,5 @@
1
+ [01-02-19][0.2.4]: Now processes more complex numbers.
2
+
1
3
  [12-11-18][0.2.3]: Now raises errors when expression fails to process.
2
4
 
3
5
  [12-11-18][0.2.2]: Now can use .new to mimic Regex behaviour.
@@ -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])+((-)|( through )|( to )|( and )){1}[0-9]){1}/.freeze
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
- "[#{except}#{digit_mod}]#{multiples}"
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Regeng
2
- VERSION = "0.2.3"
4
+ VERSION = '0.2.4'
3
5
  end
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.3
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: 2018-12-11 00:00:00.000000000 Z
11
+ date: 2019-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler