tiered_category_expressions 0.1.0 → 0.1.1
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/.yardopts +2 -0
- data/README.md +2 -2
- data/lib/tiered_category_expressions/core.rb +2 -0
- data/lib/tiered_category_expressions/exceptions.rb +4 -0
- data/lib/tiered_category_expressions/expression.rb +6 -6
- data/lib/tiered_category_expressions/generator.rb +35 -0
- data/lib/tiered_category_expressions/preprocessor.rb +3 -1
- data/lib/tiered_category_expressions/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95d291c697c6b9f3d29be20655ea73a16f2ee6a0
|
4
|
+
data.tar.gz: 875f86055b23b5348e5b008e09bd082c415a3479
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c025a3500d381b809e680cfdf9d32b88590c91762c7fb84a180da719db253eb6a5fa50ba9005408a04804f0bf13901531264aacaea14c95baf9833ad5b74419f
|
7
|
+
data.tar.gz: 7b5c11c76b49b96a7175177309060f3fb6a362a570083e4feea14ec556a0d65b20dba609404d4aa84ce6c8adcd32aa2e572ec0c94132ee83868b54c2259d164f
|
data/.yardopts
CHANGED
@@ -2,7 +2,9 @@
|
|
2
2
|
--hide-tag internal
|
3
3
|
lib/tiered_category_expressions.rb
|
4
4
|
lib/tiered_category_expressions/expression.rb
|
5
|
+
lib/tiered_category_expressions/generator.rb
|
5
6
|
lib/tiered_category_expressions/preprocessor.rb
|
7
|
+
lib/tiered_category_expressions/exceptions.rb
|
6
8
|
-
|
7
9
|
LANGREF.md
|
8
10
|
LICENSE.txt
|
data/README.md
CHANGED
@@ -32,8 +32,8 @@ require 'tiered_category_expressions/core'
|
|
32
32
|
|
33
33
|
## Documentation
|
34
34
|
|
35
|
-
- [Library documentation](https://
|
36
|
-
- [TCE language reference](https://
|
35
|
+
- [Library documentation](https://www.rubydoc.info/gems/tiered_category_expressions/)
|
36
|
+
- [TCE language reference](https://www.rubydoc.info/gems/tiered_category_expressions/file/LANGREF.md)
|
37
37
|
|
38
38
|
## Usage examples
|
39
39
|
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require "tiered_category_expressions/parser"
|
2
2
|
require "tiered_category_expressions/transformer"
|
3
3
|
require "tiered_category_expressions/preprocessor"
|
4
|
+
require "tiered_category_expressions/generator"
|
4
5
|
require "tiered_category_expressions/util"
|
6
|
+
require "tiered_category_expressions/exceptions"
|
5
7
|
|
6
8
|
module TieredCategoryExpressions
|
7
|
-
class ParseError < StandardError; end
|
8
|
-
|
9
9
|
class << self
|
10
10
|
# Converts input to an {Expression}.
|
11
11
|
#
|
@@ -28,8 +28,8 @@ module TieredCategoryExpressions
|
|
28
28
|
# @raise [ParseError] Raises if TCE syntax is invalid
|
29
29
|
#
|
30
30
|
def self.parse(str)
|
31
|
-
tree =
|
32
|
-
|
31
|
+
tree = Parser.new.parse(str)
|
32
|
+
Transformer.new.apply(tree)
|
33
33
|
rescue Parslet::ParseFailed => e
|
34
34
|
deepest = Util.deepest_parse_failure_cause(e.parse_failure_cause)
|
35
35
|
_, column = deepest.source.line_and_column(deepest.pos)
|
@@ -76,7 +76,7 @@ module TieredCategoryExpressions
|
|
76
76
|
# @return [Boolean]
|
77
77
|
#
|
78
78
|
def ==(other)
|
79
|
-
to_regexp == TCE(other).to_regexp
|
79
|
+
to_regexp == TieredCategoryExpressions::TCE(other).to_regexp
|
80
80
|
end
|
81
81
|
|
82
82
|
# Concatenates two expressions.
|
@@ -89,7 +89,7 @@ module TieredCategoryExpressions
|
|
89
89
|
# @return [Expression]
|
90
90
|
#
|
91
91
|
def >(other)
|
92
|
-
self.class.new(@tiers + TCE(other).tiers)
|
92
|
+
self.class.new(@tiers + TieredCategoryExpressions::TCE(other).tiers)
|
93
93
|
end
|
94
94
|
|
95
95
|
# Returns an SQL LIKE query that may be used to speed up certain SQL queries.
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "tiered_category_expressions/exceptions"
|
2
|
+
require "tiered_category_expressions/expression"
|
3
|
+
|
4
|
+
module TieredCategoryExpressions
|
5
|
+
module Generator
|
6
|
+
class << self
|
7
|
+
# Generates a basic TCE that matches the given category. Returns nil if no valid TCE can be generated.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# TieredCategoryExpressions::Generator.call(["Non-food", "Baby", "Baby formula"])
|
11
|
+
# # => TieredCategoryExpressions::Expression[Nonfood > Baby > Baby formula]
|
12
|
+
#
|
13
|
+
# @param category [Array<String>]
|
14
|
+
# @return [Expression, nil]
|
15
|
+
#
|
16
|
+
def call(category)
|
17
|
+
tiers = category.map { |t| sanitize_name(t) or return nil }
|
18
|
+
|
19
|
+
TieredCategoryExpressions::TCE(tiers.join(" > "))
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def sanitize_name(str)
|
25
|
+
str = str.gsub(/[^[:alnum:]\s]/, "") # remove non-word characters
|
26
|
+
.gsub(/\s+/, " ") # squish whitespace
|
27
|
+
.strip
|
28
|
+
|
29
|
+
return if str == ""
|
30
|
+
|
31
|
+
str
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "tiered_category_expressions/util"
|
2
|
+
|
1
3
|
module TieredCategoryExpressions
|
2
4
|
# @internal TODO Deal with digits and dashes ("1-3 months" != "13months")
|
3
5
|
module Preprocessor
|
@@ -23,7 +25,7 @@ module TieredCategoryExpressions
|
|
23
25
|
|
24
26
|
def sanitize_name(str)
|
25
27
|
str = Util.transliterate(str)
|
26
|
-
str.downcase.gsub(/[^a-z0-9]/, "") # remove all non
|
28
|
+
str.downcase.gsub(/[^a-z0-9]/, "") # remove all non-word & space characters
|
27
29
|
end
|
28
30
|
end
|
29
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tiered_category_expressions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sjoerd Andringa
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-04-
|
11
|
+
date: 2019-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -129,7 +129,9 @@ files:
|
|
129
129
|
- bin/setup
|
130
130
|
- lib/tiered_category_expressions.rb
|
131
131
|
- lib/tiered_category_expressions/core.rb
|
132
|
+
- lib/tiered_category_expressions/exceptions.rb
|
132
133
|
- lib/tiered_category_expressions/expression.rb
|
134
|
+
- lib/tiered_category_expressions/generator.rb
|
133
135
|
- lib/tiered_category_expressions/name.rb
|
134
136
|
- lib/tiered_category_expressions/namelist.rb
|
135
137
|
- lib/tiered_category_expressions/parser.rb
|