app/models/feature.rb in usman-0.1.0 vs app/models/feature.rb in usman-0.1.1
- old
+ new
@@ -1,9 +1,10 @@
-class Feature < ApplicationRecord
+class Feature < Usman::ApplicationRecord
- extend KuppayamValidators
-
+ require 'import_error_handler.rb'
+ extend Usman::ImportErrorHandler
+
# Constants
UNPUBLISHED = "unpublished"
PUBLISHED = "published"
DISABLED = "disabled"
@@ -23,11 +24,11 @@
has_many :permissions
has_many :users, through: :permissions
has_one :feature_image, :as => :imageable, :dependent => :destroy, :class_name => "Image::FeatureImage"
# Validations
- validate_string :name, mandatory: true
+ validates :name, presence: true
validates :status, :presence => true, :inclusion => {:in => STATUS.keys, :presence_of => :status, :message => "%{value} is not a valid status" }
# ------------------
# Class Methods
# ------------------
@@ -43,9 +44,54 @@
scope :status, lambda { |status| where("LOWER(status)='#{status}'") }
scope :unpublished, -> { where(status: UNPUBLISHED) }
scope :published, -> { where(status: PUBLISHED) }
scope :disabled, -> { where(status: DISABLED) }
+
+ def self.save_row_data(row, base_path)
+
+ image_base_path = base_path + "images/"
+
+ row.headers.each{ |cell| row[cell] = row[cell].to_s.strip }
+
+ return if row[:name].blank?
+
+ feature = Feature.find_by_name(row[:name]) || Feature.new
+ feature.name = row[:name]
+ feature.status = Feature::UNPUBLISHED
+
+ # Initializing error hash for displaying all errors altogether
+ error_object = Usman::ErrorHash.new
+
+ ## Adding a profile picture
+ begin
+ image_path = image_base_path + "features/#{feature.name.parameterize}.png"
+ image_path = image_base_path + "features/#{feature.name.parameterize}}.jpg" unless File.exists?(image_path)
+ if File.exists?(image_path)
+ feature.build_feature_image
+ feature.feature_image.image = File.open(image_path)
+ else
+ summary = "Feature Image not found for feature: #{feature.name}"
+ details = "#{image_path}/png doesn't exists"
+ error_object.warnings << { summary: summary, details: details }
+ end
+ rescue => e
+ summary = "Error during processing: #{$!}"
+ details = "Feature: #{feature.name}, Image Path: #{image_path}"
+ stack_trace = "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
+ error_object.errors << { summary: summary, details: details, stack_trace: stack_trace }
+ end if feature.feature_image.blank?
+
+ if feature.valid? && (feature.feature_image.blank? || feature.feature_image.valid?)
+ feature.save!
+ else
+ summary = "Error while saving feature: #{feature.name}"
+ details = "Error! #{feature.errors.full_messages.to_sentence}"
+ details << ", #{feature.feature_image.errors.full_messages.to_sentence}" if feature.feature_image
+ error_object.errors << { summary: summary, details: details }
+ end
+ return error_object
+ end
# * Return full name
# == Examples
# >>> feature.display_name
# => "Products"
\ No newline at end of file