yelp4rails 1.0.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.
- data/lib/yelp4rails.rb +94 -0
- metadata +79 -0
data/lib/yelp4rails.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
# Yelp4Rails
|
2
|
+
# - for working with the yelp api like its an active record model
|
3
|
+
#
|
4
|
+
# originated by Mike Heijmans
|
5
|
+
#
|
6
|
+
# Apache License
|
7
|
+
# Version 2.0, January 2004
|
8
|
+
# http://www.apache.org/licenses/
|
9
|
+
# Copyright 2013 Michael Heijmans
|
10
|
+
#
|
11
|
+
# Class for working with Yelp API
|
12
|
+
# Should resemble a database model as much as possible
|
13
|
+
|
14
|
+
require 'oauth'
|
15
|
+
require 'json'
|
16
|
+
|
17
|
+
class YelpApi
|
18
|
+
|
19
|
+
attr_accessor :auth_keys, :consumer_key, :consumer_secret, :token, :token_secret, :base_url, :access_token
|
20
|
+
attr_reader :yelp_client, :consumer
|
21
|
+
|
22
|
+
def initialize(auth_keys)
|
23
|
+
@consumer_key = auth_keys[:consumer_key]
|
24
|
+
@consumer_secret = auth_keys[:consumer_secret]
|
25
|
+
@token = auth_keys[:token]
|
26
|
+
@token_secret = auth_keys[:token_secret]
|
27
|
+
@base_url = "http://api.yelp.com"
|
28
|
+
setup_consumer
|
29
|
+
setup_access_token
|
30
|
+
end
|
31
|
+
|
32
|
+
def log(message, level=:info)
|
33
|
+
if defined? Rails.logger
|
34
|
+
if level == :info
|
35
|
+
Rails.logger.info message
|
36
|
+
elsif level == :error
|
37
|
+
Rails.logger.error message
|
38
|
+
end
|
39
|
+
else
|
40
|
+
puts "#{level}: #{message}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def setup_consumer
|
45
|
+
@consumer = OAuth::Consumer.new(@consumer_key, @consumer_secret, :site=>@base_url)
|
46
|
+
end
|
47
|
+
|
48
|
+
def setup_access_token
|
49
|
+
@access_token = OAuth::AccessToken.new(@consumer)
|
50
|
+
@access_token.token = @token
|
51
|
+
@access_token.secret = @token_secret
|
52
|
+
end
|
53
|
+
|
54
|
+
def fetch_uri(uri)
|
55
|
+
log "Fetching from Yelp: #{uri}"
|
56
|
+
result = @access_token.get(uri)
|
57
|
+
return JSON.parse(result.body)
|
58
|
+
end
|
59
|
+
|
60
|
+
def search_by_business_id(bid)
|
61
|
+
return fetch_uri("/v2/business/#{bid}")
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
# Make it model like ;)
|
66
|
+
def method_missing(meth, *args, &block)
|
67
|
+
if meth.to_s =~ /^search_by_(.+)$/
|
68
|
+
run_search_by_method($1, *args, &block)
|
69
|
+
else
|
70
|
+
super # You *must* call super if you don't handle the
|
71
|
+
# method, otherwise you'll mess up Ruby's method
|
72
|
+
# lookup.
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def run_search_by_method(attrs, *args, &block)
|
77
|
+
# Make an array of attribute names
|
78
|
+
attrs = attrs.split('_and_')
|
79
|
+
# #transpose will zip the two arrays together like so:
|
80
|
+
# [[:a, :b, :c], [1, 2, 3]].transpose
|
81
|
+
# # => [[:a, 1], [:b, 2], [:c, 3]]
|
82
|
+
attrs_with_args = [attrs, args].transpose
|
83
|
+
queryparams=[]
|
84
|
+
attrs_with_args.each do |key, value|
|
85
|
+
queryparams << "#{key}=#{value.gsub(" ", "+")}"
|
86
|
+
end
|
87
|
+
#{OAuth::Helper.escape(query)}
|
88
|
+
uri = "/v2/search?#{queryparams.join("&")}"
|
89
|
+
#puts uri
|
90
|
+
return fetch_uri(uri)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yelp4rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Michael Heijmans
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-09-04 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: json
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: oauth
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.4.7
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.4.7
|
46
|
+
description: A gem that provides and activerecord like object for interacting with
|
47
|
+
the yelp V2 api
|
48
|
+
email: parabuzzle@gmail.com
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- lib/yelp4rails.rb
|
54
|
+
homepage: https://github.com/parabuzzle/yelp4rails
|
55
|
+
licenses: []
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
requirements: []
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 1.8.25
|
75
|
+
signing_key:
|
76
|
+
specification_version: 3
|
77
|
+
summary: A gem that provides and activerecord like object for interacting with the
|
78
|
+
yelp V2 api
|
79
|
+
test_files: []
|