punchfork 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,6 +11,7 @@ configure your API key in config/initializers/punchfork.rb
11
11
 
12
12
  Punchfork.setup do |config|
13
13
  config.api_key = 'your-api-key'
14
+ config.protocol = 'https' # defaults to http
14
15
  end
15
16
 
16
17
  = Usage
@@ -18,16 +19,20 @@ configure your API key in config/initializers/punchfork.rb
18
19
  Search for recipes using ingredients:
19
20
 
20
21
  search = Punchfork.search(:garlic, :tomatoes)
21
- search['count'] # => 10
22
- search['recipes'].length # => 10
22
+ search.count # => 10
23
+ search.recipes.length # => 10
23
24
 
24
25
  Any options you pass to the search method will automatically be appended to the querystring sent to punchfork.com.
25
26
  For example:
26
27
  search = Punchfork.search(:tomato, count:50)
27
- search['count'] # => 50
28
+ search.count # => 50
28
29
 
29
30
  Check out the full set of options at http://punchfork.com/api#apidocs
30
31
 
32
+ = Contact
33
+
34
+ If you have any issues or questions, please open a ticket through github: https://github.com/gabeodess/Punchfork/issues
35
+
31
36
  = License
32
37
 
33
38
  This project rocks and uses MIT-LICENSE.
@@ -4,6 +4,8 @@ module Punchfork
4
4
 
5
5
  autoload :Configuration, 'punchfork/configuration'
6
6
  autoload :Base, 'punchfork/base'
7
+ autoload :Search, 'punchfork/search'
8
+ autoload :Recipe, 'punchfork/recipe'
7
9
 
8
10
  extend Configuration
9
11
  extend Base
@@ -1,13 +1,22 @@
1
1
  module Punchfork
2
2
  module Base
3
-
3
+
4
+ # Returns a Punchfork::Search object. Accepts any number of arguments that will be used as ingredients in your search as well as an options hash.
5
+ # Example: Punchfork.search(:tomatoes, :garlic, {count:5, protocol:'https'})
4
6
  def search(*args)
5
- options = args.extract_options!
6
- search_uri.query = ["key=#{api_key}", "q=#{URI.escape(args.join(','))}", *options.map{ |k,v| "#{k}=#{v}" }].join('&')
7
- p ["punchfork search", search_uri.to_s] if Rails.env.test?
8
- JSON.load(Net::HTTP.get_response(search_uri).body)
7
+ Punchfork::Search.new(JSON.load(Net::HTTP.get_response(search_url(*args)).body))
9
8
  end
9
+
10
+ # used by #search to query punchfork.com. Returns a URI object.
11
+ def search_url(*args)
12
+ options = args.extract_options!.stringify_keys!
13
+ protocol = (options['protocol'] || self.protocol).to_s
10
14
 
11
- end
12
-
15
+ uri = search_uri
16
+ uri.scheme = protocol
17
+ uri.query = ["key=#{api_key}", "q=#{URI.escape(args.join(','))}", *options.map{ |k,v| "#{k}=#{v}" }].join('&')
18
+ return uri
19
+ end
20
+
21
+ end
13
22
  end
@@ -1,8 +1,9 @@
1
1
  module Punchfork
2
2
  module Configuration
3
3
 
4
- mattr_accessor :api_key
4
+ mattr_accessor :api_key, :protocol
5
5
  @@api_key = ENV['PUNCHFORK_API_KEY'] || ENV['KEY']
6
+ @@protocol ||= ENV['PUNCHFORK_PROTOCOL'] || 'http'
6
7
 
7
8
  mattr_reader :search_uri
8
9
  @@search_uri = URI.parse('http://api.punchfork.com/recipes')
