fanforce-api 0.31.0 → 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2c6e98f070f07163c77ce43a3309a26ba8978c1e
4
+ data.tar.gz: 43909c75a46c9fb3767910ccf1d0f56d1c5b0c11
5
+ SHA512:
6
+ metadata.gz: 3d2170fbe9bac57593b3489ec0a31cf34adead0911fba830f2b09f499f6722a74a0ef7c27d7108de5466885cdce73182ed7d17d471852b0e8fff0dc30f8d27b7
7
+ data.tar.gz: d7f1cec939937d5cc7b065888d46535db3d322ed6bcfe0f763772b670c0da8dd6184243673e060e0aafe62d99d8eba809f5466d2d19f69cf61f73136d80a1f0b
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 1.9.3-p194
1
+ 2.0.0-p576
data/.yardopts ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ --load ./.yardopts.rb
3
+ --markup-provider=redcarpet
4
+ --markup=markdown
5
+ --readme README.md
data/.yardopts.rb ADDED
@@ -0,0 +1 @@
1
+ require 'redcarpet/compat'
data/Gemfile CHANGED
@@ -1,2 +1,11 @@
1
1
  source 'https://rubygems.org'
2
2
  gemspec
3
+
4
+ group :development, :test do
5
+ gem 'minitest'
6
+ gem 'rack-test'
7
+ gem 'simplecov', :require => false
8
+ gem 'yard'
9
+ gem 'redcarpet'
10
+ gem 'github-markup', :require => true
11
+ end
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012 Caleb Clark
1
+ Copyright (c) 2014, The Fanforce Company
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,107 +1,28 @@
1
- ## Install
2
-
3
- Via rubygems.org:
4
-
5
- ```
6
- $ gem install fanforce
7
- ```
8
-
9
- To build and install the development branch yourself from the latest source:
10
-
11
- ```
12
- $ git clone git@github.com:mlabs/fanforce-ruby.git
13
- $ cd fanforce-ruby
14
- $ git checkout master
15
- $ rake gem
16
- $ gem install pkg/fanforce-{version}
17
- ```
18
-
19
1
  ## Getting Started
20
2
 
21
- ### Set It Up
3
+ Add fanforce-api to your Gemfile
22
4
 
23
5
  ``` ruby
24
- require 'rubygems' # not necessary with ruby 1.9 but included for completeness
25
- require 'fanforce/api'
26
-
27
- # put your own credentials here
28
- api_key = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
29
-
30
- # set up a client to talk to the Fanforce API
31
- ff = Fanforce::API.new api_key
6
+ gem 'fanforce-api'
32
7
  ```
33
8
 
34
- ### Making Your First Call
9
+ Require fanforce/api and initialize an instance
35
10
 
36
11
  ``` ruby
37
- # get your api access info
38
- ff.get('/access_info', {})
39
- ```
40
-
41
- ## Full REST Access
42
-
43
- ### GET
12
+ require 'fanforce/api'
44
13
 
45
- ``` ruby
46
- ff.get('/', {})
14
+ # Initialize a new Fanforce::API instance with your api_key
15
+ ff = Fanforce::API.new('00000000-0000-0000-0000-000000000000')
47
16
  ```
48
17
 
49
- ### POST
18
+ ## Making Your First Call
50
19
 
51
- ``` ruby
52
- ff.post('/', {})
53
- ```
54
-
55
- ### PUT
20
+ Get your organization details...
56
21
 
57
22
  ``` ruby
58
- ff.put('/', {})
23
+ ff.get('/organization')
59
24
  ```
60
25
 
61
- ### DELETE
62
-
63
- ``` ruby
64
- ff.delete('/')
65
- ```
66
-
67
- ## Error Handling
68
-
69
- ```ruby
70
- begin
71
- ff.get('/bad_page')
72
- rescue Fanforce::Error => e
73
- puts e.curl_command
74
- end
75
- ```
76
-
77
- e.curl_command
78
- e.response_code
79
- e.response_body
80
- e.request_url
81
- e.request_params
82
-
83
- BadRequestError
84
-
85
- ## Utils
86
-
87
- ff.get_url(path, query_params)
88
-
89
- ff.curl_command(method, path, query_params)
90
-
91
- ff.validate_auth
92
-
93
- ff.to_query_string
94
-
95
- ff.compile_jquery_tmpls
96
-
97
- ff.decode_json
98
-
99
- ff.parse_url
100
-
101
- ff.remove_sensitive_params
102
-
103
- ff.remove_internal_params
104
-
105
26
  ## Handling Results
106
27
 
107
28
  response.result
@@ -112,6 +33,7 @@ response.current_results
112
33
  response.current_page
