Sha256: d7b87f7a152898f1402a959f6e5269bbe8e658fdd9565d2a3d6dc7ff92fb436c
Contents?: true
Size: 1.97 KB
Versions: 2
Compression:
Stored size: 1.97 KB
Contents
require_relative "../../../lib/easy_ml/core/model" module EasyML class Model < ActiveRecord::Base include EasyML::Core::ModelCore self.table_name = "easy_ml_models" scope :live, -> { where(is_live: true) } attribute :root_dir, :string after_initialize :apply_defaults validate :only_one_model_is_live? def only_one_model_is_live? return if @marking_live if previous_versions.live.count > 1 raise "Multiple previous versions of #{name} are live! This should never happen. Update previous versions to is_live=false before proceeding" end return unless previous_versions.live.any? && is_live errors.add(:is_live, "cannot mark model live when previous version is live. Explicitly use the mark_live method to mark this as the live version") end def mark_live transaction do self.class.where(name: name).where.not(id: id).update_all(is_live: false) self.class.where(id: id).update_all(is_live: true) end end def previous_versions EasyML::Model.where(name: name).order(id: :desc) end private def files_to_keep live_models = self.class.live recent_copies = live_models.flat_map do |live| # Fetch all models with the same name self.class.where(name: live.name).where(is_live: false).order(created_at: :desc).limit(live.name == name ? 4 : 5) end recent_versions = self.class .where.not( "EXISTS (SELECT 1 FROM easy_ml_models e2 WHERE e2.name = easy_ml_models.name AND e2.is_live = true)" ) .where("created_at >= ?", 2.days.ago) .order(created_at: :desc) .group_by(&:name) .flat_map { |_, models| models.take(5) } ([self] + recent_versions + recent_copies + live_models).compact.map(&:file).map(&:path).uniq end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
easy_ml-0.1.2 | app/models/easy_ml/model.rb |
easy_ml-0.1.1 | app/models/easy_ml/model.rb |