Class: Caboose::Variant

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/caboose/variant.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.find_by_options(product_id, option1 = nil, option2 = nil, option3 = nil) ⇒ Object

Class Methods



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'app/models/caboose/variant.rb', line 70

def self.find_by_options(product_id, option1=nil, option2=nil, option3=nil)
  
  # Create the vars that will become the full conditions statement
  where  = ['product_id=?']
  values = [product_id.to_i]
  
  # Append option values if they exist
  
  if option1
    where  << 'option1=?'
    values << option1
  end
  
  if option2
    where  << 'option2=?'
    values << option2
  end
  
  if option3
    where  << 'option3=?'
    values << option3
  end
  
  # Combine all the options into a single conditions statement
  conditions = [ where.join(' AND ') ].concat(values)
  
  # Return whatever is found
  return Variant.where(conditions).first
end

Instance Method Details

#as_json(options = {}) ⇒ Object

Instance Methods



104
105
106
107
108
109
110
111
# File 'app/models/caboose/variant.rb', line 104

def as_json(options={})
  self.attributes.merge({
    :images => self.product_images.any? ? self.product_images : [self.product.product_images.first],
    :title => "#{self.product.title} (#{self.options.join(', ')})",
    :flat_rate_shipping_package => self.flat_rate_shipping_package,
    :flat_rate_shipping_method => self.flat_rate_shipping_method                
  })
end

#on_sale?Boolean

Returns:

  • (Boolean)


131
132
133
134
135
136
137
# File 'app/models/caboose/variant.rb', line 131

def on_sale?
  return false if self.sale_price.nil? || self.sale_price == 0.0
  d = DateTime.now.utc
  return false if self.date_sale_starts && d < self.date_sale_starts
  return false if self.date_sale_ends   && d > self.date_sale_ends
  return true
end

#optionsObject



117
118
119
120
121
122
123
# File 'app/models/caboose/variant.rb', line 117

def options
  arr = []
  arr << self.option1 if self.option1 && self.option1.strip.length > 0
  arr << self.option2 if self.option2 && self.option2.strip.length > 0
  arr << self.option3 if self.option3 && self.option3.strip.length > 0
  return arr
end

#product_imageObject



125
126
127
128
129
# File 'app/models/caboose/variant.rb', line 125

def product_image
  return self.product_images.first if self.product_images
  return self.product.product_images.first if self.product.product_images
  return nil
end

#titleObject



113
114
115
# File 'app/models/caboose/variant.rb', line 113

def title
  return self.options.join(' / ')
end