113
34
  response.total_pages
114
35
 
36
+
115
37
  ## Paging
116
38
 
117
39
  response.prev_url
@@ -121,12 +43,21 @@ response.next_url
121
43
 
122
44
  By default logging is turned off.
123
45
  ```ruby
124
- Fanforce.config do |config|
46
+ Fanforce::API.config do |config|
125
47
  config.logging = true
126
48
  end
127
49
  ```
128
50
 
129
- For more info, see RestClient.logging.
51
+
52
+ ## Error Handling
53
+
54
+ ```ruby
55
+ begin
56
+ ff.get('/nonexistent_method')
57
+ rescue Fanforce::API::Error => e
58
+ puts e.curl_command
59
+ end
60
+ ```
130
61
 
131
62
  ## More Information
132
63
 
data/Rakefile CHANGED
@@ -3,14 +3,20 @@ require 'rake/testtask'
3
3
  require 'fileutils'
4
4
  include FileUtils
5
5
 
6
- # Default Rake task is compile
6
+ task :run_test do
7
+ Rake::Task['test'].execute
8
+ puts '---------------------------------------------------------------------'
9
+ puts 'TESTS PASSED... READY TO BUILD...'
10
+ puts '---------------------------------------------------------------------'
11
+ end
12
+ task :build => :run_test
7
13
  task :default => :build
8
14
 
9
15
  ########################################################################
10
16
 
11
17
  Rake::TestTask.new do |t|
12
- t.libs.push "lib"
13
- t.libs.push "test"
18
+ t.libs.push 'lib'
19
+ t.libs.push 'test'
14
20
  t.pattern = 'test/**/*_test.rb'
15
21
  t.verbose = false
16
22
  end
data/fanforce-api.gemspec CHANGED
@@ -8,17 +8,17 @@ Gem::Specification.new do |gem|
8
8
  gem.version = Fanforce::API::VERSION
9
9
  gem.date = Time.now.utc.strftime('%Y-%m-%d')
10
10
  gem.summary = %q{Ruby API wrapper for Fanforce}
11
- gem.description = %q{Ruby API wrapper that interfaces with all six Fanforce APIs.}
11
+
12
12
  gem.authors = ['Caleb Clark']
13
13
  gem.email = ['cclark@fanforce.com']
14
- gem.homepage = 'http://github.com/fanforce/fanforce-api-ruby'
14
+ gem.homepage = 'http://github.com/fanforce/gem-fanforce-api'
15
15
 
16
16
  gem.files = `git ls-files`.split($/)
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ['lib']
19
19
 
20
- gem.add_runtime_dependency 'rest-client', '~> 1.6.7'
20
+ gem.add_runtime_dependency 'rest-client', '~> 1.6.7'
21
+ gem.add_runtime_dependency 'uuid', '~> 2.3.7'
21
22
 
22
- gem.add_runtime_dependency 'fanforce-exceptions', '~> 0.8'
23
- gem.add_runtime_dependency 'fanforce-validations', '~> 0.8'
23
+ gem.add_runtime_dependency 'fanforce-base', '~> 1.0'
24
24
  end
data/lib/fanforce/api.rb CHANGED
@@ -1,12 +1,8 @@
1
- class Fanforce
2
- require 'fanforce'
3
- require 'fanforce/errors'
4
- require 'fanforce/domains'
5
- class API
6
- require_relative 'api/_main'
7
- require_relative 'api/version'
8
- require_relative 'api/error'
9
- end
10
- include Fanforce::Errors
11
- end
1
+ require 'fanforce/base'
2
+
3
+ require_relative 'api/version'
4
+ require_relative 'api/utils'
5
+ require_relative 'api/errors'
6
+ require_relative 'api/response'
7
+ require_relative 'api/main'
12
8
 
