three_taps_api 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 32a2bb227118ec96558aa7daefab93f5980af0dc
4
+ data.tar.gz: 62e5b053d3cef593824ad224951f705894b6d59a
5
+ SHA512:
6
+ metadata.gz: 5e826298100046ddfafbb7f7d66b388461b9cfec8d23786f04b34f420ddfa9cf60ae2f57bc426c580c5a43c1d203a97cb0c8c69bbeea074d636b839076363005
7
+ data.tar.gz: 8a6bf6d85c18c24cb0bd4e23bdea20114696bb61b146c19aab677c307e00e84db04c950772974690679e078f4e3851221125fdee105ac0bfd0d47c6afbdacef3
@@ -0,0 +1,6 @@
1
+ require 'httparty'
2
+
3
+ # Require every file in lib/api
4
+ Dir[File.dirname(__FILE__) + '/three_taps_api/*.rb'].each do |file|
5
+ require file
6
+ end
@@ -0,0 +1,25 @@
1
+ require_relative 'location'
2
+
3
+ module ThreeTapsAPI
4
+ def self.rec_hash_to_openstruct(hash)
5
+ raise TypeError if not hash.is_a? Hash
6
+ hash = hash.map { |k, v| [k, v.is_a?(Hash) ? rec_hash_to_openstruct(v) : v] }
7
+ OpenStruct.new Hash[hash]
8
+ end
9
+
10
+ class Base
11
+ include HTTParty
12
+ base_uri '3taps.com'
13
+ @@api_key = ENV['THREE_TAPS_API_KEY']
14
+ attr_reader :results
15
+
16
+ def self.api_key
17
+ @@api_key
18
+ end
19
+
20
+ def auth_token_hash
21
+ { auth_token: self.class.api_key }
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,13 @@
1
+ module ThreeTapsAPI
2
+ # Class for describing the 3taps location in an API-specific way
3
+ class Location
4
+ # Add more attributes as they are tested
5
+ attr_accessor :country, :zipcode
6
+
7
+ def initialize(args)
8
+ args.each do |k, v|
9
+ self.send "#{k}=", v if self.class.method_defined? "#{k}"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,34 @@
1
+ require_relative 'base'
2
+
3
+ module ThreeTapsAPI
4
+ class Reference < Base
5
+ base_uri 'reference.3taps.com'
6
+
7
+ def locations(level)
8
+ uri = self.class.base_uri + '/locations'
9
+ @results = self.class.get uri, { query: auth_token_hash.merge({ level: level }) }
10
+
11
+ begin
12
+ parsed_response = ThreeTapsAPI.rec_hash_to_openstruct @results.parsed_response
13
+ @reference = parsed_response.send "#{level.to_s}" if parsed_response.success
14
+ rescue TypeError
15
+ p "ThreeTapsAPI::Reference.locations #{level.to_s}: rec_hash_to_openstruct not passed a hash"
16
+ end
17
+ end
18
+
19
+ def method_missing(name, *args, &block)
20
+ p "#{name} is not a valid parameter." and return if ThreeTapsAPI.invalid_parameter? name
21
+ uri = self.class.base_uri + "/#{name.to_s}"
22
+ @results = self.class.get uri, { query: auth_token_hash }
23
+
24
+ # if it's a valid request,
25
+ # create a get/setter for it
26
+ begin
27
+ parsed_response = ThreeTapsAPI.rec_hash_to_openstruct @results.parsed_response
28
+ @reference = parsed_response.send "#{name.to_s}" if parsed_response.success
29
+ rescue TypeError
30
+ p "ThreeTapsAPI::Reference.locations #{name.to_s}: rec_hash_to_openstruct not passed a hash"
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,47 @@
1
+ require_relative 'base'
2
+
3
+ module ThreeTapsAPI
4
+ class Search < Base
5
+ base_uri 'search.3taps.com'
6
+ attr_reader :postings
7
+ attr_reader :parameters
8
+ attr_accessor :location
9
+
10
+ def create_getter_and_setter(name)
11
+ get = Proc.new { instance_variable_get "@#{name}" }
12
+ set = Proc.new { |val| instance_variable_set "@#{name}", val; @parameters[name.to_sym] = val }
13
+ self.class.send :define_method, "#{name}", get
14
+ self.class.send :define_method, "#{name}=", set
15
+ end
16
+
17
+ def initialize(args = {})
18
+ @parameters = args
19
+ @location = Location.new(args.delete(:location) || {})
20
+ @postings = OpenStruct.new
21
+
22
+ #args.delete :location
23
+
24
+ args.each do |k, v|
25
+ create_getter_and_setter k if ThreeTapsAPI.valid_parameter? k.to_s
26
+ self.send "#{k.to_s}=", v
27
+ end
28
+ end
29
+
30
+ def search
31
+ opts = {}
32
+ opts.merge!(auth_token_hash)
33
+ .merge!(@parameters)
34
+ @results = self.class.get self.class.base_uri, { query: opts }
35
+ @postings = @results.parsed_response['postings'].map { |p| ThreeTapsAPI.rec_hash_to_openstruct p }
36
+ end
37
+
38
+ def method_missing(name, *args, &block)
39
+ # TODO: return if not a setter function
40
+ name = name.to_s.chop if name.to_s.reverse[0] == '='
41
+ p "#{name} is not a valid parameter." and return if ThreeTapsAPI.invalid_parameter? name
42
+ @parameters[name.to_sym] = args[0]
43
+ create_getter_and_setter name
44
+ self.send "#{name.to_s}=".to_sym, args[0]
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,20 @@
1
+ module ThreeTapsAPI
2
+ @@valid_parameters = %w(category_group category_groups
3
+ category categories radius
4
+ lat long source sources external_id
5
+ heading body text timestamp id
6
+ price currency annotations status
7
+ state has_image has_price include_deleted
8
+ only_deleted location locations)
9
+ def self.valid_parameters
10
+ @@valid_parameters
11
+ end
12
+
13
+ def self.valid_parameter?(str)
14
+ @@valid_parameters.include? str
15
+ end
16
+
17
+ def self.invalid_parameter?(str)
18
+ !self.valid_parameter? str
19
+ end
20
+ end
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: three_taps_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - John Marinelli
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-08-27 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A simple, lightweight wrapper to call the 3taps API. Requires an authentication
14
+ key from the 3taps service.
15
+ email: john@johnmarinelli.me
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/three_taps_api.rb
21
+ - lib/three_taps_api/base.rb
22
+ - lib/three_taps_api/location.rb
23
+ - lib/three_taps_api/reference.rb
24
+ - lib/three_taps_api/search.rb
25
+ - lib/three_taps_api/valid_parameters.rb
26
+ homepage: http://rubygems.org/gems/three_taps_api
27
+ licenses:
28
+ - MIT
29
+ metadata: {}
30
+ post_install_message:
31
+ rdoc_options: []
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ requirements: []
45
+ rubyforge_project:
46
+ rubygems_version: 2.4.6
47
+ signing_key:
48
+ specification_version: 4
49
+ summary: Wrapper for the 3taps API.
50
+ test_files: []