inci_score 3.1.3 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,30 +1,37 @@
1
- require "json"
1
+ # frozen_string_literal: true
2
+
3
+ require 'oj'
2
4
 
3
5
  module InciScore
4
6
  class Response
5
- attr_reader :components, :score, :unrecognized, :valid
7
+ attr_reader :components, :score, :unrecognized, :valid, :precision
6
8
 
7
9
  def initialize(options = {})
8
10
  @components = options.fetch(:components) { [] }
9
11
  @score = options.fetch(:score) { 0.0 }
10
12
  @unrecognized = options.fetch(:unrecognized) { [] }
11
13
  @valid = options.fetch(:valid) { false }
14
+ @precision = options.fetch(:precision) { 0 }
15
+ freeze
12
16
  end
13
17
 
14
18
  def to_json
15
- { components: @components, unrecognized: @unrecognized, score: @score, valid: @valid }.to_json
19
+ data = { components: components, unrecognized: unrecognized, score: score, valid: valid, precision: precision }.freeze
20
+ Oj.dump(data, mode: :compat)
16
21
  end
17
22
 
18
23
  def to_s
19
24
  %Q{
20
25
  TOTAL SCORE:
21
- \t#{@score}
26
+ \t#{score}
22
27
  VALID STATE:
23
- \t#{@valid}
28
+ \t#{valid}
29
+ PRECISION:
30
+ \t#{precision}
24
31
  COMPONENTS:
25
- #{@components.map { |c| "\t#{c}" }.join("\n")}
32
+ #{components.map { |c| "\t#{c}" }.join('\n')}
26
33
  UNRECOGNIZED:
27
- #{@unrecognized.map { |c| "\t#{c}" }.join("\n")}
34
+ #{unrecognized.map { |c| "\t#{c}" }.join('\n')}
28
35
  }
29
36
  end
30
37
  end
@@ -1,15 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module InciScore
2
4
  class Score
3
- attr_reader :value
5
+ attr_reader :value, :hazard, :weight
4
6
 
5
7
  def initialize(hazard, weight)
6
8
  @hazard = hazard
7
9
  @weight = weight
8
10
  @value = compute
11
+ freeze
9
12
  end
10
13
 
11
- private def compute
12
- (@hazard - @weight).tap do |s|
14
+ private
15
+
16
+ def compute
17
+ (hazard - weight).tap do |s|
13
18
  return 0.0 if s < 0
14
19
  end
15
20
  end
@@ -1,43 +1,50 @@
1
- require "inci_score/score"
1
+ # frozen_string_literal: true
2
+
3
+ require 'inci_score/score'
2
4
 
3
5
  module InciScore
4
6
  class Scorer
5
7
  HAZARD_PERCENT = 25
6
8
  WEIGHT_FACTOR = 5
7
9
 
10
+ attr_reader :hazards, :size
11
+
8
12
  def initialize(hazards)
9
13
  @hazards = Array(hazards)
10
14
  @size = @hazards.size
15
+ freeze
11
16
  end
12
17
 
13
18
  def call
14
- return 0 if @hazards.empty?
19
+ return 0 if hazards.empty?
15
20
  (100 - avg * HAZARD_PERCENT).round(4)
16
21
  end
17
22
 
18
- private def avg
19
- avg_weighted / @size.to_f
23
+ private
24
+
25
+ def avg
26
+ avg_weighted / size.to_f
20
27
  end
21
28
 
22
- private def avg_weighted
23
- return @hazards.reduce(&:+) if same_hazard?
24
- weighted.reduce(0.0) do |acc,score|
29
+ def avg_weighted
30
+ return hazards.reduce(&:+) if same_hazard?
31
+ weighted.reduce(0.0) do |acc,score|
25
32
  acc += score.value
26
33
  end
27
34
  end
28
35
 
29
- private def same_hazard?
30
- @hazards.uniq.size == 1
36
+ def same_hazard?
37
+ hazards.uniq.size == 1
31
38
  end
32
39
 
33
- private def weighted
34
- @hazards.each_with_index.map do |h,i|
40
+ def weighted
41
+ hazards.each_with_index.map do |h, i|
35
42
  Score.new(h, weight(i))
36
43
  end
37
44
  end
38
45
 
39
- private def weight(index)
40
- Math.log(index+1, @size * WEIGHT_FACTOR)
46
+ def weight(index)
47
+ Math.log(index+1, size * WEIGHT_FACTOR)
41
48
  end
42
49
  end
43
50
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module InciScore
2
- VERSION = "3.1.3"
4
+ VERSION = '4.1.0'
3
5
  end
