gxapi_rails 0.0.6 → 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.
- checksums.yaml +4 -4
- data/lib/gxapi.rb +5 -1
- data/lib/gxapi/base.rb +9 -1
- data/lib/gxapi/google_analytics.rb +25 -25
- data/lib/gxapi/version.rb +1 -1
- data/lib/tasks/gxapi.rake +7 -1
- data/spec/dummy/app/models/post.rb +0 -1
- data/spec/dummy/config/application.rb +0 -8
- data/spec/dummy/config/environments/development.rb +1 -3
- data/spec/dummy/config/environments/production.rb +1 -0
- data/spec/dummy/config/environments/test.rb +1 -3
- data/spec/dummy/log/test.log +636 -1762
- data/spec/dummy/tmp/cache/D9A/F00/gxapi-google-analytics-experiments +1 -0
- data/spec/features/display_variant_js_spec.rb +26 -2
- data/spec/fixtures/analytics_discovery.json +6697 -0
- data/spec/helpers/gxapi_helper_spec.rb +8 -8
- data/spec/lib/gxapi/base_spec.rb +35 -11
- data/spec/lib/gxapi/experiment_identifier_spec.rb +3 -3
- data/spec/lib/gxapi/google_analytics_spec.rb +118 -31
- data/spec/lib/gxapi_spec.rb +3 -3
- data/spec/spec_helper.rb +8 -2
- metadata +77 -47
- data/spec/dummy/log/development.log +0 -44
@@ -5,17 +5,17 @@ describe GxapiHelper do
|
|
5
5
|
context "#gxapi_variant_name" do
|
6
6
|
|
7
7
|
it "returns default if the variable is not set" do
|
8
|
-
helper.gxapi_variant_name.
|
8
|
+
expect(helper.gxapi_variant_name).to eql "default"
|
9
9
|
end
|
10
10
|
|
11
11
|
it "returns the name of the vairant if it is set" do
|
12
12
|
assign(:variant, stub(:value => stub(:name => "x")))
|
13
|
-
helper.gxapi_variant_name.
|
13
|
+
expect(helper.gxapi_variant_name).to eql("x")
|
14
14
|
end
|
15
15
|
|
16
16
|
it "handles different vairant names" do
|
17
17
|
assign(:variantx, stub(:value => stub(:name => "x")))
|
18
|
-
helper.gxapi_variant_name(:variantx).
|
18
|
+
expect(helper.gxapi_variant_name(:variantx)).to eql("x")
|
19
19
|
end
|
20
20
|
|
21
21
|
end
|
@@ -42,22 +42,22 @@ describe GxapiHelper do
|
|
42
42
|
|
43
43
|
ret = helper.gxapi_experiment_js + helper.gxapi_experiment_js
|
44
44
|
|
45
|
-
ret.scan(/google\-analytics\.com/).length.
|
46
|
-
ret.scan(/setChosenVariation/).length.
|
45
|
+
expect(ret.scan(/google\-analytics\.com/).length).to eql(1)
|
46
|
+
expect(ret.scan(/setChosenVariation/).length).to eql(2)
|
47
47
|
|
48
48
|
end
|
49
49
|
|
50
50
|
it "should add the domain if an option is passed" do
|
51
51
|
ret = helper.gxapi_experiment_js(:domain => ".example.com")
|
52
|
-
ret.
|
52
|
+
expect(ret).to match(/setDomainName/)
|
53
53
|
end
|
54
54
|
|
55
55
|
end
|
56
56
|
|
57
57
|
it "should not do anything if the instance var is not defined" do
|
58
|
-
helper.gxapi_experiment_js.
|
58
|
+
expect(helper.gxapi_experiment_js).to eql("")
|
59
59
|
end
|
60
60
|
|
61
61
|
end
|
62
62
|
|
63
|
-
end
|
63
|
+
end
|
data/spec/lib/gxapi/base_spec.rb
CHANGED
@@ -23,18 +23,42 @@ describe Gxapi::Base do
|
|
23
23
|
"lj5s_ZvWSJSZLphnkpP-Xw"
|
24
24
|
end
|
25
25
|
|
26
|
+
let(:stub_experiments) do
|
27
|
+
Gxapi::Ostruct.new({
|
28
|
+
id: test_experiment_id,
|
29
|
+
name: test_experiment_name,
|
30
|
+
traffic_coverage: 1.0,
|
31
|
+
variations: [
|
32
|
+
Gxapi::Ostruct.new(
|
33
|
+
name: 'original',
|
34
|
+
weight: 0.5,
|
35
|
+
status: 'ACTIVE'
|
36
|
+
),
|
37
|
+
Gxapi::Ostruct.new(
|
38
|
+
name: 'variant1',
|
39
|
+
weight: 0.5,
|
40
|
+
status: 'ACTIVE'
|
41
|
+
)
|
42
|
+
]
|
43
|
+
})
|
44
|
+
end
|
45
|
+
|
26
46
|
context "#env" do
|
27
47
|
it "should delegate to its class" do
|
28
|
-
subject.env.
|
48
|
+
expect(subject.env).to eql Gxapi.env
|
29
49
|
end
|
30
50
|
end
|
31
51
|
|
52
|
+
before(:each) do
|
53
|
+
Gxapi::GoogleAnalytics.any_instance.stubs(:get_experiment).returns(stub_experiments)
|
54
|
+
end
|
55
|
+
|
32
56
|
context "#get_variant" do
|
33
57
|
|
34
58
|
it "should make a call to Google Analytics and return a future" do
|
35
59
|
variant = subject.get_variant(test_experiment_name)
|
36
|
-
valid_variants.
|
37
|
-
[0, 1].
|
60
|
+
expect(valid_variants).to include variant.value.name
|
61
|
+
expect([0, 1]).to include variant.value.index
|
38
62
|
end
|
39
63
|
|
40
64
|
it "should set a key in the rails cache for a given
|
@@ -44,7 +68,7 @@ describe Gxapi::Base do
|
|
44
68
|
variant.value
|
45
69
|
|
46
70
|
cache_key = "#{user_key}_untitled_experiment"
|
47
|
-
Gxapi.cache.read(cache_key).
|
71
|
+
expect(Gxapi.cache.read(cache_key)).to include("index")
|
48
72
|
|
49
73
|
end
|
50
74
|
|
@@ -63,17 +87,17 @@ describe Gxapi::Base do
|
|
63
87
|
variant = subject.get_variant(test_experiment_name)
|
64
88
|
|
65
89
|
# make sure we return the default value
|
66
|
-
variant.value.name.
|
67
|
-
(Time.now - start_time).
|
90
|
+
expect(variant.value.name).to eql("default")
|
91
|
+
expect(Time.now - start_time).to be < 2.5
|
68
92
|
end
|
69
93
|
|
70
94
|
it "should allow a user to override the chosen variant" do
|
71
95
|
|
72
96
|
variant = subject.get_variant(test_experiment_name, "fakeval")
|
73
97
|
|
74
|
-
variant.value.experiment_id.
|
75
|
-
variant.value.name.
|
76
|
-
variant.value.index.
|
98
|
+
expect(variant.value.experiment_id).to be_nil
|
99
|
+
expect(variant.value.name).to eql("fakeval")
|
100
|
+
expect(variant.value.index).to eql -1
|
77
101
|
|
78
102
|
end
|
79
103
|
|
@@ -84,8 +108,8 @@ describe Gxapi::Base do
|
|
84
108
|
context "#user_key" do
|
85
109
|
|
86
110
|
it "should set up its user_key" do
|
87
|
-
subject.user_key.
|
111
|
+
expect(subject.user_key).to eql user_key
|
88
112
|
end
|
89
113
|
|
90
114
|
end
|
91
|
-
end
|
115
|
+
end
|
@@ -35,7 +35,7 @@ module GxApi
|
|
35
35
|
|
36
36
|
it 'matches by id' do
|
37
37
|
experiment = stub(id: id)
|
38
|
-
expect(subject.matches_experiment?(experiment)).to
|
38
|
+
expect(subject.matches_experiment?(experiment)).to be_truthy
|
39
39
|
end
|
40
40
|
|
41
41
|
end
|
@@ -67,7 +67,7 @@ module GxApi
|
|
67
67
|
|
68
68
|
it 'matches by name' do
|
69
69
|
experiment = stub(name: name)
|
70
|
-
expect(subject.matches_experiment?(experiment)).to
|
70
|
+
expect(subject.matches_experiment?(experiment)).to be_truthy
|
71
71
|
end
|
72
72
|
|
73
73
|
end
|
@@ -84,4 +84,4 @@ module GxApi
|
|
84
84
|
|
85
85
|
end
|
86
86
|
|
87
|
-
end
|
87
|
+
end
|
@@ -6,66 +6,153 @@ module Gxapi
|
|
6
6
|
|
7
7
|
before(:each) do
|
8
8
|
Gxapi.cache.clear
|
9
|
+
stub_request(:post, /.*accounts.google.com\/o\/oauth2\/token/)
|
10
|
+
.to_return(
|
11
|
+
status: 200,
|
12
|
+
body: JSON.unparse({ access_token: 'foo' }),
|
13
|
+
headers: { 'Content-Type' => 'application/json'}
|
14
|
+
)
|
15
|
+
stub_request(:get, /discovery\/v1\/apis\/analytics\/v3\/rest/)
|
16
|
+
.to_return(File.new("spec/fixtures/analytics_discovery.json"))
|
9
17
|
end
|
10
18
|
|
11
19
|
context "#get_experiments" do
|
20
|
+
before do
|
21
|
+
stub_request(:get, /googleapis.*experiments/)
|
22
|
+
.to_return(
|
23
|
+
status: 200,
|
24
|
+
body: JSON.unparse(
|
25
|
+
data: {
|
26
|
+
items: [
|
27
|
+
{
|
28
|
+
id: "123",
|
29
|
+
name: "exp1",
|
30
|
+
traffic_coverage: 1.0,
|
31
|
+
variations: []
|
32
|
+
},
|
33
|
+
{
|
34
|
+
id: "234",
|
35
|
+
name: "exp2",
|
36
|
+
traffic_coverage: 1.0,
|
37
|
+
variations: []
|
38
|
+
}
|
39
|
+
]
|
40
|
+
}
|
41
|
+
),
|
42
|
+
headers: { 'Content-Type' => 'application/json' }
|
43
|
+
)
|
44
|
+
end
|
12
45
|
|
13
46
|
it "gets a list of experiments" do
|
14
47
|
experiments = subject.get_experiments
|
15
|
-
experiments.first.
|
48
|
+
expect(experiments.first).to be_a(Gxapi::Ostruct)
|
16
49
|
end
|
17
50
|
|
18
51
|
end
|
19
52
|
|
20
53
|
context "#get_experiment" do
|
54
|
+
before do
|
55
|
+
stub_request(:get, /googleapis.*experiments/)
|
56
|
+
.to_return(
|
57
|
+
status: 200,
|
58
|
+
body: JSON.unparse(
|
59
|
+
data: {
|
60
|
+
items: [
|
61
|
+
{
|
62
|
+
id: "123",
|
63
|
+
name: "exp1",
|
64
|
+
traffic_coverage: 1.0,
|
65
|
+
variations: []
|
66
|
+
},
|
67
|
+
{
|
68
|
+
id: "234",
|
69
|
+
name: "exp2",
|
70
|
+
traffic_coverage: 1.0,
|
71
|
+
variations: []
|
72
|
+
}
|
73
|
+
]
|
74
|
+
}
|
75
|
+
),
|
76
|
+
headers: { 'Content-Type' => 'application/json' }
|
77
|
+
)
|
78
|
+
end
|
21
79
|
|
22
80
|
it "should filter by name" do
|
23
81
|
experiment = subject.get_experiments.first
|
24
82
|
identifier = GxApi::ExperimentIdentifier.new(experiment.name)
|
25
|
-
subject.get_experiment(identifier).
|
83
|
+
expect(subject.get_experiment(identifier)).to eql(experiment)
|
26
84
|
end
|
27
85
|
|
28
86
|
end
|
29
87
|
|
30
88
|
context "#get_variant" do
|
31
89
|
|
32
|
-
before
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
90
|
+
before do
|
91
|
+
stub_request(:get, /googleapis.*experiments/)
|
92
|
+
.to_return(
|
93
|
+
status: 200,
|
94
|
+
body: JSON.unparse(
|
95
|
+
data: {
|
96
|
+
items: [
|
97
|
+
{
|
98
|
+
id: "234",
|
99
|
+
name: "fakename",
|
100
|
+
traffic_coverage: 1.0,
|
101
|
+
variations: [
|
102
|
+
{
|
103
|
+
name: "original",
|
104
|
+
weight: 0.5,
|
105
|
+
status: "ACTIVE"
|
106
|
+
},
|
107
|
+
{
|
108
|
+
name: "variation1",
|
109
|
+
weight: 0.5,
|
110
|
+
status: "ACTIVE"
|
111
|
+
}
|
112
|
+
]
|
113
|
+
},
|
114
|
+
{
|
115
|
+
id: "456",
|
116
|
+
name: "zerocoverage",
|
117
|
+
traffic_coverage: 0.0,
|
118
|
+
variations: [
|
119
|
+
{
|
120
|
+
name: "original",
|
121
|
+
weight: 0.5,
|
122
|
+
status: "ACTIVE"
|
123
|
+
},
|
124
|
+
{
|
125
|
+
name: "variation1",
|
126
|
+
weight: 0.5,
|
127
|
+
status: "ACTIVE"
|
128
|
+
}
|
129
|
+
]
|
130
|
+
}
|
131
|
+
]
|
132
|
+
}
|
133
|
+
),
|
134
|
+
headers: { 'Content-Type' => 'application/json' }
|
135
|
+
)
|
52
136
|
end
|
53
137
|
|
54
|
-
it "
|
55
|
-
variant = subject.get_variant(
|
56
|
-
|
57
|
-
|
138
|
+
it "returns a variant determined by weight" do
|
139
|
+
variant = subject.get_variant(
|
140
|
+
GxApi::ExperimentIdentifier.new("fakename")
|
141
|
+
)
|
142
|
+
expect(["original", "variation1"]).to include variant.name
|
143
|
+
expect([0, 1]).to include variant.index
|
58
144
|
end
|
59
145
|
|
60
146
|
it "returns the default if traffic_coverage is 0" do
|
61
|
-
subject.
|
62
|
-
|
63
|
-
|
64
|
-
variant.
|
147
|
+
variant = subject.get_variant(
|
148
|
+
GxApi::ExperimentIdentifier.new("zerocoverage")
|
149
|
+
)
|
150
|
+
expect(variant.name).to eql("default")
|
151
|
+
expect(variant.index).to eql(-1)
|
65
152
|
end
|
66
153
|
|
67
154
|
end
|
68
155
|
|
69
156
|
end
|
70
157
|
|
71
|
-
end
|
158
|
+
end
|
data/spec/lib/gxapi_spec.rb
CHANGED
@@ -11,19 +11,19 @@ describe Gxapi do
|
|
11
11
|
|
12
12
|
context ".cache" do
|
13
13
|
it "should have a cache that gets defined by default" do
|
14
|
-
Gxapi.cache.
|
14
|
+
expect(Gxapi.cache).to be_kind_of(ActiveSupport::Cache::Store)
|
15
15
|
end
|
16
16
|
|
17
17
|
context "with Rails" do
|
18
18
|
|
19
19
|
it "should use the Rails cache once it is available" do
|
20
|
-
Gxapi.cache.
|
20
|
+
expect(Gxapi.cache).to be Rails.cache
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should still allow you to override the cache" do
|
24
24
|
my_cache = stub()
|
25
25
|
Gxapi.cache = my_cache
|
26
|
-
Gxapi.cache.
|
26
|
+
expect(Gxapi.cache).to eql(my_cache)
|
27
27
|
end
|
28
28
|
|
29
29
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -4,7 +4,11 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
4
4
|
ENV["RAILS_ENV"] ||= 'test'
|
5
5
|
require File.expand_path("../../spec/dummy/config/environment", __FILE__)
|
6
6
|
|
7
|
-
|
7
|
+
if RUBY_VERSION.to_i >= 2
|
8
|
+
require 'byebug'
|
9
|
+
else
|
10
|
+
require 'debugger'
|
11
|
+
end
|
8
12
|
|
9
13
|
require 'gxapi'
|
10
14
|
|
@@ -12,6 +16,7 @@ require 'rspec/rails'
|
|
12
16
|
require 'capybara/rails'
|
13
17
|
require 'rails/engine'
|
14
18
|
require 'mocha/setup'
|
19
|
+
require 'webmock/rspec'
|
15
20
|
|
16
21
|
# Requires supporting files with custom matchers and macros, etc,
|
17
22
|
# in ./support/ and its subdirectories.
|
@@ -22,8 +27,9 @@ Mocha::Configuration.prevent(:stubbing_non_existent_method)
|
|
22
27
|
RSpec.configure do |config|
|
23
28
|
config.mock_with :mocha
|
24
29
|
|
25
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
26
30
|
config.run_all_when_everything_filtered = true
|
31
|
+
config.include Rails.application.routes.url_helpers
|
32
|
+
config.infer_spec_type_from_file_location!
|
27
33
|
|
28
34
|
config.filter_run focus: true
|
29
35
|
|
metadata
CHANGED
@@ -1,195 +1,223 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gxapi_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Langevin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: celluloid
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rest-client
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: json
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: google-api-client
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 0.8.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 0.8.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rails
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: capybara
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: coffee-rails
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: byebug
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: mocha
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: rspec-rails
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- -
|
157
|
+
- - ">="
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '0'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- -
|
164
|
+
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: sass-rails
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- -
|
171
|
+
- - ">="
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: '0'
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- -
|
178
|
+
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: sqlite3
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
|
-
- -
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: test-unit
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
186
200
|
- !ruby/object:Gem::Version
|
187
201
|
version: '0'
|
188
202
|
type: :development
|
189
203
|
prerelease: false
|
190
204
|
version_requirements: !ruby/object:Gem::Requirement
|
191
205
|
requirements:
|
192
|
-
- -
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: webmock
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
193
221
|
- !ruby/object:Gem::Version
|
194
222
|
version: '0'
|
195
223
|
description: Google Analytics and integration
|
@@ -198,9 +226,14 @@ executables: []
|
|
198
226
|
extensions: []
|
199
227
|
extra_rdoc_files: []
|
200
228
|
files:
|
229
|
+
- LICENSE.txt
|
230
|
+
- README.md
|
231
|
+
- Rakefile
|
201
232
|
- app/helpers/gxapi_helper.rb
|
202
233
|
- lib/generators/gxapi/install_generator.rb
|
203
234
|
- lib/generators/gxapi/templates/gxapi.yml
|
235
|
+
- lib/gxapi-rails.rb
|
236
|
+
- lib/gxapi.rb
|
204
237
|
- lib/gxapi/base.rb
|
205
238
|
- lib/gxapi/controller_methods.rb
|
206
239
|
- lib/gxapi/engine.rb
|
@@ -208,13 +241,10 @@ files:
|
|
208
241
|
- lib/gxapi/google_analytics.rb
|
209
242
|
- lib/gxapi/ostruct.rb
|
210
243
|
- lib/gxapi/version.rb
|
211
|
-
- lib/gxapi-rails.rb
|
212
|
-
- lib/gxapi.rb
|
213
244
|
- lib/gxapi_rails.rb
|
214
245
|
- lib/tasks/gxapi.rake
|
215
|
-
-
|
216
|
-
- Rakefile
|
217
|
-
- README.md
|
246
|
+
- spec/dummy/README.rdoc
|
247
|
+
- spec/dummy/Rakefile
|
218
248
|
- spec/dummy/app/assets/javascripts/application.js
|
219
249
|
- spec/dummy/app/assets/stylesheets/application.css
|
220
250
|
- spec/dummy/app/controllers/application_controller.rb
|
@@ -228,6 +258,7 @@ files:
|
|
228
258
|
- spec/dummy/app/views/posts/index.html.erb
|
229
259
|
- spec/dummy/app/views/posts/new.html.erb
|
230
260
|
- spec/dummy/app/views/posts/show.html.erb
|
261
|
+
- spec/dummy/config.ru
|
231
262
|
- spec/dummy/config/application.rb
|
232
263
|
- spec/dummy/config/boot.rb
|
233
264
|
- spec/dummy/config/database.yml
|
@@ -251,21 +282,19 @@ files:
|
|
251
282
|
- spec/dummy/config/locales/en.yml
|
252
283
|
- spec/dummy/config/routes.rb
|
253
284
|
- spec/dummy/config/test.p12
|
254
|
-
- spec/dummy/config.ru
|
255
285
|
- spec/dummy/data/log/dummy/development.log
|
256
286
|
- spec/dummy/data/log/dummy/test.log
|
257
287
|
- spec/dummy/db/development.sqlite3
|
258
288
|
- spec/dummy/db/test.sqlite3
|
259
|
-
- spec/dummy/log/development.log
|
260
289
|
- spec/dummy/log/test.log
|
261
290
|
- spec/dummy/public/404.html
|
262
291
|
- spec/dummy/public/422.html
|
263
292
|
- spec/dummy/public/500.html
|
264
293
|
- spec/dummy/public/favicon.ico
|
265
|
-
- spec/dummy/Rakefile
|
266
|
-
- spec/dummy/README.rdoc
|
267
294
|
- spec/dummy/script/rails
|
295
|
+
- spec/dummy/tmp/cache/D9A/F00/gxapi-google-analytics-experiments
|
268
296
|
- spec/features/display_variant_js_spec.rb
|
297
|
+
- spec/fixtures/analytics_discovery.json
|
269
298
|
- spec/helpers/gxapi_helper_spec.rb
|
270
299
|
- spec/lib/gxapi/base_spec.rb
|
271
300
|
- spec/lib/gxapi/experiment_identifier_spec.rb
|
@@ -281,17 +310,17 @@ require_paths:
|
|
281
310
|
- lib
|
282
311
|
required_ruby_version: !ruby/object:Gem::Requirement
|
283
312
|
requirements:
|
284
|
-
- -
|
313
|
+
- - ">="
|
285
314
|
- !ruby/object:Gem::Version
|
286
|
-
version:
|
315
|
+
version: 1.9.3
|
287
316
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
288
317
|
requirements:
|
289
|
-
- -
|
318
|
+
- - ">="
|
290
319
|
- !ruby/object:Gem::Version
|
291
320
|
version: '0'
|
292
321
|
requirements: []
|
293
322
|
rubyforge_project:
|
294
|
-
rubygems_version: 2.
|
323
|
+
rubygems_version: 2.2.2
|
295
324
|
signing_key:
|
296
325
|
specification_version: 4
|
297
326
|
summary: Google Analytics
|
@@ -337,7 +366,6 @@ test_files:
|
|
337
366
|
- spec/dummy/data/log/dummy/test.log
|
338
367
|
- spec/dummy/db/development.sqlite3
|
339
368
|
- spec/dummy/db/test.sqlite3
|
340
|
-
- spec/dummy/log/development.log
|
341
369
|
- spec/dummy/log/test.log
|
342
370
|
- spec/dummy/public/404.html
|
343
371
|
- spec/dummy/public/422.html
|
@@ -346,7 +374,9 @@ test_files:
|
|
346
374
|
- spec/dummy/Rakefile
|
347
375
|
- spec/dummy/README.rdoc
|
348
376
|
- spec/dummy/script/rails
|
377
|
+
- spec/dummy/tmp/cache/D9A/F00/gxapi-google-analytics-experiments
|
349
378
|
- spec/features/display_variant_js_spec.rb
|
379
|
+
- spec/fixtures/analytics_discovery.json
|
350
380
|
- spec/helpers/gxapi_helper_spec.rb
|
351
381
|
- spec/lib/gxapi/base_spec.rb
|
352
382
|
- spec/lib/gxapi/experiment_identifier_spec.rb
|