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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 15ca9e46201d4f51bcc1734b3fbca4486118dc67
4
- data.tar.gz: 897342e4cdd92b79264757cbd6a164fb390f3617
3
+ metadata.gz: 95d291c697c6b9f3d29be20655ea73a16f2ee6a0
4
+ data.tar.gz: 875f86055b23b5348e5b008e09bd082c415a3479
5
5
  SHA512:
6
- metadata.gz: 20d53471af2037ffbbea9df52d5fc62541347af70578cf9ea477d4de5605fac4cb7990fb8913dd43f9225e3a218a41e761356e786d4607583777faa206237513
7
- data.tar.gz: 602f8bc18e5e32fa16dabce62c9af90257d8492075fea94e3d89d51e610f578c1e8d82419f6375a53314b49f74eae1a96aefc7f164787ecbacb01681bbb14141
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://rubydocs.info/tiered_category_expressions)
36
- - [TCE language reference](https://rubydocs.info/tiered_category_expressions/file.LANGREF.html)
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,3 +1,5 @@
1
+ require "tiered_category_expressions/preprocessor"
2
+ require "tiered_category_expressions/generator"
1
3
  require "tiered_category_expressions/expression"
2
4
 
3
5
  module TieredCategoryExpressions
@@ -0,0 +1,4 @@
1
+ module TieredCategoryExpressions
2
+ class Error < StandardError; end
3
+ class ParseError < Error; end
4
+ end
@@ -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 = TieredCategoryExpressions::Parser.new.parse(str)
32
- TieredCategoryExpressions::Transformer.new.apply(tree)
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 word & non space characters
28
+ str.downcase.gsub(/[^a-z0-9]/, "") # remove all non-word & space characters
27
29
  end
28
30
  end
29
31
  end
@@ -1,3 +1,3 @@
1
1
  module TieredCategoryExpressions
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  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.0
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-04 00:00:00.000000000 Z
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