adkit 0.1.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,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: bc696a7e1180684bd2ceb9a5de358491c7eb4d9a19e8b1fe8e4c3c56d2a05e6d
4
+ data.tar.gz: adc654e90b4c0cac33502c4f1549623557a7dd064490329f3bd2716d9a2b0269
5
+ SHA512:
6
+ metadata.gz: a949fb700fa2257c80b7340a5c0b45bd3312f3c55ccc594379299b0af0e6084e08c8d57a6de2f068793f0b73ab48d0c1e8b9e45cfb01305143957ddb24ddcd97
7
+ data.tar.gz: 4ffe3538e86df6a1fa84626877fac15f2bf6c170c17646b10106ab156ecd8ab97e5cffe05d5dd2fe98fa3faffccddd0f50b4865662f152f10253ffe41e24037f
@@ -0,0 +1,12 @@
1
+
2
+ /.bundle/
3
+ /.yardoc
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ /.vagrant/
12
+ /ubuntu-xenial-16.04-cloudimg-console.log
@@ -0,0 +1,3 @@
1
+ ## 0.1.0 / 2020-07-28
2
+
3
+ * Initial release!
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ gemspec
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 Sean Walker
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,85 @@
1
+ # adkit
2
+
3
+ Easy marketing calculations
4
+
5
+ ## Conversion Rate
6
+
7
+ ```ruby
8
+ total = 1_000
9
+ conversions = 15
10
+
11
+ Adkit.conversion_rate(total, conversions) # => 1.5
12
+
13
+ # or if you like acronyms
14
+ Adkit.cvr(total, conversions) # => 1.5
15
+ ```
16
+
17
+ ## Lift
18
+
19
+ ```ruby
20
+ total = 1_000
21
+ conversions = 30
22
+
23
+ control = 100
24
+ control_conversions = 1
25
+
26
+ Adkit.lift(total, conversions, control, control_conversions) # => 200.0
27
+ ```
28
+
29
+ ## Cost Per Action
30
+
31
+ ```ruby
32
+ cost = 9_876
33
+ conversions = 1_000
34
+
35
+ Adkit.cost_per_action(cost, conversions) # => 10.0
36
+
37
+ # or
38
+
39
+ Adkit.cpa(cost, conversions) # => 10.0
40
+ ```
41
+
42
+ ## Incremental Cost Per Action
43
+
44
+ ```ruby
45
+ total = 5_000
46
+ cost = 100
47
+ conversions = 1_000
48
+ control = 100
49
+ control_conversions = 5
50
+
51
+ Adkit.incremental_cpa(total, cost, conversions, control, control_conversions) # => 0.1333333
52
+
53
+ # or
54
+
55
+ Adkit.cpia(total, cost, conversions, control, control_conversions) # => 0.1333333
56
+
57
+ # or
58
+
59
+ Adkit.icpa(total, cost, conversions, control, control_conversions) # => 0.1333333
60
+ ```
61
+
62
+ ## Average Order Value
63
+
64
+ ```ruby
65
+ revenue = 123_456
66
+ conversions = 345
67
+
68
+ Adkit.average_order_value(revenue, conversions) # => 357.8434782608696
69
+
70
+ # or
71
+
72
+ Adkit.aov(revenue, conversions) # => 357.8434782608696
73
+ ```
74
+
75
+ ## Return on Ad Spend
76
+
77
+ ```ruby
78
+ revenue = 12_345
79
+ cost = 987
80
+
81
+ Adkit.return_on_ad_spend(revenue, cost) # => 1250.759878419453
82
+
83
+ # or
84
+ Adkit.roas(revenue, cost)
85
+ ```
@@ -0,0 +1,8 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.libs << 'test'
5
+ end
6
+
7
+ desc "Run tests"
8
+ task :default => :test
@@ -0,0 +1,32 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ # Provisioning script
5
+ $script = <<SCRIPT
6
+ echo "*** Updating packages"
7
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y aptitude
8
+ sudo DEBIAN_FRONTEND=noninteractive aptitude update
9
+ sudo DEBIAN_FRONTEND=noninteractive aptitude -y safe-upgrade
10
+ echo "*** Installing new packages"
11
+ sudo DEBIAN_FRONTEND=noninteractive aptitude install -y curl git-core vim
12
+ if rvm -v 2>/dev/null; then
13
+ echo "*** rvm already installed, skipping"
14
+ else
15
+ echo "*** Installing rvm"
16
+ gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
17
+ curl -sSL https://get.rvm.io | bash -s stable --ruby
18
+ echo "gem: --no-document" > ~/.gemrc
19
+ echo "*** Finished installing rvm"
20
+ fi
21
+ echo "*********************"
22
+ echo "PROVISIONING FINISHED"
23
+ echo "*********************"
24
+ SCRIPT
25
+
26
+
27
+ Vagrant.configure('2') do |config|
28
+ config.vm.box = 'ubuntu/xenial64'
29
+ config.vm.hostname = 'adkit-dev'
30
+
31
+ config.vm.provision 'shell', inline: $script, privileged: false
32
+ end
@@ -0,0 +1,38 @@
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'adkit'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'adkit'
7
+ spec.version = Adkit::VERSION
8
+ spec.authors = ["Sean Walker"]
9
+ spec.email = [""]
10
+
11
+ spec.summary = %q{Easy marketing calculations}
12
+ spec.description = %q{A bundle of common marketing calculations}
13
+ spec.homepage = "https://github.com/swlkr/adkit"
14
+ spec.license = "MIT"
15
+
16
+ if spec.respond_to?(:metadata)
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = "https://github.com/swlkr/adkit"
19
+ spec.metadata["changelog_uri"] = "https://github.com/swlkr/adkit/CHANGELOG.md"
20
+ else
21
+ raise "RubyGems 2.0 or newer is required to protect against " \
22
+ "public gem pushes."
23
+ end
24
+
25
+ # Specify which files should be added to the gem when it is released.
26
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
27
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
28
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
29
+ end
30
+ spec.bindir = "exe"
31
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
+ spec.require_paths = ["lib"]
33
+
34
+ spec.required_ruby_version = '~> 2.4'
35
+
36
+ spec.add_development_dependency "bundler", "~> 1.17"
37
+ spec.add_development_dependency "rake", "~> 13.0"
38
+ end
@@ -0,0 +1,67 @@
1
+ module Adkit
2
+ VERSION = '0.1.0'.freeze
3
+
4
+ class << self
5
+ def cvr(total, conversions)
6
+ if total.zero?
7
+ 0.0
8
+ else
9
+ 100.0 * conversions / total.to_f
10
+ end
11
+ end
12
+
13
+ alias conversion_rate cvr
14
+
15
+ def lift(total, conversions, control, control_conversions)
16
+ real_cvr = cvr(total, conversions)
17
+ control_cvr = cvr(control, control_conversions)
18
+
19
+ if control_cvr.zero?
20
+ 0.0
21
+ else
22
+ 100.0 * (real_cvr - control_cvr) / control_cvr
23
+ end
24
+ end
25
+
26
+ def cpa(cost, conversions)
27
+ if conversions.zero?
28
+ 0.0
29
+ else
30
+ cost / conversions.to_f
31
+ end
32
+ end
33
+
34
+ alias cost_per_action cpa
35
+
36
+ def incremental_cpa(total, cost, conversions, control, control_conversions)
37
+ if control.zero?
38
+ 0.0
39
+ else
40
+ cpa(cost.to_f, conversions.to_f - (control_conversions.to_f * (total.to_f / control)))
41
+ end
42
+ end
43
+
44
+ alias cpia incremental_cpa
45
+ alias icpa incremental_cpa
46
+
47
+ def aov(revenue, conversions)
48
+ if conversions.zero?
49
+ 0.0
50
+ else
51
+ revenue / conversions.to_f
52
+ end
53
+ end
54
+
55
+ alias average_order_value aov
56
+
57
+ def roas(revenue, cost)
58
+ if cost.zero?
59
+ 0.0
60
+ else
61
+ 100.0 * revenue / cost.to_f
62
+ end
63
+ end
64
+
65
+ alias return_on_ad_spend roas
66
+ end
67
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: adkit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sean Walker
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-07-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.17'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.17'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '13.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '13.0'
41
+ description: A bundle of common marketing calculations
42
+ email:
43
+ - ''
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - CHANGELOG.md
50
+ - Gemfile
51
+ - LICENSE.txt
52
+ - README.md
53
+ - Rakefile
54
+ - Vagrantfile
55
+ - adkit.gemspec
56
+ - lib/adkit.rb
57
+ homepage: https://github.com/swlkr/adkit
58
+ licenses:
59
+ - MIT
60
+ metadata:
61
+ homepage_uri: https://github.com/swlkr/adkit
62
+ source_code_uri: https://github.com/swlkr/adkit
63
+ changelog_uri: https://github.com/swlkr/adkit/CHANGELOG.md
64
+ post_install_message:
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '2.4'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ requirements: []
79
+ rubygems_version: 3.1.2
80
+ signing_key:
81
+ specification_version: 4
82
+ summary: Easy marketing calculations
83
+ test_files: []