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)
-
- (Object) ab_add_conversion(experiment, alternative, identity, count = 1, implicit = false)
Records a conversion in this experiment for the given alternative.
-
- (Object) ab_add_participant(experiment, alternative, identity)
Records a participant in this experiment for the given alternative.
-
- (Object) ab_counts(experiment, alternative)
Returns counts for given A/B experiment and alternative (by index).
-
- (Object) ab_get_outcome(experiment)
Returns the outcome of this experiment (if set), the index of a particular alternative.
-
- (Object) ab_not_showing(experiment, identity)
Cancels previously set association between identity and alternative.
-
- (Object) ab_set_outcome(experiment, alternative = 0)
Sets the outcome of this experiment to a particular alternative.
-
- (Object) ab_show(experiment, identity, alternative)
Pick particular alternative (by index) to show to this particular participant (by identity).
-
- (Object) ab_showing(experiment, identity)
Indicates which alternative to show to this participant.
- - (Boolean) active?
-
- (Object) destroy_experiment(experiment)
Deletes all information about this experiment.
- - (Object) destroy_metric(metric)
- - (Object) disconnect!
- - (Object) flushdb
- - (Object) get_experiment_completed_at(experiment)
-
- (Object) get_experiment_created_at(experiment)
Return when experiment was created.
- - (Object) get_metric_last_update_at(metric)
-
- (ActiveRecordAdapter) initialize(options)
constructor
A new instance of ActiveRecordAdapter.
-
- (Boolean) is_experiment_completed?(experiment)
Returns true if experiment completed.
- - (Object) 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)
Store when experiment was created (do not write over existing value).
- - (Object) to_s
Constructor Details
- (ActiveRecordAdapter) initialize(options)
A new instance of ActiveRecordAdapter
80 81 82 83 84 85 86 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 80 def initialize() @options = .inject({}) { |h,kv| h[kv.first.to_s] = kv.last ; h } if @options["active_record_adapter"] && (@options["active_record_adapter"] != "default") @options["adapter"] = @options["active_record_adapter"] VanityRecord.establish_connection(@options) end end |
Instance Method Details
- (Object) ab_add_conversion(experiment, alternative, identity, count = 1, implicit = false)
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.
220 221 222 223 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 220 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 |
- (Object) ab_add_participant(experiment, alternative, identity)
Records a participant in this experiment for the given alternative.
211 212 213 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 211 def ab_add_participant(experiment, alternative, identity) VanityParticipant.retrieve(experiment, identity, true, :seen => alternative) end |
- (Object) ab_counts(experiment, alternative)
Returns counts for given A/B experiment and alternative (by index). Returns hash with values for the keys :participants, :converted and :conversions.
179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 179 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 |
- (Object) ab_get_outcome(experiment)
Returns the outcome of this experiment (if set), the index of a particular alternative.
227 228 229 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 227 def ab_get_outcome(experiment) VanityExperiment.retrieve(experiment).outcome end |
- (Object) ab_not_showing(experiment, identity)
Cancels previously set association between identity and alternative. See #ab_show.
206 207 208 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 206 def ab_not_showing(experiment, identity) VanityParticipant.retrieve(experiment, identity, true, :shown => nil) end |
- (Object) ab_set_outcome(experiment, alternative = 0)
Sets the outcome of this experiment to a particular alternative.
232 233 234 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 232 def ab_set_outcome(experiment, alternative = 0) VanityExperiment.retrieve(experiment).update_attribute(:outcome, alternative) end |
- (Object) ab_show(experiment, identity, alternative)
Pick particular alternative (by index) to show to this particular participant (by identity).
194 195 196 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 194 def ab_show(experiment, identity, alternative) VanityParticipant.retrieve(experiment, identity, true, :shown => alternative) end |
- (Object) ab_showing(experiment, identity)
Indicates which alternative to show to this participant. See #ab_show.
199 200 201 202 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 199 def ab_showing(experiment, identity) participant = VanityParticipant.retrieve(experiment, identity, false) participant && participant.shown end |
- (Boolean) active?
88 89 90 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 88 def active? VanityRecord.connected? end |
- (Object) destroy_experiment(experiment)
Deletes all information about this experiment.
237 238 239 240 241 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 237 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 |
- (Object) destroy_metric(metric)
144 145 146 147 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 144 def destroy_metric(metric) record = VanityMetric.find_by_metric_id(metric.to_s) record && record.destroy end |
- (Object) disconnect!
92 93 94 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 92 def disconnect! VanityRecord.connection.disconnect! if active? end |
- (Object) flushdb
100 101 102 103 104 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 100 def flushdb [VanityExperiment, VanityMetric, VanityParticipant, VanityMetricValue, VanityConversion].each do |klass| klass.delete_all end end |
- (Object) get_experiment_completed_at(experiment)
167 168 169 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 167 def get_experiment_completed_at(experiment) VanityExperiment.retrieve(experiment).completed_at end |
- (Object) get_experiment_created_at(experiment)
Return when experiment was created.
158 159 160 161 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 158 def get_experiment_created_at(experiment) record = VanityExperiment.retrieve(experiment) record && record.created_at end |
- (Object) get_metric_last_update_at(metric)
106 107 108 109 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 106 def get_metric_last_update_at(metric) record = VanityMetric.find_by_metric_id(metric.to_s) record && record.updated_at end |
- (Boolean) is_experiment_completed?(experiment)
Returns true if experiment completed.
172 173 174 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 172 def is_experiment_completed?(experiment) !!VanityExperiment.retrieve(experiment).completed_at end |
- (Object) metric_track(metric, timestamp, identity, values)
111 112 113 114 115 116 117 118 119 120 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 111 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 |
- (Object) metric_values(metric, from, to)
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 122 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')}) AS 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 |
- (Object) reconnect!
96 97 98 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 96 def reconnect! VanityRecord.connection.reconnect! end |
- (Object) set_experiment_completed_at(experiment, time)
163 164 165 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 163 def set_experiment_completed_at(experiment, time) VanityExperiment.retrieve(experiment).update_attribute(:completed_at, time) end |
- (Object) set_experiment_created_at(experiment, time)
Store when experiment was created (do not write over existing value).
150 151 152 153 154 155 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 150 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 |
- (Object) to_s
243 244 245 |
# File 'lib/vanity/adapters/active_record_adapter.rb', line 243 def to_s @options.to_s end |