openfoodfacts 0.6.2 → 0.10.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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -3
  3. data/Rakefile +7 -5
  4. data/lib/openfoodfacts/additive.rb +9 -13
  5. data/lib/openfoodfacts/allergen.rb +4 -6
  6. data/lib/openfoodfacts/brand.rb +5 -7
  7. data/lib/openfoodfacts/category.rb +4 -6
  8. data/lib/openfoodfacts/city.rb +4 -6
  9. data/lib/openfoodfacts/contributor.rb +4 -6
  10. data/lib/openfoodfacts/country.rb +4 -6
  11. data/lib/openfoodfacts/entry_date.rb +5 -7
  12. data/lib/openfoodfacts/faq.rb +11 -16
  13. data/lib/openfoodfacts/ingredient.rb +31 -0
  14. data/lib/openfoodfacts/ingredient_that_may_be_from_palm_oil.rb +4 -6
  15. data/lib/openfoodfacts/label.rb +4 -6
  16. data/lib/openfoodfacts/language.rb +5 -7
  17. data/lib/openfoodfacts/last_edit_date.rb +5 -7
  18. data/lib/openfoodfacts/locale.rb +12 -14
  19. data/lib/openfoodfacts/manufacturing_place.rb +4 -6
  20. data/lib/openfoodfacts/mission.rb +20 -21
  21. data/lib/openfoodfacts/number_of_ingredients.rb +5 -7
  22. data/lib/openfoodfacts/nutrition_grade.rb +5 -7
  23. data/lib/openfoodfacts/origin.rb +4 -6
  24. data/lib/openfoodfacts/packager_code.rb +4 -6
  25. data/lib/openfoodfacts/packaging.rb +4 -6
  26. data/lib/openfoodfacts/period_after_opening.rb +31 -0
  27. data/lib/openfoodfacts/press.rb +16 -13
  28. data/lib/openfoodfacts/product.rb +132 -67
  29. data/lib/openfoodfacts/product_state.rb +5 -7
  30. data/lib/openfoodfacts/purchase_place.rb +4 -6
  31. data/lib/openfoodfacts/store.rb +4 -6
  32. data/lib/openfoodfacts/trace.rb +4 -6
  33. data/lib/openfoodfacts/user.rb +16 -15
  34. data/lib/openfoodfacts/version.rb +1 -1
  35. data/lib/openfoodfacts.rb +11 -2
  36. metadata +17 -18
  37. data/test/minitest_helper.rb +0 -18
  38. data/test/test_openfoodfacts.rb +0 -329
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openfoodfacts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolas Leger
8
- autorequire:
8
+ - Pierre Slamich
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-13 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -36,14 +36,14 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '1.7'
39
+ version: '1.16'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '1.7'
46
+ version: '1.16'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -59,33 +59,33 @@ dependencies:
59
59
  - !ruby/object:Gem::Version
60
60
  version: '2.1'
61
61
  - !ruby/object:Gem::Dependency
62
- name: rake
62
+ name: minitest
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '13.0'
67
+ version: '5.25'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '13.0'
74
+ version: '5.25'
75
75
  - !ruby/object:Gem::Dependency
76
- name: minitest
76
+ name: rake
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '5.10'
81
+ version: '13.0'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '5.10'
88
+ version: '13.0'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: vcr
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -116,7 +116,7 @@ dependencies:
116
116
  version: '3.11'
117
117
  description: Open Food Facts API Wrapper, the open database about food.
118
118
  email:
119
- - opensource@nleger.com
119
+ - contact@openfoodfacts.org
120
120
  executables: []
121
121
  extensions: []
122
122
  extra_rdoc_files: []
@@ -134,6 +134,7 @@ files:
134
134
  - lib/openfoodfacts/country.rb
135
135
  - lib/openfoodfacts/entry_date.rb
136
136
  - lib/openfoodfacts/faq.rb
137
+ - lib/openfoodfacts/ingredient.rb
137
138
  - lib/openfoodfacts/ingredient_that_may_be_from_palm_oil.rb
