inci_score 4.5.2 → 4.6.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: 9b62e565ea7191b030ebcdf3b278130065ecb325743bf4ca618e0c8e7d7559a8
4
- data.tar.gz: 0fcbf56e6edb8a314c202200e89d8f53428b009472440d7a1e92815be90b9df9
3
+ metadata.gz: 7c1ec290c92d1fb34798dbd04ec8f93a6ad1db12fd124ff2f7d0c4a50c108aa7
4
+ data.tar.gz: dad169f8a2486aeeac3a22df47097235d965b9435350d4800d662c9022f0a36c
5
5
  SHA512:
6
- metadata.gz: 7f4040838f05e804090a2482d3b6ea03c1c4575e5133a0989af9f733c373f6c1c507426196fca5eba539c4fbe5c3322a62e623a1630c8ade6dfe2f056a616938
7
- data.tar.gz: c14b303bae2a60c0f16b1df28e95e77cf2b32caaa33086d8852edf8486dfccbaf29bb361a7d8c2150eb32a569890c84a812369f13bdd38f61df979a76f18abd2
6
+ metadata.gz: 34394e8b825952f6ff98696ba899592f23a0acd8e3b95331c1d645903ac9795569dc6e115ff1dca5df0ae4aee551b54aae0e32b91faa302b4338b4e37769d797
7
+ data.tar.gz: 1b932c8c80adfc5b0989383a7c31c7b78432890dd3b86c54c887b1d3146f6629332cb7abd16e50b70343113bf3beb76233f4cd0d77fd684e26e7377ca0a8ee7f
data/config/catalog.yml CHANGED
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  aqua: 0
3
3
  water: 0
4
+ aroma: 2
4
5
  parfum: 3
5
6
  fragrance: 3
6
7
  phosphatidylcholine: 1
@@ -1580,6 +1581,7 @@ fagus sylvatica: 0
1580
1581
  farnesol: 2
1581
1582
  farnesyl acetate: 0
1582
1583
  fast green fcf: 4
1584
+ fava tonka: 1
1583
1585
  fermented vegetable extract: 0
1584
1586
  ferric chloride: 0
1585
1587
  ferula assa foetida: 0
@@ -3370,6 +3372,7 @@ pentasodium aminotrimethylene phosphonate: 3
3370
3372
  pentasodium pentetate: 3
3371
3373
  pentasodium triphosphate: 2
3372
3374
  pentetic acid: 3
3375
+ pentylene glycol: 2
3373
3376
  perfluorodecalin: 3
3374
3377
  perfluoropolymethylisopropyl ether: 3
3375
3378
  perfluorotetralin: 3
@@ -4832,6 +4835,8 @@ thymus extract: 4
4832
4835
  thymus hydrolysate: 4
4833
4836
  thymus serpyllum: 0
4834
4837
  thymus vulgaris: 0
4838
+ thymus vulgaris leaf oil: 0
4839
+ thymus vulgaris leaf water: 0
4835
4840
  tilia americana: 0
4836
4841
  tilia cordata: 0
4837
4842
  tilia vulgaris: 0
@@ -5,7 +5,6 @@ require 'yaml'
5
5
  module InciScore
6
6
  module Config
7
7
  CATALOG = YAML::load_file(File::expand_path('../../../config/catalog.yml', __FILE__)).freeze
8
- CIR = File.readlines(File::expand_path('../../../config/cir', __FILE__)).freeze
9
8
  HAZARDS = YAML::load_file(File::expand_path('../../../config/hazards.yml', __FILE__)).freeze
10
9
  end
11
10
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  module InciScore
4
4
  class Ingredient
5
- SLASH = '/'
6
5
  SLASH_RULE = /(?<!ate)\//.freeze
7
6
  PARENTHESIS = %w[( ) [ ]].freeze
8
7
  PARENTHESIS_RULE = /(\(.+\)|\[.+\])/.freeze
@@ -11,24 +10,23 @@ module InciScore
11
10
 
12
11
  def initialize(raw)
13
12
  @raw = raw.to_s
14
- @values = fetch_values
13
+ @values = fetch_values.uniq
15
14
  freeze
16
15
  end
17
16
 
18
- def to_s
19
- values.join(SLASH)
20
- end
21
-
22
17
  private
23
18
 
24
19
  def fetch_values
25
- if parenthesis?
26
- parenthesis = PARENTHESIS.join
27
- parenthesis_values = raw.match(PARENTHESIS_RULE).captures.map { |c| c.delete(parenthesis) }
28
- deparenthesized = raw.sub(PARENTHESIS_RULE, '').sub(/\s{2,}/, ' ').strip
29
- [deparenthesized].concat(parenthesis_values)
30
- else
31
- raw.split(SLASH_RULE).map(&:strip)
20
+ [raw].tap do |vals|
21
+ if parenthesis?
22
+ parenthesis = PARENTHESIS.join
23
+ parenthesis_values = raw.match(PARENTHESIS_RULE).captures.map { |c| c.delete(parenthesis) }
24
+ deparenthesized = raw.sub(PARENTHESIS_RULE, '').sub(/\s{2,}/, ' ').strip
25
+ vals << deparenthesized
26
+ vals.concat(parenthesis_values)
27
+ else
28
+ vals.concat(raw.split(SLASH_RULE).map(&:strip))
29
+ end
32
30
  end
33
31
  end
34
32
 
@@ -28,24 +28,31 @@ module InciScore
28
28
  extend self
29
29
 
30
30
  Result = Struct.new(:name, :distance, :score) do
31
- def tolerable?(size)
32
- distance < TOLERANCE && distance <= (size-1)
31
+ def tolerable?(size, tolerance)
32
+ distance < tolerance && distance <= (size-1)
33
33
  end
34
34
  end
35
35
 
36
36
  def call(src)
37
37
  return if src.empty?
38
38
  size = src.size
39
+ t = tolerance(size)
39
40
  farthest = Result.new(nil, size)
40
41
  initial = src[0]
41
42
  result = Config::CATALOG.reduce(farthest) do |nearest, (name, score)|
42
43
  next nearest unless name.start_with?(initial)
43
- next nearest if name.size > (size + TOLERANCE)
44
+ next nearest if name.size > (size + t)
44
45
  d = src.distance(name)
45
46
  nearest = Result.new(name, d, score) if d < nearest.distance
46
47
  nearest
47
48
  end
48
- Component.new(result.name, result.score) if result.tolerable?(size)
49
+ Component.new(result.name, result.score) if result.tolerable?(size, t)
50
+ end
51
+
52
+ private
53
+
54
+ def tolerance(size)
55
+ Math.log(size, 1.8).round
49
56
  end
50
57
  end
51
58
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module InciScore
4
- VERSION = '4.5.2'
4
+ VERSION = '4.6.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inci_score
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.5.2
4
+ version: 4.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - costajob
@@ -106,7 +106,6 @@ files:
106
106
  - README.md
107
107
  - bin/inci_score
108
108
  - config/catalog.yml
109
- - config/cir
110
109
  - config/hazards.yml
111
110
  - ext/levenshtein.c
112
111
  - lib/inci_score.rb