From 76b29123a646fcb42d04ea162aa234fecfe4f681 Mon Sep 17 00:00:00 2001 From: Torsten Date: Mon, 28 Nov 2022 00:12:20 +0200 Subject: [PATCH] image class with attributes --- app/controllers/cms/images_controller.rb | 18 +-------- app/models/cms/image.rb | 48 ++++++++++++++++++++++++ app/views/cms/images/index.haml | 17 +++------ 3 files changed, 56 insertions(+), 27 deletions(-) create mode 100644 app/models/cms/image.rb diff --git a/app/controllers/cms/images_controller.rb b/app/controllers/cms/images_controller.rb index feec65b..ee640c0 100644 --- a/app/controllers/cms/images_controller.rb +++ b/app/controllers/cms/images_controller.rb @@ -2,32 +2,18 @@ module Cms class ImagesController < CmsController - @@root = "app/assets/images/cms/" - @@files = Set.new Dir[Rails.root + @@root + "*.*"].collect{|f|f.split("/").last} - def index - @files = files + @images = Image.all end def new end def create - io = params['image_file'] - ending = io.original_filename.split("/").last.split(".").last - filename = params['filename'] + "." + ending - File.open(Rails.root.join('app/assets/images/cms', filename), "wb") do |f| - f.write io.read - end - @@files << filename + Image.save_image(params['filename'] , params['image_file']) redirect_to cms_image_index_path end - private - - def files - @@files - end end end diff --git a/app/models/cms/image.rb b/app/models/cms/image.rb new file mode 100644 index 0000000..5a82df5 --- /dev/null +++ b/app/models/cms/image.rb @@ -0,0 +1,48 @@ +module Cms + class Image + include ActiveModel::API + include ActiveModel::Conversion + extend ActiveModel::Naming + + @@images = {} + + attr_reader :name , :type , :created_at , :updated_at + + def initialize(filename) + puts filename + @name , @type = filename.split(".") + file = File.new(Rails.root.join(Image.root,filename)) + @created_at = file.birthtime + @updated_at = file.ctime + end + + def self.all + return @@images unless @@images.empty? + Dir[Rails.root.join Image.root + "*.*"].each do |f| + file = f.split("/").last + self.add( file ) + end + @@images + end + + #save an io with given name (without ending, that is taken from io) + def self.create_new(filename , io) + ending = io.original_filename.split("/").last.split(".").last + full_filename = filename + "." + ending + File.open(Rails.root.join(Image.root, full_filename), "wb") do |f| + f.write( io.read ) + end + self.add( full_filename ) + end + + def self.root + "app/assets/images/cms/" + end + + private + def self.add(filename) + key = filename.split(".").first + @@images[key] = Image.new(filename) + end + end +end diff --git a/app/views/cms/images/index.haml b/app/views/cms/images/index.haml index 766ea56..6fc0254 100644 --- a/app/views/cms/images/index.haml +++ b/app/views/cms/images/index.haml @@ -3,17 +3,12 @@ Add Image .grid.grid-cols-6.gap-4.m-8 - -@files.each do |file| + -@images.each do |name , image| .relative.block.border.border-gray-100 - %button.absolute.right-4.top-4.rounded-full.bg-black.p-2.text-white{:type => "button"} - %span.sr-only Wishlist - %svg.h-4.w-4{:fill => "none", :stroke => "currentColor", :viewbox => "0 0 24 24", :xmlns => "http://www.w3.org/2000/svg"} - %path{:d => "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z", "stroke-linecap" => "round", "stroke-linejoin" => "round", "stroke-width" => "2"} - =image_tag("cms/#{file}" , class: "h-56 w-full object-contain lg:h-72") + =image_tag("cms/#{name}" , class: "h-56 w-full object-contain lg:h-72") .p-6 %strong.inline-block.bg-yellow-400.px-3.py-1.text-xs.font-medium - New - %h3.mt-4.text-lg.font-bold= file.split(".").first - %p.mt-2.text-sm.text-gray-700 $14.99 - %button.mt-4.block.w-full.rounded-sm.bg-yellow-500.p-4.text-sm.font-medium{:type => "button"} - Add to Cart + =image.type + %h3.mt-4.text-lg.font-bold= image.name + %p.mt-2.text-sm.text-gray-700 + = "#{image.created_at.to_date} ---- #{image.updated_at.to_date}"