mat 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4661de4427e8006fece6e12523bdd86e7511a661
4
- data.tar.gz: 9701f7420de90d675426497a349ce3a0cab0fea2
3
+ metadata.gz: 7fd6c2b0fb8fda922ff65602717a64bc5236002f
4
+ data.tar.gz: 055392b1f18446daf417c4ba2c844b94082f7feb
5
5
  SHA512:
6
- metadata.gz: e22976351959a023dac8b9d91534e136f92ba2db22c8181283396c5f8cac055900a45dc8df00cdc36a59843778d7a5df9bb3b4844d0cdb149b0c2d00610e34c2
7
- data.tar.gz: 084b9d44bf2726c3174f4d4c2c40ea04969121d376adb21cd5ca731edd10fde9be08319370ef3d2bdc007242a929b3ef93fe823c99e55d97dab74b7dad39b31f
6
+ metadata.gz: badf4f8eaf1aa52286bfdde3bf8debcc816f33713c36689018287b1613f9d4e4a6f58bc0fbdcc3afc9688b0acc2e00e1ea5df31e9ef9e4383bd5ec4ea37b40c8
7
+ data.tar.gz: 3d4872e3e73e3a27604070b314ec29241629b55c14373e91c2815f7b9b6d55953481538a6b6c49b41e3ebb3253788b4a101241f88b7c4d202319559060ea702c
data/README.md CHANGED
@@ -31,7 +31,7 @@ food = Mat.all('Köttfärs').first
31
31
  # You can also pass a search query to the find method
32
32
  food = Mat.find('Köttfärs')
33
33
 
34
- # Get the `iron` value
34
+ # Get the `iron` value (method_missing is used to retrieve each nutrient)
35
35
  food.iron #=> 1.09
36
36
 
37
37
  # Find a specific food by its number
@@ -42,6 +42,94 @@ food.name #=> "Ister gris"
42
42
  Mat.nutrients
