lib/richfile/base.rb in tsalzer-richfile-0.0.3 vs lib/richfile/base.rb in tsalzer-richfile-0.0.4
- old
+ new
@@ -1,69 +1,29 @@
-require 'openssl'
-
# Extension to File.
module Richfile
- if OpenSSL::OPENSSL_VERSION_NUMBER > 0x00908000
- DIGESTS = %w(DSS1 MD2 MD4 MD5 RIPEMD160 SHA SHA1 SHA224 SHA256 SHA384 SHA512)
- else
- DIGESTS = %w(DSS1 MD2 MD4 MD5 RIPEMD160 SHA SHA1)
- end
- def self.digest_variants(digest)
- digest_downcase = digest.downcase
- digest_symbol = digest_downcase.to_sym
- digest_bang = "#{digest_downcase}!".to_sym
- digest_variable = "@#{digest_downcase}".to_sym
- return digest_downcase, digest_symbol, digest_bang, digest_variable
- end
-
# Methods to be included in File objects.
module Base
# size of the file in bytes.
attr_reader :size
- # define attributes for all the digests in Richfile::DIGEST.
- Richfile::DIGESTS.each do |digest|
- d_downcase, d_sym, d_bang, d_var = Richfile.digest_variants(digest)
-
- # message digest #{digest}
- attr_reader d_sym
-
- define_method d_sym do
- instance_variable_set(d_var, File.open(path, 'r') do |f|
- d = OpenSSL::Digest.new(digest)
- d << f.read
- d.hexdigest
- end) unless instance_variable_get(d_var)
- instance_variable_get(d_var)
- end
- define_method d_bang do
- instance_variable_set(d_var, nil)
- send d_sym
- end
- end
-
# refresh the Richfile added attributes.
# All the attributes referred once are loaded.
def refresh!
self.size! if @size
- DIGESTS.each do |digest|
- d_downcase, d_sym, d_bang, d_var = Richfile.digest_variants(digest)
- send d_bang if (instance_variable_get(d_var))
- end
+ refresh_digests! if respond_to?(:refresh_all_digests!)
+ self.mimetype! if @mimetype
self
end
# refresh all attributes.
# All attributes wil be loaded, so all digests will be calculated.
# You will most probably never need this method.
def refresh_all!
self.size!
- DIGESTS.each do |digest|
- d_downcase, d_sym, d_bang, d_var = Richfile.digest_variants(digest)
- send d_bang
- end
+ refresh_all_digests! if respond_to?(:refresh_all_digests!)
+ self.mimetype!
self
end
# proxies File.exists?.
# This will always go to the real File.exists?, it will not be cached.
@@ -86,8 +46,10 @@
end#Base
# include the Richfile::Base module into the File class.
def self.install
File.send :include, Richfile::Base
+ File.send :include, Richfile::Digests::Base
+ File.send :include, Richfile::Mimetype::Base
end
end#Richfile