class TokyoMetro::Factory::Generate::Api::MetaClass::List::Normal

保存済みの情報を処理する Factory Pattern のクラス

Public Class Methods

info_class() click to toggle source

配列の要素となるインスタンスのクラス @return [Const (class)]

# File lib/tokyo_metro/factory/generate/api/meta_class/list/normal.rb, line 72
def self.info_class
  raise "The class method \"#{__method__}\" is not defined yet in this class \"#{ self.name }\"."
end
list_class() click to toggle source

配列のクラス @return [Const (class)]

# File lib/tokyo_metro/factory/generate/api/meta_class/list/normal.rb, line 66
def self.list_class
  raise "The class method \"#{__method__}\" is not defined yet in this class \"#{ self.name }\"."
end
new( file_type , db_dirname , db_dirname_sub ) click to toggle source

Constructor @param file_type [String (filename)] ファイルの名称 @param db_dirname [String (dirname)] データが格納されているディレクトリの名称 @param db_dirname_sub [String (dirname) or nil] データが格納されているサブディレクトリの名称

# File lib/tokyo_metro/factory/generate/api/meta_class/list/normal.rb, line 8
def initialize( file_type , db_dirname , db_dirname_sub )
  @file_type = file_type
  @db_dirname = db_dirname
  @db_dirname_sub = db_dirname_sub
end
process( file_type , db_dirname , db_dirname_sub , max ) click to toggle source

保存済みの情報からインスタンスの配列を復元するメソッド(クラスメソッド) @param file_type [String (filename)] ファイルの名称 @param db_dirname [String (dirname)] データが格納されているディレクトリの名称 @param db_dirname_sub [String (dirname) or nil] データが格納されているサブディレクトリの名称 @param max [Integer or nil] 配列の要素の最大値 @note max を nil とした場合は無制限で、すべての情報を配列に格納する。 @return [subclass of TokyoMetro::Api::MetaClass::Fundamental::List]

# File lib/tokyo_metro/factory/generate/api/meta_class/list/normal.rb, line 58
def self.process( file_type , db_dirname , db_dirname_sub , max )
  self.new( file_type , db_dirname , db_dirname_sub ).generate( max )
end

Public Instance Methods

filename_list( max = nil ) click to toggle source

ファイルのリスト @param max [Integer or nil] 配列の要素の最大値 @note max を nil とした場合は無制限で、すべてのファイルを配列に格納する。 @return [::Array]

# File lib/tokyo_metro/factory/generate/api/meta_class/list/normal.rb, line 18
def filename_list( max = nil )
  # @todo 遅延評価
  files = ::Dir.glob( self.filename_wildcard )
  if max.integer?
    files = files.first( max )
  end
  inspect_info_of_generating_filename_list( files )
  files
end
filename_wildcard() click to toggle source

取得するファイルを表すワイルドカード @return [String]

# File lib/tokyo_metro/factory/generate/api/meta_class/list/normal.rb, line 30
def filename_wildcard
  "#{ db_dirname }/**.#{ @file_type.to_s }"
end
generate( max = nil ) click to toggle source

保存済みの情報からインスタンスの配列を復元するメソッド(インスタンスメソッド) @param max [Integer or nil] 配列の要素の最大値 @note max を nil とした場合は無制限で、すべてのファイルを配列に格納する。 @return [subclass of TokyoMetro::Api::MetaClass::Fundamental::List]

# File lib/tokyo_metro/factory/generate/api/meta_class/list/normal.rb, line 38
def generate( max = nil )
  ary_new = self.class.list_class.new
  files = self.filename_list( max )
  files.each.with_index(1) do | filename , i |
    infos_in_a_file = open_and_process_a_file( filename )
    infos_in_a_file.each do | info |
      ary_new << info
    end
    inspect_info_of_generation(i)
  end
  ary_new
end

Private Instance Methods

db_dirname() click to toggle source

@!endgroup

# File lib/tokyo_metro/factory/generate/api/meta_class/list/normal.rb, line 80
def db_dirname
  if @db_dirname_sub.nil?
    "#{ @db_dirname }/**"
  elsif @db_dirname_sub.string?
    "#{ @db_dirname }/#{ @db_dirname_sub }"
  else
    raise "Error: The instance variable \"db_dirname_sub\" is not valid."
  end
end
inspect_info_of_generating_filename_list( files ) click to toggle source
# File lib/tokyo_metro/factory/generate/api/meta_class/list/normal.rb, line 90
def inspect_info_of_generating_filename_list( files )
  unless files.empty?
    puts "Generate instances of \"#{ self.class.info_class.name }\" from #{ files.length } files"
    puts "that are matched with \"#{ filename_wildcard }\"."
  else
    puts "There is no file that are matched with \"#{ filename_wildcard }\"."
    raise "Error"
  end
end
inspect_info_of_generation(i) click to toggle source
# File lib/tokyo_metro/factory/generate/api/meta_class/list/normal.rb, line 110
def inspect_info_of_generation(i)
  if i % 100 == 0
    puts i
  end
end
open_and_process_a_file( filename ) click to toggle source
# File lib/tokyo_metro/factory/generate/api/meta_class/list/normal.rb, line 100
def open_and_process_a_file( filename )
  case @file_type
  when :json
    ary_from_file = ::JSON.load( open( filename , "r:utf-8" ).read )
  when :yaml
    ary_from_file = ::YAML.load_file( filename )
  end
  ary_from_file.map { | element | self.class.info_class.generate_from_hash( element ) }
end