@@ -0,0 +1,24 @@
1
+ class Fanforce::API::Error < StandardError
2
+ attr_accessor :response, :request, :requested_url, :requested_params, :errors
3
+
4
+ def initialize(message, response, request, requested_url, requested_params)
5
+ @response = response
6
+ @request = request
7
+ @requested_url = requested_url
8
+ @requested_params = requested_params
9
+ @message = message
10
+ super(message)
11
+ end
12
+
13
+ def curl_command
14
+ method = begin @request.method rescue nil end
15
+ Fanforce.curl_command(method, @requested_url, @requested_params)
16
+ end
17
+
18
+ def code; @response.respond_to?(:code) ? @response.code : 500 end
19
+ def to_s; @message end
20
+ def to_hash; {} end
21
+ end
22
+
23
+ require_relative 'errors/server'
24
+ require_relative 'errors/decoding'
@@ -0,0 +1,15 @@
1
+ class Fanforce::API::Error::Decoding < Fanforce::API::Error
2
+
3
+ def initialize(e, response, request, requested_url, requested_params)
4
+ @message = "There was a Fanforce gem error while decoding JSON response (#{e.is_a?(String) ? e : e.message}): #{response.body}"
5
+ @errors = [{message: @message}]
6
+ super(@message, response, request, requested_url, requested_params)
7
+ end
8
+
9
+ def to_hash
10
+ {errors: @errors}
11
+ end
12
+
13
+ def code; 500 end
14
+
15
+ end
@@ -0,0 +1,31 @@
1
+ class Fanforce::API::Error::Server < Fanforce::API::Error
2
+
3
+ def initialize(response, request, requested_url, requested_params)
4
+ @response_body = response.to_s
5
+
6
+ if Fanforce.is_present?(response.body)
7
+ begin
8
+ @response_hash = MultiJson.load(response, symbolize_keys: true)
9
+ @errors = @response_hash[:errors]
10
+ rescue Exception => e
11
+ raise Fanforce::API::Error::Decoding.new(e, response, request, requested_url, requested_params)
12
+ end
13
+ else
14
+ @errors = [{message: "(Response body from #{response.code} error was empty: #{response.body})"}]
15
+ end
16
+
17
+ super(response.to_s, response, request, requested_url, requested_params)
18
+ end
19
+
20
+ def to_hash
21
+ @response_hash
22
+ end
23
+
24
+ def curl_command
25
+ method = begin @request.method rescue nil end
26
+ Fanforce.curl_command(method, @requested_url, @requested_params)
27
+ end
28
+
29
+ def code; @response.code end
30
+
31
+ end
@@ -0,0 +1,130 @@
1
+ require 'rest-client'
2
+ require 'uuid'
3
+
4
+ class Fanforce::API
5
+ include Fanforce::API::Utils
6
+
7
+ # Initialize a new API connection
8
+ # @param auth_data [String,Hash] is a string of api_key or hash with api_key
9
+ def initialize(auth_data=nil)
10
+ set_auth(auth_data) if auth_data
11
+ end
12
+
13
+ # Get the raw url for a request
14
+ # @param path [String]
15
+ # @param req_params [Hash]
16
+ # @return [String] url
17
+ def raw_url(path, req_params={})
18
+ req_params = inject_auth_params(req_params)
19
+ "#{complete_url(path)}?#{to_query_string(req_params) if req_params.size > 0}"
20
+ end
21
+
22
+ # Get the CURL command for a request
23
+ # @param method [Symbol] (get/post/put/delete)
24
+ # @param path [String]
25
+ # @param params [Hash]
26
+ # @return [String] curl command
27
+ def curl_command(method, path, params={})
28
+ params = inject_auth_params(params)
29
+ Fanforce.curl_command(method, complete_url(path), params)
30
+ end
31
+
32
+ # Handles a GET request for Fanforce API
33
+ # @param path [String]
34
+ # @param params [Hash]
35
+ # @return [Fanforce::API::Response]
36
+ def get(path, params={})
37
+ params = inject_auth_params(params)
38
+ RestClient.get(url(path, params), :accept => :json) do |response, request, result, &block|
39
+ Fanforce::API::Response.process(response, request, complete_url(path), params)
40
+ end
41
+ end
42
+
43
+ # Handles a POST request for Fanforce API
44
+ # @param path [String]
45
+ # @param params [Hash]
46
+ # @return [Fanforce::API::Response]
47
+ def post(path, params={}, retries=0)
48
+ url = complete_url(path)
49
+ params = inject_auth_params(params) unless retries > 0
50
+ RestClient.post(url, MultiJson.dump(params), :content_type => :json, :accept => :json) do |response, request, result, &block|
51
+ if response.code == 400 and response.body == '{"error":"Invalid JSON"}' and retries <= 2
52
+ puts "retried #{path} #{retries+1} times"
53
+ post(path, params, retries+1)
54
+ else
55
+ Fanforce::API::Response.process(response, request, url, params)
56
+ end
57
+ end
58
+ end
59
+
60
+ # Handles a PUT request for Fanforce API
61
+ # @param path [String]
62
+ # @param params [Hash]
63
+ # @return [Fanforce::API::Response]
64
+ def put(path, params={}, retries=0)
65
+ url = complete_url(path)
66
+ params = inject_auth_params(params) unless retries > 0
67
+ RestClient.put(url, MultiJson.dump(params), :content_type => :json, :accept => :json) do |response, request, result, &block|
68
+ if response.code == 400 and response.body == '{"error":"Invalid JSON"}' and retries <= 2
69
+ puts "retried #{path} #{retries+1} times"
70
+ post(path, params, retries+1)
71
+ else
72
+ Fanforce::API::Response.process(response, request, url, params)
73
+ end
74
+ end
75
+ end
76
+
77
+ # Handles a DELETE request for Fanforce API
78
+ # @param path [String]
79
+ # @param params [Hash]
80
+ # @return [Fanforce::API::Response]
81
+ def delete(path, params={})
82
+ url = complete_url(path)
83
+ params = inject_auth_params(params)
84
+ RestClient.delete(url(path, params), :accept => :json) do |response, request, result, &block|
85
+ Fanforce::API::Response.process(response, request, url, params)
86
+ end
87
+ end
88
+
89
+ # Get the auth params for current instance
90
+ # @return [Hash] current auth params
91
+ def auth_params
92
+ @auth_params.clone
93
+ end
94
+
95
+ # Auth the current instance. Will raise error if api_key not found or is not of UUID format.
96
+ # @param auth_data [String, Hash] either an api_key string or a hash containing it
97
+ # @return [nil]
98
+ def set_auth(auth_data={})
99
+ auth_data = {} if is_blank?(auth_data)
100
+ if auth_data.is_a?(String)
101
+ @auth_params = {api_key: auth_data}
102
+ elsif auth_data.is_a?(Hash)
103
+ auth_data = symbolize_keys(auth_data)
104
+ @auth_params = {
105
+ api_key: auth_data[:api_key],
106
+ organization_id: auth_data[:organization_id]
107
+ }
108
+ end
109
+ raise 'api_key is required to auth Fanforce::API' if !has_valid_api_key?
110
+ end
111
+
112
+ # Check if current instance has a valid api_key
113
+ # @return [Boolean]
114
+ def has_valid_api_key?
115
+ is_present?(@auth_params) and is_present?(@auth_params[:api_key]) and UUID.validate(@auth_params[:api_key])
116
+ end
117
+ alias_method :has_valid_auth?, :has_valid_api_key?
118
+
119
+ ######################################################################
120
+ private
121
+
122
+ def inject_auth_params(params)
123
+ params.merge(@auth_params || {})
124
+ end
125
+
126
+ def complete_url(path)
127
+ 'http://' + Fanforce.api_domain + path
128
+ end
129
+
130
+ end
@@ -3,113 +3,112 @@ class Fanforce::API::Response
3
3
 
