openbeautyfacts 0.1.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 (48) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +111 -0
  4. data/Rakefile +19 -0
  5. data/lib/openbeautyfacts.rb +60 -0
  6. data/lib/openbeautyfacts/additive.rb +51 -0
  7. data/lib/openbeautyfacts/allergen.rb +33 -0
  8. data/lib/openbeautyfacts/brand.rb +33 -0
  9. data/lib/openbeautyfacts/category.rb +33 -0
  10. data/lib/openbeautyfacts/city.rb +33 -0
  11. data/lib/openbeautyfacts/contributor.rb +33 -0
  12. data/lib/openbeautyfacts/country.rb +33 -0
  13. data/lib/openbeautyfacts/faq.rb +50 -0
  14. data/lib/openbeautyfacts/ingredient_that_may_be_from_palm_oil.rb +33 -0
  15. data/lib/openbeautyfacts/label.rb +33 -0
  16. data/lib/openbeautyfacts/locale.rb +30 -0
  17. data/lib/openbeautyfacts/manufacturing_place.rb +33 -0
  18. data/lib/openbeautyfacts/origin.rb +33 -0
  19. data/lib/openbeautyfacts/packager_code.rb +33 -0
  20. data/lib/openbeautyfacts/packaging.rb +33 -0
  21. data/lib/openbeautyfacts/press.rb +56 -0
  22. data/lib/openbeautyfacts/product.rb +185 -0
  23. data/lib/openbeautyfacts/product_state.rb +33 -0
  24. data/lib/openbeautyfacts/purchase_place.rb +33 -0
  25. data/lib/openbeautyfacts/store.rb +33 -0
  26. data/lib/openbeautyfacts/trace.rb +33 -0
  27. data/lib/openbeautyfacts/user.rb +41 -0
  28. data/lib/openbeautyfacts/version.rb +3 -0
  29. data/test/fixtures/additives.yml +1422 -0
  30. data/test/fixtures/additives_locale.yml +1422 -0
  31. data/test/fixtures/brands.yml +2144 -0
  32. data/test/fixtures/brands_locale.yml +2024 -0
  33. data/test/fixtures/faq.yml +1031 -0
  34. data/test/fixtures/fetch_product_3600550362626.yml +104 -0
  35. data/test/fixtures/index.yml +169 -0
  36. data/test/fixtures/login_user.yml +40 -0
  37. data/test/fixtures/press.yml +986 -0
  38. data/test/fixtures/product_3600550362626.yml +104 -0
  39. data/test/fixtures/product_states.yml +936 -0
  40. data/test/fixtures/product_states_locale.yml +976 -0
  41. data/test/fixtures/products_for_brand.yml +1707 -0
  42. data/test/fixtures/products_for_state.yml +2260 -0
  43. data/test/fixtures/products_with_additive.yml +1723 -0
  44. data/test/fixtures/search_doux.yml +538 -0
  45. data/test/fixtures/search_doux_1_000_000.yml +257 -0
  46. data/test/minitest_helper.rb +12 -0
  47. data/test/test_openbeautyfacts.rb +193 -0
  48. metadata +188 -0