43
43
  ```
44
44
 
45
+ ### CLI
46
+
47
+ This gem comes with a simple command line interface.
48
+
49
+ ```ruby
50
+ # Finding foodstuff by its number
51
+ $ mat 55
52
+ {
53
+ "name": "Mimosasallad",
54
+ "number": 55,
55
+ "nutrientValues": {
56
+ "energyKj": 651,
57
+ "energyKcal": 156,
58
+ "protein": 2.4,
59
+ "fat": 12,
60
+ "carbohydrates": 8.9,
61
+ "fibres": 1.8,
62
+ "salt": 0.1,
63
+ "ash": 0.6,
64
+ "water": 74.2,
65
+ "alcohol": 0,
66
+ "monosaccharides": 3.3,
67
+ "disaccharides": 4.5,
68
+ "saccharose": 4.2,
69
+ "wholegrain": 0,
70
+ "saturatedFattyAcids": 3.8,
71
+ "fattyAcid40100": 0.5,
72
+ "fattyAcid120": 0.1,
73
+ "fattyAcid140": 0.5,
74
+ "fattyAcid160": 1.9,
75
+ "fattyAcid180": 0.7,
76
+ "fattyAcid200": 0,
77
+ "monounsaturatedFattyAcids": 2.6,
78
+ "fattyAcid161": 0.1,
79
+ "fattyAcid181": 2.5,
80
+ "sumPolyunsaturatedFattyAcids": 4.4,
81
+ "n6FattyAcids": 0.1,
82
+ "fattyAcid182": 3.9,
83
+ "fattyAcid204": 0,
84
+ "n3FattyAcids": 0,
85
+ "fattyAcid183": 0.5,
86
+ "longN3FattyAcids": 0,
87
+ "epa": 0,
88
+ "dpa": 0,
89
+ "dha": 0,
90
+ "transFattyAcids": 0.1,
91
+ "cholesterol": 50.3,
92
+ "retinolEquivalents": 76,
93
+ "retinol": 68,
94
+ "betacarotene": 92,
95
+ "vitaminD": 0.15,
96
+ "vitaminE": 1.24,
97
+ "vitaminK": 3,
98
+ "timamine": 0.09,
99
+ "riboflavin": 0.1,
100
+ "vitaminC": 12,
101
+ "niacin": 0.5,
102
+ "niacinEquivalents": 1,
103
+ "vitaminB6": 0.1,
104
+ "vitaminB12": 0.23,
105
+ "phosphorous": 55,
106
+ "folate": 23,
107
+ "iodine": 4,
108
+ "trash": 17,
109
+ "iron": 0.54,
110
+ "calcium": 31,
111
+ "potassium": 199,
112
+ "magnesium": 13,
113
+ "sodium": 45,
114
+ "selenium": 2.3,
115
+ "zink": 0.4
116
+ }
117
+ }
118
+
119
+ # You can also search for foodstuff
120
+ $ mat hasselnötter
121
+ [
122
+ {
123
+ "name": "Hasselnötter",
124
+ "number": 1558
125
+ },
126
+ {
127
+ "name": "Mjölkchoklad m hackade hasselnötter Schweizernöt",
128
+ "number": 1848
129
+ }
130
+ ]
131
+ ```
132
+
45
133
  ## Contributing
46
134
 
47
135
  1. Fork it
data/bin/mat CHANGED
@@ -1,20 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'mat'
4
- require 'json'
3
+ require_relative '../lib/mat/cli'
5
4
 
6
- def get_data(query)
7
- if query.match(/^\d+$/)
8
- Mat.api.foodstuff(query)
9
- else
10
- Mat.api.foodstuffs(query)
11
- end
12
- end
13
-
14
- def search(query)
15
- puts JSON.pretty_generate get_data(query)
16
- rescue Mat::HTTP::Exception
17
- warn "Nothing found"
18
- end
19
-
20
- search(ARGV.first) if ARGV.any?
5
+ Mat::CLI.search(ARGV.first) if ARGV.any?
data/lib/mat.rb CHANGED
@@ -9,7 +9,7 @@ require_relative "mat/version"
9
9
  module Mat
10
10
  class << self
11
11
  def api(config = nil)
12
- API.new(config).tap do |api|
12
+ (@api ||= API.new config).tap do |api|
13
13
  yield(api.config) if block_given?
14
14
  end
15
15
  end
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../mat'
4
+
5
+ require 'json'
6
+
7
+ module Mat
8
+ class CLI
9
+ class << self
10
+ def get_data(query)
11
+ if query.to_s.match(/^\d+$/)
12
+ Mat.api.foodstuff(query)
13
+ else
14
+ Mat.api.foodstuffs(query)
15
+ end
16
+ end
17
+
18
+ def search(query)
19
+ puts JSON.pretty_generate get_data(query)
20
+ rescue Mat::HTTP::Exception
21
+ warn "Nothing found"
22
+ end
23
+ end
24
+ end
25
+ end
26
+
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Mat
4
- VERSION = "0.0.2"
4
+ VERSION = "0.0.3"
5
5
  end
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.require_paths = ["lib"]
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.3"
25
- spec.add_development_dependency "minitest", "~> 4.7"
25
+ spec.add_development_dependency "minitest", "~> 5.0"
26
26
  spec.add_development_dependency "rake"
27
27
  spec.add_development_dependency "pry"
28
28
  end
@@ -0,0 +1,302 @@
1
+ [
2
+ {
3
+ "slug": "alcohol",
4
+ "name": "Alcohol",
5
+ "unit": "g"
6
+ },
7
+ {
8
+ "slug": "ash",
9
+ "name": "Ash",
10
+ "unit": "g"
11
+ },
12
+ {
13
+ "slug": "betacarotene",
14
+ "name": "Betacarotene",
15
+ "unit": "ug"
16
+ },
17
+ {
18
+ "slug": "calcium",
19
+ "name": "Calcium",
20
+ "unit": "mg"
21
+ },
22
+ {
23
+ "slug": "carbohydrates",
24
+ "name": "Carbohydrates",
25
+ "unit": "g"
26
+ },
27
+ {
28
+ "slug": "cholesterol",
29
+ "name": "Cholesterol",
30
+ "unit": "mg"
31
+ },
32
+ {
33
+ "slug": "dha",
34
+ "name": "DHA (fatty acid 22:6)",
35
+ "unit": "g"
36
+ },
37
+ {
38
+ "slug": "disaccharides",
39
+ "name": "Disaccharides",
40
+ "unit": "g"
41
+ },
42
+ {
43
+ "slug": "dpa",
44
+ "name": "DPA (fatty acid 22:5)",
45
+ "unit": "g"
46
+ },
47
+ {
48
+ "slug": "energyKcal",
49
+ "name": "Energy kCal",
50
+ "unit": "kcal"
51
+ },
52
+ {
53
+ "slug": "energyKj",
54
+ "name": "Energy kJ",
55
+ "unit": "kj"
56
+ },
57
+ {
58
+ "slug": "epa",
59
+ "name": "EPA (fatty acid 20:5)",
60
+ "unit": "g"
61
+ },
62
+ {
63
+ "slug": "fat",
64
+ "name": "Fat",
65
+ "unit": "g"
66
+ },
67
+ {
68
+ "slug": "fattyAcid120",
69
+ "name": "Fatty acid 12:0",
70
+ "unit": "g"
71
+ },
72
+ {
73
+ "slug": "fattyAcid140",
74
+ "name": "Fatty acid 14:0",
75
+ "unit": "g"
76
+ },
77
+ {
78
+ "slug": "fattyAcid160",
79
+ "name": "Fatty acid 16:0",
80
+ "unit": "g"
81
+ },
82
+ {
83
+ "slug": "fattyAcid161",
84
+ "name": "Fatty acid 16:1",
85
+ "unit": "g"
86
+ },
87
+ {
88
+ "slug": "fattyAcid180",
89
+ "name": "Fatty acid 18:0",
90
+ "unit": "g"
91
+ },
92
+ {
93
+ "slug": "fattyAcid181",
94
+ "name": "Fatty acid 18:1",
95
+ "unit": "g"
96
+ },
97
+ {
98
+ "slug": "fattyAcid182",
99
+ "name": "Fatty acid 18:2",
100
+ "unit": "g"
101
+ },
102
+ {
103
+ "slug": "fattyAcid183",
104
+ "name": "Fatty acid 18:3",
105
+ "unit": "g"
106
+ },
107
+ {
108
+ "slug": "fattyAcid200",
109
+ "name": "Fatty acid 20:0",
110
+ "unit": "g"
111
+ },
112
+ {
113
+ "slug": "fattyAcid204",
114
+ "name": "Fatty acid 20:4",
115
+ "unit": "g"
116
+ },
117
+ {
118
+ "slug": "fattyAcid40100",
119
+ "name": "Fatty acid 4:0-10:0",
120
+ "unit": "g"
121
+ },
122
+ {
123
+ "slug": "fibres",
124
+ "name": "Fibres",
125
+ "unit": "g"
126
+ },
127
+ {
128
+ "slug": "folate",
129
+ "name": "Folate",
130
+ "unit": "ug"
131
+ },
132
+ {
133
+ "slug": "iodine",
134
+ "name": "Iodine",
135
+ "unit": "ug"
136
+ },
137
+ {
138
+ "slug": "iron",
139
+ "name": "Iron",
140
+ "unit": "mg"
141
+ },
142
+ {
143
+ "slug": "longN3FattyAcids",
144
+ "name": "Sum long n-3 fatty acids",
145
+ "unit": "g"
146
+ },
147
+ {
148
+ "slug": "magnesium",
149
+ "name": "Magnesium",
150
+ "unit": "mg"
151
+ },
152
+ {
153
+ "slug": "monosaccharides",
154
+ "name": "Monosaccharides",
155
+ "unit": "g"
156
+ },
157
+ {
158
+ "slug": "monounsaturatedFattyAcids",
159
+ "name": "Sum monounsaturated fatty acids",
160
+ "unit": "g"
161
+ },
162
+ {
163
+ "slug": "n3FattyAcids",
164
+ "name": "Sum n-3 fatty acids",
165
+ "unit": "g"
166
+ },
167
+ {
168
+ "slug": "n6FattyAcids",
169
+ "name": "Sum n-6 fatty acids",
170
+ "unit": "g"
171
+ },
172
+ {
173
+ "slug": "niacin",
174
+ "name": "Niacin",
175
+ "unit": "mg"
176
+ },
177
+ {
178
+ "slug": "niacinEquivalents",
179
+ "name": "Niacin equivalents",
180
+ "unit": ""
181
+ },
182
+ {
183
+ "slug": "phosphorous",
184
+ "name": "Phosphorous",
185
+ "unit": "mg"
186
+ },
187
+ {
188
+ "slug": "potassium",
189
+ "name": "Potassium",
190
+ "unit": "mg"
191
+ },
192
+ {
193
+ "slug": "protein",
194
+ "name": "Protein",
195
+ "unit": "g"
196
+ },
197
+ {
198
+ "slug": "retinol",
199
+ "name": "Retinol",
200
+ "unit": "ug"
201
+ },
202
+ {
203
+ "slug": "retinolEquivalents",
204
+ "name": "Retinol equivalents",
205
+ "unit": ""
206
+ },
207
+ {
208
+ "slug": "riboflavin",
209
+ "name": "Riboflavin",
210
+ "unit": "mg"
211
+ },
212
+ {
213
+ "slug": "saccharose",
214
+ "name": "Saccharose",
215
+ "unit": "g"
216
+ },
217
+ {
218
+ "slug": "salt",
219
+ "name": "Salt",
220
+ "unit": "g"
221
+ },
222
+ {
223
+ "slug": "saturatedFattyAcids",
224
+ "name": "Sum saturated fatty acids",
225
+ "unit": "g"
226
+ },
227
+ {
228
+ "slug": "selenium",
229
+ "name": "Selenium",
230
+ "unit": "ug"
231
+ },
232
+ {
233
+ "slug": "sodium",
234
+ "name": "Sodium",
235
+ "unit": "gm"
236
+ },
237
+ {
238
+ "slug": "sumPolyunsaturatedFattyAcids",
239
+ "name": "Sum polyunsaturated fatty acids",
240
+ "unit": "g"
241
+ },
242
+ {
243
+ "slug": "timamine",
244
+ "name": "Timamine",
245
+ "unit": "mg"
246
+ },
247
+ {
248
+ "slug": "transFattyAcids",
249
+ "name": "Sum trans fatty acids",
250
+ "unit": "g"
251
+ },
252
+ {
253
+ "slug": "trash",
254
+ "name": "trash",
255
+ "unit": "percentage"
256
+ },
257
+ {
258
+ "slug": "vitaminB12",
259
+ "name": "Vitamin B12",
260
+ "unit": "ug"
261
+ },
262
+ {
263
+ "slug": "vitaminB6",
264
+ "name": "Vitamin B6",
265
+ "unit": "mg"
266
+ },
267
+ {
268
+ "slug": "vitaminC",
269
+ "name": "Vitamin C",
270
+ "unit": "mg"
271
+ },
272
+ {
273
+ "slug": "vitaminD",
274
+ "name": "Vitamin D",
275
+ "unit": "ug"
276
+ },
277
+ {
278
+ "slug": "vitaminE",
279
+ "name": "Vitamin E",
280
+ "unit": "mg"
281
+ },
282
+ {
283
+ "slug": "vitaminK",
284
+ "name": "Vitamin K",
285
+ "unit": "ug"
286
+ },
287
+ {
288
+ "slug": "water",
289
+ "name": "Water",
290
+ "unit": "g"
291
+ },
292
+ {
293
+ "slug": "wholegrain",
294
+ "name": "Wholegrain sum",
295
+ "unit": "g"
296
+ },
297
+ {
298
+ "slug": "zink",
299
+ "name": "Zink",
300
+ "unit": "mg"
301
+ }
302
+ ]
@@ -0,0 +1,40 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../../spec_helper'
4
+
5
+ describe "Config" do
6
+ subject {
7
+ Mat::API::Config.new do |c|
8
+ c.base_url = base_url
9
+ end
10
+ }
11
+
12
+ let(:base_url) { 'http://config.test/' }
13
+
14
+ it "returns the base_url" do
15
+ subject.base_url.must_equal 'http://config.test/'
16
+ end
17
+
18
+ describe "json_parser" do
19
+ it "is a lambda by default" do
20
+ subject.json_parser.
21
+ parse('{"foo":123}')['foo'].must_equal 123
22
+ end
23
+
24
+ it "can be changed" do
25
+ subject.json_parser = "foo"
26
+ subject.json_parser.must_equal "foo"
27
+ end
28
+ end
29
+
30
+ describe "http_client" do
31
+ it "is Net::HTTP by default" do
32
+ subject.http_client.must_equal Mat::HTTP
33
+ end
34
+
35
+ it "can be changed" do
36
+ subject.http_client = "bar"
37
+ subject.http_client.must_equal "bar"
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../spec_helper'
4
+
5
+ describe Mat::CLI do
6
+ subject { Mat::CLI }
7
+
8
+ describe "get_data" do
9
+ it "finds foodstuff by number" do
10
+ Mat.api.stub(:foodstuff, "data") do
11
+ subject.get_data(123).must_equal "data"
12
+ end
13
+ end
14
+
15
+ it "queries foodstuffs by name" do
16
+ Mat.api.stub(:foodstuffs, "search result") do
17
+ subject.get_data('Mjölk').must_equal "search result"
18
+ end
19
+ end
20
+ end
21
+
22
+ describe "search" do
23
+ it "pretty formats the returned JSON" do
24
+ subject.stub(:get_data, ->(q) { { foo:'bar' } }) do
25
+ ->{ subject.search('foo') }.must_output "{\n \"foo\": \"bar\"\n}\n"
26
+ end
27
+ end
28
+
29
+ it "prints a warning on exception" do
30
+ subject.stub(:get_data, ->(q){ raise Mat::HTTP::Exception }) do
31
+ ->{ subject.search('foo') }.must_output nil, "Nothing found\n"
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../spec_helper'
4
+
5
+ describe Mat::Nutrient do
6
+ subject { Mat::Nutrient }
7
+
8
+ let(:fixture_data) { parsed_fixture('nutrient') }
9
+ let(:nutrients) { fixture_data.map { |d| subject.new(d) } }
10
+ let(:nutrient) { nutrients[4] }
11
+
12
+ describe "initialize" do
13
+ it "takes data as input" do
14
+ subject.new("foo").data.must_equal "foo"
15
+ end
16
+ end
17
+
18
+ describe "slug" do
19
+ it "returns the slug from the data" do
20
+ nutrient.slug.must_equal "carbohydrates"
21
+ end
22
+ end
23
+
24
+ describe "name" do
25
+ it "returns the name from the data" do
26
+ nutrient.name.must_equal "Carbohydrates"
27
+ end
28
+ end
29
+
30
+ describe "unit" do
31
+ it "returns the unit from the data" do
32
+ nutrient.unit.must_equal "g"
33
+ end
34
+ end
35
+ end
@@ -12,8 +12,8 @@ describe Mat do
12
12
  api.config.base_url.must_equal "api.test"
13
13
  end
14
14
 
15
- it "does not memoize the api client" do
16
- subject.api.object_id.wont_equal subject.api.object_id
15
+ it "memoizes the api client" do
16
+ subject.api.object_id.must_equal subject.api.object_id
17
17
  end
18
18
 
19
19
  it "can configure the base_url" do
@@ -1,10 +1,11 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require "minitest/autorun"
3
4
  require "minitest/spec"
4
5
  require "minitest/pride"
5
- require "minitest/autorun"
6
6
 
7
7
  require_relative "../lib/mat"
8
+ require_relative "../lib/mat/cli"
8
9
 
9
10
  $loaded_fixtures = {}
10
11
  $parsed_fixtures = {}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Hellberg
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: '4.7'
33
+ version: '5.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: '4.7'
40
+ version: '5.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -84,16 +84,20 @@ files:
84
84
  - lib/mat.rb
85
85
  - lib/mat/api.rb
86
86
  - lib/mat/api/config.rb
87
+ - lib/mat/cli.rb
87
88
  - lib/mat/foodstuff.rb
88
89
  - lib/mat/http.rb
89
90
  - lib/mat/nutrient.rb
90
91
  - lib/mat/version.rb
91
92
  - mat.gemspec
92
- - spec/fixtures/foodstuff/24_nutrient_carbohydrates.json
93
93
  - spec/fixtures/foodstuff/44.json
94
+ - spec/fixtures/nutrient.json
95
+ - spec/mat/api/config_spec.rb
94
96
  - spec/mat/api_spec.rb
97
+ - spec/mat/cli_spec.rb
95
98
  - spec/mat/foodstuff_spec.rb
96
99
  - spec/mat/http_spec.rb
100
+ - spec/mat/nutrient_spec.rb
97
101
  - spec/mat/version_spec.rb
98
102
  - spec/mat_spec.rb
99
103
  - spec/spec_helper.rb
@@ -122,12 +126,14 @@ signing_key:
122
126
  specification_version: 4
123
127
  summary: A small API client for the Mat API
124
128
  test_files:
125
- - spec/fixtures/foodstuff/24_nutrient_carbohydrates.json
126
129
  - spec/fixtures/foodstuff/44.json
130
+ - spec/fixtures/nutrient.json
131
+ - spec/mat/api/config_spec.rb
127
132
  - spec/mat/api_spec.rb
133
+ - spec/mat/cli_spec.rb
128
134
  - spec/mat/foodstuff_spec.rb
129
135
  - spec/mat/http_spec.rb
136
+ - spec/mat/nutrient_spec.rb
130
137
  - spec/mat/version_spec.rb
131
138
  - spec/mat_spec.rb
132
139
  - spec/spec_helper.rb
133
- has_rdoc:
@@ -1,5 +0,0 @@
1
- {
2
- "name": "Gravlaxsås",
3
- "foodstuffNumber": 24,
4
- "carbohydrates": 13.1
5
- }