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.
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: []