@@ -0,0 +1,19 @@
1
+ module Punchfork
2
+
3
+ # Wrapper for recipe search results. Provides dot syntax support.
4
+ class Recipe
5
+
6
+ def initialize(*args)
7
+ @hash = args[0]
8
+ @attributes = {}
9
+ @hash.each do |k, v|
10
+ instance_variable_set("@#{k}", v)
11
+ self.class.class_eval{attr_reader k}
12
+ @attributes[k] = v
13
+ end
14
+ end
15
+
16
+ attr_reader :attributes
17
+
18
+ end
19
+ end
@@ -0,0 +1,28 @@
1
+ module Punchfork
2
+
3
+ # Wrapper for search results providing dot syntax
4
+ class Search
5
+
6
+ def initialize(*args)
7
+ @hash = args[0]
8
+ @attributes = {}
9
+
10
+ @hash.each do |k, v|
11
+ instance_variable_set("@#{k}", v)
12
+ self.class.class_eval{attr_reader k}
13
+ @attributes[k] = v
14
+ end
15
+
16
+ @recipes = @recipes.map{ |recipe_hash| Recipe.new(recipe_hash) }
17
+ end
18
+
19
+ attr_reader :attributes
20
+
21
+ def [](key)
22
+ @hash[key]
23
+ end
24
+
25
+ end
26
+
27
+
28
+ end
@@ -1,3 +1,3 @@
1
1
  module Punchfork
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -0,0 +1,16 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended to check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(:version => 0) do
15
+
16
+ end
Binary file
@@ -0,0 +1,13 @@
1
+  (2.0ms) select sqlite_version(*)
2
+  (1.3ms) CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL)
3
+  (0.0ms) PRAGMA index_list("schema_migrations")
4
+  (1.1ms) CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
5
+  (0.3ms) select sqlite_version(*)
6
+  (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations"
7
+  (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" 
8
+  (0.1ms) select sqlite_version(*)
9
+  (2.5ms) CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL) 
10
+  (0.0ms) PRAGMA index_list("schema_migrations")
11
+  (1.3ms) CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
12
+  (0.2ms) SELECT version FROM "schema_migrations"
13
+  (1.7ms) INSERT INTO "schema_migrations" (version) VALUES ('0')
@@ -1,104 +1,183 @@
1
1
   (0.3ms) begin transaction
2
2
   (0.1ms) rollback transaction
3
+  (0.1ms) begin transaction
4
+  (0.1ms) rollback transaction
5
+  (0.1ms) begin transaction
6
+  (0.1ms) rollback transaction
3
7
   (0.3ms) begin transaction
4
8
   (0.1ms) rollback transaction
9
+  (0.1ms) begin transaction
10
+  (0.1ms) rollback transaction
11
+  (0.1ms) begin transaction
12
+  (0.0ms) rollback transaction
13
+  (0.5ms) begin transaction
14
+  (0.1ms) rollback transaction
15
+  (0.1ms) begin transaction
16
+  (0.1ms) rollback transaction
5
17
   (0.0ms) begin transaction
6
18
   (0.0ms) rollback transaction
7
19
   (0.3ms) begin transaction
8
20
   (0.1ms) rollback transaction
9
21
   (0.1ms) begin transaction
22
+  (0.2ms) rollback transaction
23
+  (0.1ms) begin transaction
10
24
   (0.1ms) rollback transaction
11
25
   (0.3ms) begin transaction
12
26
   (0.1ms) rollback transaction
13
27
   (0.1ms) begin transaction
28
+  (0.1ms) rollback transaction
29
+  (0.1ms) begin transaction
14
30
   (0.0ms) rollback transaction
15
31
   (0.3ms) begin transaction
32
+  (0.1ms) rollback transaction
33
+  (0.0ms) begin transaction
34
+  (0.1ms) rollback transaction
35
+  (0.1ms) begin transaction
36
+  (0.1ms) rollback transaction
37
+  (0.3ms) begin transaction
38
+  (0.1ms) rollback transaction
39
+  (0.0ms) begin transaction
40
+  (0.1ms) rollback transaction
41
+  (0.0ms) begin transaction
16
42
   (0.0ms) rollback transaction
43
+  (0.4ms) begin transaction
44
+  (0.1ms) rollback transaction
45
+  (0.1ms) begin transaction
46
+  (0.1ms) rollback transaction
17
47
   (0.0ms) begin transaction
18
48
   (0.0ms) rollback transaction
19
49
   (0.3ms) begin transaction
20
50
   (0.0ms) rollback transaction
21
51
   (0.0ms) begin transaction
22
52
   (0.0ms) rollback transaction
53
+  (0.0ms) begin transaction
54
+  (0.0ms) rollback transaction
23
55
   (0.3ms) begin transaction
24
56
   (0.1ms) rollback transaction
57
+  (0.0ms) begin transaction
58
+  (0.1ms) rollback transaction
25
59
   (0.1ms) begin transaction
26
60
   (0.1ms) rollback transaction
27
61
   (0.3ms) begin transaction
28
-  (0.0ms) rollback transaction
62
+  (0.1ms) rollback transaction
29
63
   (0.0ms) begin transaction
30
-  (0.0ms) rollback transaction
31
-  (0.4ms) begin transaction
32
64
   (0.1ms) rollback transaction
33
65
   (0.1ms) begin transaction
34
-  (0.0ms) rollback transaction
35
-  (0.3ms) begin transaction
36
66
   (0.1ms) rollback transaction
37
67
   (0.1ms) begin transaction
38
68
   (0.0ms) rollback transaction
39
69
   (0.3ms) begin transaction
40
-  (0.0ms) rollback transaction
70
+  (0.1ms) rollback transaction
71
+  (0.0ms) begin transaction
72
+  (0.1ms) rollback transaction
73
+  (0.1ms) begin transaction
74
+  (0.1ms) rollback transaction
41
75
   (0.1ms) begin transaction
42
-  (0.0ms) rollback transaction
43
-  (0.3ms) begin transaction
44
76
   (0.1ms) rollback transaction
45
77
   (0.0ms) begin transaction
46
78
   (0.0ms) rollback transaction
47
79
   (0.3ms) begin transaction
48
80
   (0.1ms) rollback transaction
81
+  (0.0ms) begin transaction
82
+  (0.1ms) rollback transaction
49
83
   (0.1ms) begin transaction
50
-  (0.0ms) rollback transaction
84
+  (0.1ms) rollback transaction
85
+  (0.0ms) begin transaction
86
+
87
+ ***** Debugger requested, but was not available (ensure ruby-debug is listed in Gemfile/installed as gem): Start server with --debugger to enable *****
88
+
89
+  (0.1ms) rollback transaction
90
+  (0.1ms) begin transaction
91
+  (0.1ms) rollback transaction
51
92
   (0.3ms) begin transaction
52
93
   (0.1ms) rollback transaction
94
+  (0.0ms) begin transaction
95
+  (0.1ms) rollback transaction
53
96
   (0.1ms) begin transaction
97
+  (0.1ms) rollback transaction
98
+  (0.0ms) begin transaction
99
+  (0.0ms) rollback transaction
100
+  (0.0ms) begin transaction
54
101
   (0.0ms) rollback transaction
55
102
   (0.3ms) begin transaction
56
103
   (0.1ms) rollback transaction
57
104
   (0.1ms) begin transaction
58
105
   (0.1ms) rollback transaction
59
-  (0.3ms) begin transaction
106
+  (0.0ms) begin transaction
60
107
   (0.1ms) rollback transaction
61
108
   (0.1ms) begin transaction
62
109
   (0.0ms) rollback transaction
110
+  (0.0ms) begin transaction
111
+  (0.0ms) rollback transaction
63
112
   (0.3ms) begin transaction
64
113
   (0.1ms) rollback transaction
65
114
   (0.1ms) begin transaction
66
-  (0.0ms) rollback transaction
67
-  (0.3ms) begin transaction
68
115
   (0.1ms) rollback transaction
69
116
   (0.1ms) begin transaction
70
117
   (0.1ms) rollback transaction
118
+  (0.1ms) begin transaction
119
+  (0.0ms) rollback transaction
120
+  (0.1ms) begin transaction
121
+  (0.0ms) rollback transaction
71
122
   (0.3ms) begin transaction
72
123
   (0.1ms) rollback transaction
73
-  (0.2ms) begin transaction
124
+  (0.0ms) begin transaction
125
+  (0.1ms) rollback transaction
126
+  (0.0ms) begin transaction
74
127
   (0.1ms) rollback transaction
128
+  (0.0ms) begin transaction
129
+  (0.0ms) rollback transaction
130
+  (0.0ms) begin transaction
131
+  (0.0ms) rollback transaction
75
132
   (0.3ms) begin transaction
76
133
   (0.1ms) rollback transaction
77
134
   (0.1ms) begin transaction
78
135
   (0.1ms) rollback transaction
79
-  (0.3ms) begin transaction
80
-  (0.1ms) rollback transaction
81
136
   (0.1ms) begin transaction
82
137
   (0.1ms) rollback transaction
138
+  (0.0ms) begin transaction
139
+  (0.0ms) rollback transaction
140
+  (0.0ms) begin transaction
141
+  (0.0ms) rollback transaction
142
+  (0.0ms) begin transaction
143
+  (0.0ms) rollback transaction
83
144
   (0.3ms) begin transaction
84
145
   (0.1ms) rollback transaction
85
146
   (0.1ms) begin transaction
86
147
   (0.1ms) rollback transaction
87
-  (0.3ms) begin transaction
88
-  (0.1ms) rollback transaction
89
148
   (0.1ms) begin transaction
90
149
   (0.1ms) rollback transaction
150
+  (0.0ms) begin transaction
151
+  (0.0ms) rollback transaction
152
+  (0.0ms) begin transaction
153
+  (0.0ms) rollback transaction
154
+  (0.0ms) begin transaction
155
+  (0.0ms) rollback transaction
91
156
   (0.3ms) begin transaction
92
157
   (0.1ms) rollback transaction
93
158
   (0.1ms) begin transaction
159
+  (0.1ms) rollback transaction
160
+  (0.0ms) begin transaction
161
+  (0.0ms) rollback transaction
162
+  (0.0ms) begin transaction
163
+  (0.1ms) rollback transaction
164
+  (0.0ms) begin transaction
165
+  (0.0ms) rollback transaction
166
+  (0.0ms) begin transaction
167
+  (0.0ms) rollback transaction
168
+  (0.0ms) begin transaction
94
169
   (0.0ms) rollback transaction
95
170
   (0.3ms) begin transaction
96
171
   (0.1ms) rollback transaction
97
172
   (0.1ms) begin transaction
98
173
   (0.1ms) rollback transaction
99
-  (0.3ms) begin transaction
100
-  (0.1ms) rollback transaction
101
174
   (0.1ms) begin transaction
175
+  (0.1ms) rollback transaction
176
+  (0.0ms) begin transaction
177
+  (0.1ms) rollback transaction
178
+  (0.0ms) begin transaction
179
+  (0.0ms) rollback transaction
180
+  (0.0ms) begin transaction
102
181
   (0.0ms) rollback transaction
103
182
   (0.0ms) begin transaction
104
183
   (0.0ms) rollback transaction
@@ -106,6 +185,14 @@
106
185
   (0.1ms) rollback transaction
107
186
   (0.1ms) begin transaction
108
187
   (0.1ms) rollback transaction
188
+  (0.1ms) begin transaction
189
+  (0.1ms) rollback transaction
190
+  (0.1ms) begin transaction
191
+  (0.1ms) rollback transaction
192
+  (0.0ms) begin transaction
193
+  (0.0ms) rollback transaction
194
+  (0.0ms) begin transaction
195
+  (0.0ms) rollback transaction
109
196
   (0.0ms) begin transaction
110
197
   (0.0ms) rollback transaction
111
198
   (0.3ms) begin transaction
@@ -113,22 +200,40 @@
113
200
   (0.1ms) begin transaction
114
201
   (0.1ms) rollback transaction
115
202
   (0.1ms) begin transaction
203
+  (0.0ms) rollback transaction
204
+  (0.1ms) begin transaction
116
205
   (0.1ms) rollback transaction
117
-  (0.3ms) begin transaction
118
-  (0.1ms) rollback transaction
206
+  (0.0ms) begin transaction
207
+  (0.0ms) rollback transaction
119
208
   (0.1ms) begin transaction
120
209
   (0.0ms) rollback transaction
121
210
   (0.0ms) begin transaction
122
211
   (0.0ms) rollback transaction
123
212
   (0.3ms) begin transaction
213
+  (0.2ms) rollback transaction
214
+  (0.1ms) begin transaction
124
215
   (0.1ms) rollback transaction
125
216
   (0.1ms) begin transaction
126
217
   (0.1ms) rollback transaction
127
218
   (0.1ms) begin transaction
128
219
   (0.1ms) rollback transaction
129
-  (0.3ms) begin transaction
220
+  (0.1ms) begin transaction
130
221
   (0.1ms) rollback transaction
131
222
   (0.1ms) begin transaction
223
+  (0.0ms) rollback transaction
224
+  (0.1ms) begin transaction
225
+  (0.1ms) rollback transaction
226
+  (0.3ms) begin transaction
227
+  (0.1ms) rollback transaction
228
+  (0.0ms) begin transaction
132
229
   (0.1ms) rollback transaction
133
230
   (0.1ms) begin transaction
134
231
   (0.1ms) rollback transaction
232
+  (0.0ms) begin transaction
233
+  (0.1ms) rollback transaction
234
+  (0.0ms) begin transaction
235
+  (0.0ms) rollback transaction
236
+  (0.0ms) begin transaction
237
+  (0.0ms) rollback transaction
238
+  (0.0ms) begin transaction
239
+  (0.0ms) rollback transaction
@@ -5,6 +5,21 @@ class PunchforkTest < ActiveSupport::TestCase
5
5
  def setup
6
6
  end
7
7
 
8
+ test "should use http by default" do
9
+ Punchfork.setup { |config| config.protocol = 'http' }
10
+ assert_equal 'http', URI.parse(Punchfork.search_url(:tomatoes).to_s).scheme
11
+ end
12
+
13
+ test "should use https" do
14
+ Punchfork.setup { |config| config.protocol = 'http' }
15
+ assert_equal 'https', URI.parse(Punchfork.search_url(:tomatoes, protocol: :https).to_s).scheme
16
+ end
17
+
18
+ test "should configure default to https" do
19
+ Punchfork.setup { |config| config.protocol = 'https' }
20
+ assert_equal 'https', URI.parse(Punchfork.search_url(:tomatoes).to_s).scheme
21
+ end
22
+
8
23
  test "truth" do
9
24
  assert_kind_of Module, Punchfork
10
25
  end
@@ -14,6 +29,11 @@ class PunchforkTest < ActiveSupport::TestCase
14
29
  assert_equal 50, response['recipes'].length
15
30
  end
16
31
 
32
+ test "should support method calls" do
33
+ response = Punchfork.search(:tomatoes, count:50)
34
+ assert_equal 50, response.recipes.length
35
+ end
36
+
17
37
  test "search should support strings with spaces" do
18
38
  Punchfork.search('Heirloom Tomatoes')
19
39
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: punchfork
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-02 00:00:00.000000000 Z
12
+ date: 2012-04-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sqlite3
16
- requirement: &2155996940 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,12 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2155996940
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  description: A simple Ruby library for searching food recipes with punchfork.com
26
31
  email:
27
32
  - gabeodess@gmail.com
@@ -31,6 +36,8 @@ extra_rdoc_files: []
31
36
  files:
32
37
  - lib/punchfork/base.rb
33
38
  - lib/punchfork/configuration.rb
39
+ - lib/punchfork/recipe.rb
40
+ - lib/punchfork/search.rb
34
41
  - lib/punchfork/version.rb
35
42
  - lib/punchfork.rb
36
43
  - lib/tasks/punchfork_tasks.rake
@@ -58,7 +65,10 @@ files:
58
65
  - test/dummy/config/locales/en.yml
59
66
  - test/dummy/config/routes.rb
60
67
  - test/dummy/config.ru
68
+ - test/dummy/db/development.sqlite3
69
+ - test/dummy/db/schema.rb
61
70
  - test/dummy/db/test.sqlite3
71
+ - test/dummy/log/development.log
62
72
  - test/dummy/log/test.log
63
73
  - test/dummy/public/404.html
64
74
  - test/dummy/public/422.html
@@ -83,7 +93,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
83
93
  version: '0'
84
94
  segments:
85
95
  - 0
86
- hash: -2657378380382635552
96
+ hash: 1201131303701118635
87
97
  required_rubygems_version: !ruby/object:Gem::Requirement
88
98
  none: false
89
99
  requirements:
@@ -92,10 +102,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
102
  version: '0'
93
103
  segments:
94
104
  - 0
95
- hash: -2657378380382635552
105
+ hash: 1201131303701118635
96
106
  requirements: []
97
107
  rubyforge_project:
98
- rubygems_version: 1.8.15
108
+ rubygems_version: 1.8.23
99
109
  signing_key:
100
110
  specification_version: 3
101
111
  summary: A simple Ruby library for searching food recipes with punchfork.com
@@ -121,7 +131,10 @@ test_files:
121
131
  - test/dummy/config/locales/en.yml
122
132
  - test/dummy/config/routes.rb
123
133
  - test/dummy/config.ru
134
+ - test/dummy/db/development.sqlite3
135
+ - test/dummy/db/schema.rb
124
136
  - test/dummy/db/test.sqlite3
137
+ - test/dummy/log/development.log
125
138
  - test/dummy/log/test.log
126
139
  - test/dummy/public/404.html
127
140
  - test/dummy/public/422.html