@@ -0,0 +1,257 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://world.openbeautyfacts.org/cgi/search.pl?jqm=1&page=2&page_size=20&search_terms=doux&sort_by=unique_scans_n
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Sat, 09 Apr 2016 17:39:45 GMT
23
+ Server:
24
+ - Apache/2.2.29 (Unix) mod_perl/2.0.8 Perl/v5.10.1
25
+ Access-Control-Allow-Origin:
26
+ - "*"
27
+ Content-Type:
28
+ - application/json; charset=UTF-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ body:
32
+ encoding: ASCII-8BIT
33
+ string: !binary |-
34
+ eyJqcW0iOiI8cD4xMDAgcHJvZHVjdHMgOjwvcD48dWwgZGF0YS1yb2xlPVwi
35
+ bGlzdHZpZXdcIiBkYXRhLXRoZW1lPVwiY1wiIGlkPVwic2VhcmNoX3Jlc3Vs
36
+ dHNfbGlzdFwiPjxsaT5cbjxhIGhyZWY9XCIjcGFnZV9wcm9kdWN0P2NvZGU9
37
+ MjYwMjM3NDhcIiB0aXRsZT1cIlNoYW1wb29pbmcgZXh0cmEgZG91eCBGaWd1
38
+ ZSAmIEphc21pbiAtIE1pbGRlZW4gLSA1MDAmbmJzcDttbFwiPlxuPGltZyBz
39
+ cmM9XCJodHRwOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvaW1hZ2Vz
40
+ L3Byb2R1Y3RzLzI2MDIzNzQ4L2Zyb250X2ZyLjUuMTAwLmpwZ1wiIHdpZHRo
41
+ PVwiMzhcIiBoZWlnaHQ9XCIxMDBcIiBzcmNzZXQ9XCJodHRwOi8vc3RhdGlj
42
+ Lm9wZW5iZWF1dHlmYWN0cy5vcmcvaW1hZ2VzL3Byb2R1Y3RzLzI2MDIzNzQ4
43
+ L2Zyb250X2ZyLjUuMjAwLmpwZyAyeFwiIGFsdD1cIlNoYW1wb29pbmcgZXh0
44
+ cmEgZG91eCBGaWd1ZSAmIEphc21pbiAtIFwiIC8+XG5cblNoYW1wb29pbmcg
45
+ ZXh0cmEgZG91eCBGaWd1ZSAmIEphc21pblxuPC9hPlxuPC9saT5cbjxsaT5c
46
+ bjxhIGhyZWY9XCIjcGFnZV9wcm9kdWN0P2NvZGU9MzI2Mzg1NTYzMDIyOVwi
47
+ IHRpdGxlPVwiU2hhbXBvb2luZyB0csOocyBkb3V4IDIgZW4gMSAtIExlYWRl
48
+ ciBQcmljZSAtIDQwMCZuYnNwO21sXCI+XG48aW1nIHNyYz1cImh0dHA6Ly9z
49
+ dGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFnZXMvcHJvZHVjdHMvMzI2
50
+ LzM4NS81NjMvMDIyOS9mcm9udF9mci41LjEwMC5qcGdcIiB3aWR0aD1cIjM3
51
+ XCIgaGVpZ2h0PVwiMTAwXCIgc3Jjc2V0PVwiaHR0cDovL3N0YXRpYy5vcGVu
52
+ YmVhdXR5ZmFjdHMub3JnL2ltYWdlcy9wcm9kdWN0cy8zMjYvMzg1LzU2My8w
53
+ MjI5L2Zyb250X2ZyLjUuMjAwLmpwZyAyeFwiIGFsdD1cIlNoYW1wb29pbmcg
54
+ dHLDqHMgZG91eCAyIGVuIDEgLSBcIiAvPlxuXG5TaGFtcG9vaW5nIHRyw6hz
55
+ IGRvdXggMiBlbiAxXG48L2E+XG48L2xpPlxuPGxpPlxuPGEgaHJlZj1cIiNw
56
+ YWdlX3Byb2R1Y3Q/Y29kZT0zNjAwNTQwMzY5MTkyXCIgdGl0bGU9XCJTaGFt
57
+ cG9vaW5nIHB1cmlmaWFudCBzYW5zIHNpbGljb25lIMOgIGwnYXJnaWxlIGRv
58
+ dWNlIGV0IGPDqWRyYXQgLSBHYXJuaWVyIC0mbmJzcDsyNTBtTFwiPlxuPGlt
59
+ ZyBzcmM9XCJodHRwOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvaW1h
60
+ Z2VzL3Byb2R1Y3RzLzM2MC8wNTQvMDM2LzkxOTIvZnJvbnRfZnIuNi4xMDAu
61
+ anBnXCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjEwMFwiIHNyY3NldD1cImh0
62
+ dHA6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFnZXMvcHJvZHVj
63
+ dHMvMzYwLzA1NC8wMzYvOTE5Mi9mcm9udF9mci42LjIwMC5qcGcgMnhcIiBh
64
+ bHQ9XCJTaGFtcG9vaW5nIHB1cmlmaWFudCBzYW5zIHNpbGljb25lIMOgIGwn
65
+ YXJnaWxlIGRvdWNlIGV0IGPDqWRyYXQgLSBcIiAvPlxuXG5TaGFtcG9vaW5n
66
+ IHB1cmlmaWFudCBzYW5zIHNpbGljb25lIMOgIGwnYXJnaWxlIGRvdWNlIGV0
67
+ IGPDqWRyYXRcbjwvYT5cbjwvbGk+XG48bGk+XG48YSBocmVmPVwiI3BhZ2Vf
68
+ cHJvZHVjdD9jb2RlPTM0NjgwODAxNDEwMDFcIiB0aXRsZT1cIlNoYW1wb29p
69
+ bmcgZG91eCBBbWFuZGUgLSBNaWVsIENoZXZldXggbm9ybWF1eCAtIENvcmlu
70
+ ZSBkZSBGYXJtZSAtIDc1MCZuYnNwO21sXCI+XG48aW1nIHNyYz1cImh0dHA6
71
+ Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFnZXMvcHJvZHVjdHMv
72
+ MzQ2LzgwOC8wMTQvMTAwMS9mcm9udF9mci41LjEwMC5qcGdcIiB3aWR0aD1c
73
+ IjQ2XCIgaGVpZ2h0PVwiMTAwXCIgc3Jjc2V0PVwiaHR0cDovL3N0YXRpYy5v
74
+ cGVuYmVhdXR5ZmFjdHMub3JnL2ltYWdlcy9wcm9kdWN0cy8zNDYvODA4LzAx
75
+ NC8xMDAxL2Zyb250X2ZyLjUuMjAwLmpwZyAyeFwiIGFsdD1cIlNoYW1wb29p
76
+ bmcgZG91eCBBbWFuZGUgLSBNaWVsIENoZXZldXggbm9ybWF1eCAtIFwiIC8+
77
+ XG5cblNoYW1wb29pbmcgZG91eCBBbWFuZGUgLSBNaWVsIENoZXZldXggbm9y
78
+ bWF1eFxuPC9hPlxuPC9saT5cbjxsaT5cbjxhIGhyZWY9XCIjcGFnZV9wcm9k
79
+ dWN0P2NvZGU9MzU5NjcxMDM2OTY4M1wiIHRpdGxlPVwiU2hhbXBvaW5nIGV4
80
+ dHJhIGRvdXggY8OoZHJlIGV0IGV1Y2FseXB0dXMgLSBBdWNoYW4gLSZuYnNw
81
+ OzMwMG1sXCI+XG48aW1nIHNyYz1cImh0dHA6Ly9zdGF0aWMub3BlbmJlYXV0
82
+ eWZhY3RzLm9yZy9pbWFnZXMvcHJvZHVjdHMvMzU5LzY3MS8wMzYvOTY4My9m
83
+ cm9udF9mci43LjEwMC5qcGdcIiB3aWR0aD1cIjM3XCIgaGVpZ2h0PVwiMTAw
84
+ XCIgc3Jjc2V0PVwiaHR0cDovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3Jn
85
+ L2ltYWdlcy9wcm9kdWN0cy8zNTkvNjcxLzAzNi85NjgzL2Zyb250X2ZyLjcu
86
+ MjAwLmpwZyAyeFwiIGFsdD1cIlNoYW1wb2luZyBleHRyYSBkb3V4IGPDqGRy
87
+ ZSBldCBldWNhbHlwdHVzIC0gXCIgLz5cblxuU2hhbXBvaW5nIGV4dHJhIGRv
88
+ dXggY8OoZHJlIGV0IGV1Y2FseXB0dXNcbjwvYT5cbjwvbGk+XG48bGk+XG48
89
+ YSBocmVmPVwiI3BhZ2VfcHJvZHVjdD9jb2RlPTM1NzQ2NjA3MjQzNDlcIiB0
90
+ aXRsZT1cIkRvdWNoZSBldCBiYWluIGV4dHJhIGRvdXggw6AgbCdhbG9lIHZl
91
+ cmEgLSBMZSBQZXRpdCBNYXJzZWlsbGFpcyAtIDY1MCZuYnNwO21sXCI+XG48
92
+ aW1nIHNyYz1cImh0dHA6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9p
93
+ bWFnZXMvcHJvZHVjdHMvMzU3LzQ2Ni8wNzIvNDM0OS9mcm9udF9mci41LjEw
94
+ MC5qcGdcIiB3aWR0aD1cIjQyXCIgaGVpZ2h0PVwiMTAwXCIgc3Jjc2V0PVwi
95
+ aHR0cDovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2ltYWdlcy9wcm9k
96
+ dWN0cy8zNTcvNDY2LzA3Mi80MzQ5L2Zyb250X2ZyLjUuMjAwLmpwZyAyeFwi
97
+ IGFsdD1cIkRvdWNoZSBldCBiYWluIGV4dHJhIGRvdXggw6AgbCdhbG9lIHZl
98
+ cmEgLSBcIiAvPlxuXG5Eb3VjaGUgZXQgYmFpbiBleHRyYSBkb3V4IMOgIGwn
99
+ YWxvZSB2ZXJhXG48L2E+XG48L2xpPlxuPGxpPlxuPGEgaHJlZj1cIiNwYWdl
100
+ X3Byb2R1Y3Q/Y29kZT0zNTc0NjYxMTgzMzUwXCIgdGl0bGU9XCJMYWl0IGRv
101
+ dWNoZSBldCBiYWluIG1vdXNzYW50IGV4dHJhIGRvdXggLSBMZSBQZXRpdCBN
102
+ YXJzZWlsbGFpcyAtIDY1MCZuYnNwO21sXCI+XG48aW1nIHNyYz1cImh0dHA6
103
+ Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFnZXMvcHJvZHVjdHMv
104
+ MzU3LzQ2Ni8xMTgvMzM1MC9mcm9udF9mci41LjEwMC5qcGdcIiB3aWR0aD1c
105
+ IjQyXCIgaGVpZ2h0PVwiMTAwXCIgc3Jjc2V0PVwiaHR0cDovL3N0YXRpYy5v
106
+ cGVuYmVhdXR5ZmFjdHMub3JnL2ltYWdlcy9wcm9kdWN0cy8zNTcvNDY2LzEx
107
+ OC8zMzUwL2Zyb250X2ZyLjUuMjAwLmpwZyAyeFwiIGFsdD1cIkxhaXQgZG91
108
+ Y2hlIGV0IGJhaW4gbW91c3NhbnQgZXh0cmEgZG91eCAtIFwiIC8+XG5cbkxh
109
+ aXQgZG91Y2hlIGV0IGJhaW4gbW91c3NhbnQgZXh0cmEgZG91eFxuPC9hPlxu
110
+ PC9saT5cbjxsaT5cbjxhIGhyZWY9XCIjcGFnZV9wcm9kdWN0P2NvZGU9MzU3
111
+ NDY2MTE4MzM0M1wiIHRpdGxlPVwiRG91Y2hlIGV0IGJhaW4gbW91c3NhbnQg
112
+ ZXh0cmEgZG91eCBhdSBsYWl0IGRlIHZhbmlsbGUgLSBMZSBQZXRpdCBNYXJz
113
+ ZWlsbGFpcyAtIDY1MCZuYnNwO21sXCI+XG48aW1nIHNyYz1cImh0dHA6Ly9z
114
+ dGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFnZXMvcHJvZHVjdHMvMzU3
115
+ LzQ2Ni8xMTgvMzM0My9mcm9udF9mci41LjEwMC5qcGdcIiB3aWR0aD1cIjQx
116
+ XCIgaGVpZ2h0PVwiMTAwXCIgc3Jjc2V0PVwiaHR0cDovL3N0YXRpYy5vcGVu
117
+ YmVhdXR5ZmFjdHMub3JnL2ltYWdlcy9wcm9kdWN0cy8zNTcvNDY2LzExOC8z
118
+ MzQzL2Zyb250X2ZyLjUuMjAwLmpwZyAyeFwiIGFsdD1cIkRvdWNoZSBldCBi
119
+ YWluIG1vdXNzYW50IGV4dHJhIGRvdXggYXUgbGFpdCBkZSB2YW5pbGxlIC0g
120
+ XCIgLz5cblxuRG91Y2hlIGV0IGJhaW4gbW91c3NhbnQgZXh0cmEgZG91eCBh
121
+ dSBsYWl0IGRlIHZhbmlsbGVcbjwvYT5cbjwvbGk+XG48bGk+XG48YSBocmVm
122
+ PVwiI3BhZ2VfcHJvZHVjdD9jb2RlPTM1NzQ2NjA3MjQzNzBcIiB0aXRsZT1c
123
+ IkFicmljb3QgZXQgbm9pc2V0dGUgZG91Y2hlIGV0IGJhaW4gY3LDqG1lIGV4
124
+ dHJhIGRvdXggLSBMZSBQZXRpdCZuYnNwO01hcnNlaWxsYWlzXCI+XG48aW1n
125
+ IHNyYz1cImh0dHA6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFn
126
+ ZXMvcHJvZHVjdHMvMzU3LzQ2Ni8wNzIvNDM3MC9mcm9udF9mci41LjEwMC5q
127
+ cGdcIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiMTAwXCIgc3Jjc2V0PVwiaHR0
128
+ cDovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2ltYWdlcy9wcm9kdWN0
129
+ cy8zNTcvNDY2LzA3Mi80MzcwL2Zyb250X2ZyLjUuMjAwLmpwZyAyeFwiIGFs
130
+ dD1cIkFicmljb3QgZXQgbm9pc2V0dGUgZG91Y2hlIGV0IGJhaW4gY3LDqG1l
131
+ IGV4dHJhIGRvdXggLSBcIiAvPlxuXG5BYnJpY290IGV0IG5vaXNldHRlIGRv
132
+ dWNoZSBldCBiYWluIGNyw6htZSBleHRyYSBkb3V4XG48L2E+XG48L2xpPlxu
133
+ PGxpPlxuPGEgaHJlZj1cIiNwYWdlX3Byb2R1Y3Q/Y29kZT0zNjAwNTQxNzM1
134
+ OTU4XCIgdGl0bGU9XCJVbHRyYSBEb3V4IEh1aWxlcyBtZXJ2ZWlsbGV1c2Vz
135
+ IEFyZ2FuICYgQ2Ftw6lsaWEgLSBHYXJuaWVyIC0gMjUwJm5ic3A7bWxcIj5c
136
+ bjxpbWcgc3JjPVwiaHR0cDovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3Jn
137
+ L2ltYWdlcy9wcm9kdWN0cy8zNjAvMDU0LzE3My81OTU4L2Zyb250X2ZyLjUu
138
+ MTAwLmpwZ1wiIHdpZHRoPVwiNDVcIiBoZWlnaHQ9XCIxMDBcIiBzcmNzZXQ9
139
+ XCJodHRwOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvaW1hZ2VzL3By
140
+ b2R1Y3RzLzM2MC8wNTQvMTczLzU5NTgvZnJvbnRfZnIuNS4yMDAuanBnIDJ4
141
+ XCIgYWx0PVwiVWx0cmEgRG91eCBIdWlsZXMgbWVydmVpbGxldXNlcyBBcmdh
142
+ biAmIENhbcOpbGlhIC0gXCIgLz5cblxuVWx0cmEgRG91eCBIdWlsZXMgbWVy
143
+ dmVpbGxldXNlcyBBcmdhbiAmIENhbcOpbGlhXG48L2E+XG48L2xpPlxuPGxp
144
+ PlxuPGEgaHJlZj1cIiNwYWdlX3Byb2R1Y3Q/Y29kZT0zNjAwNTQxNTk5MDE3
145
+ XCIgdGl0bGU9XCJVbHRyYSBEb3V4IFNoYW1wb29pbmcgw6AgbGEgY2Ftb21p
146
+ bGxlIGV0IG1pZWwgZGUgZmxldXJzIC0gR2FybmllciAtIDI1MCZuYnNwO21s
147
+ XCI+XG48aW1nIHNyYz1cImh0dHA6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3Rz
148
+ Lm9yZy9pbWFnZXMvcHJvZHVjdHMvMzYwLzA1NC8xNTkvOTAxNy9mcm9udF9m
149
+ ci41LjEwMC5qcGdcIiB3aWR0aD1cIjQ2XCIgaGVpZ2h0PVwiMTAwXCIgc3Jj
150
+ c2V0PVwiaHR0cDovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2ltYWdl
151
+ cy9wcm9kdWN0cy8zNjAvMDU0LzE1OS85MDE3L2Zyb250X2ZyLjUuMjAwLmpw
152
+ ZyAyeFwiIGFsdD1cIlVsdHJhIERvdXggU2hhbXBvb2luZyDDoCBsYSBjYW1v
153
+ bWlsbGUgZXQgbWllbCBkZSBmbGV1cnMgLSBcIiAvPlxuXG5VbHRyYSBEb3V4
154
+ IFNoYW1wb29pbmcgw6AgbGEgY2Ftb21pbGxlIGV0IG1pZWwgZGUgZmxldXJz
155
+ XG48L2E+XG48L2xpPlxuPGxpPlxuPGEgaHJlZj1cIiNwYWdlX3Byb2R1Y3Q/
156
+ Y29kZT0zNjAwNTQxNzM0NzIyXCIgdGl0bGU9XCJMYWl0IG5vdXJyaXNzYW50
157
+ IG9saXZlIG15dGhpcXVlIC0gR2FybmllciAtJm5ic3A7MjUwbUxcIj5cbjxp
158
+ bWcgc3JjPVwiaHR0cDovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2lt
159
+ YWdlcy9wcm9kdWN0cy8zNjAvMDU0LzE3My80NzIyL2Zyb250X2ZyLjUuMTAw
160
+ LmpwZ1wiIHdpZHRoPVwiNDZcIiBoZWlnaHQ9XCIxMDBcIiBzcmNzZXQ9XCJo
161
+ dHRwOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvaW1hZ2VzL3Byb2R1
162
+ Y3RzLzM2MC8wNTQvMTczLzQ3MjIvZnJvbnRfZnIuNS4yMDAuanBnIDJ4XCIg
163
+ YWx0PVwiTGFpdCBub3Vycmlzc2FudCBvbGl2ZSBteXRoaXF1ZSAtIFwiIC8+
164
+ XG5cbkxhaXQgbm91cnJpc3NhbnQgb2xpdmUgbXl0aGlxdWVcbjwvYT5cbjwv
165
+ bGk+XG48bGk+XG48YSBocmVmPVwiI3BhZ2VfcHJvZHVjdD9jb2RlPTg3MTQ3
166
+ ODk1MTQ2MzVcIiB0aXRsZT1cIkZlZWwgdGhlIG1lc3NhZ2UgLSBQYWxtb2xp
167
+ dmUgLSAyNTAmbmJzcDttbFwiPlxuPGltZyBzcmM9XCJodHRwOi8vc3RhdGlj
168
+ Lm9wZW5iZWF1dHlmYWN0cy5vcmcvaW1hZ2VzL3Byb2R1Y3RzLzg3MS80Nzgv
169
+ OTUxLzQ2MzUvZnJvbnRfZnIuNS4xMDAuanBnXCIgd2lkdGg9XCIzOVwiIGhl
170
+ aWdodD1cIjEwMFwiIHNyY3NldD1cImh0dHA6Ly9zdGF0aWMub3BlbmJlYXV0
171
+ eWZhY3RzLm9yZy9pbWFnZXMvcHJvZHVjdHMvODcxLzQ3OC85NTEvNDYzNS9m
172
+ cm9udF9mci41LjIwMC5qcGcgMnhcIiBhbHQ9XCJGZWVsIHRoZSBtZXNzYWdl
173
+ IC0gXCIgLz5cblxuRmVlbCB0aGUgbWVzc2FnZVxuPC9hPlxuPC9saT5cbjxs
174
+ aT5cbjxhIGhyZWY9XCIjcGFnZV9wcm9kdWN0P2NvZGU9MzU3NDY2MTA2NTQx
175
+ MFwiIHRpdGxlPVwiUMOqY2hlIGJsYW5jaGUgJiBOZWN0YXJpbmUgLSBMZSBQ
176
+ ZXRpdCBNYXJzZWlsbGFpcyAtJm5ic3A7MjUwbUxcIj5cbjxpbWcgc3JjPVwi
177
+ aHR0cDovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2ltYWdlcy9wcm9k
178
+ dWN0cy8zNTcvNDY2LzEwNi81NDEwL2Zyb250X2ZyLjUuMTAwLmpwZ1wiIHdp
179
+ ZHRoPVwiNTFcIiBoZWlnaHQ9XCIxMDBcIiBzcmNzZXQ9XCJodHRwOi8vc3Rh
180
+ dGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvaW1hZ2VzL3Byb2R1Y3RzLzM1Ny80
181
+ NjYvMTA2LzU0MTAvZnJvbnRfZnIuNS4yMDAuanBnIDJ4XCIgYWx0PVwiUMOq
182
+ Y2hlIGJsYW5jaGUgJiBOZWN0YXJpbmUgLSBcIiAvPlxuXG5Qw6pjaGUgYmxh
183
+ bmNoZSAmIE5lY3RhcmluZVxuPC9hPlxuPC9saT5cbjxsaT5cbjxhIGhyZWY9
184
+ XCIjcGFnZV9wcm9kdWN0P2NvZGU9MzU3NDY2MTA2NTM1OVwiIHRpdGxlPVwi
185
+ R2VsIGRvdWNoZSBleHRyYSBkb3V4IG1hbmRhcmluZSAmIGNpdHJvbiB2ZXJ0
186
+ IC0gTGUgUGV0aXQgTWFyc2VpbGxhaXMgLSAyNTAmbmJzcDttbFwiPlxuPGlt
187
+ ZyBzcmM9XCJodHRwOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvaW1h
188
+ Z2VzL3Byb2R1Y3RzLzM1Ny80NjYvMTA2LzUzNTkvZnJvbnRfZnIuOS4xMDAu
189
+ anBnXCIgd2lkdGg9XCI1M1wiIGhlaWdodD1cIjEwMFwiIHNyY3NldD1cImh0
190
+ dHA6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFnZXMvcHJvZHVj
191
+ dHMvMzU3LzQ2Ni8xMDYvNTM1OS9mcm9udF9mci45LjIwMC5qcGcgMnhcIiBh
192
+ bHQ9XCJHZWwgZG91Y2hlIGV4dHJhIGRvdXggbWFuZGFyaW5lICYgY2l0cm9u
193
+ IHZlcnQgLSBcIiAvPlxuXG5HZWwgZG91Y2hlIGV4dHJhIGRvdXggbWFuZGFy
194
+ aW5lICYgY2l0cm9uIHZlcnRcbjwvYT5cbjwvbGk+XG48bGk+XG48YSBocmVm
195
+ PVwiI3BhZ2VfcHJvZHVjdD9jb2RlPTMwMTc1NjMxMjA5OThcIiB0aXRsZT1c
196
+ IkNpbHMgRGVtYXNxIC0gTG90aW9uIGZyYcOuY2hldXIgZMOpbWFxdWlsbGFu
197
+ dCBkb3VjZXVyIHBvdXIgbGVzIHlldXggLSZuYnNwO0dlbWV5XCI+XG48aW1n
198
+ IHNyYz1cImh0dHA6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFn
199
+ ZXMvcHJvZHVjdHMvMzAxLzc1Ni8zMTIvMDk5OC9mcm9udF9mci41LjEwMC5q
200
+ cGdcIiB3aWR0aD1cIjUzXCIgaGVpZ2h0PVwiMTAwXCIgc3Jjc2V0PVwiaHR0
201
+ cDovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2ltYWdlcy9wcm9kdWN0
202
+ cy8zMDEvNzU2LzMxMi8wOTk4L2Zyb250X2ZyLjUuMjAwLmpwZyAyeFwiIGFs
203
+ dD1cIkNpbHMgRGVtYXNxIC0gTG90aW9uIGZyYcOuY2hldXIgZMOpbWFxdWls
204
+ bGFudCBkb3VjZXVyIHBvdXIgbGVzIHlldXggLSBcIiAvPlxuXG5DaWxzIERl
205
+ bWFzcSAtIExvdGlvbiBmcmHDrmNoZXVyIGTDqW1hcXVpbGxhbnQgZG91Y2V1
206
+ ciBwb3VyIGxlcyB5ZXV4XG48L2E+XG48L2xpPlxuPGxpPlxuPGEgaHJlZj1c
207
+ IiNwYWdlX3Byb2R1Y3Q/Y29kZT0zNDY4MDgwMTUwMTAyXCIgdGl0bGU9XCJH
208
+ ZWwgZG91Y2hlIGNoZXZldXggZXQgY29ycHMgZXh0cmEgZG91eCAtIENvcmlu
209
+ ZSBkZSBGYXJtZSAtIDI1MCZuYnNwO21sXCI+XG48aW1nIHNyYz1cImh0dHA6
210
+ Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFnZXMvcHJvZHVjdHMv
211
+ MzQ2LzgwOC8wMTUvMDEwMi9mcm9udF9lbi4xMS4xMDAuanBnXCIgd2lkdGg9
212
+ XCI0NlwiIGhlaWdodD1cIjEwMFwiIHNyY3NldD1cImh0dHA6Ly9zdGF0aWMu
213
+ b3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFnZXMvcHJvZHVjdHMvMzQ2LzgwOC8w
214
+ MTUvMDEwMi9mcm9udF9lbi4xMS4yMDAuanBnIDJ4XCIgYWx0PVwiR2VsIGRv
215
+ dWNoZSBjaGV2ZXV4IGV0IGNvcnBzIGV4dHJhIGRvdXggLSBcIiAvPlxuXG5H
216
+ ZWwgZG91Y2hlIGNoZXZldXggZXQgY29ycHMgZXh0cmEgZG91eFxuPC9hPlxu
217
+ PC9saT5cbjxsaT5cbjxhIGhyZWY9XCIjcGFnZV9wcm9kdWN0P2NvZGU9MzI1
218
+ NjIyNDM1OTUwMFwiIHRpdGxlPVwiU2hhbXBvb2luZyBkb3V4IMOgIGwnZXh0
219
+ cmFpdCBkJ0hpYmlzY3VzIGV0IExhaXQgZGUgQ29jbyAtIFUgLSAyNTAmbmJz
220
+ cDttbFwiPlxuPGltZyBzcmM9XCJodHRwOi8vc3RhdGljLm9wZW5iZWF1dHlm
221
+ YWN0cy5vcmcvaW1hZ2VzL3Byb2R1Y3RzLzMyNS82MjIvNDM1Lzk1MDAvZnJv
222
+ bnRfZnIuNS4xMDAuanBnXCIgd2lkdGg9XCI1MlwiIGhlaWdodD1cIjEwMFwi
223
+ IHNyY3NldD1cImh0dHA6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9p
224
+ bWFnZXMvcHJvZHVjdHMvMzI1LzYyMi80MzUvOTUwMC9mcm9udF9mci41LjIw
225
+ MC5qcGcgMnhcIiBhbHQ9XCJTaGFtcG9vaW5nIGRvdXggw6AgbCdleHRyYWl0
226
+ IGQnSGliaXNjdXMgZXQgTGFpdCBkZSBDb2NvIC0gXCIgLz5cblxuU2hhbXBv
227
+ b2luZyBkb3V4IMOgIGwnZXh0cmFpdCBkJ0hpYmlzY3VzIGV0IExhaXQgZGUg
228
+ Q29jb1xuPC9hPlxuPC9saT5cbjxsaT5cbjxhIGhyZWY9XCIjcGFnZV9wcm9k
229
+ dWN0P2NvZGU9MzUzODM5NDYxMjczMFwiIHRpdGxlPVwiU2hhbXBvb2luZyBk
230
+ b3VjaGUgdWx0cmEgZG91eCBzYW5zIHNhdm9uIGF1eCBjw6lyw6lhbGVzIC0g
231
+ Q29zbHlzIC0gMjUwJm5ic3A7bWxcIj5cbjxpbWcgc3JjPVwiaHR0cDovL3N0
232
+ YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2ltYWdlcy9wcm9kdWN0cy8zNTMv
233
+ ODM5LzQ2MS8yNzMwL2Zyb250X2ZyLjYuMTAwLmpwZ1wiIHdpZHRoPVwiNDFc
234
+ IiBoZWlnaHQ9XCIxMDBcIiBzcmNzZXQ9XCJodHRwOi8vc3RhdGljLm9wZW5i
235
+ ZWF1dHlmYWN0cy5vcmcvaW1hZ2VzL3Byb2R1Y3RzLzM1My84MzkvNDYxLzI3
236
+ MzAvZnJvbnRfZnIuNi4yMDAuanBnIDJ4XCIgYWx0PVwiU2hhbXBvb2luZyBk
237
+ b3VjaGUgdWx0cmEgZG91eCBzYW5zIHNhdm9uIGF1eCBjw6lyw6lhbGVzIC0g
238
+ XCIgLz5cblxuU2hhbXBvb2luZyBkb3VjaGUgdWx0cmEgZG91eCBzYW5zIHNh
239
+ dm9uIGF1eCBjw6lyw6lhbGVzXG48L2E+XG48L2xpPlxuPGxpPlxuPGEgaHJl
240
+ Zj1cIiNwYWdlX3Byb2R1Y3Q/Y29kZT0zMjU2MjI0MDQzOTk3XCIgdGl0bGU9
241
+ XCJTaGFtcG9vaW5nIGRvdXggLSBVIC0gMjUwJm5ic3A7bWxcIj5cbjxpbWcg
242
+ c3JjPVwiaHR0cDovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2ltYWdl
243
+ cy9wcm9kdWN0cy8zMjUvNjIyLzQwNC8zOTk3L2Zyb250X2ZyLjUuMTAwLmpw
244
+ Z1wiIHdpZHRoPVwiMzRcIiBoZWlnaHQ9XCIxMDBcIiBzcmNzZXQ9XCJodHRw
245
+ Oi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvaW1hZ2VzL3Byb2R1Y3Rz
246
+ LzMyNS82MjIvNDA0LzM5OTcvZnJvbnRfZnIuNS4yMDAuanBnIDJ4XCIgYWx0
247
+ PVwiU2hhbXBvb2luZyBkb3V4IC0gXCIgLz5cblxuU2hhbXBvb2luZyBkb3V4
248
+ XG48L2E+XG48L2xpPlxuPGxpIGlkPVwibG9hZG1vcmVcIiBzdHlsZT1cInRl
249
+ eHQtYWxpZ246Y2VudGVyXCI+PGEgaHJlZj1cImh0dHA6Ly93b3JsZC5vcGVu
250
+ YmVhdXR5ZmFjdHMub3JnL2NnaS9zZWFyY2gucGw/YWN0aW9uPXByb2Nlc3Mm
251
+ c2VhcmNoX3Rlcm1zPWRvdXgmc29ydF9ieT11bmlxdWVfc2NhbnNfbiZwYWdl
252
+ X3NpemU9MjAmanFtPTEmcGFnZT0zJmpxbV9sb2FkbW9yZT0xXCIgaWQ9XCJs
253
+ b2FkbW9yZWxpbmtcIj5DaGFyZ2VyIHBsdXMgZGUgcsOpc3VsdGF0czwvYT48
254
+ L2xpPlxuPC91bD5cbiJ9
255
+ http_version:
256
+ recorded_at: Sat, 09 Apr 2016 17:36:18 GMT
257
+ recorded_with: VCR 3.0.1
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'openbeautyfacts'
3
+
4
+ require 'minitest/autorun'
5
+
6
+ require 'webmock/minitest'
7
+ require 'vcr'
8
+
9
+ VCR.configure do |c|
10
+ c.cassette_library_dir = "test/fixtures"
11
+ c.hook_into :webmock
12
+ end
@@ -0,0 +1,193 @@
1
+ require_relative 'minitest_helper'
2
+
3
+ class TestOpenbeautyfacts < Minitest::Test
4
+
5
+ # Gem
6
+
7
+ def test_that_it_has_a_version_number
8
+ refute_nil ::Openbeautyfacts::VERSION
9
+ end
10
+
11
+ # Locale
12
+
13
+ def test_it_fetches_locales
14
+ VCR.use_cassette("index") do
15
+ locales = ::Openbeautyfacts::Locale.all
16
+ assert_includes locales, "world"
17
+ assert_includes locales, "fr"
18
+ assert_includes locales, "es-gl"
19
+ end
20
+ end
21
+
22
+ # User
23
+
24
+ def test_it_login_user
25
+ VCR.use_cassette("login_user", record: :once, match_requests_on: [:host, :path]) do
26
+ user = ::Openbeautyfacts::User.login("wrong", "absolutely")
27
+ assert_nil user
28
+ end
29
+ end
30
+
31
+ # Product
32
+
33
+ def test_it_returns_product_url
34
+ product = ::Openbeautyfacts::Product.new(code: "3600550362626")
35
+ assert_equal ::Openbeautyfacts::Product.url(product.code, locale: 'ca'), product.url(locale: 'ca')
36
+ end
37
+
38
+ def test_it_returns_product_weburl
39
+ product = ::Openbeautyfacts::Product.new(code: "3600550362626")
40
+ assert_equal "http://world.openbeautyfacts.org/product/#{product.code}", product.weburl(locale: 'world')
41
+ end
42
+
43
+ def test_it_fetches_product
44
+ product_code = "3600550362626"
45
+
46
+ VCR.use_cassette("fetch_product_#{product_code}", record: :once, match_requests_on: [:host, :path]) do
47
+ product = ::Openbeautyfacts::Product.new(code: product_code)
48
+ product.fetch
49
+ refute_empty product.brands_tags
50
+ end
51
+ end
52
+
53
+ def test_it_get_product
54
+ product_code = "3600550362626"
55
+
56
+ VCR.use_cassette("product_#{product_code}", record: :once, match_requests_on: [:host, :path]) do
57
+ assert_equal ::Openbeautyfacts::Product.get(product_code).code, product_code
58
+ end
59
+ end
60
+
61
+ def test_that_it_search
62
+ term = "doux"
63
+ first_product = nil
64
+
65
+ VCR.use_cassette("search_#{term}") do
66
+ products = ::Openbeautyfacts::Product.search(term, page_size: 24)
67
+ first_product = products.first
68
+
69
+ assert_match /#{term}/i, products.last["product_name"]
70
+ assert_match /#{term}/i, ::Openbeautyfacts::Product.search(term).last["product_name"]
71
+ assert_equal products.size, 24
72
+ end
73
+
74
+ VCR.use_cassette("search_#{term}_1_000_000") do
75
+ refute_equal ::Openbeautyfacts::Product.search(term, page: 2).first.code, first_product.code
76
+ end
77
+ end
78
+
79
+ =begin
80
+ # Test disable in order to wait for a dedicated test account to not alter real data
81
+ def test_it_updates_product
82
+ product_code = "3600550362626"
83
+ product = ::Openbeautyfacts::Product.new(code: product_code)
84
+ product_last_modified_t = nil
85
+
86
+ VCR.use_cassette("fetch_product_#{product_code}", record: :all, match_requests_on: [:host, :path]) do
87
+ product.fetch
88
+ product_last_modified_t = product.last_modified_t
89
+ end
90
+
91
+ VCR.use_cassette("update_product_#{product_code}", record: :all, match_requests_on: [:host, :path]) do
92
+ product.update # Empty update are accepted, allow testing without altering data.
93
+ end
94
+
95
+ VCR.use_cassette("refetch_product_#{product_code}", record: :all, match_requests_on: [:host, :path]) do
96
+ product.fetch
97
+ end
98
+
99
+ refute_equal product_last_modified_t, product.last_modified_t
100
+ end
101
+ =end
102
+
103
+
104
+ # Additives
105
+
106
+ def test_it_fetches_additives
107
+ VCR.use_cassette("additives") do
108
+ additives = ::Openbeautyfacts::Additive.all(locale: 'fr') # FR to have riskiness
109
+ assert_equal "http://fr.openbeautyfacts.org/additif/e470-sels-de-sodium-potassium-calcium-d-acides-gras", additives.first.url
110
+ refute_nil additives.detect { |additive| !additive['riskiness'].nil? }
111
+ end
112
+ end
113
+
114
+ def test_it_fetches_additives_for_locale
115
+ VCR.use_cassette("additives_locale") do
116
+ additives = ::Openbeautyfacts::Additive.all(locale: 'fr')
117
+ assert_equal "http://fr.openbeautyfacts.org/additif/e470-sels-de-sodium-potassium-calcium-d-acides-gras", additives.first.url
118
+ end
119
+ end
120
+
121
+ def test_it_fetches_products_with_additive
122
+ additive = ::Openbeautyfacts::Additive.new("url" => "http://world.openbeautyfacts.org/additive/e539-sodium-thiosulfate")
123
+ VCR.use_cassette("products_with_additive") do
124
+ products_with_additive = additive.products(page: -1)
125
+ refute_empty products_with_additive
126
+ end
127
+ end
128
+
129
+ # Brands
130
+
131
+ def test_it_fetches_brands
132
+ VCR.use_cassette("brands") do
133
+ brands = ::Openbeautyfacts::Brand.all
134
+ assert_includes brands.map { |brand| brand['name'] }, "Garnier"
135
+ end
136
+ end
137
+
138
+ def test_it_fetches_brands_for_locale
139
+ VCR.use_cassette("brands_locale") do
140
+ brands = ::Openbeautyfacts::Brand.all(locale: 'fr')
141
+ assert_includes brands.map { |brand| brand['name'] }, "Sedapoux"
142
+ end
143
+ end
144
+
145
+ def test_it_fetches_products_for_brand
146
+ brand = ::Openbeautyfacts::Brand.new("url" => "http://world.openbeautyfacts.org/brand/sedapoux")
147
+ VCR.use_cassette("products_for_brand") do
148
+ products_for_brand = brand.products(page: -1)
149
+ refute_empty products_for_brand
150
+ end
151
+ end
152
+
153
+ # Product states
154
+
155
+ def test_it_fetches_product_states
156
+ VCR.use_cassette("product_states") do
157
+ product_states = ::Openbeautyfacts::ProductState.all
158
+ assert_equal "http://world.openbeautyfacts.org/state/empty", product_states.last.url
159
+ end
160
+ end
161
+
162
+ def test_it_fetches_product_states_for_locale
163
+ VCR.use_cassette("product_states_locale") do
164
+ product_states = ::Openbeautyfacts::ProductState.all(locale: 'fr')
165
+ assert_equal "http://fr.openbeautyfacts.org/etat/vide", product_states.last.url
166
+ end
167
+ end
168
+
169
+ def test_it_fetches_products_for_state
170
+ product_state = ::Openbeautyfacts::ProductState.new("url" => "http://world.openbeautyfacts.org/state/photos-uploaded", "products_count" => 22)
171
+ VCR.use_cassette("products_for_state") do
172
+ products_for_state = product_state.products(page: -1)
173
+ refute_empty products_for_state
174
+ end
175
+ end
176
+
177
+ # FAQ
178
+
179
+ def test_it_fetches_faq
180
+ VCR.use_cassette("faq") do
181
+ refute_empty ::Openbeautyfacts::Faq.items(locale: 'fr')
182
+ end
183
+ end
184
+
185
+ # Press
186
+
187
+ def test_it_fetches_press
188
+ VCR.use_cassette("press") do
189
+ refute_empty ::Openbeautyfacts::Press.items(locale: 'fr')
190
+ end
191
+ end
192
+
193
+ end