yelp4rails 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/yelp4rails.rb +94 -0
  2. 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: []