regex_sieve 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b611b4d789b0afe15cc5b2fc78129cc9189ea71f
4
+ data.tar.gz: 6b2c88dfcabed49ea2d67f3edbb1166b0d282e21
5
+ SHA512:
6
+ metadata.gz: e1b3abb05b7de18ac325a98ca9f2c6804f2ddbb400ea2744108888e376b3a6a6583b21a5835900d4dfbe235112e5b648e57ba2ec0668e8597ddf47de42375ffd
7
+ data.tar.gz: 18af4b19c0597ba93024f7e6a03b20c4534143db79364ece99bedc1a1c6d7f77f747f305b12b20da2d873d3554376e78d31cb1470f74c7a958f98fe6290fa6f9
@@ -0,0 +1,2 @@
1
+ /.bundle
2
+ /vendor/bundle
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ # -*- mode: ruby -*-
2
+ source 'https://rubygems.org'
3
+
4
+ gemspec
@@ -0,0 +1,32 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ regex_sieve (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.2.5)
10
+ rspec (3.4.0)
11
+ rspec-core (~> 3.4.0)
12
+ rspec-expectations (~> 3.4.0)
13
+ rspec-mocks (~> 3.4.0)
14
+ rspec-core (3.4.2)
15
+ rspec-support (~> 3.4.0)
16
+ rspec-expectations (3.4.0)
17
+ diff-lcs (>= 1.2.0, < 2.0)
18
+ rspec-support (~> 3.4.0)
19
+ rspec-mocks (3.4.1)
20
+ diff-lcs (>= 1.2.0, < 2.0)
21
+ rspec-support (~> 3.4.0)
22
+ rspec-support (3.4.1)
23
+
24
+ PLATFORMS
25
+ ruby
26
+
27
+ DEPENDENCIES
28
+ regex_sieve!
29
+ rspec (~> 3.3)
30
+
31
+ BUNDLED WITH
32
+ 1.10.6
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Sterling Paramore
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,31 @@
1
+ # RegexSeive
2
+
3
+ The RegexSieve functions in a manner similar a hash. The regex sieve
4
+ is initialized with a hash where the keys are regular expressions and
5
+ the values can be any valid Ruby object. The order of the keys
6
+ matters. When the regex sieve is accessed using the array accessor
7
+ [], it returns the first matching record.
8
+
9
+ ````ruby
10
+ sieve = RegexSieve.new({
11
+ /(Invincible|Born & Raised) IPA/ => 'Craft IPA',
12
+ /(Fresh Squeezed) IPA/ => 'Microbrew IPA',
13
+ /IPA/ => 'Other IPA'
14
+ })
15
+
16
+ sieve['Invincible IPA'] # => 'Craft IPA'
17
+ sieve['Awesome IPA'] # => 'Other IPA'
18
+ sieve['Kinda Pale Ale'] # => nil
19
+ ````
20
+
21
+ By default, only the values are returned, but the key and all matching
22
+ capture groups can optionally be returned.
23
+
24
+ ````ruby
25
+ result_and_match = sieve['Invincible IPA', :match] # => {:value=>"Craft IPA", :match=>#<MatchData "Invincible IPA" 1:"Invincible">}
26
+ result_and_match[:match][1] # => 'Invincible'
27
+
28
+ result_and_key = sieve['Invincible IPA', :regex] # => {:value=>"Craft IPA", :regex=>/(Invincible|Born & Raised) IPA/}
29
+
30
+ result_all = sieve['Invincible IPA', :regex, :match] # => {:value=>"Craft IPA", :regex=>/(Invincible|Born & Raised) IPA/, :match=>#<MatchData "Invincible IPA" 1:"Invincible">}
31
+ ````
@@ -0,0 +1,53 @@
1
+ # Public: RegexSieve class. The RegexSieve functions in a manner similar
2
+ # a hash. The regex sieve is initialized with a hash where the keys are
3
+ # regular expressions and the values can be any valid Ruby object. The order
4
+ # of the keys matters. When the regex sieve is accessed using the array
5
+ # accessor [], it returns the first matching record. By default, only
6
+ # the values are returned, but the key and all matching capture groups
7
+ # can optionally be returned.
8
+ #
9
+ # Examples:
10
+ #
11
+ # r = RegexSieve.new({
12
+ # /something/ => 'Something',
13
+ # /something else/ => 'This will never get matched because the one above will match first',
14
+ # /cool$/ => 'Cool',
15
+ # /cool beans/ => 'Really Cool'
16
+ # })
17
+ #
18
+ # r['something else'] # => 'Something'
19
+ # r['cool beans'] # => 'Really Cool'
20
+ class RegexSieve
21
+ def initialize(sieve)
22
+ @sieve = sieve
23
+ end
24
+
25
+ # Public: Array accessor for Regex Sieve.
26
+ #
27
+ # key - The string that will be matched to the keys in the sieve.
28
+ # opt - By default, only the values in the hash used to initialize the sieve
29
+ # will be returned. However, if you want to return the keys or the
30
+ # capture groups then use :regex, :match, or both, respectively.
31
+ #
32
+ # Example:
33
+ # r['something'] # => 'Something
34
+ # r['something', :regex] # => { value: 'Something', regex: /something/ }
35
+ # r['sometinng', :match, :regex] # => { value: 'Something', regex: /something/, match: #<MatchData "something"> }
36
+ def [](key, *opt)
37
+ opt = opt | [:value]
38
+
39
+ regex_match = nil
40
+ found = @sieve.find do |regex, v|
41
+ regex_match = regex.match(key)
42
+ end
43
+
44
+ full_result = if found.nil?
45
+ { value: nil, regex: nil, match: nil }
46
+ else
47
+ { value: found[1], regex: found[0], match: regex_match }
48
+ end
49
+
50
+ full_result.select! { |k, v| opt.include?(k) }
51
+ full_result.size > 1 ? full_result : full_result.values.first
52
+ end
53
+ end
@@ -0,0 +1,3 @@
1
+ class RegexSieve
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 mode: ruby -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "regex_sieve/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "regex_sieve"
7
+ s.version = RegexSieve::VERSION
8
+ s.authors = ["Sterling Paramore"]
9
+ s.email = ["gnilrets@gmail.com"]
10
+ s.homepage = "https://github.com/gnilrets/regex_sieve"
11
+ s.license = "MIT"
12
+ s.summary = "Regex Sieve"
13
+ s.description = "A simple lookup sieve using regular expressions"
14
+
15
+ s.rubyforge_project = "RegexSieve"
16
+
17
+ s.add_development_dependency "rspec", ["~> 3.3"]
18
+
19
+ s.files = `git ls-files`.split("\n")
20
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
+ s.require_paths = ["lib"]
23
+ end
@@ -0,0 +1,40 @@
1
+ $LOAD_PATH << '../lib'
2
+ require 'regex_sieve'
3
+
4
+ describe RegexSieve do
5
+ before do
6
+ @sieve = RegexSieve.new({
7
+ /(Invincible|Born & Raised) IPA/ => 'Craft IPA',
8
+ /(Fresh Squeezed) IPA/ => 'Microbrew IPA',
9
+ /IPA/ => 'Other IPA'
10
+ })
11
+ end
12
+
13
+ describe 'looking up a value' do
14
+ it 'returns the value of the first match' do
15
+ expect(@sieve['Invincible IPA']).to eq 'Craft IPA'
16
+ end
17
+
18
+ it 'is not just a hash lookup' do
19
+ expect(@sieve['Random IPA']).to eq 'Other IPA'
20
+ end
21
+
22
+ it 'returns nil if no match is found' do
23
+ expect(@sieve['Does not match']).to be nil
24
+ end
25
+ end
26
+
27
+ describe 'using matching groups' do
28
+ it 'returns the match groups when specified' do
29
+ match = @sieve['Invincible IPA', :match][:match][1]
30
+ expect(match).to eq 'Invincible'
31
+ end
32
+ end
33
+
34
+ describe 'using regex and matching groups' do
35
+ it 'returns the matched regex when specified' do
36
+ regex = @sieve['Invincible IPA', :regex, :match][:regex]
37
+ expect(regex).to eq /(Invincible|Born & Raised) IPA/
38
+ end
39
+ end
40
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: regex_sieve
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sterling Paramore
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.3'
27
+ description: A simple lookup sieve using regular expressions
28
+ email:
29
+ - gnilrets@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".gitignore"
35
+ - ".rspec"
36
+ - Gemfile
37
+ - Gemfile.lock
38
+ - LICENSE.txt
39
+ - README.md
40
+ - lib/regex_sieve.rb
41
+ - lib/regex_sieve/version.rb
42
+ - regex_sieve.gemspec
43
+ - spec/regex_sieve_spec.rb
44
+ homepage: https://github.com/gnilrets/regex_sieve
45
+ licenses:
46
+ - MIT
47
+ metadata: {}
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project: RegexSieve
64
+ rubygems_version: 2.4.5
65
+ signing_key:
66
+ specification_version: 4
67
+ summary: Regex Sieve
68
+ test_files:
69
+ - spec/regex_sieve_spec.rb