tiered_category_expressions 0.1.0 → 0.1.1

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
  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