openfoodfacts 0.3.1 → 0.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 +5 -5
- data/README.md +13 -6
- data/lib/openfoodfacts.rb +8 -1
- data/lib/openfoodfacts/additive.rb +6 -6
- data/lib/openfoodfacts/allergen.rb +3 -3
- data/lib/openfoodfacts/brand.rb +2 -2
- data/lib/openfoodfacts/category.rb +3 -3
- data/lib/openfoodfacts/city.rb +3 -3
- data/lib/openfoodfacts/contributor.rb +3 -3
- data/lib/openfoodfacts/country.rb +3 -3
- data/lib/openfoodfacts/entry_date.rb +33 -0
- data/lib/openfoodfacts/faq.rb +5 -5
- data/lib/openfoodfacts/ingredient_that_may_be_from_palm_oil.rb +3 -3
- data/lib/openfoodfacts/label.rb +5 -10
- data/lib/openfoodfacts/language.rb +33 -0
- data/lib/openfoodfacts/last_edit_date.rb +33 -0
- data/lib/openfoodfacts/locale.rb +22 -8
- data/lib/openfoodfacts/manufacturing_place.rb +3 -3
- data/lib/openfoodfacts/mission.rb +72 -0
- data/lib/openfoodfacts/number_of_ingredients.rb +33 -0
- data/lib/openfoodfacts/nutrition_grade.rb +33 -0
- data/lib/openfoodfacts/origin.rb +3 -3
- data/lib/openfoodfacts/packager_code.rb +3 -3
- data/lib/openfoodfacts/packaging.rb +3 -3
- data/lib/openfoodfacts/press.rb +16 -26
- data/lib/openfoodfacts/product.rb +26 -30
- data/lib/openfoodfacts/product_state.rb +3 -3
- data/lib/openfoodfacts/purchase_place.rb +3 -3
- data/lib/openfoodfacts/store.rb +3 -3
- data/lib/openfoodfacts/trace.rb +3 -3
- data/lib/openfoodfacts/user.rb +5 -5
- data/lib/openfoodfacts/version.rb +1 -1
- data/test/minitest_helper.rb +7 -1
- data/test/test_openfoodfacts.rb +151 -25
- metadata +36 -57
- data/test/fixtures/additives.yml +0 -1963
- data/test/fixtures/additives_locale.yml +0 -1963
- data/test/fixtures/brands.yml +0 -31542
- data/test/fixtures/brands_locale.yml +0 -17498
- data/test/fixtures/faq.yml +0 -1078
- data/test/fixtures/fetch_product_3029330003533.yml +0 -280
- data/test/fixtures/index.yml +0 -510
- data/test/fixtures/labels.yml +0 -9091
- data/test/fixtures/login_user.yml +0 -38
- data/test/fixtures/press.yml +0 -1284
- data/test/fixtures/product_3029330003533.yml +0 -280
- data/test/fixtures/product_states.yml +0 -910
- data/test/fixtures/product_states_locale.yml +0 -1002
- data/test/fixtures/products_for_brand.yml +0 -5481
- data/test/fixtures/products_for_state.yml +0 -2178
- data/test/fixtures/products_with_additive.yml +0 -3130
- data/test/fixtures/search_Chocolat.yml +0 -586
- data/test/fixtures/search_Chocolat_1_000_000.yml +0 -200
data/lib/openfoodfacts/store.rb
CHANGED
@@ -15,9 +15,9 @@ module Openfoodfacts
|
|
15
15
|
|
16
16
|
# Get stores
|
17
17
|
#
|
18
|
-
def all(locale:
|
18
|
+
def all(locale: DEFAULT_LOCALE, domain: DEFAULT_DOMAIN)
|
19
19
|
if path = LOCALE_PATHS[locale]
|
20
|
-
Product.tags_from_page(self, "
|
20
|
+
Product.tags_from_page(self, "https://#{locale}.#{domain}/#{path}")
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -30,4 +30,4 @@ module Openfoodfacts
|
|
30
30
|
end
|
31
31
|
|
32
32
|
end
|
33
|
-
end
|
33
|
+
end
|
data/lib/openfoodfacts/trace.rb
CHANGED
@@ -15,9 +15,9 @@ module Openfoodfacts
|
|
15
15
|
|
16
16
|
# Get traces
|
17
17
|
#
|
18
|
-
def all(locale:
|
18
|
+
def all(locale: DEFAULT_LOCALE, domain: DEFAULT_DOMAIN)
|
19
19
|
if path = LOCALE_PATHS[locale]
|
20
|
-
Product.tags_from_page(self, "
|
20
|
+
Product.tags_from_page(self, "https://#{locale}.#{domain}/#{path}")
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -30,4 +30,4 @@ module Openfoodfacts
|
|
30
30
|
end
|
31
31
|
|
32
32
|
end
|
33
|
-
end
|
33
|
+
end
|
data/lib/openfoodfacts/user.rb
CHANGED
@@ -6,10 +6,10 @@ module Openfoodfacts
|
|
6
6
|
class << self
|
7
7
|
|
8
8
|
# Login
|
9
|
-
# WARNING SECURITY: It is not made throught HTTPS Secure so password can be read on the way.
|
10
9
|
#
|
11
|
-
def login(user_id, password, locale:
|
12
|
-
|
10
|
+
def login(user_id, password, locale: DEFAULT_LOCALE, domain: DEFAULT_DOMAIN)
|
11
|
+
path = 'cgi/session.pl'
|
12
|
+
uri = URI("https://#{locale}.#{domain}/#{path}")
|
13
13
|
params = {
|
14
14
|
"jqm" => "1",
|
15
15
|
"user_id" => user_id,
|
@@ -29,7 +29,7 @@ module Openfoodfacts
|
|
29
29
|
|
30
30
|
# Login
|
31
31
|
#
|
32
|
-
def login(locale:
|
32
|
+
def login(locale: DEFAULT_LOCALE)
|
33
33
|
if user = self.class.login(self.user_id, self.password, locale: locale)
|
34
34
|
self.name = user.name
|
35
35
|
self
|
@@ -37,4 +37,4 @@ module Openfoodfacts
|
|
37
37
|
end
|
38
38
|
|
39
39
|
end
|
40
|
-
end
|
40
|
+
end
|
data/test/minitest_helper.rb
CHANGED
@@ -6,7 +6,13 @@ require 'minitest/autorun'
|
|
6
6
|
require 'webmock/minitest'
|
7
7
|
require 'vcr'
|
8
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
|
+
|
9
15
|
VCR.configure do |c|
|
10
16
|
c.cassette_library_dir = "test/fixtures"
|
11
17
|
c.hook_into :webmock
|
12
|
-
end
|
18
|
+
end
|
data/test/test_openfoodfacts.rb
CHANGED
@@ -13,9 +13,7 @@ class TestOpenfoodfacts < Minitest::Test
|
|
13
13
|
def test_it_fetches_locales
|
14
14
|
VCR.use_cassette("index") do
|
15
15
|
locales = ::Openfoodfacts::Locale.all
|
16
|
-
assert_includes locales, "
|
17
|
-
assert_includes locales, "fr"
|
18
|
-
assert_includes locales, "be-fr"
|
16
|
+
assert_includes locales.map { |locale| locale['code'] }, "gd"
|
19
17
|
end
|
20
18
|
end
|
21
19
|
|
@@ -37,7 +35,7 @@ class TestOpenfoodfacts < Minitest::Test
|
|
37
35
|
|
38
36
|
def test_it_returns_product_weburl
|
39
37
|
product = ::Openfoodfacts::Product.new(code: "3029330003533")
|
40
|
-
assert_equal "
|
38
|
+
assert_equal "https://world.openfoodfacts.org/product/#{product.code}", product.weburl(locale: 'world')
|
41
39
|
end
|
42
40
|
|
43
41
|
def test_it_fetches_product
|
@@ -52,22 +50,22 @@ class TestOpenfoodfacts < Minitest::Test
|
|
52
50
|
|
53
51
|
def test_it_get_product
|
54
52
|
product_code = "3029330003533"
|
55
|
-
|
53
|
+
|
56
54
|
VCR.use_cassette("product_#{product_code}", record: :once, match_requests_on: [:host, :path]) do
|
57
55
|
assert_equal ::Openfoodfacts::Product.get(product_code).code, product_code
|
58
56
|
end
|
59
57
|
end
|
60
58
|
|
61
59
|
def test_that_it_search
|
62
|
-
term = "
|
60
|
+
term = "coca"
|
63
61
|
first_product = nil
|
64
62
|
|
65
63
|
VCR.use_cassette("search_#{term}") do
|
66
64
|
products = ::Openfoodfacts::Product.search(term, page_size: 42)
|
67
65
|
first_product = products.first
|
68
66
|
|
69
|
-
assert_match
|
70
|
-
assert_match
|
67
|
+
assert_match(/#{term}/i, products.last["product_name"])
|
68
|
+
assert_match(/#{term}/i, ::Openfoodfacts::Product.search(term).last["product_name"])
|
71
69
|
assert_equal products.size, 42
|
72
70
|
end
|
73
71
|
|
@@ -105,8 +103,8 @@ class TestOpenfoodfacts < Minitest::Test
|
|
105
103
|
|
106
104
|
def test_it_fetches_additives
|
107
105
|
VCR.use_cassette("additives") do
|
108
|
-
additives = ::Openfoodfacts::Additive.all
|
109
|
-
|
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"
|
110
108
|
refute_nil additives.detect { |additive| !additive['riskiness'].nil? }
|
111
109
|
end
|
112
110
|
end
|
@@ -114,14 +112,14 @@ class TestOpenfoodfacts < Minitest::Test
|
|
114
112
|
def test_it_fetches_additives_for_locale
|
115
113
|
VCR.use_cassette("additives_locale") do
|
116
114
|
additives = ::Openfoodfacts::Additive.all(locale: 'fr')
|
117
|
-
|
115
|
+
assert_includes additives.map { |additive| additive['url'] }, "https://fr.openfoodfacts.org/additif/e330-acide-citrique"
|
118
116
|
end
|
119
117
|
end
|
120
118
|
|
121
119
|
def test_it_fetches_products_with_additive
|
122
|
-
additive = ::Openfoodfacts::Additive.new("url" => "
|
120
|
+
additive = ::Openfoodfacts::Additive.new("url" => "https://world.openfoodfacts.org/additive/e452i-sodium-polyphosphate")
|
123
121
|
VCR.use_cassette("products_with_additive") do
|
124
|
-
products_with_additive = additive.products(page:
|
122
|
+
products_with_additive = additive.products(page: 1)
|
125
123
|
refute_empty products_with_additive
|
126
124
|
end
|
127
125
|
end
|
@@ -143,20 +141,58 @@ class TestOpenfoodfacts < Minitest::Test
|
|
143
141
|
end
|
144
142
|
|
145
143
|
def test_it_fetches_products_for_brand
|
146
|
-
brand = ::Openfoodfacts::Brand.new("url" => "
|
144
|
+
brand = ::Openfoodfacts::Brand.new("url" => "https://world.openfoodfacts.org/brand/bel")
|
147
145
|
VCR.use_cassette("products_for_brand") do
|
148
|
-
products_for_brand = brand.products(page:
|
146
|
+
products_for_brand = brand.products(page: 1)
|
149
147
|
refute_empty products_for_brand
|
150
148
|
end
|
151
149
|
end
|
152
150
|
|
153
|
-
#
|
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
|
154
183
|
|
155
|
-
def
|
156
|
-
VCR.use_cassette("
|
157
|
-
|
158
|
-
|
159
|
-
|
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
|
160
196
|
end
|
161
197
|
end
|
162
198
|
|
@@ -165,25 +201,97 @@ class TestOpenfoodfacts < Minitest::Test
|
|
165
201
|
def test_it_fetches_product_states
|
166
202
|
VCR.use_cassette("product_states") do
|
167
203
|
product_states = ::Openfoodfacts::ProductState.all
|
168
|
-
assert_equal "
|
204
|
+
assert_equal "https://world.openfoodfacts.org/state/front-photo-not-selected", product_states.last.url
|
169
205
|
end
|
170
206
|
end
|
171
207
|
|
172
208
|
def test_it_fetches_product_states_for_locale
|
173
209
|
VCR.use_cassette("product_states_locale") do
|
174
210
|
product_states = ::Openfoodfacts::ProductState.all(locale: 'fr')
|
175
|
-
assert_equal "
|
211
|
+
assert_equal "https://fr.openfoodfacts.org/etat/en:front-photo-not-selected", product_states.last.url
|
176
212
|
end
|
177
213
|
end
|
178
214
|
|
179
215
|
def test_it_fetches_products_for_state
|
180
|
-
product_state = ::Openfoodfacts::ProductState.new("url" => "
|
216
|
+
product_state = ::Openfoodfacts::ProductState.new("url" => "https://world.openfoodfacts.org/state/photos-uploaded", "products_count" => 22)
|
181
217
|
VCR.use_cassette("products_for_state") do
|
182
|
-
products_for_state = product_state.products(page:
|
218
|
+
products_for_state = product_state.products(page: 1)
|
183
219
|
refute_empty products_for_state
|
184
220
|
end
|
185
221
|
end
|
186
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
|
+
|
187
295
|
# FAQ
|
188
296
|
|
189
297
|
def test_it_fetches_faq
|
@@ -192,6 +300,24 @@ class TestOpenfoodfacts < Minitest::Test
|
|
192
300
|
end
|
193
301
|
end
|
194
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
|
+
|
195
321
|
# Press
|
196
322
|
|
197
323
|
def test_it_fetches_press
|
metadata
CHANGED
@@ -1,130 +1,122 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openfoodfacts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nicolas Leger
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: her
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.8'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0.8'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: hashie
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
|
-
- - "
|
17
|
+
- - ">="
|
32
18
|
- !ruby/object:Gem::Version
|
33
19
|
version: '3.4'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5.0'
|
34
23
|
type: :runtime
|
35
24
|
prerelease: false
|
36
25
|
version_requirements: !ruby/object:Gem::Requirement
|
37
26
|
requirements:
|
38
|
-
- - "
|
27
|
+
- - ">="
|
39
28
|
- !ruby/object:Gem::Version
|
40
29
|
version: '3.4'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5.0'
|
41
33
|
- !ruby/object:Gem::Dependency
|
42
34
|
name: nokogiri
|
43
35
|
requirement: !ruby/object:Gem::Requirement
|
44
36
|
requirements:
|
45
37
|
- - "~>"
|
46
38
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
39
|
+
version: '1.7'
|
48
40
|
type: :runtime
|
49
41
|
prerelease: false
|
50
42
|
version_requirements: !ruby/object:Gem::Requirement
|
51
43
|
requirements:
|
52
44
|
- - "~>"
|
53
45
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1.
|
46
|
+
version: '1.7'
|
55
47
|
- !ruby/object:Gem::Dependency
|
56
48
|
name: bundler
|
57
49
|
requirement: !ruby/object:Gem::Requirement
|
58
50
|
requirements:
|
59
51
|
- - "~>"
|
60
52
|
- !ruby/object:Gem::Version
|
61
|
-
version: '1
|
53
|
+
version: '2.1'
|
62
54
|
type: :development
|
63
55
|
prerelease: false
|
64
56
|
version_requirements: !ruby/object:Gem::Requirement
|
65
57
|
requirements:
|
66
58
|
- - "~>"
|
67
59
|
- !ruby/object:Gem::Version
|
68
|
-
version: '1
|
60
|
+
version: '2.1'
|
69
61
|
- !ruby/object:Gem::Dependency
|
70
62
|
name: rake
|
71
63
|
requirement: !ruby/object:Gem::Requirement
|
72
64
|
requirements:
|
73
65
|
- - "~>"
|
74
66
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
67
|
+
version: '12.0'
|
76
68
|
type: :development
|
77
69
|
prerelease: false
|
78
70
|
version_requirements: !ruby/object:Gem::Requirement
|
79
71
|
requirements:
|
80
72
|
- - "~>"
|
81
73
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
74
|
+
version: '12.0'
|
83
75
|
- !ruby/object:Gem::Dependency
|
84
76
|
name: minitest
|
85
77
|
requirement: !ruby/object:Gem::Requirement
|
86
78
|
requirements:
|
87
79
|
- - "~>"
|
88
80
|
- !ruby/object:Gem::Version
|
89
|
-
version: '5.
|
81
|
+
version: '5.10'
|
90
82
|
type: :development
|
91
83
|
prerelease: false
|
92
84
|
version_requirements: !ruby/object:Gem::Requirement
|
93
85
|
requirements:
|
94
86
|
- - "~>"
|
95
87
|
- !ruby/object:Gem::Version
|
96
|
-
version: '5.
|
88
|
+
version: '5.10'
|
97
89
|
- !ruby/object:Gem::Dependency
|
98
90
|
name: vcr
|
99
91
|
requirement: !ruby/object:Gem::Requirement
|
100
92
|
requirements:
|
101
93
|
- - "~>"
|
102
94
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
95
|
+
version: '5.1'
|
104
96
|
type: :development
|
105
97
|
prerelease: false
|
106
98
|
version_requirements: !ruby/object:Gem::Requirement
|
107
99
|
requirements:
|
108
100
|
- - "~>"
|
109
101
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
102
|
+
version: '5.1'
|
111
103
|
- !ruby/object:Gem::Dependency
|
112
104
|
name: webmock
|
113
105
|
requirement: !ruby/object:Gem::Requirement
|
114
106
|
requirements:
|
115
107
|
- - "~>"
|
116
108
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
109
|
+
version: '3.11'
|
118
110
|
type: :development
|
119
111
|
prerelease: false
|
120
112
|
version_requirements: !ruby/object:Gem::Requirement
|
121
113
|
requirements:
|
122
114
|
- - "~>"
|
123
115
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
125
|
-
description:
|
116
|
+
version: '3.11'
|
117
|
+
description: Open Food Facts API Wrapper, the open database about food.
|
126
118
|
email:
|
127
|
-
-
|
119
|
+
- opensource@nleger.com
|
128
120
|
executables: []
|
129
121
|
extensions: []
|
130
122
|
extra_rdoc_files: []
|
@@ -140,11 +132,17 @@ files:
|
|
140
132
|
- lib/openfoodfacts/city.rb
|
141
133
|
- lib/openfoodfacts/contributor.rb
|
142
134
|
- lib/openfoodfacts/country.rb
|
135
|
+
- lib/openfoodfacts/entry_date.rb
|
143
136
|
- lib/openfoodfacts/faq.rb
|
144
137
|
- lib/openfoodfacts/ingredient_that_may_be_from_palm_oil.rb
|
145
138
|
- lib/openfoodfacts/label.rb
|
139
|
+
- lib/openfoodfacts/language.rb
|
140
|
+
- lib/openfoodfacts/last_edit_date.rb
|
146
141
|
- lib/openfoodfacts/locale.rb
|
147
142
|
- lib/openfoodfacts/manufacturing_place.rb
|
143
|
+
- lib/openfoodfacts/mission.rb
|
144
|
+
- lib/openfoodfacts/number_of_ingredients.rb
|
145
|
+
- lib/openfoodfacts/nutrition_grade.rb
|
148
146
|
- lib/openfoodfacts/origin.rb
|
149
147
|
- lib/openfoodfacts/packager_code.rb
|
150
148
|
- lib/openfoodfacts/packaging.rb
|
@@ -156,31 +154,13 @@ files:
|
|
156
154
|
- lib/openfoodfacts/trace.rb
|
157
155
|
- lib/openfoodfacts/user.rb
|
158
156
|
- lib/openfoodfacts/version.rb
|
159
|
-
- test/fixtures/additives.yml
|
160
|
-
- test/fixtures/additives_locale.yml
|
161
|
-
- test/fixtures/brands.yml
|
162
|
-
- test/fixtures/brands_locale.yml
|
163
|
-
- test/fixtures/faq.yml
|
164
|
-
- test/fixtures/fetch_product_3029330003533.yml
|
165
|
-
- test/fixtures/index.yml
|
166
|
-
- test/fixtures/labels.yml
|
167
|
-
- test/fixtures/login_user.yml
|
168
|
-
- test/fixtures/press.yml
|
169
|
-
- test/fixtures/product_3029330003533.yml
|
170
|
-
- test/fixtures/product_states.yml
|
171
|
-
- test/fixtures/product_states_locale.yml
|
172
|
-
- test/fixtures/products_for_brand.yml
|
173
|
-
- test/fixtures/products_for_state.yml
|
174
|
-
- test/fixtures/products_with_additive.yml
|
175
|
-
- test/fixtures/search_Chocolat.yml
|
176
|
-
- test/fixtures/search_Chocolat_1_000_000.yml
|
177
157
|
- test/minitest_helper.rb
|
178
158
|
- test/test_openfoodfacts.rb
|
179
159
|
homepage: https://github.com/openfoodfacts/openfoodfacts-ruby
|
180
160
|
licenses:
|
181
161
|
- MIT
|
182
162
|
metadata: {}
|
183
|
-
post_install_message:
|
163
|
+
post_install_message:
|
184
164
|
rdoc_options: []
|
185
165
|
require_paths:
|
186
166
|
- lib
|
@@ -188,16 +168,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
188
168
|
requirements:
|
189
169
|
- - ">="
|
190
170
|
- !ruby/object:Gem::Version
|
191
|
-
version: '2.
|
171
|
+
version: '2.5'
|
192
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
193
173
|
requirements:
|
194
174
|
- - ">="
|
195
175
|
- !ruby/object:Gem::Version
|
196
176
|
version: '0'
|
197
177
|
requirements: []
|
198
|
-
|
199
|
-
|
200
|
-
signing_key:
|
178
|
+
rubygems_version: 3.2.3
|
179
|
+
signing_key:
|
201
180
|
specification_version: 4
|
202
|
-
summary:
|
181
|
+
summary: Open Food Facts API Wrapper
|
203
182
|
test_files: []
|