fanforce-api 0.8.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.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NDU1ZWM4ZmZhNjczM2Q4YmQzNGNhMjAzNmE2NGQwMzg4NzIzNmI5Mw==
5
+ data.tar.gz: !binary |-
6
+ MjBlMzFmM2E5ZDViNDYwMjQ5ZTEwMDdhOTBjYzY1ZTM3ZTA1MDZjOQ==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NzMwZmI4NjQyM2FlZWFkMDFkNzI4YzgyZDlhNGY3Mjk1OTE0OGJhZjE5M2Ji
10
+ YmRjYjA4MTE4NjcxNDAzNTUwNWI5OTc1NGE4MmQ4ZTM2ZjdhODUwOGRkMWQ2
11
+ NDEzNjQ3YWZhMjgyMjcyNThkNGRkN2I5ODE1YTc4Y2Y0Y2U1NDY=
12
+ data.tar.gz: !binary |-
13
+ ZjE5YmM4ZWEyNGRlMTU3MDVjOTgwNGQyM2Q1YTU1MzhjODk4YzFkYmYyMzdl
14
+ YThkODYwYTg4Y2UyNzFiNTJiMWY4ZGQ2MzcxNWFhMGM1NjgzOGJiNWY4NzQ1
15
+ OTU5MDg0MjRiYjBkZDhhZjY0NjVkMDM1NmI0N2JiMjc5NTk4YmE=
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
19
+ .DS_Store
20
+ .idea/
21
+ .idea/*
22
+ Gemfile.lock
@@ -0,0 +1 @@
1
+ fanforce-api-ruby
@@ -0,0 +1 @@
1
+ 1.9.3-p194
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Caleb Clark
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,133 @@
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
+ ## Getting Started
20
+
21
+ ### Set It Up
22
+
23
+ ``` ruby
24
+ require 'rubygems' # not necessary with ruby 1.9 but included for completeness
25
+ require 'fanforce'
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.new api_key
32
+ ```
33
+
34
+ ### Making Your First Call
35
+
36
+ ``` ruby
37
+ # get your api access info
38
+ ff.get('/access_info', {})
39
+ ```
40
+
41
+ ## Full REST Access
42
+
43
+ ### GET
44
+
45
+ ``` ruby
46
+ ff.get('/', {})
47
+ ```
48
+
49
+ ### POST
50
+
51
+ ``` ruby
52
+ ff.post('/', {})
53
+ ```
54
+
55
+ ### PUT
56
+
57
+ ``` ruby
58
+ ff.put('/', {})
59
+ ```
60
+
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
+ ## Handling Results
106
+
107
+ response.result
108
+ response.results
109
+
110
+ response.total_results
111
+ response.current_results
112
+ response.current_page
113
+ response.total_pages
114
+
115
+ ## Paging
116
+
117
+ response.prev_url
118
+ response.next_url
119
+
120
+ ## Logging
121
+
122
+ By default logging is turned off.
123
+ ```ruby
124
+ Fanforce.config do |config|
125
+ config.logging = true
126
+ end
127
+ ```
128
+
129
+ For more info, see RestClient.logging.
130
+
131
+ ## More Information
132
+
133
+ Visit the Fanforce Developers site to explore the full API access methods available.
@@ -0,0 +1,16 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+ require 'fileutils'
4
+ include FileUtils
5
+
6
+ # Default Rake task is compile
7
+ task :default => :build
8
+
9
+ ########################################################################
10
+
11
+ Rake::TestTask.new do |t|
12
+ t.libs.push "lib"
13
+ t.libs.push "test"
14
+ t.pattern = 'test/**/*_test.rb'
15
+ t.verbose = false
16
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'fanforce/api/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = 'fanforce-api'
8
+ gem.version = Fanforce::Api::VERSION
9
+ gem.date = '2012-10-19'
10
+ gem.summary = %q{Ruby API wrapper for Fanforce}
11
+ gem.description = %q{Ruby API wrapper that interfaces with all six Fanforce APIs.}
12
+ gem.authors = ['Caleb Clark']
13
+ gem.email = ['cclark@fanforce.com']
14
+ gem.homepage = 'http://github.com/fanforce/fanforce-api-ruby'
15
+
16
+ gem.files = `git ls-files`.split($/)
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ['lib']
19
+
20
+ gem.add_runtime_dependency 'multi_json', '~> 1.3'
21
+ gem.add_runtime_dependency 'rest-client', '~> 1.6.7'
22
+
23
+ gem.add_runtime_dependency 'fanforce-errors', '~> 0.2'
24
+ end
@@ -0,0 +1,9 @@
1
+ class Fanforce
2
+ require 'fanforce/errors'
3
+ require_relative 'fanforce/api/version'
4
+ require_relative 'fanforce/api/_main'
5
+ require_relative 'fanforce/api/ff_globals'
6
+ require_relative 'fanforce/api/error'
7
+ include Fanforce::Api
8
+ end
9
+
@@ -0,0 +1,100 @@
1
+ require 'rest-client'
2
+ require_relative 'utils'
3
+ require_relative 'response'
4
+
5
+ module Fanforce::Api
6
+ include Fanforce::Api::Utils
7
+ include Fanforce::Errors
8
+
9
+ def self.included(base) base.extend(self) end
10
+
11
+ def initialize(arg={})
12
+ if arg.is_a?(Hash)
13
+ add_params(arg)
14
+ auth(@params) if @params.length > 0
15
+ elsif arg.is_a?(String)
16
+ auth(arg)
17
+ end
18
+ end
19
+
20
+ def params
21
+ @params ||= {}
22
+ end
23
+
24
+ def add_params(params_to_add)
25
+ params.merge!(collect_known_params params_to_add)
26
+ end
27
+
28
+ def url(path, req_params={})
29
+ req_params = apply_auth(req_params)
30
+ "#{complete_url(path)}?#{to_query_string(req_params)}"
31
+ end
32
+
33
+ def curl_command(method, path, req_params={})
34
+ req_params = apply_auth(req_params)
35
+ Fanforce::Utils.curl_command(method, complete_url(path), req_params)
36
+ end
37
+
38
+ def get(path, req_params={})
39
+ req_params = apply_auth(req_params)
40
+ RestClient.get(url(path, req_params), :accept => :json) do |response, request, result, &block|
41
+ Fanforce::Response.process(response, request, complete_url(path), req_params)
42
+ end
43
+ end
44
+
45
+ def post(path, req_params={})
46
+ url = complete_url(path)
47
+ req_params = apply_auth(req_params)
48
+ RestClient.post(url, req_params.to_json, :content_type => :json, :accept => :json) do |response, request, result, &block|
49
+ Fanforce::Api::Response.process(response, request, url, req_params)
50
+ end
51
+ end
52
+
53
+ def put(path, req_params={})
54
+ url = complete_url(path)
55
+ req_params = apply_auth(req_params)
56
+ RestClient.put(url, req_params.to_json, :content_type => :json, :accept => :json) do |response, request, result, &block|
57
+ Fanforce::Api::Response.process(response, request, url, req_params)
58
+ end
59
+ end
60
+
61
+ def delete(path, req_params={})
62
+ url = complete_url(path)
63
+ req_params = apply_auth(req_params)
64
+ RestClient.delete(url(path, req_params), :accept => :json) do |response, request, result, &block|
65
+ Fanforce::Api::Response.process(response, request, url, req_params)
66
+ end
67
+ end
68
+
69
+ def identify(req_params)
70
+ post '/bie/identify', req_params
71
+ {success: true}
72
+ end
73
+
74
+ def track(plugin_id, req_params)
75
+ post '/bie/track', req_params.merge(plugin_id: plugin_id)
76
+ {success: true}
77
+ end
78
+
79
+ def auth(auth_data=nil)
80
+ @auth_hash ||= {}
81
+ return @auth_hash if is_blank?(auth_data)
82
+ auth_data = auth_data.is_a?(Hash) ? auth_data.symbolize_keys : {api_key: auth_data.to_s}
83
+ @auth_hash.merge! remove_nil_values(api_key: auth_data[:api_key], fanforce_id: auth_data[:fanforce_id], fanforce_slug: auth_data[:fanforce_slug])
84
+ params.merge!(@auth_hash)
85
+ valid_auth?
86
+ end
87
+
88
+ def valid_auth?
89
+ is_present?(@auth_hash) and is_present?(@auth_hash[:api_key]) and is_present?(@auth_hash[:fanforce_id])
90
+ end
91
+
92
+ def apply_auth(req_params)
93
+ req_params.merge(@auth_hash || {})
94
+ end
95
+
96
+ def complete_url(path)
97
+ 'http://' + $API_DOMAIN + path
98
+ end
99
+
100
+ end
@@ -0,0 +1,67 @@
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
+ begin
31
+ @response_hash = Fanforce::Utils.decode_json(response)
32
+ @errors = @response_hash[:errors]
33
+ rescue Exception => e
34
+ raise Fanforce::Api::DecodingError.new(e, response, request, requested_url, requested_params)
35
+ end
36
+
37
+ super(response.to_s, response, request, requested_url, requested_params)
38
+ end
39
+
40
+ def to_hash
41
+ @response_hash
42
+ end
43
+
44
+ def curl_command
45
+ method = begin @request.method rescue nil end
46
+ Fanforce::Utils.curl_command(method, @requested_url, @requested_params)
47
+ end
48
+
49
+ def code; @response.code end
50
+
51
+ end
52
+
53
+ class Fanforce::Api::DecodingError < Fanforce::Api::Error
54
+
55
+ def initialize(e, response, request, requested_url, requested_params)
56
+ @message = "There was a Fanforce gem error while decoding JSON response: #{e.message}"
57
+ @errors = [{message: @message}]
58
+ super(@message, response, request, requested_url, requested_params)
59
+ end
60
+
61
+ def to_hash
62
+ {errors: @errors}
63
+ end
64
+
65
+ def code; 500 end
66
+
67
+ end
@@ -0,0 +1,73 @@
1
+ if !ENV['RACK_ENV'] or ENV['RACK_ENV'] == 'development'
2
+ top_level_domain = ENV['FANFORCE_GEM_TOP_LEVEL_DOMAIN'] || 'gg'
3
+ $BASE_DOMAIN = ENV['FANFORCE_GEM_BASE_DOMAIN'] || 'fanforce.' + top_level_domain
4
+ $APP_DOMAIN = 'app.' + $BASE_DOMAIN
5
+ $API_DOMAIN = 'api.' + $BASE_DOMAIN
6
+ $I_DOMAIN = 'i.' + $BASE_DOMAIN
7
+ $WEBSITE_DOMAIN = $BASE_DOMAIN
8
+
9
+ $SMARTURL_DOMAIN = 'fanforc.' + top_level_domain
10
+ $FF_PLUGIN_DOMAIN = 'ffplugin.' + top_level_domain
11
+ $FF_APP_DOMAIN = 'ffapp.' + top_level_domain
12
+ $FF_WIDGET_DOMAIN = 'ffwidget.' + top_level_domain
13
+
14
+ $DEVS_DOMAIN = 'technical%40mobilizationlabs.com:zE27fdevelopers@developers-fanforce.dotcloud.com' # or localhost:3000'
15
+
16
+ $PUSHER_APP_ID = '23240'
17
+ $PUSHER_KEY = '029caf227a64c8e82e99'
18
+ $PUSHER_SECRET = '3169163d2e27de9a2291'
19
+
20
+ elsif ENV['RACK_ENV'] == 'test'
21
+ $BASE_DOMAIN = 'fanforce.gg'
22
+ $APP_DOMAIN = 'app.' + $BASE_DOMAIN
23
+ $API_DOMAIN = 'api.' + $BASE_DOMAIN
24
+ $I_DOMAIN = 'i.' + $BASE_DOMAIN
25
+ $WEBSITE_DOMAIN = $BASE_DOMAIN
26
+
27
+ $SMARTURL_DOMAIN = 'fanforc.gg'
28
+ $FF_PLUGIN_DOMAIN = 'ffplugin.gg'
29
+ $FF_WIDGET_DOMAIN = 'ffwidget.gg'
30
+ $FF_APP_DOMAIN = 'ffapp.gg'
31
+
32
+ $DEVS_DOMAIN = 'technical%40mobilizationlabs.com:zE27fdevelopers@developers-fanforce.dotcloud.com'
33
+
34
+ $PUSHER_APP_ID = '23243'
35
+ $PUSHER_KEY = '7bcc87b3c55301f687b9'
36
+ $PUSHER_SECRET = '61c760c05430e68d7e8d'
37
+
38
+ elsif ENV['RACK_ENV'] == 'qa'
39
+ $BASE_DOMAIN = 'fanforce-qa.com'
40
+ $APP_DOMAIN = 'app.' + $BASE_DOMAIN
41
+ $API_DOMAIN = 'api.' + $BASE_DOMAIN
42
+ $I_DOMAIN = 'i.' + $BASE_DOMAIN
43
+ $WEBSITE_DOMAIN = $BASE_DOMAIN
44
+
45
+ $SMARTURL_DOMAIN = 'fanforc.us'
46
+ $FF_PLUGIN_DOMAIN = 'ffplugin.us'
47
+ $FF_APP_DOMAIN = 'ffapp.us'
48
+ $FF_WIDGET_DOMAIN = 'ffwidget.us'
49
+
50
+ $DEVS_DOMAIN = 'technical%40mobilizationlabs.com:zE27fdevelopers@developers-fanforce.dotcloud.com'
51
+
52
+ $PUSHER_APP_ID = '14778'
53
+ $PUSHER_KEY = 'b5e2e23fb9542798ef38'
54
+ $PUSHER_SECRET = '7bfba2003df078ca64e9'
55
+
56
+ elsif ENV['RACK_ENV'] == 'production'
57
+ $BASE_DOMAIN = 'fanforce.com'
58
+ $APP_DOMAIN = 'app.' + $BASE_DOMAIN
59
+ $API_DOMAIN = 'api.' + $BASE_DOMAIN
60
+ $I_DOMAIN = 'i.' + $BASE_DOMAIN
61
+ $WEBSITE_DOMAIN = $BASE_DOMAIN
62
+
63
+ $SMARTURL_DOMAIN = 'fanforce.io'
64
+ $FF_PLUGIN_DOMAIN = 'ffplugin.io'
65
+ $FF_APP_DOMAIN = 'ffapp.io'
66
+ $FF_WIDGET_DOMAIN = 'ffwidget.io'
67
+
68
+ $DEVS_DOMAIN = 'technical%40mobilizationlabs.com:zE27fdevelopers@developers-fanforce.dotcloud.com'
69
+
70
+ $PUSHER_APP_ID = '14778'
71
+ $PUSHER_KEY = 'b5e2e23fb9542798ef38'
72
+ $PUSHER_SECRET = '7bfba2003df078ca64e9'
73
+ end
@@ -0,0 +1,111 @@
1
+ class Fanforce::Api::Response
2
+ attr_reader :curl_command, :requested_url, :requested_params
3
+
4
+ def self.process(response, request, requested_url, requested_params)
5
+ raise Fanforce::Api::ServerError.new(response, request, requested_url, requested_params) if response.code > 201
6
+ begin response_hash = Fanforce::Utils.decode_json(response)
7
+ rescue Exception => e; raise Fanforce::Api::DecodingError.new(e, response, request, requested_url, requested_params) end
8
+ if response_hash[:results]
9
+ Fanforce::Api::Results.new(response_hash, response, request, requested_url, requested_params)
10
+ else
11
+ Fanforce::Api::Result.new(response_hash, response, request, requested_url, requested_params)
12
+ end
13
+ end
14
+
15
+ end
16
+
17
+ class Fanforce::Api::Result < Hash
18
+ attr_reader :requested_url, :requested_params
19
+
20
+ def initialize(response_hash, response, request, requested_url, requested_params)
21
+ @response = response
22
+ @request = request
23
+ @requested_url = requested_url
24
+ @requested_params = requested_params
25
+ @response_hash = response_hash
26
+ self.replace(response_hash)
27
+ end
28
+
29
+ def data
30
+ self
31
+ end
32
+ alias result data
33
+
34
+ def curl_command
35
+ @curl_command ||= Fanforce::Utils.curl_command(@request.method, @requested_url, @requested_params)
36
+ end
37
+
38
+ def body;
39
+ @response.to_s
40
+ end
41
+
42
+ def current_results; 1 end
43
+ def total_results; 1 end
44
+ def current_page; 1 end
45
+ def total_pages; 1 end
46
+ def prev_page; nil end
47
+ def next_page; nil end
48
+ def prev_page_url; nil end
49
+ def next_page_url; nil end
50
+ def code; @response.code end
51
+ end
52
+
53
+ class Fanforce::Api::Results < Array
54
+ attr_reader :requested_url, :requested_params
55
+
56
+ def initialize(response_hash, response, request, requested_url, requested_params)
57
+ @response = response
58
+ @request = request
59
+ @requested_url = requested_url
60
+ @requested_params = requested_params
61
+ @response_hash = response_hash
62
+ self.replace(response_hash[:results])
63
+ end
64
+
65
+ def data
66
+ self
67
+ end
68
+ alias results data
69
+
70
+ def curl_command
71
+ @curl_command ||= Fanforce::Utils.curl_command(@request.method, @requested_url, @requested_params)
72
+ end
73
+
74
+ def body;
75
+ @response.to_s
76
+ end
77
+
78
+ def current_results
79
+ @current_results ||= @response_hash[:current_results]
80
+ end
81
+
82
+ def total_results;
83
+ @total_results ||= @response_hash[:total_results]
84
+ end
85
+
86
+ def current_page;
87
+ @current_page ||= @response_hash[:current_page]
88
+ end
89
+
90
+ def total_pages;
91
+ @total_pages ||= @response_hash[:total_pages]
92
+ end
93
+
94
+ def prev_page
95
+ @prev_page ||= (@request.method == :get and current_page > 1) ? current_page - 1 : nil
96
+ end
97
+
98
+ def next_page
99
+ @next_page ||= (@request.method == :get and total_pages > current_page) ? current_page + 1 : nil
100
+ end
101
+
102
+ def prev_page_url;
103
+ @prev_page_url ||= prev_page ? "#{@requested_url}?#{Fanforce::Utils.to_query_string(@requested_params.merge(page: current_page-1))}" : nil
104
+ end
105
+
106
+ def next_page_url;
107
+ @next_page_url ||= next_page ? "#{@requested_url}?#{Fanforce::Utils.to_query_string(@requested_params.merge(page: current_page+1))}" : nil
108
+ end
109
+ def code; @response.code end
110
+
111
+ end
@@ -0,0 +1,67 @@
1
+ require 'fanforce/utils'
2
+
3
+ module Fanforce::Api::Utils
4
+ include Fanforce::Utils
5
+ extend Fanforce::Api::Utils
6
+ def self.included(base) base.extend(self) end
7
+
8
+ def valid_fanforce_js_request?(params=@params)
9
+ return false if !params.is_a?(Hash)
10
+ return false if is_blank?(params[:fanforce_id]) or is_blank?(params[:api_key])
11
+ return true
12
+ end
13
+
14
+ def valid_fanforce_request?(params=@params)
15
+ return false if !params.is_a?(Hash)
16
+ return false if is_blank?(params[:fanforce_id])
17
+ return false if is_blank?(params[:app_id]) and is_blank?(params[:behavior_plugin_id]) and is_blank?(params[:plugin_id]) and is_blank?(params[:widget_id])
18
+ return true
19
+ end
20
+
21
+ def valid_install_request?(params=@params)
22
+ return false if !params.is_a?(Hash)
23
+ return false if is_blank?(params[:fanforce_id])
24
+ return false if is_blank?(params[:app_id]) and is_blank?(params[:behavior_plugin_id]) and is_blank?(params[:plugin_id]) and is_blank?(params[:widget_id])
25
+ return false if is_blank?(params[:api_key])
26
+ return true
27
+ end
28
+
29
+ def valid_uninstall_request?(params=@params)
30
+ return false if !params.is_a?(Hash)
31
+ return false if is_blank?(params[:fanforce_id])
32
+ return false if is_blank?(params[:app_id]) and is_blank?(params[:behavior_plugin_id]) and is_blank?(params[:plugin_id]) and is_blank?(params[:widget_id])
33
+ return false if is_blank?(params[:api_key])
34
+ return true
35
+ end
36
+
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 = params.symbolize_keys
43
+ if is_present?(params[:app_id])
44
+ addon_type = :app
45
+ addon_id = params[:app_id]
46
+ elsif is_present?(params[:behavior_plugin_id])
47
+ addon_type = :plugin
48
+ addon_id = params[:behavior_plugin_id]
49
+ elsif is_present?(params[:plugin_id])
50
+ addon_type = :plugin
51
+ addon_id = params[:plugin_id]
52
+ elsif is_present?(params[:widget_id])
53
+ addon_type = :widget
54
+ addon_id = params[:widget_id]
55
+ end
56
+ remove_nil_values(:"#{addon_type}_id" => params[:"#{addon_type}_id"], addon_type: addon_type, addon_id: addon_id, fanforce_id: params[:fanforce_id], fanforce_slug: params[:fanforce_slug], api_key: params[:api_key], session_id: params[:session_id])
57
+ end
58
+
59
+ def remove_internal_params(params)
60
+ params.clone.delete_if { |k,v| [:app_id, :behavior_plugin_id, :plugin_id, :widget_id, :addon_type, :addon_id, :fanforce_id, :fanforce_slug, :api_key].include? k }
61
+ end
62
+
63
+ def remove_sensitive_params(params)
64
+ params.clone.delete_if { |k,v| [:api_key].include? k }
65
+ end
66
+
67
+ end
@@ -0,0 +1,5 @@
1
+ class Fanforce
2
+ module Api
3
+ VERSION = '0.8.0'
4
+ end
5
+ end
@@ -0,0 +1,22 @@
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
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fanforce-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.0
5
+ platform: ruby
6
+ authors:
7
+ - Caleb Clark
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2012-10-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: multi_json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rest-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.6.7
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.6.7
41
+ - !ruby/object:Gem::Dependency
42
+ name: fanforce-errors
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.2'
55
+ description: Ruby API wrapper that interfaces with all six Fanforce APIs.
56
+ email:
57
+ - cclark@fanforce.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - .gitignore
63
+ - .rbenv-gemsets
64
+ - .rbenv-version
65
+ - Gemfile
66
+ - LICENSE.md
67
+ - README.md
68
+ - Rakefile
69
+ - fanforce-api.gemspec
70
+ - lib/fanforce.rb
71
+ - lib/fanforce/api/_main.rb
72
+ - lib/fanforce/api/error.rb
73
+ - lib/fanforce/api/ff_globals.rb
74
+ - lib/fanforce/api/response.rb
75
+ - lib/fanforce/api/utils.rb
76
+ - lib/fanforce/api/version.rb
77
+ - test/fanforce_test.rb
78
+ homepage: http://github.com/fanforce/fanforce-api-ruby
79
+ licenses: []
80
+ metadata: {}
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubyforge_project:
97
+ rubygems_version: 2.0.3
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: Ruby API wrapper for Fanforce
101
+ test_files:
102
+ - test/fanforce_test.rb