138
139
  - lib/openfoodfacts/label.rb
139
140
  - lib/openfoodfacts/language.rb
@@ -146,6 +147,7 @@ files:
146
147
  - lib/openfoodfacts/origin.rb
147
148
  - lib/openfoodfacts/packager_code.rb
148
149
  - lib/openfoodfacts/packaging.rb
150
+ - lib/openfoodfacts/period_after_opening.rb
149
151
  - lib/openfoodfacts/press.rb
150
152
  - lib/openfoodfacts/product.rb
151
153
  - lib/openfoodfacts/product_state.rb
@@ -154,13 +156,11 @@ files:
154
156
  - lib/openfoodfacts/trace.rb
155
157
  - lib/openfoodfacts/user.rb
156
158
  - lib/openfoodfacts/version.rb
157
- - test/minitest_helper.rb
158
- - test/test_openfoodfacts.rb
159
159
  homepage: https://github.com/openfoodfacts/openfoodfacts-ruby
160
160
  licenses:
161
161
  - MIT
162
- metadata: {}
163
- post_install_message:
162
+ metadata:
163
+ rubygems_mfa_required: 'true'
164
164
  rdoc_options: []
165
165
  require_paths:
166
166
  - lib
@@ -175,8 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
175
  - !ruby/object:Gem::Version
176
176
  version: '0'
177
177
  requirements: []
178
- rubygems_version: 3.2.3
179
- signing_key:
178
+ rubygems_version: 3.6.9
180
179
  specification_version: 4
181
180
  summary: Open Food Facts API Wrapper
182
181
  test_files: []
