metry 2.0.5 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/Manifest.txt +12 -6
- data/Rakefile +5 -0
- data/TODO +1 -6
- data/example/example.rb +1 -1
- data/features/app_tracking.feature +1 -2
- data/features/basic_tracking.feature +19 -38
- data/features/psycho/dashboard.feature +3 -11
- data/features/psycho/experiments.feature +28 -0
- data/features/psycho/visitor_tracking.feature +4 -4
- data/features/step_definitions/experiments.rb +8 -0
- data/features/step_definitions/psycho.rb +14 -0
- data/features/step_definitions/tracking.rb +56 -24
- data/features/support/env.rb +0 -1
- data/features/support/helpers.rb +6 -0
- data/lib/metry.rb +12 -5
- data/lib/metry/cohort.rb +19 -0
- data/lib/metry/event.rb +26 -0
- data/lib/metry/experiment.rb +36 -13
- data/lib/metry/goal.rb +18 -0
- data/lib/metry/psycho.rb +24 -93
- data/lib/metry/psycho/dashboard.erb +5 -5
- data/lib/metry/psycho/edit_goal.erb +1 -1
- data/lib/metry/psycho/experiment.erb +25 -0
- data/lib/metry/psycho/new_goal.erb +1 -1
- data/lib/metry/psycho/visitor.erb +4 -1
- data/lib/metry/psycho/visitors.erb +6 -0
- data/lib/metry/rack/tracking.rb +19 -18
- data/lib/metry/visitor.rb +30 -0
- data/radiant/example/features/metry.feature +21 -43
- data/radiant/example/features/step_definitions/tracking.rb +56 -24
- data/radiant/example/features/step_definitions/web.rb +0 -7
- data/radiant/example/features/support/env.rb +7 -3
- data/radiant/example/features/support/helpers.rb +6 -0
- data/radiant/extension/lib/metry_tags.rb +3 -1
- data/test/shared.rb +3 -1
- data/test/test_experiment.rb +104 -0
- metadata +45 -9
- data/features/psycho/goals.feature +0 -53
- data/features/step_definitions/goals.rb +0 -3
- data/lib/metry/psycho/goal.erb +0 -9
- data/lib/metry/storage.rb +0 -142
- data/radiant/example/features/step_definitions/experiments.rb +0 -12
- data/test/test_storage.rb +0 -25
@@ -29,7 +29,7 @@ Feature: Radiant support
|
|
29
29
|
Scenario: Running an experiment
|
30
30
|
Given a page at "/" containing:
|
31
31
|
"""
|
32
|
-
<r:metry:experiment name="header" method="
|
32
|
+
<r:metry:experiment name="header" method="sequential">
|
33
33
|
Hello!
|
34
34
|
<r:alternative name="grumpy">
|
35
35
|
Go away!
|
@@ -41,35 +41,17 @@ Feature: Radiant support
|
|
41
41
|
"""
|
42
42
|
When I view "/"
|
43
43
|
Then I should see "Hello!"
|
44
|
+
And visitor #1 should have experiment "header" with "control"
|
44
45
|
When I am a new visitor
|
45
46
|
And there is an empty Radiant cache
|
46
47
|
And I view "/"
|
47
48
|
Then I should see "Go away!"
|
49
|
+
And visitor #2 should have experiment "header" with "grumpy"
|
48
50
|
When I am a new visitor
|
49
51
|
And there is an empty Radiant cache
|
50
52
|
And I view "/"
|
51
53
|
Then I should see "Duh?"
|
52
|
-
|
53
|
-
| key | value |
|
54
|
-
| visitor | 1 |
|
55
|
-
| experiment:header | control |
|
56
|
-
Then there should be a tracking event "2":
|
57
|
-
| key | value |
|
58
|
-
| visitor | 2 |
|
59
|
-
| experiment:header | grumpy |
|
60
|
-
Then there should be a tracking event "3":
|
61
|
-
| key | value |
|
62
|
-
| visitor | 3 |
|
63
|
-
| experiment:header | dopey |
|
64
|
-
Then there should be a visitor "1":
|
65
|
-
| key | value |
|
66
|
-
| experiment:header | control |
|
67
|
-
Then there should be a visitor "2":
|
68
|
-
| key | value |
|
69
|
-
| experiment:header | grumpy |
|
70
|
-
Then there should be a visitor "3":
|
71
|
-
| key | value |
|
72
|
-
| experiment:header | dopey |
|
54
|
+
And visitor #3 should have experiment "header" with "dopey"
|
73
55
|
|
74
56
|
Scenario: Multiple access by same visitor should give same result
|
75
57
|
Given a page at "/" containing:
|
@@ -81,35 +63,35 @@ Feature: Radiant support
|
|
81
63
|
</r:alternative>
|
82
64
|
</r:metry:experiment>
|
83
65
|
"""
|
84
|
-
When I view "/"
|
85
|
-
Then I should see the same
|
66
|
+
When I view "/"
|
67
|
+
Then I should see the same page 10 times
|
86
68
|
When I am a new visitor
|
87
|
-
And I view "/"
|
88
|
-
Then I should see the same
|
69
|
+
And I view "/"
|
70
|
+
Then I should see the same page 10 times
|
89
71
|
When I am a new visitor
|
90
|
-
And I view "/"
|
91
|
-
Then I should see the same
|
72
|
+
And I view "/"
|
73
|
+
Then I should see the same page 10 times
|
92
74
|
When I am a new visitor
|
93
|
-
And I view "/"
|
94
|
-
Then I should see the same
|
75
|
+
And I view "/"
|
76
|
+
Then I should see the same page 10 times
|
95
77
|
|
96
78
|
Scenario: Caching shouldn't interfere with experiments
|
97
79
|
Given a page at "/" containing:
|
98
80
|
"""
|
99
|
-
<r:metry:experiment name="cached" method="
|
81
|
+
<r:metry:experiment name="cached" method="sequential">
|
100
82
|
Sweet
|
101
83
|
<r:alternative name="two">
|
102
84
|
Sour
|
103
85
|
</r:alternative>
|
104
86
|
</r:metry:experiment>
|
105
87
|
"""
|
106
|
-
When I view "/"
|
107
|
-
Then
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
88
|
+
When I view "/"
|
89
|
+
Then visitor #1 should have experiment "cached" with "control"
|
90
|
+
And I should see "Sweet"
|
91
|
+
When I am a new visitor
|
92
|
+
And I view "/"
|
93
|
+
Then visitor #2 should have experiment "cached" with "two"
|
94
|
+
And I should see "Sour"
|
113
95
|
|
114
96
|
Scenario: rand method should give reasonable experiment distribution
|
115
97
|
Given a page at "/" containing:
|
@@ -131,8 +113,4 @@ Feature: Radiant support
|
|
131
113
|
</r:metry:experiment>
|
132
114
|
"""
|
133
115
|
When 100 visitors view "/"
|
134
|
-
Then
|
135
|
-
Then at least 10 should see alternative "alt1" of experiment "lots"
|
136
|
-
Then at least 10 should see alternative "alt2" of experiment "lots"
|
137
|
-
Then at least 10 should see alternative "alt3" of experiment "lots"
|
138
|
-
Then at least 10 should see alternative "alt4" of experiment "lots"
|
116
|
+
Then there should be 5 alternatives each displayed at least 8 times
|
@@ -1,43 +1,75 @@
|
|
1
1
|
Given /^an empty tracking database$/ do
|
2
|
-
Metry.
|
2
|
+
Metry.clear
|
3
3
|
end
|
4
4
|
|
5
5
|
Then /^there should be (\d+) tracking events?$/ do |event_count|
|
6
|
-
assert_equal(event_count.to_i, Metry.
|
6
|
+
assert_equal(event_count.to_i, Metry::Event.count)
|
7
7
|
end
|
8
8
|
|
9
9
|
Then /^there should be (\d+) visitors$/ do |visitor_count|
|
10
|
-
assert_equal(visitor_count.to_i, Metry.
|
10
|
+
assert_equal(visitor_count.to_i, Metry::Visitor.count)
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
event = Metry
|
15
|
-
assert event, "Unable to lookup event #{
|
16
|
-
table.
|
17
|
-
expected = hash["value"]
|
13
|
+
Then /^tracking event #(\d+) should contain:$/ do |index, table|
|
14
|
+
event = at(Metry::Event, index)
|
15
|
+
assert event, "Unable to lookup event at #{index}."
|
16
|
+
table.rows_hash.each do |key, expected|
|
18
17
|
case expected
|
19
18
|
when "_exists_"
|
20
|
-
assert event
|
19
|
+
assert event.send(key), "Key #{key} does not exist."
|
21
20
|
else
|
22
|
-
assert_equal expected, event
|
21
|
+
assert_equal expected, event.send(key), "Key #{key} does not match."
|
23
22
|
end
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
27
|
-
Then /^
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
expected = hash["value"]
|
32
|
-
case expected
|
33
|
-
when "_exists_"
|
34
|
-
assert visitor[hash["key"]], "Key #{hash["key"]} does not exist."
|
35
|
-
else
|
36
|
-
assert_equal expected, visitor[hash["key"]], "Key #{hash["key"]} does not match."
|
37
|
-
end
|
26
|
+
Then /^tracking event #(\d+) extra should contain:$/ do |index, table|
|
27
|
+
event = at(Metry::Event, index)
|
28
|
+
table.rows_hash.each do |key, expected|
|
29
|
+
assert_equal expected, event.extra[key]
|
38
30
|
end
|
39
31
|
end
|
40
32
|
|
41
|
-
Then /^there should be a visitor
|
42
|
-
|
43
|
-
|
33
|
+
Then /^there should be a tracking event #(\d+) with visitor #(\d+)$/ do |event_index, visitor_index|
|
34
|
+
event = at(Metry::Event, event_index)
|
35
|
+
visitor = at(Metry::Visitor, visitor_index)
|
36
|
+
assert_equal event.visitor, visitor
|
37
|
+
end
|
38
|
+
|
39
|
+
Then /^there should be a visitor #(\d+)$/ do |index|
|
40
|
+
assert at(Metry::Visitor, index)
|
41
|
+
end
|
42
|
+
|
43
|
+
Then /^visitor #(\d+) should have experiment "([^\"]*)" with "([^\"]*)"$/ do |index, experiment, alternative|
|
44
|
+
visitor = at(Metry::Visitor, index)
|
45
|
+
experiment = Metry::Experiment.find(:first, :conditions => {:name => experiment})
|
46
|
+
assert experiment.cohort_for(visitor)
|
47
|
+
end
|
48
|
+
|
49
|
+
Then /^event #(\d+) should have experiment "([^\"]*)" with "([^\"]*)"$/ do |index, experiment, alternative|
|
50
|
+
event = at(Metry::Event, index)
|
51
|
+
experiment = Metry::Experiment.find(:first, :conditions => {:name => experiment})
|
52
|
+
assert_equal alternative, event.experiments[experiment.id]
|
53
|
+
end
|
54
|
+
|
55
|
+
Then /^I should see the same page (\d+) times$/ do |count|
|
56
|
+
expected_body = webrat.response_body
|
57
|
+
count.to_i.times do
|
58
|
+
When(%(I view "#{current_url}"))
|
59
|
+
assert_equal expected_body, webrat.response_body
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
When /^(\d+) visitors view "([^\"]*)"$/ do |count, path|
|
64
|
+
@alternatives = Hash.new(0)
|
65
|
+
count.to_i.times do
|
66
|
+
visit(path)
|
67
|
+
@alternatives[webrat.response_body] += 1
|
68
|
+
clear_cookies
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
Then /^there should be (\d+) alternatives each displayed at least (\d+) times$/ do |alternatives, minimum|
|
73
|
+
assert_equal alternatives.to_i, @alternatives.size
|
74
|
+
assert @alternatives.values.all?{|e| e >= minimum.to_i}
|
75
|
+
end
|
@@ -6,13 +6,6 @@ When /^I view "([^\"]*)"$/ do |path|
|
|
6
6
|
visit(path)
|
7
7
|
end
|
8
8
|
|
9
|
-
When /^(\d+) visitors view "([^\"]*)"$/ do |count, path|
|
10
|
-
count.to_i.times do
|
11
|
-
visit(path)
|
12
|
-
clear_cookies
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
9
|
When /^I view "([^\"]*)" (\d+) times$/ do |path, count|
|
17
10
|
count.to_i.times{visit(path)}
|
18
11
|
end
|
@@ -17,6 +17,13 @@ World(Test::Unit::Assertions)
|
|
17
17
|
require 'rack/test'
|
18
18
|
World(Rack::Test::Methods)
|
19
19
|
|
20
|
+
module CustomRackTestSession
|
21
|
+
def rack_test_session
|
22
|
+
@_rack_test_session ||= Rack::Test::Session.new(app, "www.example.com")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
World(CustomRackTestSession)
|
26
|
+
|
20
27
|
$: << RAILS_ROOT + '/../../vendor/webrat/lib'
|
21
28
|
require 'webrat'
|
22
29
|
require 'webrat/rack_test'
|
@@ -25,9 +32,6 @@ Webrat.configure do |config|
|
|
25
32
|
config.mode = :rack_test
|
26
33
|
end
|
27
34
|
|
28
|
-
require 'metry'
|
29
|
-
Metry::Storage.predictable_keys = true
|
30
|
-
|
31
35
|
def app
|
32
36
|
ActionController::Dispatcher.new
|
33
37
|
end
|
@@ -14,7 +14,9 @@ module MetryTags
|
|
14
14
|
tag "metry:experiment" do |tag|
|
15
15
|
control = tag.expand
|
16
16
|
options = tag.locals.alternatives.merge("control" => control)
|
17
|
-
Metry::Experiment.
|
17
|
+
experiment = Metry::Experiment.find_or_create_by_name(tag.attr["name"])
|
18
|
+
alternative = experiment.choose(options.keys, tag.attr["method"], tag.locals.event, tag.locals.visitor)
|
19
|
+
options[alternative]
|
18
20
|
end
|
19
21
|
|
20
22
|
desc %{ Alternatives go in here with a name. }
|
data/test/shared.rb
CHANGED
@@ -0,0 +1,104 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/shared'
|
2
|
+
|
3
|
+
class TestExperiment < Test::Unit::TestCase
|
4
|
+
context "Goldilocks experiment" do
|
5
|
+
setup do
|
6
|
+
Metry.clear
|
7
|
+
@experiment = Metry::Experiment.create(:name => "Goldilocks")
|
8
|
+
end
|
9
|
+
|
10
|
+
should "be able to create and find experiment" do
|
11
|
+
e = reload(@experiment)
|
12
|
+
assert_equal @experiment, e
|
13
|
+
assert_equal "Goldilocks", e.name
|
14
|
+
end
|
15
|
+
|
16
|
+
should "be able to find or create experiment" do
|
17
|
+
assert_equal @experiment, Metry::Experiment.find_or_create_by_name("Goldilocks")
|
18
|
+
assert_not_equal @experiment, Metry::Experiment.find_or_create_by_name("Three Little Pigs")
|
19
|
+
end
|
20
|
+
|
21
|
+
should "be able to lookup a cohort" do
|
22
|
+
assert_equal 0, @experiment.cohorts.count
|
23
|
+
|
24
|
+
c1 = @experiment.lookup_cohort("Daddy bear")
|
25
|
+
c2 = @experiment.lookup_cohort("Momma bear")
|
26
|
+
|
27
|
+
e = reload(@experiment)
|
28
|
+
assert_equal 2, e.cohorts.count
|
29
|
+
assert e.cohorts.include?(c1)
|
30
|
+
assert e.cohorts.include?(c2)
|
31
|
+
|
32
|
+
assert_equal c1, @experiment.lookup_cohort("Daddy bear")
|
33
|
+
assert_equal 2, e.cohorts.count
|
34
|
+
end
|
35
|
+
|
36
|
+
context "with existing cohorts" do
|
37
|
+
setup do
|
38
|
+
@daddy_cohort = @experiment.lookup_cohort("Daddy bear")
|
39
|
+
@momma_cohort = @experiment.lookup_cohort("Momma bear")
|
40
|
+
@baby_cohort = @experiment.lookup_cohort("Baby bear")
|
41
|
+
end
|
42
|
+
|
43
|
+
should "be able to associate visitors with a cohort" do
|
44
|
+
v1 = Metry::Visitor.create
|
45
|
+
v2 = Metry::Visitor.create
|
46
|
+
|
47
|
+
v1.in_cohort @daddy_cohort
|
48
|
+
v2.in_cohort @momma_cohort
|
49
|
+
|
50
|
+
daddy = reload(@daddy_cohort)
|
51
|
+
assert daddy.visitors.include?(v1)
|
52
|
+
assert v1.cohorts.include?(daddy)
|
53
|
+
|
54
|
+
momma = reload(@momma_cohort)
|
55
|
+
assert momma.visitors.include?(v2)
|
56
|
+
assert v2.cohorts.include?(momma)
|
57
|
+
end
|
58
|
+
|
59
|
+
should "be able to tell which cohort a visitor is in for a given experiment" do
|
60
|
+
v1 = Metry::Visitor.create
|
61
|
+
v1.in_cohort @daddy_cohort
|
62
|
+
assert_equal @daddy_cohort, @experiment.cohort_for(v1)
|
63
|
+
end
|
64
|
+
|
65
|
+
context "with visitors with events" do
|
66
|
+
setup do
|
67
|
+
@experiment.goals << (@goal = Metry::Goal.create(:name => "porridge", :path => "bowl/?"))
|
68
|
+
@v1 = Metry::Visitor.create; @v1.in_cohort @daddy_cohort
|
69
|
+
@v2 = Metry::Visitor.create; @v2.in_cohort @daddy_cohort
|
70
|
+
@v3 = Metry::Visitor.create; @v3.in_cohort @daddy_cohort
|
71
|
+
@v4 = Metry::Visitor.create; @v4.in_cohort @momma_cohort
|
72
|
+
Metry::Event.create(:path => "bowl", :visitor => @v1)
|
73
|
+
Metry::Event.create(:path => "bowl/", :visitor => @v2)
|
74
|
+
Metry::Event.create(:path => "bowl/", :visitor => @v2)
|
75
|
+
Metry::Event.create(:path => "sheet", :visitor => @v3)
|
76
|
+
Metry::Event.create(:path => "sheet", :visitor => @v4)
|
77
|
+
end
|
78
|
+
|
79
|
+
should "be able to find visitors that have reached a goal" do
|
80
|
+
assert_equal [@v1, @v2].sort_by{|e| e.id}, reload(@goal).visitors.sort_by{|e| e.id}
|
81
|
+
end
|
82
|
+
|
83
|
+
should "be able to calculate cohort/goal percentages" do
|
84
|
+
assert_equal((2.0/3.0), @daddy_cohort.reached_goal(@goal))
|
85
|
+
assert_equal 0, @momma_cohort.reached_goal(@goal)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
should "be able to add goals" do
|
92
|
+
@experiment.goals << (g1 = Metry::Goal.create(:name => "porridge", :path => "bowl"))
|
93
|
+
@experiment.goals << (g2 = Metry::Goal.create(:name => "bed", :path => "sheet"))
|
94
|
+
|
95
|
+
ex = reload(@experiment)
|
96
|
+
assert ex.goals.include?(g1)
|
97
|
+
assert ex.goals.include?(g2)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def reload(model)
|
102
|
+
model.class.find(model.id)
|
103
|
+
end
|
104
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathaniel Talbott
|
@@ -9,9 +9,39 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-08-
|
12
|
+
date: 2009-08-13 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: mongomapper
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ~>
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0.3"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: mongodb-mongo
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0.10"
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: mongodb-mongo_ext
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: "0.4"
|
44
|
+
version:
|
15
45
|
- !ruby/object:Gem::Dependency
|
16
46
|
name: hoe
|
17
47
|
type: :development
|
@@ -45,24 +75,30 @@ files:
|
|
45
75
|
- features/app_tracking.feature
|
46
76
|
- features/basic_tracking.feature
|
47
77
|
- features/psycho/dashboard.feature
|
48
|
-
- features/psycho/
|
78
|
+
- features/psycho/experiments.feature
|
49
79
|
- features/psycho/visitor_tracking.feature
|
50
80
|
- features/sample_application.feature
|
51
|
-
- features/step_definitions/
|
81
|
+
- features/step_definitions/experiments.rb
|
82
|
+
- features/step_definitions/psycho.rb
|
52
83
|
- features/step_definitions/tracking.rb
|
53
84
|
- features/step_definitions/web.rb
|
54
85
|
- features/support/env.rb
|
86
|
+
- features/support/helpers.rb
|
55
87
|
- lib/metry.rb
|
88
|
+
- lib/metry/cohort.rb
|
89
|
+
- lib/metry/event.rb
|
56
90
|
- lib/metry/experiment.rb
|
91
|
+
- lib/metry/goal.rb
|
57
92
|
- lib/metry/psycho.rb
|
58
93
|
- lib/metry/psycho/dashboard.erb
|
59
94
|
- lib/metry/psycho/edit_goal.erb
|
60
|
-
- lib/metry/psycho/
|
95
|
+
- lib/metry/psycho/experiment.erb
|
61
96
|
- lib/metry/psycho/layout.erb
|
62
97
|
- lib/metry/psycho/new_goal.erb
|
63
98
|
- lib/metry/psycho/visitor.erb
|
99
|
+
- lib/metry/psycho/visitors.erb
|
64
100
|
- lib/metry/rack/tracking.rb
|
65
|
-
- lib/metry/
|
101
|
+
- lib/metry/visitor.rb
|
66
102
|
- radiant/example/CHANGELOG
|
67
103
|
- radiant/example/CONTRIBUTORS
|
68
104
|
- radiant/example/INSTALL
|
@@ -80,11 +116,11 @@ files:
|
|
80
116
|
- radiant/example/db/schema.rb
|
81
117
|
- radiant/example/features/metry.feature
|
82
118
|
- radiant/example/features/psycho.feature
|
83
|
-
- radiant/example/features/step_definitions/experiments.rb
|
84
119
|
- radiant/example/features/step_definitions/radiant.rb
|
85
120
|
- radiant/example/features/step_definitions/tracking.rb
|
86
121
|
- radiant/example/features/step_definitions/web.rb
|
87
122
|
- radiant/example/features/support/env.rb
|
123
|
+
- radiant/example/features/support/helpers.rb
|
88
124
|
- radiant/example/public/.htaccess
|
89
125
|
- radiant/example/public/404.html
|
90
126
|
- radiant/example/public/500.html
|
@@ -151,7 +187,7 @@ files:
|
|
151
187
|
- radiant/extension/lib/tasks/metry_extension_tasks.rake
|
152
188
|
- radiant/extension/metry_extension.rb
|
153
189
|
- test/shared.rb
|
154
|
-
- test/
|
190
|
+
- test/test_experiment.rb
|
155
191
|
- vendor/webrat/.document
|
156
192
|
- vendor/webrat/History.txt
|
157
193
|
- vendor/webrat/MIT-LICENSE.txt
|
@@ -385,4 +421,4 @@ signing_key:
|
|
385
421
|
specification_version: 2
|
386
422
|
summary: Metry aims to close the gap between knowing you ought to be making decisions based on hard data about how visitors are using your site, and actually doing it
|
387
423
|
test_files:
|
388
|
-
- test/
|
424
|
+
- test/test_experiment.rb
|