mem_db 0.1.2 → 0.2.0

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: ced4d270ba624c4f0c6ef2a8bcda1b7b3f9b600d6840ec05d3f1c0cc5c82f176
4
- data.tar.gz: f7cd1e3f65c61dcb0eada7840165f09b4028e22af31df2d295f5c4e7d2ee2a6d
3
+ metadata.gz: 6677c31b83e454180efbaa876609843d9ac236c3c1c1bd0a2afafe802fce9e14
4
+ data.tar.gz: fd81a60ecd058c8663436b604bba25dc3368207e2e421d8bef73448cc23f8a3d
5
5
  SHA512:
6
- metadata.gz: 1f2cf1d016537298f4f0ca45b509298dc6098fded738a2018f758c1aec7ab0cfe4b05a031c1ecdf22386864da6cd7e6bff7d2e751cca19e0b778c03da8930fd1
7
- data.tar.gz: f3a2b7025725d9592fc89d5e85d94b2fe3a2a37c77e1518eeb9f9bb16e3a7db09bd4a676a7013d6153524145cfd2288e799201b912e07073028af3398a5cf441
6
+ metadata.gz: eca7be3316c79f6c1e56d33d749f449c65b19c41efa41a1c0744f6fea49b95c8c68feb5d9a67ca1e71bdaf9be542cc75b2dc84acfab087941bfcce3ae2dd5c0f
7
+ data.tar.gz: 5b6c349a53a7ab39b17ec929e382bf6079c0c25380b246a80ae3b22db8e450d232328268105ae368fcd25abf4b354dc4eee1c47a53f8cd722724b66b01353316
@@ -1,18 +1,20 @@
1
1
  name: Ruby
2
2
 
3
- on: [push,pull_request]
3
+ on: [push, pull_request]
4
4
 
5
5
  jobs:
6
6
  build:
7
7
  runs-on: ubuntu-latest
8
8
  steps:
9
- - uses: actions/checkout@v2
10
- - name: Set up Ruby
11
- uses: ruby/setup-ruby@v1
12
- with:
13
- ruby-version: 2.5.5
14
- - name: Run the default task
15
- run: |
16
- gem install bundler -v 2.2.5
17
- bundle install
18
- bundle exec rake
9
+ - uses: actions/checkout@v2
10
+ - name: Set up Ruby
11
+ uses: ruby/setup-ruby@v1
12
+ with:
13
+ ruby-version: 2.5.5
14
+ - name: Install dependencies
15
+ run: |
16
+ sudo apt-get install libre2-dev
17
+ gem install bundler -v 2.2.5
18
+ bundle install
19
+ - name: Run
20
+ run: bundle exec rake
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
12
  Gemfile.lock