4
4
  def self.process(response, request, requested_url, requested_params)
5
5
  return nil if response.code == 404 and request.method == :get
6
- raise Fanforce::API::ServerError.new(response, request, requested_url, requested_params) if response.code > 201
6
+ raise Fanforce::API::Error::Server.new(response, request, requested_url, requested_params) if response.code > 201
7
7
 
8
- begin response_hash = Fanforce::Utils.decode_json(response)
9
- rescue Exception => e; raise Fanforce::API::DecodingError.new(e, response, request, requested_url, requested_params) end
8
+ begin response_hash = MultiJson.load(response, symbolize_keys: true)
9
+ rescue Exception => e; raise Fanforce::API::Error::Decoding.new(e, response, request, requested_url, requested_params) end
10
10
  if !response_hash.is_a?(Hash)
11
- raise Fanforce::API::DecodingError.new('Server did not send a valid hash.', response, request, requested_url, requested_params)
11
+ raise Fanforce::API::Error::Decoding.new('Server did not send a valid hash.', response, request, requested_url, requested_params)
12
12
  elsif response_hash[:results]
13
- Fanforce::API::Results.new(response_hash, response, request, requested_url, requested_params)
13
+ MultipleResults.new(response_hash, response, request, requested_url, requested_params)
14
14
  else
15
- Fanforce::API::Result.new(response_hash, response, request, requested_url, requested_params)
15
+ SingleResult.new(response_hash, response, request, requested_url, requested_params)
16
16
  end
17
17
  end
18
18
 
19
- end
20
-
21
- class Fanforce::API::Result < Hash
22
- attr_reader :requested_url, :requested_params
19
+ class MultipleResults < Array
20
+ attr_reader :requested_url, :requested_params
23
21
 
24
- def initialize(response_hash, response, request, requested_url, requested_params)
25
- @response = response
26
- @request = request
27
- @requested_url = requested_url
28
- @requested_params = requested_params
29
- @response_hash = response_hash
30
- self.replace(response_hash)
31
- end
22
+ def initialize(response_hash, response, request, requested_url, requested_params)
23
+ @response = response
24
+ @request = request
25
+ @requested_url = requested_url
26
+ @requested_params = requested_params
27
+ @response_hash = response_hash
28
+ self.replace(response_hash[:results])
29
+ end
32
30
 
