Class: Asset

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

Constant Summary collapse

APPROVED_CONTENT_TYPES =
%w[application/zip image/jpg image/jpeg image/png image/gif application/pdf text/css text/calendar].freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.count_with_asset_types(asset_types, *args) ⇒ Object



209
210
211
# File 'app/models/asset.rb', line 209

def count_with_asset_types(asset_types, *args)
  with_asset_types(asset_types) { where(*args).count }
end

.find_all_by_asset_types(asset_types, *args) ⇒ Object

searching and pagination moved to the controller



205
206
207
# File 'app/models/asset.rb', line 205

def find_all_by_asset_types(asset_types, *args)
  with_asset_types(asset_types) { where *args }
end

.known_typesObject



199
200
201
# File 'app/models/asset.rb', line 199

def known_types
  AssetType.known_types
end

.ransackable_attributes(auth_object = nil) ⇒ Object



61
62
63
# File 'app/models/asset.rb', line 61

def self.ransackable_attributes(auth_object = nil)
  %w[asset_content_type asset_file_name asset_file_size caption created_at created_by_id id original_extension original_height original_width title updated_at updated_by_id uuid]
end

.with_asset_types(asset_types, &block) ⇒ Object



213
214
215
216
# File 'app/models/asset.rb', line 213

def with_asset_types(asset_types, &block)
  w_asset_types = AssetType.conditions_for(asset_types)
  with_scope(where(conditions: ["#{w_asset_types} = ?", block]))
end

Instance Method Details

#aspect(style_name = 'original') ⇒ Object



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

def aspect(style_name = 'original')
  geometry(style_name).aspect
end

#asset_typeObject



47
48
49
# File 'app/models/asset.rb', line 47

def asset_type
  AssetType.for(asset)
end

#asset_variant(style_name) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
# File 'app/models/asset.rb', line 69

def asset_variant(style_name)
  case style_name
  when 'thumbnail'
    asset.variant(gravity: 'Center', resize: '100x100^', crop: '100x100+0+0')
  when 'small'
    asset.variant(gravity: 'Center', resize: '320x320^')
  when 'normal'
    asset.variant(gravity: 'Center', resize_to_limit: [asset.[:width], asset.[:height]])
  when 'icon'
    asset.variant(gravity: 'Center', resize: '50x50^')
  end
end

#attached_to?(page) ⇒ Boolean

Returns:

  • (Boolean)


104
105
106
# File 'app/models/asset.rb', line 104

def attached_to?(page)
  pages.include?(page)
end

#basenameObject



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

def basename
  File.basename(asset_file_name, '.*') if asset_file_name
end

#dimensions_known?Boolean

Returns:

  • (Boolean)


170
171
172
# File 'app/models/asset.rb', line 170

def dimensions_known?
  original_width? && original_height?
end

#extension(style_name = 'original') ⇒ Object



90
91
92
93
94
95
96
97
98
# File 'app/models/asset.rb', line 90

def extension(style_name = 'original')
  if style_name == 'original'
    original_extension
  elsif style = paperclip_styles[style_name.to_sym]
    style.format
  else
    original_extension
  end
end

#geometry(style_name = 'original') ⇒ Object



112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'app/models/asset.rb', line 112

def geometry(style_name = 'original')
  unless style?(style_name)
    raise Paperclip::StyleError,
          "Requested style #{style_name} is not defined for this asset."
  end

  @geometry ||= {}
  begin
    @geometry[style_name] ||= if style_name.to_s == 'original'
                                original_geometry
                              else
                                style = asset.styles[style_name.to_sym]
                                original_geometry.transformed_by(style.geometry)
                                # this can return dimensions for fully specified style sizes but not for relative sizes when there are no original dimensions
                              end
  rescue Paperclip::TransformationError => e
    Rails.logger.warn "geometry transformation error: #{e}"
    original_geometry # returns a blank geometry if the real geometry cannot be calculated
  end
end

#height(style_name = 'original') ⇒ Object



154
155
156
# File 'app/models/asset.rb', line 154

def height(style_name = 'original')
  geometry(style_name).height.to_i
end

#horizontal?(style_name = 'original') ⇒ Boolean

Returns:

  • (Boolean)


166
167
168
# File 'app/models/asset.rb', line 166

def horizontal?(style_name = 'original')
  geometry(style_name).horizontal?
end

#orientation(style_name = 'original') ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
# File 'app/models/asset.rb', line 137

def orientation(style_name = 'original')
  a = aspect(style_name)
  if a == nil?
    'unknown'
  elsif a < 1.0
    'vertical'
  elsif a > 1.0
    'horizontal'
  else
    'square'
  end
end

#original_extensionObject



100
101
102
# File 'app/models/asset.rb', line 100

def original_extension
  return asset_file_name.split('.').last.downcase if asset_file_name
end

#original_geometryObject



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

def original_geometry
  @original_geometry ||= Paperclip::Geometry.new(original_width, original_height)
end

#render_original(style_name) ⇒ Object



65
66
67
# File 'app/models/asset.rb', line 65

def render_original(style_name)
  style_name.to_s == 'original' && asset.key.include?('culturaldistrict')
end

#square?(style_name = 'original') ⇒ Boolean

Returns:

  • (Boolean)


158
159
160
# File 'app/models/asset.rb', line 158

def square?(style_name = 'original')
  geometry(style_name).square?
end

#style?(style_name = 'original') ⇒ Boolean

Returns:

  • (Boolean)


82
83
84
# File 'app/models/asset.rb', line 82

def style?(style_name = 'original')
  style_name == 'original' || paperclip_styles.keys.include?(style_name.to_sym)
end

#thumbnail(style_name = 'original') ⇒ Object



54
55
56
57
58
59
# File 'app/models/asset.rb', line 54

def thumbnail(style_name = 'original')
  return asset.url if style_name.to_s == 'original' || render_original(style_name)
  return asset_variant(style_name.to_s).processed.url if asset.variable?

  asset_type.icon(style_name.to_s)
end

#vertical?(style_name = 'original') ⇒ Boolean

Returns:

  • (Boolean)


162
163
164
# File 'app/models/asset.rb', line 162

def vertical?(style_name = 'original')
  geometry(style_name).vertical?
end

#width(style_name = 'original') ⇒ Object



150
151
152
# File 'app/models/asset.rb', line 150

def width(style_name = 'original')
  geometry(style_name).width.to_i
end