food 0.0.2
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 +7 -0
- data/README.rdoc +6 -0
- data/bin/food +28 -0
- data/food.rdoc +5 -0
- data/lib/food.rb +2 -0
- data/lib/food/food_finder.rb +83 -0
- data/lib/food/version.rb +3 -0
- metadata +141 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f0383e842d05ddcb1315aed5662b06c7b996caf3
|
4
|
+
data.tar.gz: 1fd8c21218864d33a8f9617099db85f43781ef1f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: aa2a93a79ad6f780e35e8a343b785d9a520da790f620ffa566f3380ae4c1cac7490672f6e81e39e278346d899be56eb7fb333db5034c4ceb9d54572e05f91d54
|
7
|
+
data.tar.gz: b03584bf90433ed469bbb4f24aa998647b7360c0ff20d5afd7b6fb19a98d0d919fd254a8bc5b9811b1d1331e88562d1876b6b61b20e81d44292121fe8b24c4df
|
data/README.rdoc
ADDED
data/bin/food
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'gli'
|
3
|
+
require 'netrc'
|
4
|
+
require 'food'
|
5
|
+
|
6
|
+
include GLI::App
|
7
|
+
|
8
|
+
program_desc 'Query nutritional information for food.'
|
9
|
+
|
10
|
+
version Food::VERSION
|
11
|
+
|
12
|
+
desc 'Get nutritional info for a list of food items.'
|
13
|
+
arg_name 'Space-separated list of foods'
|
14
|
+
command :lookup do |c|
|
15
|
+
c.action do |global_options,options,args|
|
16
|
+
args.each do |item|
|
17
|
+
puts FoodFinder.find(item)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
pre do
|
23
|
+
consumer_key, shared_secret = Netrc.read["fatsecret.com"]
|
24
|
+
FatSecret.init(consumer_key, shared_secret)
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
exit run(ARGV)
|
data/food.rdoc
ADDED
data/lib/food.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'fatsecret'
|
2
|
+
require 'securerandom'
|
3
|
+
|
4
|
+
class FoodFinder
|
5
|
+
def self.find(name)
|
6
|
+
matching_food = find_food(name)
|
7
|
+
|
8
|
+
if matching_food.first == :found
|
9
|
+
food_detail(matching_food.last)
|
10
|
+
else
|
11
|
+
puts matching_food.last
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def self.with_retry(&block)
|
18
|
+
while true
|
19
|
+
response = block.call
|
20
|
+
break if error_free?(response)
|
21
|
+
sleep 5
|
22
|
+
end
|
23
|
+
raise StandardError.new(response) unless error_free?(response)
|
24
|
+
response
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.error_free?(response)
|
28
|
+
!response.has_key? 'error'
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.find_food(name)
|
32
|
+
matching_food = with_retry do
|
33
|
+
FatSecret.search_food(name)
|
34
|
+
end
|
35
|
+
|
36
|
+
return [:not_found, "#{name}: not found"] if matching_food["foods"]["total_results"].to_i == 0
|
37
|
+
[:found, matching_food]
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.food_detail(matching_food)
|
41
|
+
food_detail = with_retry do
|
42
|
+
FatSecret.food(matching_food_id(matching_food))
|
43
|
+
end
|
44
|
+
|
45
|
+
(food_detail["food"]["brand_name"] || "") + " " +
|
46
|
+
food_detail["food"]["food_name"] + ": " + short_info(food_detail)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.matching_food_id(matching_food)
|
50
|
+
food = matching_food["foods"]["food"]
|
51
|
+
if food.is_a? Hash
|
52
|
+
food["food_id"]
|
53
|
+
else
|
54
|
+
food.first["food_id"]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.short_info(food_detail)
|
59
|
+
first_serving = servings(food_detail).first
|
60
|
+
"%s %s cal %s crb %s fat %s fib %s pro" % [first_serving["serving_description"],
|
61
|
+
first_serving["calories"],
|
62
|
+
first_serving["carbohydrate"],
|
63
|
+
first_serving["fat"],
|
64
|
+
first_serving["fiber"],
|
65
|
+
first_serving["protein"]]
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.cals_per_serving(food_detail)
|
69
|
+
servings(food_detail).
|
70
|
+
map { |serving| serving["calories"] + "/" + serving["serving_description"] }.
|
71
|
+
join(", ")
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.servings(food_detail)
|
75
|
+
serving_listing = food_detail["food"]["servings"]["serving"]
|
76
|
+
|
77
|
+
if serving_listing.is_a? Hash
|
78
|
+
[serving_listing]
|
79
|
+
else
|
80
|
+
serving_listing
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
data/lib/food/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: food
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jon Roes
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-10-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rdoc
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aruba
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: netrc
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: fatsecret-api
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: gli
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 2.5.6
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 2.5.6
|
97
|
+
description:
|
98
|
+
email: jroes@jroes.net
|
99
|
+
executables:
|
100
|
+
- food
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files:
|
103
|
+
- README.rdoc
|
104
|
+
- food.rdoc
|
105
|
+
files:
|
106
|
+
- bin/food
|
107
|
+
- lib/food/version.rb
|
108
|
+
- lib/food/food_finder.rb
|
109
|
+
- lib/food.rb
|
110
|
+
- README.rdoc
|
111
|
+
- food.rdoc
|
112
|
+
homepage: http://github.com/jroes/food
|
113
|
+
licenses: []
|
114
|
+
metadata: {}
|
115
|
+
post_install_message:
|
116
|
+
rdoc_options:
|
117
|
+
- --title
|
118
|
+
- food
|
119
|
+
- --main
|
120
|
+
- README.rdoc
|
121
|
+
- -ri
|
122
|
+
require_paths:
|
123
|
+
- lib
|
124
|
+
- lib
|
125
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - '>='
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
130
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - '>='
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
requirements: []
|
136
|
+
rubyforge_project:
|
137
|
+
rubygems_version: 2.0.2
|
138
|
+
signing_key:
|
139
|
+
specification_version: 4
|
140
|
+
summary: Query nutritional information for food.
|
141
|
+
test_files: []
|