lib/imagut/nefparser.rb in imagut-0.0.3 vs lib/imagut/nefparser.rb in imagut-0.0.4
- old
+ new
@@ -1,43 +1,55 @@
#! /usr/bin/env ruby
# coding: utf-8
-class NefParserNotNefError < StandardError; end
-class NefParserTypeError < StandardError; end
-
#
# Nikon NEF ファイルのなんちゃってパーサ。
#
-class NefParser
- #
- def initialize
- end
+class Imagut::NefParser
+ class NotNefError < StandardError; end
+ class TypeError < StandardError; end
- # 撮影日時を返す(つもり)。
- #
- # 頑張って解析はしてない。
- # 日付と思われる部分だけ抽出している。
- # 解析には 372+19 = 391 バイトあれば足りる。
- # サンプル NEF ファイルに撮影日時と思しき文字列は 4つあるけど、
- # 詳細が分かるまではとりあえず最初の1個のみ Time object にして返す。
- # a19 の部分が時刻の文字列。
- # 4つあるんだけど、それぞれの差異 or 冗長なのかが分からない。
- # 引数 data は File.read で読まれるような文字列
- def taken_date(data)
- unless data.is_a?(String)
- message = "Not string data. Use File#read, not File#readlines."
- raise NefParserTypeError, message
- end
+ #
+ def initialize
+ end
- datetime_str = data.unpack("a372a19a57a19a397a19a1a19")[1]
- #p datetime_str
- #p datetime_str.split(/[ :]/)
- begin
- @date = Time.mktime( * datetime_str.split(/[ :]/) )
- rescue
- raise NefParserNotNefError, "Cannot find taken time."
- end
- return @date
- end
+ # 撮影日時を返す(つもり)。
+ #
+ # 頑張って解析はしてない。
+ # 日付と思われる部分だけ抽出している。
+ # 解析には 372+19 = 391 バイトあれば足りる。
+ # サンプル NEF ファイルに撮影日時と思しき文字列は 4つあるけど、
+ # 詳細が分かるまではとりあえず最初の1個のみ Time object にして返す。
+ # a19 の部分が時刻の文字列。
+ # 4つあるんだけど、それぞれの差異 or 冗長なのかが分からない。
+ # 引数 data は File.read で読まれるような文字列
+ def self.taken_date(data)
+ unless data.is_a?(String)
+ message = "Not string data. Use File#read, not File#readlines."
+ raise TypeError, message
+ end
+
+ datetime_str = data.unpack("a372a19a57a19a397a19a1a19")[1]
+ #p datetime_str
+ #p datetime_str.split(/[ :]/)
+ begin
+ @date = Time.mktime( * datetime_str.split(/[ :]/) )
+ rescue
+ raise NotNefError, "Cannot find taken time. (#{datetime_str})"
+ end
+ return @date
+ end
+
+ def self.read_taken_date(file)
+ data = File.read(file)
+ result = self.taken_date(data)
+ #pp result
+ result
+ end
+
+
+ def taken_date(data)
+ self.class.taken_date(data)
+ end
end