33
- def data
34
- self
35
- end
36
- alias result data
31
+ def data
32
+ self
33
+ end
34
+ alias results data
37
35
 
38
- def curl_command
39
- @curl_command ||= Fanforce::Utils.curl_command(@request.method, @requested_url, @requested_params)
40
- end
36
+ def curl_command
37
+ @curl_command ||= Fanforce.curl_command(@request.method, @requested_url, @requested_params)
38
+ end
41
39
 
42
- def body;
43
- @response.to_s
44
- end
40
+ def body
41
+ @response.to_s
42
+ end
45
43
 
46
- def current_results; 1 end
47
- def total_results; 1 end
48
- def current_page; 1 end
49
- def total_pages; 1 end
50
- def prev_page; nil end
51
- def next_page; nil end
52
- def prev_page_url; nil end
53
- def next_page_url; nil end
54
- def code; @response.code end
55
- end
44
+ def current_results
45
+ @current_results ||= @response_hash[:current_results]
46
+ end
56
47
 
57
- class Fanforce::API::Results < Array
58
- attr_reader :requested_url, :requested_params
48
+ def total_results;
49
+ @total_results ||= @response_hash[:total_results]
50
+ end
59
51
 
60
- def initialize(response_hash, response, request, requested_url, requested_params)
61
- @response = response
62
- @request = request
63
- @requested_url = requested_url
64
- @requested_params = requested_params
65
- @response_hash = response_hash
66
- self.replace(response_hash[:results])
67
- end
52
+ def current_page;
53
+ @current_page ||= @response_hash[:current_page]
54
+ end
68
55
 
69
- def data
70
- self
71
- end
72
- alias results data
56
+ def total_pages;
57
+ @total_pages ||= @response_hash[:total_pages]
58
+ end
73
59
 
74
- def curl_command
75
- @curl_command ||= Fanforce::Utils.curl_command(@request.method, @requested_url, @requested_params)
76
- end
60
+ def prev_page
61
+ @prev_page ||= (@request.method == :get and current_page > 1) ? current_page - 1 : nil
62
+ end
77
63
 
78
- def body
79
- @response.to_s
80
- end
64
+ def next_page
65
+ @next_page ||= (@request.method == :get and total_pages > current_page) ? current_page + 1 : nil
66
+ end
81
67
 
82
- def current_results
83
- @current_results ||= @response_hash[:current_results]
84
- end
68
+ def prev_page_url;
69
+ @prev_page_url ||= prev_page ? "#{@requested_url}?#{Fanforce.to_query_string(@requested_params.merge(page: current_page-1))}" : nil
70
+ end
85
71
 
86
- def total_results;
87
- @total_results ||= @response_hash[:total_results]
72
+ def next_page_url;
73
+ @next_page_url ||= next_page ? "#{@requested_url}?#{Fanforce.to_query_string(@requested_params.merge(page: current_page+1))}" : nil
74
+ end
75
+ def code; @response.code end
88
76
  end
89
77
 
90
- def current_page;
91
- @current_page ||= @response_hash[:current_page]
92
- end
78
+ class SingleResult < Hash
79
+ attr_reader :requested_url, :requested_params
93
80
 
94
- def total_pages;
95
- @total_pages ||= @response_hash[:total_pages]
96
- end
81
+ def initialize(response_hash, response, request, requested_url, requested_params)
82
+ @response = response
83
+ @request = request
84
+ @requested_url = requested_url
85
+ @requested_params = requested_params
86
+ @response_hash = response_hash
87
+ self.replace(response_hash)
88
+ end
97
89
 
98
- def prev_page
99
- @prev_page ||= (@request.method == :get and current_page > 1) ? current_page - 1 : nil
100
- end
90
+ def data
91
+ self
92
+ end
93
+ alias result data
101
94
 
102
- def next_page
103
- @next_page ||= (@request.method == :get and total_pages > current_page) ? current_page + 1 : nil
104
- end
95
+ def curl_command
96
+ @curl_command ||= Fanforce.curl_command(@request.method, @requested_url, @requested_params)
97
+ end
105
98
 
106
- def prev_page_url;
107
- @prev_page_url ||= prev_page ? "#{@requested_url}?#{Fanforce::Utils.to_query_string(@requested_params.merge(page: current_page-1))}" : nil
108
- end
99
+ def body;
100
+ @response.to_s
101
+ end
109
102
 