@@ -1,18 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
- require 'openfoodfacts'
3
-
4
- require 'minitest/autorun'
5
-
6
- require 'webmock/minitest'
7
- require 'vcr'
8
-
9
- # Avoid OpenSSL certificate verify failed error
10
- if ENV.has_key?('APPVEYOR') && Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.4')
11
- require 'openssl'
12
- OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
13
- end
14
-
15
- VCR.configure do |c|
16
- c.cassette_library_dir = "test/fixtures"
17
- c.hook_into :webmock
18
- end
@@ -1,329 +0,0 @@
1
- require_relative 'minitest_helper'
2
-
3
- class TestOpenfoodfacts < Minitest::Test
4
-
5
- # Gem
6
-
7
- def test_that_it_has_a_version_number
8
- refute_nil ::Openfoodfacts::VERSION
9
- end
10
-
11
- # Locale
12
-
13
- def test_it_fetches_locales
14
- VCR.use_cassette("index") do
15
- locales = ::Openfoodfacts::Locale.all
16
- assert_includes locales.map { |locale| locale['code'] }, "gd"
17
- end
18
- end
19
-
20
- # User
21
-
22
- def test_it_login_user
23
- VCR.use_cassette("login_user", record: :once, match_requests_on: [:host, :path]) do
24
- user = ::Openfoodfacts::User.login("wrong", "absolutely")
25
- assert_nil user
26
- end
27
- end
28
-
29
- # Product
30
-
31
- def test_it_returns_product_url
32
- product = ::Openfoodfacts::Product.new(code: "3029330003533")
33
- assert_equal ::Openfoodfacts::Product.url(product.code, locale: 'ca'), product.url(locale: 'ca')
34
- end
35
-
36
- def test_it_returns_product_weburl
37
- product = ::Openfoodfacts::Product.new(code: "3029330003533")
38
- assert_equal "https://world.openfoodfacts.org/product/#{product.code}", product.weburl(locale: 'world')
39
- end
40
-
41
- def test_it_fetches_product
42
- product_code = "3029330003533"
43
-
44
- VCR.use_cassette("fetch_product_#{product_code}", record: :once, match_requests_on: [:host, :path]) do
45
- product = ::Openfoodfacts::Product.new(code: product_code)
46
- product.fetch
47
- refute_empty product.brands_tags
48
- end
49
- end
50
-
51
- def test_it_get_product
52
- product_code = "3029330003533"
53
-
54
- VCR.use_cassette("product_#{product_code}", record: :once, match_requests_on: [:host, :path]) do
55
- assert_equal ::Openfoodfacts::Product.get(product_code).code, product_code
56
- end
57
- end
58
-
59
- def test_that_it_search
60
- term = "coca"
61
- first_product = nil
62
-
63
- VCR.use_cassette("search_#{term}") do
64
- products = ::Openfoodfacts::Product.search(term, page_size: 42)
65
- first_product = products.first
66
-
67
- assert_match(/#{term}/i, products.last["product_name"])
68
- assert_match(/#{term}/i, ::Openfoodfacts::Product.search(term).last["product_name"])
69
- assert_equal products.size, 42
70
- end
71
-
72
- VCR.use_cassette("search_#{term}_1_000_000") do
73
- refute_equal ::Openfoodfacts::Product.search(term, page: 2).first.code, first_product.code
74
- end
75
- end
76
-
77
- =begin
78
- # Test disable in order to wait for a dedicated test account to not alter real data
79
- def test_it_updates_product
80
- product_code = "3029330003533"
81
- product = ::Openfoodfacts::Product.new(code: product_code)
82
- product_last_modified_t = nil
83
-
84
- VCR.use_cassette("fetch_product_#{product_code}", record: :all, match_requests_on: [:host, :path]) do
85
- product.fetch
86
- product_last_modified_t = product.last_modified_t
87
- end
88
-
89
- VCR.use_cassette("update_product_#{product_code}", record: :all, match_requests_on: [:host, :path]) do
90
- product.update # Empty update are accepted, allow testing without altering data.
91
- end
92
-
93
- VCR.use_cassette("refetch_product_#{product_code}", record: :all, match_requests_on: [:host, :path]) do
94
- product.fetch
95
- end
96
-
97
- refute_equal product_last_modified_t, product.last_modified_t
98
- end
99
- =end
100
-
101
-
102
- # Additives
103
-
104
- def test_it_fetches_additives
105
- VCR.use_cassette("additives") do
106
- additives = ::Openfoodfacts::Additive.all # World to have riskiness
107
- assert_includes additives.map { |additive| additive['url'] }, "https://world.openfoodfacts.org/additive/e330-citric-acid"
108
- refute_nil additives.detect { |additive| !additive['riskiness'].nil? }
109
- end
110
- end
111
-
112
- def test_it_fetches_additives_for_locale
113
- VCR.use_cassette("additives_locale") do
114
- additives = ::Openfoodfacts::Additive.all(locale: 'fr')
115
- assert_includes additives.map { |additive| additive['url'] }, "https://fr.openfoodfacts.org/additif/e330-acide-citrique"
116
- end
117
- end
118
-
119
- def test_it_fetches_products_with_additive
120
- additive = ::Openfoodfacts::Additive.new("url" => "https://world.openfoodfacts.org/additive/e452i-sodium-polyphosphate")
121
- VCR.use_cassette("products_with_additive") do
122
- products_with_additive = additive.products(page: 1)
123
- refute_empty products_with_additive
124
- end
125
- end
126
-
127
- # Brands
128
-
129
- def test_it_fetches_brands
130
- VCR.use_cassette("brands") do
131
- brands = ::Openfoodfacts::Brand.all
132
- assert_includes brands.map { |brand| brand['name'] }, "Carrefour"
133
- end
134
- end
135
-
136
- def test_it_fetches_brands_for_locale
137
- VCR.use_cassette("brands_locale") do
138
- brands = ::Openfoodfacts::Brand.all(locale: 'fr')
139
- assert_includes brands.map { |brand| brand['name'] }, "Loue"
140
- end
141
- end
142
-
143
- def test_it_fetches_products_for_brand
144
- brand = ::Openfoodfacts::Brand.new("url" => "https://world.openfoodfacts.org/brand/bel")
145
- VCR.use_cassette("products_for_brand") do
146
- products_for_brand = brand.products(page: 1)
147
- refute_empty products_for_brand
148
- end
149
- end
150
-
151
- # Nutrition Grades
152
-
153
- def test_it_fetches_nutrition_grades
154
- VCR.use_cassette("nutrition_grades") do
155
- nutrition_grades = ::Openfoodfacts::NutritionGrade.all
156
- assert_includes nutrition_grades.map { |nutrition_grade| nutrition_grade['name'] }, "Unknown"
157
- end
158
- end
159
-
160
- def test_it_fetches_nutrition_grades_for_locale
161
- VCR.use_cassette("nutrition_grades_locale") do
162
- nutrition_grades = ::Openfoodfacts::NutritionGrade.all(locale: 'fr')
163
- assert_includes nutrition_grades.map { |nutrition_grade| nutrition_grade['name'] }, "Inconnu"
164
- end
165
- end
166
-
167
- def test_it_fetches_products_for_nutrition_grade
168
- nutrition_grade = ::Openfoodfacts::NutritionGrade.new("url" => "https://world.openfoodfacts.org/nutrition-grade/c")
169
- VCR.use_cassette("products_for_nutrition_grade") do
170
- products_for_nutrition_grade = nutrition_grade.products(page: 1)
171
- refute_empty products_for_nutrition_grade
172
- end
173
- end
174
-
175
- # Languages
176
-
177
- def test_it_fetches_languages
178
- VCR.use_cassette("languages") do
179
- languages = ::Openfoodfacts::Language.all
180
- assert_includes languages.map { |language| language['name'] }, "French"
181
- end
182
- end
183
-
184
- def test_it_fetches_languages_for_locale
185
- VCR.use_cassette("languages_locale") do
186
- languages = ::Openfoodfacts::Language.all(locale: 'fr')
187
- assert_includes languages.map { |language| language['name'] }, "Anglais"
188
- end
189
- end
190
-
191
- def test_it_fetches_products_for_language
192
- language = ::Openfoodfacts::Language.new("url" => "https://world.openfoodfacts.org/language/french")
193
- VCR.use_cassette("products_for_language") do
194
- products_for_language = language.products(page: 1)
195
- refute_empty products_for_language
196
- end
197
- end
198
-
199
- # Product states
200
-
201
- def test_it_fetches_product_states
202
- VCR.use_cassette("product_states") do
203
- product_states = ::Openfoodfacts::ProductState.all
204
- assert_includes product_states.map { |product_state| product_state['url'] }, "https://world.openfoodfacts.org/state/to-be-completed"
205
- end
206
- end
207
-
208
- def test_it_fetches_product_states_for_locale
209
- VCR.use_cassette("product_states_locale") do
210
- product_states = ::Openfoodfacts::ProductState.all(locale: 'fr')
211
- assert_includes product_states.map { |product_state| product_state['url'] }, "https://fr.openfoodfacts.org/etat/a-completer"
212
- end
213
- end
214
-
215
- def test_it_fetches_products_for_state
216
- product_state = ::Openfoodfacts::ProductState.new("url" => "https://world.openfoodfacts.org/state/photos-uploaded", "products_count" => 22)
217
- VCR.use_cassette("products_for_state") do
218
- products_for_state = product_state.products(page: 1)
219
- refute_empty products_for_state
220
- end
221
- end
222
-
223
- # Entry date
224
-
225
- def test_it_fetches_entry_dates
226
- VCR.use_cassette("entry_dates") do
227
- entry_dates = ::Openfoodfacts::EntryDate.all
228
- assert_includes entry_dates.map { |entry_date| entry_date['name'] }, "2017-03-09"
229
- end
230
- end
231
-
232
- def test_it_fetches_entry_dates_for_locale
233
- VCR.use_cassette("entry_dates_locale") do
234
- entry_dates = ::Openfoodfacts::EntryDate.all(locale: 'fr')
235
- assert_includes entry_dates.map { |entry_date| entry_date['name'] }, "2017-03-09"
236
- end
237
- end
238
-
239
- def test_it_fetches_products_for_entry_date
240
- entry_date = ::Openfoodfacts::EntryDate.new("url" => "https://world.openfoodfacts.org/entry-date/2014-04-17")
241
- VCR.use_cassette("products_for_entry_date") do
242
- products_for_entry_date = entry_date.products(page: 1)
243
- refute_empty products_for_entry_date
244
- end
245
- end
246
-
247
- # Last edit date
248
-
249
- def test_it_fetches_last_edit_dates
250
- VCR.use_cassette("last_edit_dates") do
251
- last_edit_dates = ::Openfoodfacts::LastEditDate.all
252
- assert_includes last_edit_dates.map { |last_edit_date| last_edit_date['name'] }, "2017-03-23"
253
- end
254
- end
255
-
256
- def test_it_fetches_last_edit_dates_for_locale
257
- VCR.use_cassette("last_edit_dates_locale") do
258
- last_edit_dates = ::Openfoodfacts::LastEditDate.all(locale: 'fr')
259
- assert_includes last_edit_dates.map { |last_edit_date| last_edit_date['name'] }, "2017-03-23"
260
- end
261
- end
262
-
263
- def test_it_fetches_products_for_last_edit_date
264
- last_edit_date = ::Openfoodfacts::LastEditDate.new("url" => "https://world.openfoodfacts.org/last-edit-date/2020-04")
265
- VCR.use_cassette("products_for_last_edit_date") do
266
- products_for_last_edit_date = last_edit_date.products(page: 1)
267
- refute_empty products_for_last_edit_date
268
- end
269
- end
270
-
271
- # Number of Ingredients
272
-
273
- def test_it_fetches_numbers_of_ingredients
274
- VCR.use_cassette("numbers_of_ingredients") do
275
- numbers_of_ingredients = ::Openfoodfacts::NumberOfIngredients.all
276
- assert_includes numbers_of_ingredients.map { |number_of_ingredients| number_of_ingredients['name'] }, "38"
277
- end
278
- end
279
-
280
- def test_it_fetches_numbers_of_ingredients_for_locale
281
- VCR.use_cassette("number_of_ingredients_locale") do
282
- numbers_of_ingredients = ::Openfoodfacts::NumberOfIngredients.all(locale: 'fr')
283
- assert_includes numbers_of_ingredients.map { |number_of_ingredients| number_of_ingredients['name'] }, "38"
284
- end
285
- end
286
-
287
- def test_it_fetches_products_for_number_of_ingredients
288
- number_of_ingredients = ::Openfoodfacts::NumberOfIngredients.new("url" => "https://world.openfoodfacts.org/number-of-ingredients/38")
289
- VCR.use_cassette("products_for_number_of_ingredients") do
290
- products_for_number_of_ingredients = number_of_ingredients.products(page: 1)
291
- refute_empty products_for_number_of_ingredients
292
- end
293
- end
294
-
295
- # FAQ
296
-
297
- def test_it_fetches_faq
298
- VCR.use_cassette("faq") do
299
- refute_empty ::Openfoodfacts::Faq.items(locale: 'fr')
300
- end
301
- end
302
-
303
- # Mission
304
-
305
- def test_it_fetches_missions
306
- VCR.use_cassette("missions") do
307
- skip("Website have a bug with Missions page on https://fr.openfoodfacts.org/missions")
308
- refute_empty ::Openfoodfacts::Mission.all(locale: 'fr')
309
- end
310
- end
311
-
312
- def test_it_fetches_mission
313
- VCR.use_cassette("mission", record: :once, match_requests_on: [:host, :path]) do
314
- skip("Website have a bug with Mission page on https://fr.openfoodfacts.org/mission/informateur-100-produits")
315
- mission = ::Openfoodfacts::Mission.new(url: "https://fr.openfoodfacts.org/mission/informateur-100-produits")
316
- mission.fetch
317
- refute_empty mission.users
318
- end
319
- end
320
-
321
- # Press
322
-
323
- def test_it_fetches_press
324
- VCR.use_cassette("press") do
325
- refute_empty ::Openfoodfacts::Press.items(locale: 'fr')
326
- end
327
- end
328
-
329
- end