class TokyoMetro::Factory::Save::Api::MetaClass::EachFile::Fundamental
API から取得したデータなどを保存するための Factory Pattern クラス
Attributes
data[R]
db_dir[R]
dirname_base[R]
file_type[R]
filename[R]
Public Class Methods
new( data , filename = Time.now.strftime( "%Y%m%d" ) , db_dir: nil , dirname_sub: nil , file_type: :yaml )
click to toggle source
Constructor @param db_dir
[String (dirname) or Const (Class)] 「データベースのディレクトリを示す文字列」または「クラスを表す定数」
# File lib/tokyo_metro/factory/save/api/meta_class/each_file/fundamental.rb, line 6 def initialize( data , filename = Time.now.strftime( "%Y%m%d" ) , db_dir: nil , dirname_sub: nil , file_type: :yaml ) check_validity_of_data( data ) @data = data @filename = filename @db_dir = set_db_dirname( db_dir ) @dirname_base = set_dirname_base( dirname_sub ) @file_type = file_type end
process( data , filename , db_dir , dirname_sub , file_type )
click to toggle source
# File lib/tokyo_metro/factory/save/api/meta_class/each_file/fundamental.rb, line 46 def self.process( data , filename , db_dir , dirname_sub , file_type ) # puts "\n" * 2 # puts "Begin Process" # puts "db_dir: #{ db_dir }" # puts "file_type: #{ file_type }" # puts "" info = self.new( data , filename , db_dir: db_dir , dirname_sub: dirname_sub , file_type: file_type ) # puts "filename: #{ info.filename }" # puts "db_dir: #{ info.db_dir }" # puts "dirname_base: #{ info.dirname_base }" # puts "Fullpass: #{ info.filename_fullpass }" info.save_to_file end
Public Instance Methods
filename_fullpass()
click to toggle source
# File lib/tokyo_metro/factory/save/api/meta_class/each_file/fundamental.rb, line 21 def filename_fullpass if /[\.\/]/ === @filename splited_ary = @filename.split( /[\.\/]/ ) filename = splited_ary.pop "#{ @dirname_base }\/#{ splited_ary.join( "\/" ) }\/#{ filename }" else "#{ @dirname_base }\/#{ @filename }" end end
save_to_file()
click to toggle source
# File lib/tokyo_metro/factory/save/api/meta_class/each_file/fundamental.rb, line 31 def save_to_file chdir_to_dir_of_file filename = File.basename( self.filename_fullpass ) case @file_type when :txt save_as_txt( filename ) when :json save_as_json( filename ) when :yaml , :yml save_as_yaml( filename ) else raise "Error" end end
Private Instance Methods
chdir_to_dir_of_file()
click to toggle source
# File lib/tokyo_metro/factory/save/api/meta_class/each_file/fundamental.rb, line 95 def chdir_to_dir_of_file dirname_l = File.dirname( self.filename_fullpass ) unless Dir.pwd == dirname_l ::FileUtils.mkdir_p( dirname_l ) Dir.chdir( dirname_l ) end end
check_validity_of_data( data )
click to toggle source
# File lib/tokyo_metro/factory/save/api/meta_class/each_file/fundamental.rb, line 65 def check_validity_of_data( data ) unless data.instance_of?( Hash ) or data.instance_of?( ::Array ) raise "Error: The data is not valid. (Class: #{data.class.name})" end end
save_as_json( filename )
click to toggle source
# File lib/tokyo_metro/factory/save/api/meta_class/each_file/fundamental.rb, line 109 def save_as_json( filename ) open( "#{filename}.json" , "w:UTF-8" ) do | f | ::JSON.dump( @data , f ) end end
save_as_txt( filename )
click to toggle source
# File lib/tokyo_metro/factory/save/api/meta_class/each_file/fundamental.rb, line 103 def save_as_txt( filename ) file = File.open( "#{filename}.txt" , "w:UTF-8" ) file.print( @data.to_s ) file.close end
save_as_yaml( filename )
click to toggle source
# File lib/tokyo_metro/factory/save/api/meta_class/each_file/fundamental.rb, line 115 def save_as_yaml( filename ) open( "#{filename}.yaml" , "w:UTF-8" ) do | f | ::YAML.dump( @data , f ) #YAML.unespace( @data , f ) end end
set_db_dirname( db_dir )
click to toggle source
保存先のディレクトリの名称を返すメソッド @note db_dir
が「クラスを表す定数」である場合は、指定されたクラスのクラスメソッド db_dirname が呼び出される。それ以外の場合はインスタンス変数 db_dir
を返す。
# File lib/tokyo_metro/factory/save/api/meta_class/each_file/fundamental.rb, line 73 def set_db_dirname( db_dir ) # set_db_base_dirname if db_dir.instance_of?( ::Class ) str = db_dir.db_dirname else str = db_dir end raise "Error" if str.nil? str end
set_dirname_base( dirname_sub )
click to toggle source
# File lib/tokyo_metro/factory/save/api/meta_class/each_file/fundamental.rb, line 83 def set_dirname_base( dirname_sub ) if dirname_sub.nil? @db_dir elsif dirname_sub.string? "#{ @db_dir }\/#{ dirname_sub }" elsif dirname_sub.instance_of?( ::Array ) and dirname_sub.all?{ | element | element.string? } "#{ @db_dir }\/#{ dirname_sub.join( "\/" ) }" else raise "Error: The instance variable \"dirname_sub\" is not valid. (Class: #{ dirname_sub.class.name })" end end