Class: Vanity::Adapters::ActiveRecordAdapter
- Inherits:
-
AbstractAdapter
- Object
- AbstractAdapter
- Vanity::Adapters::ActiveRecordAdapter
- Defined in:
- lib/vanity/adapters/active_record_adapter.rb
Overview
ActiveRecord adapter
Defined Under Namespace
Classes: VanityConversion, VanityExperiment, VanityMetric, VanityMetricValue, VanityParticipant, VanityRecord, VanitySchema
Instance Method Summary collapse
-
#ab_add_conversion(experiment, alternative, identity, count = 1, implicit = false) ⇒ Object
Records a conversion in this experiment for the given alternative.
-
#ab_add_participant(experiment, alternative, identity) ⇒ Object
Records a participant in this experiment for the given alternative.
-
#ab_counts(experiment, alternative) ⇒ Object
Returns counts for given A/B experiment and alternative (by index).
-
#ab_get_outcome(experiment) ⇒ Object
Returns the outcome of this experiment (if set), the index of a particular alternative.
-
#ab_not_showing(experiment, identity) ⇒ Object
Cancels previously set association between identity and alternative.
-
#ab_set_outcome(experiment, alternative = 0) ⇒ Object
Sets the outcome of this experiment to a particular alternative.
-
#ab_show(experiment, identity, alternative) ⇒ Object
Pick particular alternative (by index) to show to this particular participant (by identity).
-
#ab_showing(experiment, identity) ⇒ Object
Indicates which alternative to show to this participant.
- #active? ⇒ Boolean
-
#destroy_experiment(experiment) ⇒ Object
Deletes all information about this experiment.
- #destroy_metric(metric) ⇒ Object
- #disconnect! ⇒ Object
- #flushdb ⇒ Object
- #get_experiment_completed_at(experiment) ⇒ Object
-
#get_experiment_created_at(experiment) ⇒ Object
Return when experiment was created.
- #get_metric_last_update_at(metric) ⇒ Object
-
#initialize(options) ⇒ ActiveRecordAdapter
constructor
A new instance of ActiveRecordAdapter.
-
#is_experiment_completed?(experiment) ⇒ Boolean
Returns true if experiment completed.
- #metric_track(metric, timestamp, identity, values) ⇒ Object
- #metric_values(metric, from, to) ⇒ Object
- #reconnect! ⇒ Object
- #set_experiment_completed_at(experiment, time) ⇒ Object
-
#set_experiment_created_at(experiment, time) ⇒ Object
Store when experiment was created (do not write over existing value).
Constructor Details
#initialize(options) ⇒ ActiveRecordAdapter
Returns a new instance of ActiveRecordAdapter.
141 142 143 144 145 146 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 141 def initialize() [:adapter] = [:active_record_adapter] if [:active_record_adapter] VanityRecord.establish_connection() VanityRecord.define_schema end |
Instance Method Details
#ab_add_conversion(experiment, alternative, identity, count = 1, implicit = false) ⇒ Object
Records a conversion in this experiment for the given alternative. Associates a value with the conversion (default to 1). If implicit is true, add particpant if not already recorded for this experiment. If implicit is false (default), only add conversion is participant previously recorded as participating in this experiment.
280 281 282 283 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 280 def ab_add_conversion(experiment, alternative, identity, count = 1, implicit = false) VanityParticipant.retrieve(experiment, identity, implicit, :converted => alternative) VanityExperiment.retrieve(experiment).increment_conversion(alternative, count) end |
#ab_add_participant(experiment, alternative, identity) ⇒ Object
Records a participant in this experiment for the given alternative.
271 272 273 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 271 def ab_add_participant(experiment, alternative, identity) VanityParticipant.retrieve(experiment, identity, true, :seen => alternative) end |
#ab_counts(experiment, alternative) ⇒ Object
Returns counts for given A/B experiment and alternative (by index). Returns hash with values for the keys :participants, :converted and :conversions.
239 240 241 242 243 244 245 246 247 248 249 250 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 239 def ab_counts(experiment, alternative) record = VanityExperiment.retrieve(experiment) participants = VanityParticipant.count(:conditions => {:experiment_id => experiment.to_s, :seen => alternative}) converted = VanityParticipant.count(:conditions => {:experiment_id => experiment.to_s, :converted => alternative}) conversions = record.vanity_conversions.sum(:conversions, :conditions => {:alternative => alternative}) { :participants => participants, :converted => converted, :conversions => conversions } end |
#ab_get_outcome(experiment) ⇒ Object
Returns the outcome of this experiment (if set), the index of a particular alternative.
287 288 289 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 287 def ab_get_outcome(experiment) VanityExperiment.retrieve(experiment).outcome end |
#ab_not_showing(experiment, identity) ⇒ Object
Cancels previously set association between identity and alternative. See #ab_show.
266 267 268 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 266 def ab_not_showing(experiment, identity) VanityParticipant.retrieve(experiment, identity, true, :shown => nil) end |
#ab_set_outcome(experiment, alternative = 0) ⇒ Object
Sets the outcome of this experiment to a particular alternative.
292 293 294 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 292 def ab_set_outcome(experiment, alternative = 0) VanityExperiment.retrieve(experiment).update_attribute(:outcome, alternative) end |
#ab_show(experiment, identity, alternative) ⇒ Object
Pick particular alternative (by index) to show to this particular participant (by identity).
254 255 256 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 254 def ab_show(experiment, identity, alternative) VanityParticipant.retrieve(experiment, identity, true, :shown => alternative) end |
#ab_showing(experiment, identity) ⇒ Object
Indicates which alternative to show to this participant. See #ab_show.
259 260 261 262 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 259 def ab_showing(experiment, identity) participant = VanityParticipant.retrieve(experiment, identity, false) participant && participant.shown end |
#active? ⇒ Boolean
148 149 150 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 148 def active? VanityRecord.connected? end |
#destroy_experiment(experiment) ⇒ Object
Deletes all information about this experiment.
297 298 299 300 301 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 297 def destroy_experiment(experiment) VanityParticipant.delete_all(:experiment_id => experiment.to_s) record = VanityExperiment.find_by_experiment_id(experiment.to_s) record && record.destroy end |
#destroy_metric(metric) ⇒ Object
204 205 206 207 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 204 def destroy_metric(metric) record = VanityMetric.find_by_metric_id(metric.to_s) record && record.destroy end |
#disconnect! ⇒ Object
152 153 154 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 152 def disconnect! VanityRecord.connection.disconnect! if active? end |
#flushdb ⇒ Object
160 161 162 163 164 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 160 def flushdb [VanityExperiment, VanityMetric, VanityParticipant, VanityMetricValue, VanityConversion].each do |klass| klass.delete_all end end |
#get_experiment_completed_at(experiment) ⇒ Object
227 228 229 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 227 def get_experiment_completed_at(experiment) VanityExperiment.retrieve(experiment).completed_at end |
#get_experiment_created_at(experiment) ⇒ Object
Return when experiment was created.
218 219 220 221 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 218 def get_experiment_created_at(experiment) record = VanityExperiment.retrieve(experiment) record && record.created_at end |
#get_metric_last_update_at(metric) ⇒ Object
166 167 168 169 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 166 def get_metric_last_update_at(metric) record = VanityMetric.find_by_metric_id(metric.to_s) record && record.updated_at end |
#is_experiment_completed?(experiment) ⇒ Boolean
Returns true if experiment completed.
232 233 234 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 232 def is_experiment_completed?(experiment) !!VanityExperiment.retrieve(experiment).completed_at end |
#metric_track(metric, timestamp, identity, values) ⇒ Object
171 172 173 174 175 176 177 178 179 180 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 171 def metric_track(metric, , identity, values) record = VanityMetric.retrieve(metric) values.each_with_index do |value, index| record.vanity_metric_values.create(:date => .to_date.to_s, :index => index, :value => value) end record.updated_at = Time.now record.save end |
#metric_values(metric, from, to) ⇒ Object
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 182 def metric_values(metric, from, to) connection = VanityMetric.connection record = VanityMetric.retrieve(metric) dates = (from.to_date..to.to_date).map(&:to_s) conditions = [connection.quote_column_name('date') + ' IN (?)', dates] order = "#{connection.quote_column_name('date')}" select = "sum(#{connection.quote_column_name('value')}) value, #{connection.quote_column_name('date')}" group_by = "#{connection.quote_column_name('date')}" values = record.vanity_metric_values.all( :select => select, :conditions => conditions, :order => order, :group => group_by ) dates.map do |date| value = values.detect{|v| v.date == date } [(value && value.value) || 0] end end |
#reconnect! ⇒ Object
156 157 158 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 156 def reconnect! VanityRecord.connection.reconnect! end |
#set_experiment_completed_at(experiment, time) ⇒ Object
223 224 225 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 223 def set_experiment_completed_at(experiment, time) VanityExperiment.retrieve(experiment).update_attribute(:completed_at, time) end |
#set_experiment_created_at(experiment, time) ⇒ Object
Store when experiment was created (do not write over existing value).
210 211 212 213 214 215 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 210 def set_experiment_created_at(experiment, time) record = VanityExperiment.find_by_experiment_id(experiment.to_s) || VanityExperiment.new(:experiment_id => experiment.to_s) record.created_at ||= time record.save end |