Class: ArImage

Inherits:
ApplicationRecord
  • Object
show all
Defined in:
app/models/ar_image.rb

Overview

Schema information

Collection name: ar_images : Images

_id BSON::ObjectId _id created_at Time created_at updated_at Time updated_at ar_site_id BSON::ObjectId Site id ar_user_id BSON::ObjectId User's id name String ip short String short name text String text size_o String Original image size size_l String Large image size size_m String Medium image size size_s String Small image size

AgileRails module for saving and manipulating images. Images can be saved to local directory only. Settings for output images must be set in settings in site record. Example:

ar_image:
sizes: 900x600,500x400,300x200
location: images
quality: '80'
img_type: webp

To use this module imagemagick tools and mini_magick ruby gem must be installed.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.all_usersObject

Return all users that have contributed images



184
185
186
# File 'app/models/ar_image.rb', line 184

def self.all_users
  ArUser.where(:id.in => distinct(:created_by)).order(name: 'asc').map { [_1.name, _1.id] }
end

.html_codeObject



188
189
190
# File 'app/models/ar_image.rb', line 188

def self.html_code
  'code'
end

Instance Method Details

#first_available_imageObject



86
87
88
89
# File 'app/models/ar_image.rb', line 86

def first_available_image
  image = %w[o s m l].find { send("size_#{_1}").present? }
  image ? "#{id}-#{image}.#{img_type}" : nil
end

#offset_lxObject

Will return x offset for cropping large image



108
109
110
# File 'app/models/ar_image.rb', line 108

def offset_lx
  size_l.blank? ? '' : size_l.split(/x|\+/)[2].to_i
end

#offset_lx=(value) ⇒ Object

Will set x offset for cropping large image



115
116
117
# File 'app/models/ar_image.rb', line 115

def offset_lx=(value)
  self.size_l += (size_l.blank? ? '' : "+#{value}")
end

#offset_lyObject

Will return y offset for cropping large image



122
123
124
# File 'app/models/ar_image.rb', line 122

def offset_ly
  size_l.blank? ? '' : size_l.split(/x|\+/)[3].to_i
end

#offset_ly=(value) ⇒ Object

Will set y offset for cropping large image



129
130
131
# File 'app/models/ar_image.rb', line 129

def offset_ly=(value)
  self.size_l += (size_l.blank? ? '' : "+#{value}")
end

#offset_mxObject



141
142
143
# File 'app/models/ar_image.rb', line 141

def offset_mx
  size_m.blank? ? '' : size_m.split(/x|\+/)[2].to_i
end

#offset_mx=(value) ⇒ Object



145
146
147
# File 'app/models/ar_image.rb', line 145

def offset_mx=(value)
  self.size_m += (size_m.blank? ? '' : "+#{value}")
end

#offset_myObject



149
150
151
# File 'app/models/ar_image.rb', line 149

def offset_my
  size_m.blank? ? '' : size_m.split(/x|\+/)[3].to_i
end

#offset_my=(value) ⇒ Object



153
154
155
# File 'app/models/ar_image.rb', line 153

def offset_my=(value)
  self.size_m += (size_m.blank? ? '' : "+#{value}")
end

#offset_sxObject



165
166
167
# File 'app/models/ar_image.rb', line 165

def offset_sx
  size_s.blank? ? '' : size_s.split(/x|\+/)[2].to_i
end

#offset_sx=(value) ⇒ Object



169
170
171
# File 'app/models/ar_image.rb', line 169

def offset_sx=(value)
  self.size_s += (size_s.blank? ? '' : "+#{value}")
end

#offset_syObject



173
174
175
# File 'app/models/ar_image.rb', line 173

def offset_sy
  size_s.blank? ? '' : size_s.split(/x|\+/)[3].to_i
end

#offset_sy=(value) ⇒ Object



177
178
179
# File 'app/models/ar_image.rb', line 177

def offset_sy=(value)
  self.size_s += (size_s.blank? ? '' : "+#{value}")
end

#set_originalObject

checks that image size values are in correct format. Must be hsizevsize (ex. 300x200)



61
62
63
64
65
66
67
68
69
70
# File 'app/models/ar_image.rb', line 61

def set_original
  if keep_original
    if size_o.blank?
      image = MiniMagick::Image.open(name)
      self.size_o = "#{image.width}x#{image.height}"
    end
  else
    self.size_o = ''
  end
end

#size_lsObject

Will return size for large image



94
95
96
# File 'app/models/ar_image.rb', line 94

def size_ls
  size_l.blank? ? '' : size_l.split(/x|\+/)[0, 2].join('x')
end

#size_ls=(value) ⇒ Object

Will set new size for large image



101
102
103
# File 'app/models/ar_image.rb', line 101

def size_ls=(value)
  self.size_l = value.blank? ? '' : value
end

#size_msObject



133
134
135
# File 'app/models/ar_image.rb', line 133

def size_ms
  size_m.blank? ? '' : size_m.split(/x|\+/)[0, 2].join('x')
end

#size_ms=(value) ⇒ Object



137
138
139
# File 'app/models/ar_image.rb', line 137

def size_ms=(value)
  self.size_m = value.blank? ? '' : value
end

#size_ssObject



157
158
159
# File 'app/models/ar_image.rb', line 157

def size_ss
  size_s.blank? ? '' : size_s.split(/x|\+/)[0, 2].join('x')
end

#size_ss=(value) ⇒ Object



161
162
163
# File 'app/models/ar_image.rb', line 161

def size_ss=(value)
  self.size_s = value.blank? ? '' : value
end

#validate_image_valuesObject

checks that image size values are in correct format. Must be hsizevsize (ex. 300x200)



75
76
77
78
79
80
81
82
83
84
# File 'app/models/ar_image.rb', line 75

def validate_image_values
  %w[l m s o].each do |size|
    field = "size_#{size}"
    value = send(field)
    next if value.blank?

    a = value.strip.split(/x|\+/)
    a[0, 2].each { |e| errors.add(field, I18n.t('agile.not_valid')) unless e.to_i > 0 }
  end
end