110
- def next_page_url;
111
- @next_page_url ||= next_page ? "#{@requested_url}?#{Fanforce::Utils.to_query_string(@requested_params.merge(page: current_page+1))}" : nil
103
+ def current_results; 1 end
104
+ def total_results; 1 end
105
+ def current_page; 1 end
106
+ def total_pages; 1 end
107
+ def prev_page; nil end
108
+ def next_page; nil end
109
+ def prev_page_url; nil end
110
+ def next_page_url; nil end
111
+ def code; @response.code end
112
112
  end
113
- def code; @response.code end
114
113
 
115
114
  end
@@ -1,10 +1,9 @@
1
- require 'fanforce/utils'
2
-
3
1
  module Fanforce::API::Utils
4
- include Fanforce::Utils
5
- extend Fanforce::API::Utils
2
+ extend self
6
3
  def self.included(base) base.extend(self) end
7
4
 
5
+ include Fanforce::Base::Utils
6
+
8
7
  def valid_fanforce_js_request?(params=@params)
9
8
  return false if !params.is_a?(Hash)
10
9
  return false if is_blank?(params[:organization_id]) or is_blank?(params[:api_key])
@@ -34,21 +33,4 @@ module Fanforce::API::Utils
34
33
  return true
35
34
  end
36
35
 
37
- def remove_nil_values(hash)
38
- hash.clone.delete_if {|k,v| v.nil? }
39
- end
40
-
41
- def collect_known_params(params)
42
- params = symbolize_keys(params)
43
- remove_nil_values(app_id: params[:app_id], organization_id: params[:organization_id], organization_slug: params[:organization_slug], api_key: params[:api_key], session_id: params[:session_id])
44
- end
45
-
46
- def remove_internal_params(params)
47
- params.clone.delete_if { |k,v| [:app_id, :organization_id, :organization_slug, :api_key].include? k }
48
- end
49
-
50
- def remove_sensitive_params(params)
51
- params.clone.delete_if { |k,v| [:api_key].include? k }
52
- end
53
-
54
36
  end
@@ -1,5 +1,5 @@
1
1
  class Fanforce
2
2
  class API
3
- VERSION = '0.31.0'
3
+ VERSION = '1.0.0'
4
4
  end
5
5
  end
@@ -0,0 +1,18 @@
1
+ require 'test_helper'
2
+
3
+ describe Fanforce::API do
4
+
5
+ it 'should test if var is blank' do
6
+ assert Fanforce.is_blank?(nil)
7
+ assert !Fanforce.is_blank?('value')
8
+
9
+ ff = Fanforce::API.new
10
+ assert ff.is_blank?(nil)
11
+ assert !ff.is_blank?('value')
12
+ end
13
+
14
+ it 'should create new instance of fanforce with api_key' do
15
+ assert Fanforce::API.new('13d90b01-6df7-4618-881c-c79320a0dc21')
16
+ end
17
+
18
+ end
@@ -0,0 +1,11 @@
1
+ require 'simplecov'
2
+ SimpleCov.start { add_filter '/test/' }
3
+
4
+ require 'rubygems'
5
+ require 'minitest/autorun'
6
+ require 'minitest/spec'
7
+ require 'rack/test'
8
+
9
+ ENV['RACK_ENV'] = 'test'
10
+
11
+ require 'fanforce/api'
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fanforce-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.31.0
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Caleb Clark
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-09-12 00:00:00.000000000 Z
11
+ date: 2014-11-25 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rest-client
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,44 +20,39 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
29
26
  version: 1.6.7
30
27
  - !ruby/object:Gem::Dependency
31
- name: fanforce-exceptions
28
+ name: uuid
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
37
- version: '0.8'
33
+ version: 2.3.7
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
45
- version: '0.8'
40
+ version: 2.3.7
46
41
  - !ruby/object:Gem::Dependency
47
- name: fanforce-validations
42
+ name: fanforce-base
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
53
- version: '0.8'
47
+ version: '1.0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
61
- version: '0.8'
62
- description: Ruby API wrapper that interfaces with all six Fanforce APIs.
54
+ version: '1.0'
55
+ description:
63
56
  email:
64
57
  - cclark@fanforce.com
65
58
  executables: []
@@ -68,41 +61,47 @@ extra_rdoc_files: []
68
61
  files:
69
62
  - .gitignore
70
63
  - .ruby-version
64
+ - .yardopts
65
+ - .yardopts.rb
71
66
  - Gemfile
72
67
  - LICENSE.md
73
68
  - README.md
74
69
  - Rakefile
75
70
  - fanforce-api.gemspec
76
71
  - lib/fanforce/api.rb
