affilimator 0.0.1.1

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,2 @@
1
+ .idea
2
+ AffilmatorGem.iml
data/.rvmrc ADDED
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # This is an RVM Project .rvmrc file, used to automatically load the ruby
4
+ # development environment upon cd'ing into the directory
5
+
6
+ # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional.
7
+ environment_id="ruby-1.9.2-p290@affilmator-gem"
8
+
9
+ #
10
+ # Uncomment following line if you want options to be set only for given project.
11
+ #
12
+ # PROJECT_JRUBY_OPTS=( --1.9 )
13
+
14
+ #
15
+ # First we attempt to load the desired environment directly from the environment
16
+ # file. This is very fast and efficient compared to running through the entire
17
+ # CLI and selector. If you want feedback on which environment was used then
18
+ # insert the word 'use' after --create as this triggers verbose mode.
19
+ #
20
+ if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
21
+ && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
22
+ then
23
+ \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
24
+
25
+ if [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]]
26
+ then
27
+ . "${rvm_path:-$HOME/.rvm}/hooks/after_use"
28
+ fi
29
+ else
30
+ # If the environment file has not yet been created, use the RVM CLI to select.
31
+ if ! rvm --create use "$environment_id"
32
+ then
33
+ echo "Failed to create RVM environment '${environment_id}'."
34
+ exit 1
35
+ fi
36
+ fi
37
+
38
+ #
39
+ # If you use an RVM gemset file to install a list of gems (*.gems), you can have
40
+ # it be automatically loaded. Uncomment the following and adjust the filename if
41
+ # necessary.
42
+ #
43
+ # filename=".gems"
44
+ # if [[ -s "$filename" ]]
45
+ # then
46
+ # rvm gemset import "$filename" | grep -v already | grep -v listed | grep -v complete | sed '/^$/d'
47
+ # fi
48
+
49
+ # If you use bundler, this might be useful to you:
50
+ # if command -v bundle && [[ -s Gemfile ]]
51
+ # then
52
+ # bundle install
53
+ # fi
54
+
55
+
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source :rubygems
2
+
3
+ gem "json_pure"
4
+
5
+ group :test do
6
+ gem 'rspec'
7
+ gem "rack-test", :require => "rack/test"
8
+ end
@@ -0,0 +1,24 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.3)
5
+ json_pure (1.7.5)
6
+ rack (1.4.1)
7
+ rack-test (0.6.2)
8
+ rack (>= 1.0)
9
+ rspec (2.11.0)
10
+ rspec-core (~> 2.11.0)
11
+ rspec-expectations (~> 2.11.0)
12
+ rspec-mocks (~> 2.11.0)
13
+ rspec-core (2.11.1)
14
+ rspec-expectations (2.11.3)
15
+ diff-lcs (~> 1.1.3)
16
+ rspec-mocks (2.11.3)
17
+
18
+ PLATFORMS
19
+ ruby
20
+
21
+ DEPENDENCIES
22
+ json_pure
23
+ rack-test
24
+ rspec
@@ -0,0 +1,2 @@
1
+ Affilimator Gem
2
+ =====
@@ -0,0 +1,13 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'affilimator'
3
+ s.version = '0.0.1.1'
4
+ s.date = '2012-11-01'
5
+ s.summary = "Affiliate Management Gem"
6
+ s.description = "A simple affilimator client gem"
7
+ s.authors = ["Carson Gross"]
8
+ s.email = 'carsongross@gmail.com'
9
+ s.files = `git ls-files`.split("\n")
10
+ s.homepage =
11
+ 'http://rubygems.org/gems/affilimator'
12
+ s.add_dependency('json_pure')
13
+ end
@@ -0,0 +1 @@
1
+ var Affilimator=Affilimator||function(){function enc(val){return window.encodeURIComponent?encodeURIComponent(val):escape(val)}function dec(val){return window.decodeURIComponent?decodeURIComponent(val):unescape(val)}function gets(){var i,x,y,c=document.cookie.split(";");for(i=0;i<c.length;i++){x=c[i].substr(0,c[i].indexOf("=")),y=c[i].substr(c[i].indexOf("=")+1),x=x.replace(/^\s+|\s+$/g,"");if(x=="aflm_st")return dec(y)}return""}function delc(name){document.cookie=name+"=; expires=Thu, 01 Jan 1970 00:00:01 GMT;"}function aref(){var queryString=location.search.substring(1),re=/([^&=]+)=([^&]*)/g,m;while(m=re.exec(queryString)){var key=dec(m[1]);if(key=="afmc")return dec(m[2])}return""}function call(action,args){args&&(_callback=args.onFinish);var argsStr="key="+args.key;args.email&&(argsStr+="&email="+args.email),args.tags&&(argsStr+="&tags="+args.tags),args.plan&&(argsStr+="&plan="+args.plan);var afmc=aref();afmc!=""?argsStr+="&afmc="+afmc:args.afmc&&(argsStr+="&afmc="+args.afmc);var ref=findRef();ref!=""&&(argsStr+="&ref="+ref);var u=findU();u!=""&&(argsStr+="&u="+u);var s=document.createElement("script");s.type="text/javascript",s.async="async",s.src="https://js.affilimator.com/js/"+action+"?"+argsStr,document.getElementsByTagName("head")[0]?document.getElementsByTagName("head")[0].appendChild(s):document.getElementsByTagName("body")[0].appendChild(s)}function findRef(){var ref=document.referrer;return ref?enc(ref):""}function findU(){return enc([location.protocol,"//",location.host,location.pathname].join(""))}var _callback=null;return{ping:function(args){args=typeof args!="undefined"?args:{};var s=gets();s==""?call("click",args):args.onFinish&&args.onFinish()},register:function(args){args=typeof args!="undefined"?args:{};var s=gets();s==""||s=="c"?call("reg",args):args.onFinish&&args.onFinish()},finish:function(val){var last_callback=_callback;last_callback&&(last_callback(val),last_callback==_callback&&(_callback=null))},ss:function(val){var d=new Date;d.setDate(d.getDate()+36e3),document.cookie="aflm_st="+enc(val)+"; expires="+d.toUTCString()+"; path=/"},log:function(val){}}}();
@@ -0,0 +1,131 @@
1
+ # To use, call
2
+ # <%= Affilimator.enable(email, cookie).html_safe %>
3
+ # in the layout file(s)
4
+ #
5
+ class Affilimator
6
+
7
+ require 'json/pure'
8
+
9
+ AFFILIMATOR_CONVERT_URL = "https://api.affilimator.com/v1/convert"
10
+ AFFILIMATOR_CANCEL_URL = "https://api.affilimator.com/v1/cancel"
11
+
12
+ @@private_key = nil
13
+ @@public_key = nil
14
+ @@logging_proc = nil
15
+ @@minified_js = nil
16
+
17
+ def self.convert(email, plan)
18
+ if configured
19
+ aff_uri = URI.parse(AFFILIMATOR_CONVERT_URL)
20
+ aff_http = Net::HTTP.new(aff_uri.host, aff_uri.port)
21
+ aff_http.use_ssl = true
22
+ aff_post = Net::HTTP::Post.new(aff_uri.request_uri)
23
+ aff_post.set_form_data({"key" => aff_private_key, "email" => email, "plan" => plan})
24
+ aff_response = aff_http.request(aff_post)
25
+ log "Affilimator Convert Response: #{aff_response}"
26
+ end
27
+ end
28
+
29
+ def self.cancel(email)
30
+ if configured
31
+ aff_uri = URI.parse(AFFILIMATOR_CANCEL_URL)
32
+ aff_http = Net::HTTP.new(aff_uri.host, aff_uri.port)
33
+ aff_http.use_ssl = true
34
+ aff_post = Net::HTTP::Post.new(aff_uri.request_uri)
35
+ aff_post.set_form_data({"key" => aff_private_key, "email" => email})
36
+ aff_response = aff_http.request(aff_post)
37
+ puts "Affilimator Cancel Response: #{aff_response}"
38
+ end
39
+ end
40
+
41
+ def self.provision_affiliate(user_email)
42
+ if configured
43
+ aff_uri = URI.parse("https://api.affilimator.com/v1/link")
44
+ aff_http = Net::HTTP.new(aff_uri.host, aff_uri.port)
45
+ aff_http.use_ssl = true
46
+ aff_post = Net::HTTP::Post.new(aff_uri.request_uri)
47
+ aff_post.set_form_data({"key" => aff_private_key, "email" => user_email})
48
+ aff_response = aff_http.request(aff_post)
49
+ puts "Affilimator Cancel Response: #{aff_response}"
50
+ body = JSON.parse(aff_response.body)
51
+ body # return a structured object
52
+ end
53
+ end
54
+
55
+ def self.register_js(email, cookies = nil, include_lib = true, in_script_tag = true)
56
+ if cookies and cookies[:aflm_st] == "r"
57
+ "" # user is registered, emit nothing
58
+ else
59
+ js = ""
60
+
61
+ if include_lib then
62
+ js += minified_js
63
+ end
64
+
65
+ "Affilimator.register({key: '#{aff_public_key}', email:'#{email}'})"
66
+
67
+ if in_script_tag then
68
+ js = "<script >" + js + "</script>"
69
+ end
70
+ js
71
+ end
72
+ end
73
+
74
+ def self.config(settings)
75
+ @@private_key = settings[:private_key]
76
+ @@public_key = settings[:public_key]
77
+ @@logging_proc = settings[:logger]
78
+ end
79
+
80
+ def self.configured
81
+ if @@private_key ||ENV['AFFILIMATOR_PRIVATE_KEY'] then
82
+ true
83
+ else
84
+ if not @@warned_on_config
85
+ puts "Affilimator is not configured for this environment. If that is not your intent, either "
86
+ puts "configure it via the Affilimator.config() call or using the AFFILIMATOR_PRIVATE_KEY and "
87
+ puts "AFFIMILATOR_PUBLIC_KEY environment variables."
88
+ @@warned_on_config = true
89
+ end
90
+ end
91
+ end
92
+
93
+ def self.aff_private_key
94
+ @@private_key || ENV['AFFILIMATOR_PRIVATE_KEY']
95
+ end
96
+
97
+ def self.aff_public_key
98
+ @@public_key || ENV['AFFILIMATOR_PUBLIC_KEY']
99
+ end
100
+
101
+ def self.log(msg)
102
+ if @@logging_proc then
103
+ @@logging_proc.call(msg)
104
+ end
105
+ end
106
+
107
+ def self.enable email=nil, cookies=nil
108
+ aff_elements = "<script>#{minified_js}</script>"
109
+
110
+ if !(aff_public_key.nil? || email.nil?)
111
+ aff_elements += "<script>#{register_js(email,cookies)}</script>"
112
+ end
113
+
114
+ aff_elements
115
+ end
116
+
117
+ private
118
+
119
+ def self.minified_js
120
+ if not @@minified_js then
121
+ @@minified_js = File.new("#{locate_gem('affilimator')}/lib/affilimator.min.js").read
122
+ end
123
+ @@minified_js
124
+ end
125
+
126
+ def self.locate_gem(name)
127
+ spec = Gem::Specification.find_by_name('affilimator')
128
+ spec.gem_dir
129
+ end
130
+
131
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: affilimator
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1.1
6
+ platform: ruby
7
+ authors:
8
+ - Carson Gross
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2012-11-01 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: json_pure
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ type: :runtime
25
+ version_requirements: *id001
26
+ description: A simple affilimator client gem
27
+ email: carsongross@gmail.com
28
+ executables: []
29
+
30
+ extensions: []
31
+
32
+ extra_rdoc_files: []
33
+
34
+ files:
35
+ - .gitignore
36
+ - .rvmrc
37
+ - Gemfile
38
+ - Gemfile.lock
39
+ - README.md
40
+ - affilimator.gemspec
41
+ - lib/affilimator.min.js
42
+ - lib/affilimator.rb
43
+ homepage: http://rubygems.org/gems/affilimator
44
+ licenses: []
45
+
46
+ post_install_message:
47
+ rdoc_options: []
48
+
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "0"
63
+ requirements: []
64
+
65
+ rubyforge_project:
66
+ rubygems_version: 1.8.10
67
+ signing_key:
68
+ specification_version: 3
69
+ summary: Affiliate Management Gem
70
+ test_files: []
71
+