data/lib/inci_score.rb CHANGED
@@ -1,4 +1,10 @@
1
- require "inci_score/version"
2
- require "inci_score/catalog"
3
- require "inci_score/cli"
4
- require "inci_score/api"
1
+ # frozen_string_literal: true
2
+
3
+ require 'inci_score/ingredient'
4
+ require 'inci_score/normalizer'
5
+ require 'inci_score/recognizer'
6
+ require 'inci_score/response'
7
+ require 'inci_score/scorer'
8
+ require 'inci_score/version'
9
+ require 'inci_score/config'
10
+ require 'inci_score/cli'
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inci_score
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.3
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - costajob
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-13 00:00:00.000000000 Z
11
+ date: 2023-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: puma
14
+ name: oj
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3'
27
- - !ruby/object:Gem::Dependency
28
- name: rack
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '2'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '2'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: RubyInline
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -58,56 +44,42 @@ dependencies:
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '1.11'
47
+ version: '2'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '1.11'
54
+ version: '2'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rake
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '10.0'
61
+ version: '13'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '10.0'
68
+ version: '13'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: minitest
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '5.0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '5.0'
97
- - !ruby/object:Gem::Dependency
98
- name: rack-test
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '0.6'
75
+ version: '5'
104
76
  type: :development
105
77
  prerelease: false
106
78
  version_requirements: !ruby/object:Gem::Requirement
107
79
  requirements:
108
80
  - - "~>"
109
81
  - !ruby/object:Gem::Version
110
- version: '0.6'
82
+ version: '5'
111
83
  - !ruby/object:Gem::Dependency
112
84
  name: benchmark-ips
113
85
  requirement: !ruby/object:Gem::Requirement
@@ -126,27 +98,21 @@ description:
126
98
  email:
127
99
  - costajob@gmail.com
128
100
  executables:
101
+ - console
129
102
  - inci_score
103
+ - setup
130
104
  extensions: []
131
105
  extra_rdoc_files: []
132
106
  files:
133
- - ".gitignore"
134
- - ".travis.yml"
135
- - Gemfile
107
+ - LICENSE.txt
136
108
  - README.md
137
- - Rakefile
138
109
  - bin/console
139
110
  - bin/inci_score
140
111
  - bin/setup
141
- - config.ru
142
- - config/catalog.yml
143
- - ext/levenshtein.c
144
- - inci_score.gemspec
145
112
  - lib/inci_score.rb
146
- - lib/inci_score/api.rb
147
- - lib/inci_score/catalog.rb
148
113
  - lib/inci_score/cli.rb
149
114
  - lib/inci_score/computer.rb
115
+ - lib/inci_score/config.rb
150
116
  - lib/inci_score/ingredient.rb
151
117
  - lib/inci_score/levenshtein.rb
152
118
  - lib/inci_score/normalizer.rb
@@ -157,9 +123,7 @@ files:
157
123
  - lib/inci_score/response.rb
158
124
  - lib/inci_score/score.rb
159
125
  - lib/inci_score/scorer.rb
160
- - lib/inci_score/server.rb
161
126
  - lib/inci_score/version.rb
162
- - log/.gitignore
163
127
  homepage: https://github.com/costajob/inci_score.git
164
128
  licenses:
165
129
  - MIT
@@ -172,15 +136,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
172
136
  requirements:
173
137
  - - ">="
174
138
  - !ruby/object:Gem::Version
175
- version: 2.2.2
139
+ version: '2.7'
176
140
  required_rubygems_version: !ruby/object:Gem::Requirement
177
141
  requirements:
178
142
  - - ">="
179
143
  - !ruby/object:Gem::Version
180
144
  version: '0'
181
145
  requirements: []
182
- rubyforge_project:
183
- rubygems_version: 2.7.5
146
+ rubygems_version: 3.1.6
184
147
  signing_key:
185
148
  specification_version: 4
186
149
  summary: A library that computes the hazard of cosmetic products components, based
data/.gitignore DELETED
@@ -1,13 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /sample
9
- /spec/reports/
10
- /spec/sample
11
- /tmp/
12
- /**/.DS_Store
13
- *.gem
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.2.2
4
- - 2.3.0
5
- - 2.4.0
6
- - 2.5.0
7
- before_install: gem install bundler -v 1.11.2
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in inci_score.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1,24 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- namespace :spec do
5
- Rake::TestTask.new(:unit) do |t|
6
- t.libs << "spec"
7
- t.libs << "lib"
8
- t.test_files = FileList["spec/unit/*_spec.rb"]
9
- end
10
-
11
- Rake::TestTask.new(:integration) do |t|
12
- t.libs << "spec"
13
- t.libs << "lib"
14
- t.test_files = FileList["spec/integration/*_spec.rb"]
15
- end
16
-
17
- Rake::TestTask.new(:bench) do |t|
18
- t.libs << "spec"
19
- t.libs << "lib"
20
- t.test_files = FileList["spec/bench/*_bench.rb"]
21
- end
22
- end
23
-
24
- task :default => :"spec:unit"