77
- - lib/fanforce/api/_main.rb
78
- - lib/fanforce/api/error.rb
72
+ - lib/fanforce/api/errors.rb
73
+ - lib/fanforce/api/errors/decoding.rb
74
+ - lib/fanforce/api/errors/server.rb
75
+ - lib/fanforce/api/main.rb
79
76
  - lib/fanforce/api/response.rb
80
77
  - lib/fanforce/api/utils.rb
81
78
  - lib/fanforce/api/version.rb
82
- - test/fanforce_test.rb
83
- homepage: http://github.com/fanforce/fanforce-api-ruby
79
+ - test/api/auth_test.rb
80
+ - test/test_helper.rb
81
+ homepage: http://github.com/fanforce/gem-fanforce-api
84
82
  licenses: []
83
+ metadata: {}
85
84
  post_install_message:
86
85
  rdoc_options: []
87
86
  require_paths:
88
87
  - lib
89
88
  required_ruby_version: !ruby/object:Gem::Requirement
90
- none: false
91
89
  requirements:
92
- - - ! '>='
90
+ - - '>='
93
91
  - !ruby/object:Gem::Version
94
92
  version: '0'
95
93
  required_rubygems_version: !ruby/object:Gem::Requirement
96
- none: false
97
94
  requirements:
98
- - - ! '>='
95
+ - - '>='
99
96
  - !ruby/object:Gem::Version
100
97
  version: '0'
101
98
  requirements: []
102
99
  rubyforge_project:
103
- rubygems_version: 1.8.23
100
+ rubygems_version: 2.0.14
104
101
  signing_key:
105
- specification_version: 3
102
+ specification_version: 4
106
103
  summary: Ruby API wrapper for Fanforce
107
104
  test_files:
