vanity 2.2.9 → 2.2.10
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/CHANGELOG +5 -0
- data/Gemfile.lock +5 -3
- data/gemfiles/rails32.gemfile.lock +3 -3
- data/gemfiles/rails41.gemfile.lock +3 -3
- data/gemfiles/rails42.gemfile.lock +3 -3
- data/gemfiles/rails42_protected_attributes.gemfile.lock +16 -3
- data/gemfiles/rails5.gemfile.lock +2 -2
- data/lib/generators/templates/add_participants_unique_index_migration.rb +24 -0
- data/lib/generators/templates/vanity_migration.rb +1 -1
- data/lib/generators/vanity/add_participants_unique_index_generator.rb +15 -0
- data/lib/vanity/adapters/active_record_adapter.rb +15 -5
- data/lib/vanity/templates/vanity.css +5 -5
- data/lib/vanity/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b58da5ddd59dcdd27e4742ad396ae92e3dd80f45
|
|
4
|
+
data.tar.gz: 0aa99c5fa92179b2f3c0f43b1e91ddf187650ccf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 43fb068dc90d3dc6a8e57db177635e1aace3c3928c4f0085dfce9965120d282df05d895c0bcfc2d6d742329792cf2552d0b475316a0307657873d006fcd8b776
|
|
7
|
+
data.tar.gz: aff2012cc568b8b689b9b0f6570fa5c4c1be7ad39fd2264cd35d0faa70e040aedb66d52d93b3641102a8f4b6ee535a0ca3060b2e3820ff6585b4df90f8ea8868
|
data/CHANGELOG
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
== Unreleased
|
|
2
2
|
|
|
3
|
+
== 2.2.10 (2018-03-18)
|
|
4
|
+
|
|
5
|
+
* Fix broken table size in report dashboard (#339) (@ilyasovd)
|
|
6
|
+
* Prevent dupe participation in same experiment (#335)(@pihman)
|
|
7
|
+
|
|
3
8
|
== 2.2.9 (2018-02-03)
|
|
4
9
|
|
|
5
10
|
* Fix race condition using the activerecord adapater when vanity creates experiments or rows in the conversions table (@fcheung)
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
vanity (2.2.
|
|
4
|
+
vanity (2.2.10)
|
|
5
5
|
i18n
|
|
6
6
|
|
|
7
7
|
GEM
|
|
@@ -32,6 +32,7 @@ GEM
|
|
|
32
32
|
execjs
|
|
33
33
|
coffee-script-source (1.9.1)
|
|
34
34
|
colorator (0.1)
|
|
35
|
+
concurrent-ruby (1.0.5)
|
|
35
36
|
crack (0.3.1)
|
|
36
37
|
execjs (2.5.2)
|
|
37
38
|
fakefs (0.6.7)
|
|
@@ -41,7 +42,8 @@ GEM
|
|
|
41
42
|
activesupport (>= 2.2.0)
|
|
42
43
|
crack (>= 0.1.6)
|
|
43
44
|
hitimes (1.2.2)
|
|
44
|
-
i18n (0.
|
|
45
|
+
i18n (0.9.3)
|
|
46
|
+
concurrent-ruby (~> 1.0)
|
|
45
47
|
integration (0.1.0)
|
|
46
48
|
jdbc-sqlite3 (3.8.7)
|
|
47
49
|
jekyll (2.5.3)
|
|
@@ -143,4 +145,4 @@ DEPENDENCIES
|
|
|
143
145
|
yard
|
|
144
146
|
|
|
145
147
|
BUNDLED WITH
|
|
146
|
-
1.
|
|
148
|
+
1.13.0
|
|
@@ -7,13 +7,14 @@ GIT
|
|
|
7
7
|
PATH
|
|
8
8
|
remote: ../
|
|
9
9
|
specs:
|
|
10
|
-
vanity (2.2.
|
|
10
|
+
vanity (2.2.10)
|
|
11
11
|
i18n
|
|
12
12
|
|
|
13
13
|
GEM
|
|
14
14
|
remote: https://rubygems.org/
|
|
15
15
|
specs:
|
|
16
16
|
RedCloth (4.2.9)
|
|
17
|
+
RedCloth (4.2.9-java)
|
|
17
18
|
actionmailer (4.2.0)
|
|
18
19
|
actionpack (= 4.2.0)
|
|
19
20
|
actionview (= 4.2.0)
|
|
@@ -43,6 +44,8 @@ GEM
|
|
|
43
44
|
activemodel (= 4.2.0)
|
|
44
45
|
activesupport (= 4.2.0)
|
|
45
46
|
arel (~> 6.0)
|
|
47
|
+
activerecord-jdbc-adapter (1.3.15)
|
|
48
|
+
activerecord (>= 2.2)
|
|
46
49
|
activesupport (4.2.0)
|
|
47
50
|
i18n (~> 0.7)
|
|
48
51
|
json (~> 1.7, >= 1.7.7)
|
|
@@ -57,6 +60,7 @@ GEM
|
|
|
57
60
|
arel (6.0.3)
|
|
58
61
|
blankslate (2.1.2.4)
|
|
59
62
|
bson (4.0.2)
|
|
63
|
+
bson (4.0.2-java)
|
|
60
64
|
builder (3.2.2)
|
|
61
65
|
classifier-reborn (2.0.3)
|
|
62
66
|
fast-stemmer (~> 1.0)
|
|
@@ -83,6 +87,7 @@ GEM
|
|
|
83
87
|
hashdiff (0.2.3)
|
|
84
88
|
i18n (0.7.0)
|
|
85
89
|
integration (0.1.0)
|
|
90
|
+
jdbc-sqlite3 (3.8.7)
|
|
86
91
|
jekyll (2.5.3)
|
|
87
92
|
classifier-reborn (~> 2.0)
|
|
88
93
|
colorator (~> 0.1)
|
|
@@ -106,6 +111,8 @@ GEM
|
|
|
106
111
|
sass (~> 3.4)
|
|
107
112
|
jekyll-watch (1.3.0)
|
|
108
113
|
listen (~> 3.0)
|
|
114
|
+
json (1.8.2)
|
|
115
|
+
json (1.8.2-java)
|
|
109
116
|
json (1.8.3)
|
|
110
117
|
kramdown (1.9.0)
|
|
111
118
|
liquid (2.6.2)
|
|
@@ -120,12 +127,16 @@ GEM
|
|
|
120
127
|
metaclass (0.0.4)
|
|
121
128
|
method_source (0.8.2)
|
|
122
129
|
mime-types (2.99)
|
|
130
|
+
mini_portile (0.6.2)
|
|
123
131
|
mini_portile2 (2.0.0)
|
|
124
132
|
minitest (5.8.3)
|
|
125
133
|
mocha (1.1.0)
|
|
126
134
|
metaclass (~> 0.0.1)
|
|
127
135
|
mongo (2.2.3)
|
|
128
136
|
bson (~> 4.0)
|
|
137
|
+
nokogiri (1.6.5)
|
|
138
|
+
mini_portile (~> 0.6.0)
|
|
139
|
+
nokogiri (1.6.5-java)
|
|
129
140
|
nokogiri (1.6.7.1)
|
|
130
141
|
mini_portile2 (~> 2.0.0.rc2)
|
|
131
142
|
parslet (1.5.0)
|
|
@@ -193,7 +204,8 @@ GEM
|
|
|
193
204
|
sprockets (>= 3.0.0)
|
|
194
205
|
sqlite3 (1.3.11)
|
|
195
206
|
thor (0.19.1)
|
|
196
|
-
thread_safe (0.3.
|
|
207
|
+
thread_safe (0.3.4)
|
|
208
|
+
thread_safe (0.3.4-java)
|
|
197
209
|
timecop (0.8.0)
|
|
198
210
|
toml (0.1.2)
|
|
199
211
|
parslet (~> 1.5.0)
|
|
@@ -207,6 +219,7 @@ GEM
|
|
|
207
219
|
yard (0.8.7.6)
|
|
208
220
|
|
|
209
221
|
PLATFORMS
|
|
222
|
+
java
|
|
210
223
|
ruby
|
|
211
224
|
|
|
212
225
|
DEPENDENCIES
|
|
@@ -239,4 +252,4 @@ DEPENDENCIES
|
|
|
239
252
|
yard
|
|
240
253
|
|
|
241
254
|
BUNDLED WITH
|
|
242
|
-
1.
|
|
255
|
+
1.13.0
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require "vanity/adapters/active_record_adapter"
|
|
2
|
+
|
|
3
|
+
class AddParticipansUniqueIndexMigration < ActiveRecord::Migration
|
|
4
|
+
# Helper methods to ensure we're connecting to the right database, see
|
|
5
|
+
# https://github.com/assaf/vanity/issues/295.
|
|
6
|
+
|
|
7
|
+
def connection
|
|
8
|
+
@connection ||= ActiveRecord::Base.connection
|
|
9
|
+
end
|
|
10
|
+
alias_method :default_connection, :connection
|
|
11
|
+
|
|
12
|
+
def with_vanity_connection
|
|
13
|
+
@connection = Vanity::Adapters::ActiveRecordAdapter::VanityRecord.connection
|
|
14
|
+
yield
|
|
15
|
+
@connection = default_connection
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def change
|
|
19
|
+
with_vanity_connection do
|
|
20
|
+
remove_index :vanity_participants, :name => "by_experiment_id_and_identity"
|
|
21
|
+
add_index :vanity_participants, [:experiment_id, :identity], :name => "by_experiment_id_and_identity", :unique => true
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -56,7 +56,7 @@ class VanityMigration < ActiveRecord::Migration
|
|
|
56
56
|
t.timestamps null: false
|
|
57
57
|
end
|
|
58
58
|
add_index :vanity_participants, [:experiment_id]
|
|
59
|
-
add_index :vanity_participants, [:experiment_id, :identity], :name => "by_experiment_id_and_identity"
|
|
59
|
+
add_index :vanity_participants, [:experiment_id, :identity], :name => "by_experiment_id_and_identity", :unique => true
|
|
60
60
|
add_index :vanity_participants, [:experiment_id, :shown], :name => "by_experiment_id_and_shown"
|
|
61
61
|
add_index :vanity_participants, [:experiment_id, :seen], :name => "by_experiment_id_and_seen"
|
|
62
62
|
add_index :vanity_participants, [:experiment_id, :converted], :name => "by_experiment_id_and_converted"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'rails/generators'
|
|
2
|
+
require 'rails/generators/migration'
|
|
3
|
+
|
|
4
|
+
class Vanity::AddParticipantsUniqueIndexGenerator < Rails::Generators::Base
|
|
5
|
+
include Rails::Generators::Migration
|
|
6
|
+
source_root File.expand_path('../../templates', __FILE__)
|
|
7
|
+
|
|
8
|
+
def self.next_migration_number(path)
|
|
9
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def create_model_file
|
|
13
|
+
migration_template "add_participants_unique_index_migration.rb", "db/migrate/add_participants_unique_index_migration.rb"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -102,12 +102,22 @@ module Vanity
|
|
|
102
102
|
# passed then this will be passed to create if creating, or will be
|
|
103
103
|
# used to update the found participant.
|
|
104
104
|
def self.retrieve(experiment, identity, create = true, update_with = nil)
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
105
|
+
retried = false
|
|
106
|
+
begin
|
|
107
|
+
if record = VanityParticipant.where(:experiment_id => experiment.to_s, :identity => identity.to_s).first
|
|
108
|
+
record.update_attributes(update_with) if update_with
|
|
109
|
+
elsif create
|
|
110
|
+
record = VanityParticipant.create({ :experiment_id => experiment.to_s, :identity => identity.to_s }.merge(update_with || {}))
|
|
111
|
+
end
|
|
112
|
+
record
|
|
113
|
+
rescue ActiveRecord::RecordNotUnique => e
|
|
114
|
+
if retried
|
|
115
|
+
raise e
|
|
116
|
+
else
|
|
117
|
+
retried = true
|
|
118
|
+
retry
|
|
119
|
+
end
|
|
109
120
|
end
|
|
110
|
-
record
|
|
111
121
|
end
|
|
112
122
|
end
|
|
113
123
|
|
|
@@ -13,15 +13,15 @@
|
|
|
13
13
|
.vanity .experiment .status_disabled { background: #FEE }
|
|
14
14
|
.vanity .experiment .enabled-links { float: right; font-weight: normal }
|
|
15
15
|
|
|
16
|
-
.vanity .ab_test table { border-collapse: collapse;
|
|
17
|
-
.vanity .ab_test td { padding: .5em; border-top: 1px solid #ccc;
|
|
16
|
+
.vanity .ab_test table { border-collapse: collapse; width: 100%; border-bottom: 1px solid #ccc; margin: 1em 0 0 0 }
|
|
17
|
+
.vanity .ab_test td { padding: .5em; border-top: 1px solid #ccc; overflow: hidden }
|
|
18
18
|
.vanity .ab_test .choice td { font-weight: bold; background: #f0f0f8 }
|
|
19
19
|
.vanity .ab_test caption { caption-side: bottom; padding: .5em; background: transparent; text-align: left }
|
|
20
20
|
.vanity .ab_test caption .disabled_info { padding-top: .5em }
|
|
21
|
-
.vanity .ab_test td.option {
|
|
21
|
+
.vanity .ab_test td.option { white-space: nowrap; overflow: hidden }
|
|
22
22
|
.vanity .ab_test td.option .default { font-size: 75% }
|
|
23
|
-
.vanity .ab_test td.value {
|
|
24
|
-
.vanity .ab_test td.action {
|
|
23
|
+
.vanity .ab_test td.value { white-space: nowrap; overflow: hidden }
|
|
24
|
+
.vanity .ab_test td.action { overflow: hidden; text-align: right }
|
|
25
25
|
.vanity .ab_test button.reset { float: right }
|
|
26
26
|
|
|
27
27
|
.vanity .metrics { list-style: none; margin: 0; padding: 0; border-bottom: 1px solid #ddd }
|
data/lib/vanity/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: vanity
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.2.
|
|
4
|
+
version: 2.2.10
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Assaf Arkin
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-
|
|
11
|
+
date: 2018-03-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: i18n
|
|
@@ -177,8 +177,10 @@ files:
|
|
|
177
177
|
- gemfiles/rails42_protected_attributes.gemfile.lock
|
|
178
178
|
- gemfiles/rails5.gemfile
|
|
179
179
|
- gemfiles/rails5.gemfile.lock
|
|
180
|
+
- lib/generators/templates/add_participants_unique_index_migration.rb
|
|
180
181
|
- lib/generators/templates/add_unique_indexes_migration.rb
|
|
181
182
|
- lib/generators/templates/vanity_migration.rb
|
|
183
|
+
- lib/generators/vanity/add_participants_unique_index_generator.rb
|
|
182
184
|
- lib/generators/vanity/add_unique_indexes_generator.rb
|
|
183
185
|
- lib/generators/vanity/views_generator.rb
|
|
184
186
|
- lib/generators/vanity_generator.rb
|
|
@@ -292,7 +294,7 @@ metadata: {}
|
|
|
292
294
|
post_install_message: To get started run vanity --help
|
|
293
295
|
rdoc_options:
|
|
294
296
|
- "--title"
|
|
295
|
-
- Vanity 2.2.
|
|
297
|
+
- Vanity 2.2.10
|
|
296
298
|
- "--main"
|
|
297
299
|
- README.md
|
|
298
300
|
- "--webcvs"
|