regeng 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
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