108
- - test/fanforce_test.rb
105
+ - test/api/auth_test.rb
106
+ - test/test_helper.rb
107
+ has_rdoc:
@@ -1,111 +0,0 @@
1
- require 'rest-client'
2
- require_relative 'utils'
3
- require_relative 'response'
4
-
5
- class Fanforce::API
6
- include Fanforce::API::Utils
7
- include Fanforce::Errors
8
-
9
- def initialize(arg={})
10
- if arg.is_a?(Hash)
11
- add_params(arg)
12
- auth(@params) if @params.length > 0
13
- elsif arg.is_a?(String)
14
- auth(arg)
15
- end
16
- end
17
-
18
- def params
19
- @params ||= {}
20
- end
21
-
22
- def add_params(params_to_add)
23
- params.merge!(collect_known_params params_to_add)
24
- end
25
-
26
- def url(path, req_params={})
27
- req_params = apply_auth(req_params)
28
- "#{complete_url(path)}?#{to_query_string(req_params)}"
29
- end
30
-
31
- def curl_command(method, path, req_params={})
32
- req_params = apply_auth(req_params)
33
- Fanforce::Utils.curl_command(method, complete_url(path), req_params)
34
- end
35
-
36
- def get(path, req_params={})
37
- req_params = apply_auth(req_params)
38
- RestClient.get(url(path, req_params), :accept => :json) do |response, request, result, &block|
39
- Fanforce::API::Response.process(response, request, complete_url(path), req_params)
40
- end
41
- end
42
-
43
- def post(path, req_params={}, retries=0)
44
- url = complete_url(path)
45
- req_params = apply_auth(req_params) unless retries > 0
46
- RestClient.post(url, MultiJson.dump(req_params), :content_type => :json, :accept => :json) do |response, request, result, &block|
47
- if response.code == 400 and response.body == '{"error":"Invalid JSON"}' and retries <= 2
48
- puts "retried #{path} #{retries+1} times"
49
- post(path, req_params, retries+1)
50
- else
51
- Fanforce::API::Response.process(response, request, url, req_params)
52
- end
53
- end
54
- end
55
-
56
- def put(path, req_params={}, retries=0)
57
- url = complete_url(path)
58
- req_params = apply_auth(req_params) unless retries > 0
59
- RestClient.put(url, MultiJson.dump(req_params), :content_type => :json, :accept => :json) do |response, request, result, &block|
60
- if response.code == 400 and response.body == '{"error":"Invalid JSON"}' and retries <= 2
61
- puts "retried #{path} #{retries+1} times"
62
- post(path, req_params, retries+1)
63
- else
64
- Fanforce::API::Response.process(response, request, url, req_params)
65
- end
66
- end
67
- end
68
-
69
- def delete(path, req_params={})
70
- url = complete_url(path)
71
- req_params = apply_auth(req_params)
72
- RestClient.delete(url(path, req_params), :accept => :json) do |response, request, result, &block|
73
- Fanforce::API::Response.process(response, request, url, req_params)
74
- end
75
- end
76
-
77
- def identify(req_params)
78
- post '/bie/identify', req_params
79
- end
80
-
81
- def track(com_behavior_id, req_params)
82
- post '/bie/track', req_params.merge(com_behavior_id: com_behavior_id)
83
- end
84
-
85
- def recommend(com_behavior_id, unique_key, req_params={})
86
- req_params.update(unique_key: "#{com_behavior_id}:#{unique_key}")
87
- post '/bie/recommend', req_params
88
- end
89
-
90
- def auth(auth_data=nil)
91
- @auth_hash ||= {}
92
- return @auth_hash if is_blank?(auth_data)
93
- auth_data = auth_data.is_a?(Hash) ? symbolize_keys(auth_data) : {api_key: auth_data.to_s}
94
- @auth_hash.merge! remove_nil_values(api_key: auth_data[:api_key], organization_id: auth_data[:organization_id], organization_slug: auth_data[:organization_slug])
95
- params.merge!(@auth_hash)
96
- valid_auth?
97
- end
98
-
99
- def valid_auth?
100
- is_present?(@auth_hash) and is_present?(@auth_hash[:api_key]) and is_present?(@auth_hash[:organization_id])
101
- end
102
-
103
- def apply_auth(req_params)
104
- req_params.merge(@auth_hash || {})
105
- end
106
-
107
- def complete_url(path)
108
- 'http://' + Fanforce.api_domain + path
109
- end
110
-
111
- end
@@ -1,71 +0,0 @@
1
- require_relative 'utils'
2
-
3
- class Fanforce::API::Error < StandardError
4
- attr_accessor :response, :request, :requested_url, :requested_params, :errors
5
-
6
- def initialize(message, response, request, requested_url, requested_params)
7
- @response = response
8
- @request = request
9
- @requested_url = requested_url
10
- @requested_params = requested_params
11
- @message = message
12
- super(message)
13
- end
14
-
15
- def curl_command
16
- method = begin @request.method rescue nil end
17
- Fanforce::Utils.curl_command(method, @requested_url, @requested_params)
18
- end
19
-
20
- def code; @response.respond_to?(:code) ? @response.code : 500 end
21
- def to_s; @message end
22
- def to_hash; {} end
23
- end
24
-
25
- class Fanforce::API::ServerError < Fanforce::API::Error
26
-
27
- def initialize(response, request, requested_url, requested_params)
28
- @response_body = response.to_s
29
-
30
- if Fanforce::Utils.is_present?(response.body)
31
- begin
32
- @response_hash = Fanforce::Utils.decode_json(response)
33
- @errors = @response_hash[:errors]
34
- rescue Exception => e
35
- raise Fanforce::API::DecodingError.new(e, response, request, requested_url, requested_params)
36
- end
37
- else
38
- @errors = [{message: "(Response body from #{response.code} error was empty: #{response.body})"}]
39
- end
40
-
41
- super(response.to_s, response, request, requested_url, requested_params)
42
- end
43
-
44
- def to_hash
45
- @response_hash
46
- end
47
-
48
- def curl_command
49
- method = begin @request.method rescue nil end
50
- Fanforce::Utils.curl_command(method, @requested_url, @requested_params)
51
- end
52
-
53
- def code; @response.code end
54
-
55
- end
56
-
57
- class Fanforce::API::DecodingError < Fanforce::API::Error
58
-
59
- def initialize(e, response, request, requested_url, requested_params)
60
- @message = "There was a Fanforce gem error while decoding JSON response (#{e.is_a?(String) ? e : e.message}): #{response.body}"
61
- @errors = [{message: @message}]
62
- super(@message, response, request, requested_url, requested_params)
63
- end
64
-
65
- def to_hash
66
- {errors: @errors}
67
- end
68
-
69
- def code; 500 end
70
-
71
- end
@@ -1,22 +0,0 @@
1
- require 'rubygems'
2
- require 'minitest/autorun'
3
-
4
- $: << File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
5
- require 'fanforce'
6
-
7
- describe Fanforce do
8
-
9
- it 'should test if var is blank' do
10
- assert Fanforce.is_blank?(nil)
11
- assert !Fanforce.is_blank?("value")
12
-
13
- ff = Fanforce.new
14
- assert ff.is_blank?(nil)
15
- assert !ff.is_blank?("value")
16
- end
17
-
18
- it 'should create new instance of fanforce with api_key' do
19
- Fanforce.new('13d90b01-6df7-4618-881c-c79320a0dc21')
20
- end
21
-
22
- end