gxapi_rails 0.0.2
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 +7 -0
- data/LICENSE.txt +20 -0
- data/README.md +161 -0
- data/Rakefile +25 -0
- data/app/helpers/gxapi_helper.rb +108 -0
- data/lib/gxapi.rb +160 -0
- data/lib/gxapi/base.rb +100 -0
- data/lib/gxapi/controller_methods.rb +41 -0
- data/lib/gxapi/engine.rb +14 -0
- data/lib/gxapi/google_analytics.rb +193 -0
- data/lib/gxapi/ostruct.rb +86 -0
- data/lib/gxapi/version.rb +3 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/controllers/posts_controller.rb +11 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/helpers/posts_helper.rb +2 -0
- data/spec/dummy/app/models/post.rb +3 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/app/views/posts/_form.html.erb +25 -0
- data/spec/dummy/app/views/posts/edit.html.erb +6 -0
- data/spec/dummy/app/views/posts/index.html.erb +36 -0
- data/spec/dummy/app/views/posts/new.html.erb +5 -0
- data/spec/dummy/app/views/posts/show.html.erb +15 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +70 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +22 -0
- data/spec/dummy/config/database.yml.default +111 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +38 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/gxapi.yml +17 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/konfig/application.rb +16 -0
- data/spec/dummy/config/konfig/development.rb +10 -0
- data/spec/dummy/config/konfig/production.rb +3 -0
- data/spec/dummy/config/konfig/test.rb +3 -0
- data/spec/dummy/config/konfig/test_prod.rb +3 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/config/test.p12 +0 -0
- data/spec/dummy/data/log/dummy/development.log +113 -0
- data/spec/dummy/data/log/dummy/test.log +927 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/test.log +1443 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/features/display_variant_js_spec.rb +34 -0
- data/spec/helpers/gxapi_helper_spec.rb +63 -0
- data/spec/lib/gxapi/base_spec.rb +80 -0
- data/spec/lib/gxapi/google_analytics_spec.rb +70 -0
- data/spec/lib/gxapi_spec.rb +32 -0
- data/spec/spec_helper.rb +32 -0
- metadata +233 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>The page you were looking for doesn't exist (404)</title>
|
5
|
+
<style type="text/css">
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
7
|
+
div.dialog {
|
8
|
+
width: 25em;
|
9
|
+
padding: 0 4em;
|
10
|
+
margin: 4em auto 0 auto;
|
11
|
+
border: 1px solid #ccc;
|
12
|
+
border-right-color: #999;
|
13
|
+
border-bottom-color: #999;
|
14
|
+
}
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
16
|
+
</style>
|
17
|
+
</head>
|
18
|
+
|
19
|
+
<body>
|
20
|
+
<!-- This file lives in public/404.html -->
|
21
|
+
<div class="dialog">
|
22
|
+
<h1>The page you were looking for doesn't exist.</h1>
|
23
|
+
<p>You may have mistyped the address or the page may have moved.</p>
|
24
|
+
</div>
|
25
|
+
</body>
|
26
|
+
</html>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>The change you wanted was rejected (422)</title>
|
5
|
+
<style type="text/css">
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
7
|
+
div.dialog {
|
8
|
+
width: 25em;
|
9
|
+
padding: 0 4em;
|
10
|
+
margin: 4em auto 0 auto;
|
11
|
+
border: 1px solid #ccc;
|
12
|
+
border-right-color: #999;
|
13
|
+
border-bottom-color: #999;
|
14
|
+
}
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
16
|
+
</style>
|
17
|
+
</head>
|
18
|
+
|
19
|
+
<body>
|
20
|
+
<!-- This file lives in public/422.html -->
|
21
|
+
<div class="dialog">
|
22
|
+
<h1>The change you wanted was rejected.</h1>
|
23
|
+
<p>Maybe you tried to change something you didn't have access to.</p>
|
24
|
+
</div>
|
25
|
+
</body>
|
26
|
+
</html>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>We're sorry, but something went wrong (500)</title>
|
5
|
+
<style type="text/css">
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
7
|
+
div.dialog {
|
8
|
+
width: 25em;
|
9
|
+
padding: 0 4em;
|
10
|
+
margin: 4em auto 0 auto;
|
11
|
+
border: 1px solid #ccc;
|
12
|
+
border-right-color: #999;
|
13
|
+
border-bottom-color: #999;
|
14
|
+
}
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
16
|
+
</style>
|
17
|
+
</head>
|
18
|
+
|
19
|
+
<body>
|
20
|
+
<!-- This file lives in public/500.html -->
|
21
|
+
<div class="dialog">
|
22
|
+
<h1>We're sorry, but something went wrong.</h1>
|
23
|
+
</div>
|
24
|
+
</body>
|
25
|
+
</html>
|
File without changes
|
@@ -0,0 +1,6 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
+
|
4
|
+
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
5
|
+
require File.expand_path('../../config/boot', __FILE__)
|
6
|
+
require 'rails/commands'
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Gxapi
|
4
|
+
|
5
|
+
describe 'Gxapi Integration with Rails' do
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
Gxapi.reload_experiments
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'GET /posts' do
|
12
|
+
|
13
|
+
it 'renders the google analytics data for a user' do
|
14
|
+
|
15
|
+
visit posts_path
|
16
|
+
|
17
|
+
expect(page.body).to match(/cxApi\.setChosenVariation/)
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'renders the content expected when a parameter is passed in
|
22
|
+
for the variant value' do
|
23
|
+
|
24
|
+
visit posts_path(variant: 'fake_var')
|
25
|
+
|
26
|
+
expect(page.body).to have_content('Fake Var Version')
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GxapiHelper do
|
4
|
+
|
5
|
+
context "#gxapi_variant_name" do
|
6
|
+
|
7
|
+
it "returns default if the variable is not set" do
|
8
|
+
helper.gxapi_variant_name.should eql "default"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "returns the name of the vairant if it is set" do
|
12
|
+
assign(:variant, stub(:value => stub(:name => "x")))
|
13
|
+
helper.gxapi_variant_name.should eql("x")
|
14
|
+
end
|
15
|
+
|
16
|
+
it "handles different vairant names" do
|
17
|
+
assign(:variantx, stub(:value => stub(:name => "x")))
|
18
|
+
helper.gxapi_variant_name(:variantx).should eql("x")
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
context "#gxapi_experiment_js" do
|
24
|
+
|
25
|
+
context "with variant set" do
|
26
|
+
|
27
|
+
before(:each) do
|
28
|
+
assign(
|
29
|
+
:variant,
|
30
|
+
stub(
|
31
|
+
:value => stub(
|
32
|
+
:name => "x",
|
33
|
+
:experiment_id => "y",
|
34
|
+
:index => 1
|
35
|
+
)
|
36
|
+
)
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "adds the javascript src for Google analytics only once
|
41
|
+
but does the js call each time the method is called" do
|
42
|
+
|
43
|
+
ret = helper.gxapi_experiment_js + helper.gxapi_experiment_js
|
44
|
+
|
45
|
+
ret.scan(/google\-analytics\.com/).length.should eql(1)
|
46
|
+
ret.scan(/setChosenVariation/).length.should eql(2)
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should add the domain if an option is passed" do
|
51
|
+
ret = helper.gxapi_experiment_js(:domain => ".example.com")
|
52
|
+
ret.should =~ /setDomainName/
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should not do anything if the instance var is not defined" do
|
58
|
+
helper.gxapi_experiment_js.should eql("")
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Gxapi::Base do
|
4
|
+
|
5
|
+
#We cache based on the id, so we need to get a random one.
|
6
|
+
subject do
|
7
|
+
Gxapi::Base.new(user_key)
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:user_key) do
|
11
|
+
Kernel.rand(1000000000000000)
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:valid_variants) do
|
15
|
+
["original", "variant1"]
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:test_experiment_name) do
|
19
|
+
"Untitled experiment"
|
20
|
+
end
|
21
|
+
|
22
|
+
context "#env" do
|
23
|
+
it "should delegate to its class" do
|
24
|
+
subject.env.should eql Gxapi.env
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "#get_variant" do
|
29
|
+
|
30
|
+
it "should make a call to myna and return a future" do
|
31
|
+
variant = subject.get_variant(test_experiment_name)
|
32
|
+
valid_variants.should include variant.value.name
|
33
|
+
[0, 1].should include variant.value.index
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should set a key in the rails cache for a given
|
37
|
+
uuid/experiment combo" do
|
38
|
+
|
39
|
+
variant = subject.get_variant(test_experiment_name)
|
40
|
+
variant.value
|
41
|
+
|
42
|
+
cache_key = "#{user_key}_untitled_experiment"
|
43
|
+
Gxapi.cache.read(cache_key).should have_key("index")
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should time out after 2 seconds and return the default value" do
|
48
|
+
|
49
|
+
Gxapi.cache.stubs(:fetch).yields{sleep(3)}
|
50
|
+
start_time = Time.now
|
51
|
+
|
52
|
+
variant = subject.get_variant(test_experiment_name)
|
53
|
+
|
54
|
+
# make sure we return the default value
|
55
|
+
variant.value.name.should eql("default")
|
56
|
+
(Time.now - start_time).should be < 2.5
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should allow a user to override the chosen variant" do
|
60
|
+
|
61
|
+
variant = subject.get_variant(test_experiment_name, "fakeval")
|
62
|
+
|
63
|
+
variant.value.experiment_id.should be_nil
|
64
|
+
variant.value.name.should eql("fakeval")
|
65
|
+
variant.value.index.should eql -1
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
context "#user_key" do
|
74
|
+
|
75
|
+
it "should set up its user_key" do
|
76
|
+
subject.user_key.should eql user_key
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Gxapi
|
4
|
+
|
5
|
+
describe GoogleAnalytics do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
Gxapi.cache.clear
|
9
|
+
end
|
10
|
+
|
11
|
+
context "#get_experiments" do
|
12
|
+
|
13
|
+
it "gets a list of experiments" do
|
14
|
+
experiments = subject.get_experiments
|
15
|
+
experiments.first.should be_a(Gxapi::Ostruct)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
context "#get_experiment" do
|
21
|
+
|
22
|
+
it "should filter by name" do
|
23
|
+
experiment = subject.get_experiments.first
|
24
|
+
subject.get_experiment(experiment.name).should eql(experiment)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
context "#get_variant" do
|
30
|
+
|
31
|
+
before(:each) do
|
32
|
+
subject.stubs(
|
33
|
+
get_experiment: Ostruct.new({
|
34
|
+
id: "123",
|
35
|
+
name: "X",
|
36
|
+
traffic_coverage: 1.0,
|
37
|
+
variations: [
|
38
|
+
Ostruct.new(
|
39
|
+
name: "original",
|
40
|
+
weight: 0.5,
|
41
|
+
status: "ACTIVE"
|
42
|
+
),
|
43
|
+
Ostruct.new(
|
44
|
+
name: "variation1",
|
45
|
+
weight: 0.5,
|
46
|
+
status: "ACTIVE"
|
47
|
+
)
|
48
|
+
]
|
49
|
+
})
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should return a variant determined by weight" do
|
54
|
+
variant = subject.get_variant("fakename")
|
55
|
+
["original", "variation1"].should include variant.name
|
56
|
+
[0, 1].should include variant.index
|
57
|
+
end
|
58
|
+
|
59
|
+
it "returns the default if traffic_coverage is 0" do
|
60
|
+
subject.get_experiment.stubs(traffic_coverage: 0)
|
61
|
+
variant = subject.get_variant("fakename")
|
62
|
+
variant.name.should eql("default")
|
63
|
+
variant.index.should eql(-1)
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Gxapi do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
Gxapi.config_path = File.expand_path(
|
7
|
+
"../../support/config.yml", __FILE__
|
8
|
+
)
|
9
|
+
Gxapi.env = "test"
|
10
|
+
end
|
11
|
+
|
12
|
+
context ".cache" do
|
13
|
+
it "should have a cache that gets defined by default" do
|
14
|
+
Gxapi.cache.should be_kind_of(ActiveSupport::Cache::Store)
|
15
|
+
end
|
16
|
+
|
17
|
+
context "with Rails" do
|
18
|
+
|
19
|
+
it "should use the Rails cache once it is available" do
|
20
|
+
Gxapi.cache.should be Rails.cache
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should still allow you to override the cache" do
|
24
|
+
my_cache = stub()
|
25
|
+
Gxapi.cache = my_cache
|
26
|
+
Gxapi.cache.should eql(my_cache)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
ENV["RAILS_ENV"] ||= 'test'
|
5
|
+
require File.expand_path("../../spec/dummy/config/environment", __FILE__)
|
6
|
+
|
7
|
+
require 'gxapi'
|
8
|
+
|
9
|
+
require 'rspec/rails'
|
10
|
+
require 'capybara/rails'
|
11
|
+
require 'rails/engine'
|
12
|
+
require 'mocha/setup'
|
13
|
+
|
14
|
+
# Requires supporting files with custom matchers and macros, etc,
|
15
|
+
# in ./support/ and its subdirectories.
|
16
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
17
|
+
|
18
|
+
Mocha::Configuration.prevent(:stubbing_non_existent_method)
|
19
|
+
|
20
|
+
RSpec.configure do |config|
|
21
|
+
config.mock_with :mocha
|
22
|
+
|
23
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
24
|
+
config.run_all_when_everything_filtered = true
|
25
|
+
|
26
|
+
config.filter_run focus: true
|
27
|
+
|
28
|
+
config.before(:all) do
|
29
|
+
Gxapi.logger = Logger.new(STDOUT)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,233 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gxapi_rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Dan Langevin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-11-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: celluloid
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rest-client
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: json
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: google-api-client
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: Google Analytics and integration
|
84
|
+
email: dan.langevin@lifebooker.com
|
85
|
+
executables: []
|
86
|
+
extensions: []
|
87
|
+
extra_rdoc_files: []
|
88
|
+
files:
|
89
|
+
- app/helpers/gxapi_helper.rb
|
90
|
+
- lib/gxapi/base.rb
|
91
|
+
- lib/gxapi/controller_methods.rb
|
92
|
+
- lib/gxapi/engine.rb
|
93
|
+
- lib/gxapi/google_analytics.rb
|
94
|
+
- lib/gxapi/ostruct.rb
|
95
|
+
- lib/gxapi/version.rb
|
96
|
+
- lib/gxapi.rb
|
97
|
+
- LICENSE.txt
|
98
|
+
- Rakefile
|
99
|
+
- README.md
|
100
|
+
- spec/dummy/app/assets/javascripts/application.js
|
101
|
+
- spec/dummy/app/assets/stylesheets/application.css
|
102
|
+
- spec/dummy/app/controllers/application_controller.rb
|
103
|
+
- spec/dummy/app/controllers/posts_controller.rb
|
104
|
+
- spec/dummy/app/helpers/application_helper.rb
|
105
|
+
- spec/dummy/app/helpers/posts_helper.rb
|
106
|
+
- spec/dummy/app/models/post.rb
|
107
|
+
- spec/dummy/app/views/layouts/application.html.erb
|
108
|
+
- spec/dummy/app/views/posts/_form.html.erb
|
109
|
+
- spec/dummy/app/views/posts/edit.html.erb
|
110
|
+
- spec/dummy/app/views/posts/index.html.erb
|
111
|
+
- spec/dummy/app/views/posts/new.html.erb
|
112
|
+
- spec/dummy/app/views/posts/show.html.erb
|
113
|
+
- spec/dummy/config/application.rb
|
114
|
+
- spec/dummy/config/boot.rb
|
115
|
+
- spec/dummy/config/database.yml
|
116
|
+
- spec/dummy/config/database.yml.default
|
117
|
+
- spec/dummy/config/environment.rb
|
118
|
+
- spec/dummy/config/environments/development.rb
|
119
|
+
- spec/dummy/config/environments/production.rb
|
120
|
+
- spec/dummy/config/environments/test.rb
|
121
|
+
- spec/dummy/config/gxapi.yml
|
122
|
+
- spec/dummy/config/initializers/backtrace_silencers.rb
|
123
|
+
- spec/dummy/config/initializers/inflections.rb
|
124
|
+
- spec/dummy/config/initializers/mime_types.rb
|
125
|
+
- spec/dummy/config/initializers/secret_token.rb
|
126
|
+
- spec/dummy/config/initializers/session_store.rb
|
127
|
+
- spec/dummy/config/initializers/wrap_parameters.rb
|
128
|
+
- spec/dummy/config/konfig/application.rb
|
129
|
+
- spec/dummy/config/konfig/development.rb
|
130
|
+
- spec/dummy/config/konfig/production.rb
|
131
|
+
- spec/dummy/config/konfig/test.rb
|
132
|
+
- spec/dummy/config/konfig/test_prod.rb
|
133
|
+
- spec/dummy/config/locales/en.yml
|
134
|
+
- spec/dummy/config/routes.rb
|
135
|
+
- spec/dummy/config/test.p12
|
136
|
+
- spec/dummy/config.ru
|
137
|
+
- spec/dummy/data/log/dummy/development.log
|
138
|
+
- spec/dummy/data/log/dummy/test.log
|
139
|
+
- spec/dummy/db/development.sqlite3
|
140
|
+
- spec/dummy/db/test.sqlite3
|
141
|
+
- spec/dummy/log/test.log
|
142
|
+
- spec/dummy/public/404.html
|
143
|
+
- spec/dummy/public/422.html
|
144
|
+
- spec/dummy/public/500.html
|
145
|
+
- spec/dummy/public/favicon.ico
|
146
|
+
- spec/dummy/Rakefile
|
147
|
+
- spec/dummy/README.rdoc
|
148
|
+
- spec/dummy/script/rails
|
149
|
+
- spec/features/display_variant_js_spec.rb
|
150
|
+
- spec/helpers/gxapi_helper_spec.rb
|
151
|
+
- spec/lib/gxapi/base_spec.rb
|
152
|
+
- spec/lib/gxapi/google_analytics_spec.rb
|
153
|
+
- spec/lib/gxapi_spec.rb
|
154
|
+
- spec/spec_helper.rb
|
155
|
+
homepage: http://github.com/LifebookerInc/gxapi_rails
|
156
|
+
licenses: []
|
157
|
+
metadata: {}
|
158
|
+
post_install_message:
|
159
|
+
rdoc_options: []
|
160
|
+
require_paths:
|
161
|
+
- lib
|
162
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - '>='
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
requirements: []
|
173
|
+
rubyforge_project:
|
174
|
+
rubygems_version: 2.0.3
|
175
|
+
signing_key:
|
176
|
+
specification_version: 4
|
177
|
+
summary: Google Analytics
|
178
|
+
test_files:
|
179
|
+
- spec/dummy/app/assets/javascripts/application.js
|
180
|
+
- spec/dummy/app/assets/stylesheets/application.css
|
181
|
+
- spec/dummy/app/controllers/application_controller.rb
|
182
|
+
- spec/dummy/app/controllers/posts_controller.rb
|
183
|
+
- spec/dummy/app/helpers/application_helper.rb
|
184
|
+
- spec/dummy/app/helpers/posts_helper.rb
|
185
|
+
- spec/dummy/app/models/post.rb
|
186
|
+
- spec/dummy/app/views/layouts/application.html.erb
|
187
|
+
- spec/dummy/app/views/posts/_form.html.erb
|
188
|
+
- spec/dummy/app/views/posts/edit.html.erb
|
189
|
+
- spec/dummy/app/views/posts/index.html.erb
|
190
|
+
- spec/dummy/app/views/posts/new.html.erb
|
191
|
+
- spec/dummy/app/views/posts/show.html.erb
|
192
|
+
- spec/dummy/config/application.rb
|
193
|
+
- spec/dummy/config/boot.rb
|
194
|
+
- spec/dummy/config/database.yml
|
195
|
+
- spec/dummy/config/database.yml.default
|
196
|
+
- spec/dummy/config/environment.rb
|
197
|
+
- spec/dummy/config/environments/development.rb
|
198
|
+
- spec/dummy/config/environments/production.rb
|
199
|
+
- spec/dummy/config/environments/test.rb
|
200
|
+
- spec/dummy/config/gxapi.yml
|
201
|
+
- spec/dummy/config/initializers/backtrace_silencers.rb
|
202
|
+
- spec/dummy/config/initializers/inflections.rb
|
203
|
+
- spec/dummy/config/initializers/mime_types.rb
|
204
|
+
- spec/dummy/config/initializers/secret_token.rb
|
205
|
+
- spec/dummy/config/initializers/session_store.rb
|
206
|
+
- spec/dummy/config/initializers/wrap_parameters.rb
|
207
|
+
- spec/dummy/config/konfig/application.rb
|
208
|
+
- spec/dummy/config/konfig/development.rb
|
209
|
+
- spec/dummy/config/konfig/production.rb
|
210
|
+
- spec/dummy/config/konfig/test.rb
|
211
|
+
- spec/dummy/config/konfig/test_prod.rb
|
212
|
+
- spec/dummy/config/locales/en.yml
|
213
|
+
- spec/dummy/config/routes.rb
|
214
|
+
- spec/dummy/config/test.p12
|
215
|
+
- spec/dummy/config.ru
|
216
|
+
- spec/dummy/data/log/dummy/development.log
|
217
|
+
- spec/dummy/data/log/dummy/test.log
|
218
|
+
- spec/dummy/db/development.sqlite3
|
219
|
+
- spec/dummy/db/test.sqlite3
|
220
|
+
- spec/dummy/log/test.log
|
221
|
+
- spec/dummy/public/404.html
|
222
|
+
- spec/dummy/public/422.html
|
223
|
+
- spec/dummy/public/500.html
|
224
|
+
- spec/dummy/public/favicon.ico
|
225
|
+
- spec/dummy/Rakefile
|
226
|
+
- spec/dummy/README.rdoc
|
227
|
+
- spec/dummy/script/rails
|
228
|
+
- spec/features/display_variant_js_spec.rb
|
229
|
+
- spec/helpers/gxapi_helper_spec.rb
|
230
|
+
- spec/lib/gxapi/base_spec.rb
|
231
|
+
- spec/lib/gxapi/google_analytics_spec.rb
|
232
|
+
- spec/lib/gxapi_spec.rb
|
233
|
+
- spec/spec_helper.rb
|