13
+ .rake_tasks~
data/README.md CHANGED
@@ -88,6 +88,8 @@ MemDB::Query.new({
88
88
 
89
89
  ## Development
90
90
 
91
+ To support the regular expression engine re2. It is necessary to install the corresponding system library. See [instructions for re2 gem](https://github.com/mudge/re2#installation)
92
+
91
93
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
92
94
 
93
95
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "mem_db/field"
4
4
  require "mem_db/field/matching"
5
+ require "mem_db/regexp_engines/std"
5
6
 
6
7
  class MemDB
7
8
  module Field
@@ -12,11 +13,11 @@ class MemDB
12
13
  WILDCARD = "*"
13
14
 
14
15
  class Rx
15
- def initialize(source)
16
- parts = source.split(WILDCARD, -1).map { |part| ::Regexp.quote(part) }
16
+ def initialize(source, engine)
17
+ parts = source.split(WILDCARD, -1).map { |part| engine.quote(part) }
17
18
  parts[0] = "\\A#{parts[0]}"
18
19
  parts[-1] = "#{parts[-1]}\\z"
19
- @rx = ::Regexp.new(parts.join(".*"), ::Regexp::MULTILINE)
20
+ @rx = engine.new(parts.join(".*"))
20
21
  end
21
22
 
22
23
  def match?(str)
@@ -54,19 +55,19 @@ class MemDB
54
55
  end
55
56
  end
56
57
 
57
- def initialize(source)
58
+ def initialize(source, rx_engine:)
58
59
  wildcard_count = source.count(WILDCARD)
59
60
  @pat =
60
61
  if wildcard_count.zero?
61
62
  Exact.new(source)
62
63
  elsif wildcard_count > 1
63
- Rx.new(source)
64
+ Rx.new(source, rx_engine)
64
65
  elsif source.end_with?(WILDCARD)
65
66
  Prefix.new(source[0..-2])
66
67
  elsif source.start_with?(WILDCARD)
67
68
  Suffix.new(source[1..-1])
68
69
  else # rubocop:disable Lint/DuplicateBranch
69
- Rx.new(source)
70
+ Rx.new(source, rx_engine)
70
71
  end
71
72
  end
72
73
 
@@ -78,8 +79,8 @@ class MemDB
78
79
  class MultiMatching
79
80
  include MemDB::Field::Matching
80
81
 
81
- def initialize(arr)
82
- @patterns = arr.map { |source| Pattern.new(source) }
82
+ def initialize(arr, rx_engine:)
83
+ @patterns = arr.map { |source| Pattern.new(source, rx_engine: rx_engine) }
83
84
  end
84
85
 
85
86
  def match?(values)
@@ -90,8 +91,8 @@ class MemDB
90
91
  class SingleMatching
91
92
  include MemDB::Field::Matching
92
93
 
93
- def initialize(el)
94
- @pat = Pattern.new(el)
94
+ def initialize(el, rx_engine:)
95
+ @pat = Pattern.new(el, rx_engine: rx_engine)
95
96
  end
96
97
 
97
98
  def match?(values)
@@ -101,15 +102,16 @@ class MemDB
101
102
 
102
103
  attr_reader :field
103
104
 
104
- def initialize(field)
105
+ def initialize(field, rx_engine: MemDB::RegexpEngines::Std)
105
106
  @field = field
107
+ @rx_engine = rx_engine
106
108
  end
107
109
 
108
110
  def new_matching(value)
109
111
  if value.is_a?(Array)
110
- MultiMatching.new(value)
112
+ MultiMatching.new(value, rx_engine: @rx_engine)
111
113
  else
112
- SingleMatching.new(value)
114
+ SingleMatching.new(value, rx_engine: @rx_engine)
113
115
  end
114
116
  end
115
117
  end
@@ -2,30 +2,18 @@
2
2
 
3
3
  require "mem_db/field"
4
4
  require "mem_db/field/matching"
5
+ require "mem_db/regexp_engines/std"
5
6
 
6
7
  class MemDB
7
8
  module Field
8
9
  class Regexp
9
10
  include MemDB::Field
10
11
 
11
- class Rx
12
- def initialize(source, ignore_case:)
13
- opts = ::Regexp::MULTILINE
14
- opts |= ::Regexp::IGNORECASE if ignore_case
15
-
16
- @rx = ::Regexp.new(source, opts)
17
- end
18
-
19
- def match?(str)
20
- @rx.match?(str)
21
- end
22
- end
23
-
24
12
  class MultiMatching
25
13
  include MemDB::Field::Matching
26
14
 
27
- def initialize(arr, ignore_case:)
28
- @patterns = arr.map { |source| Rx.new(source, ignore_case: ignore_case) }
15
+ def initialize(arr, rx_engine:, ignore_case:)
16
+ @patterns = arr.map { |source| rx_engine.new(source, ignore_case: ignore_case) }
29
17
  end
30
18
 
31
19
  def match?(values)
@@ -36,8 +24,8 @@ class MemDB
36
24
  class SingleMatching
37
25
  include MemDB::Field::Matching
38
26
 
39
- def initialize(el, ignore_case:)
40
- @pat = Rx.new(el, ignore_case: ignore_case)
27
+ def initialize(el, rx_engine:, ignore_case:)
28
+ @pat = rx_engine.new(el, ignore_case: ignore_case)
41
29
  end
42
30
 
43
31
  def match?(values)
@@ -47,16 +35,17 @@ class MemDB
47
35
 
48
36
  attr_reader :field
49
37
 
50
- def initialize(field, ignore_case: false)
38
+ def initialize(field, rx_engine: MemDB::RegexpEngines::Std, ignore_case: false)
51
39
  @field = field
40
+ @rx_engine = rx_engine
52
41
  @ignore_case = ignore_case
53
42
  end
54
43
 
55
44
  def new_matching(value)
56
45
  if value.is_a?(Array)
57
- MultiMatching.new(value, ignore_case: @ignore_case)
46
+ MultiMatching.new(value, rx_engine: @rx_engine, ignore_case: @ignore_case)
58
47
  else
59
- SingleMatching.new(value, ignore_case: @ignore_case)
48
+ SingleMatching.new(value, rx_engine: @rx_engine, ignore_case: @ignore_case)
60
49
  end
61
50
  end
62
51
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "re2"
4
+
5
+ class MemDB
6
+ module RegexpEngines
7
+ class Re2
8
+ def self.quote(str)
9
+ ::RE2::Regexp.quote(str)
10
+ end
11
+
12
+ def initialize(source, ignore_case: false)
13
+ opts = {
14
+ one_line: false
15
+ }
16
+ opts[:case_sensitive] = false if ignore_case
17
+ multiline_source = "(?s:#{source})"
18
+
19
+ @rx = ::RE2::Regexp.new(multiline_source, **opts)
20
+ end
21
+
22
+ def match?(str)
23
+ @rx.match?(str)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ class MemDB
4
+ module RegexpEngines
5
+ class Std
6
+ def self.quote(str)
7
+ ::Regexp.quote(str)
8
+ end
9
+
10
+ def initialize(source, ignore_case: false)
11
+ opts = ::Regexp::MULTILINE
12
+ opts |= ::Regexp::IGNORECASE if ignore_case
13
+
14
+ @rx = ::Regexp.new(source, opts)
15
+ end
16
+
17
+ def match?(str)
18
+ @rx.match?(str)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class MemDB
4
- VERSION = "0.1.2"
4
+ VERSION = "0.2.0"
5
5
  end
data/mem_db.gemspec CHANGED
@@ -16,10 +16,13 @@ Gem::Specification.new do |spec|
16
16
 
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = "https://github.com/DmitryBochkarev/mem_db"
19
+ spec.metadata['rubygems_mfa_required'] = "true"
19
20
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
21
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
21
22
  end
22
23
  spec.bindir = "exe"
23
24
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
24
25
  spec.require_paths = ["lib"]
26
+
27
+ spec.add_development_dependency "re2", ">= 1.4.0"
25
28
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mem_db
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Bochkarev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-12 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2022-01-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: re2
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.4.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.4.0
13
27
  description: MemDB is embedded database
14
28
  email:
15
29
  - dimabochkarev@gmail.com
@@ -58,6 +72,8 @@ files:
58
72
  - lib/mem_db/indexing_object.rb
59
73
  - lib/mem_db/out.rb
60
74
  - lib/mem_db/query.rb
75
+ - lib/mem_db/regexp_engines/re2.rb
76
+ - lib/mem_db/regexp_engines/std.rb
61
77
  - lib/mem_db/version.rb
62
78
  - mem_db.gemspec
63
79
  homepage: https://github.com/DmitryBochkarev/mem_db
@@ -66,6 +82,7 @@ licenses:
66
82
  metadata:
67
83
  homepage_uri: https://github.com/DmitryBochkarev/mem_db
68
84
  source_code_uri: https://github.com/DmitryBochkarev/mem_db
85
+ rubygems_mfa_required: 'true'
69
86
  post_install_message:
70
87
  rdoc_options: []
71
88
  require_paths:
@@ -81,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
98
  - !ruby/object:Gem::Version
82
99
  version: '0'
83
100
  requirements: []
84
- rubygems_version: 3.0.8
101
+ rubygems_version: 3.3.3
85
102
  signing_key:
86
103
  specification_version: 4
87
104
  summary: MemDB is embedded database