class Milkode::MilkodeYaml

Constants

EMPTY_YAML
MILKODE_YAML_VERSION

Attributes

contents[R]

Public Class Methods

new(str = nil) click to toggle source
# File lib/milkode/cdstk/milkode_yaml.rb, line 23
def initialize(str = nil)
  @data = YAML.load(str || EMPTY_YAML)
  @contents = parse_contents
end

Public Instance Methods

add(package) click to toggle source

パッケージを追加

# File lib/milkode/cdstk/milkode_yaml.rb, line 37
def add(package)
  @contents.push package
  update_contents
end
dump() click to toggle source
# File lib/milkode/cdstk/milkode_yaml.rb, line 28
def dump
  YAML.dump(@data)
end
find_dir(directory) click to toggle source

ディレクトリ名が同じパッケージを検索

# File lib/milkode/cdstk/milkode_yaml.rb, line 73
def find_dir(directory)
  @contents.find {|v| v.directory == directory}
end
find_name(name) click to toggle source

名前が同じパッケージを検索

# File lib/milkode/cdstk/milkode_yaml.rb, line 63
def find_name(name)
  @contents.find {|v| v.same_name?(name)}
end
global_gitignore() click to toggle source
# File lib/milkode/cdstk/milkode_yaml.rb, line 105
def global_gitignore
  @data['global_gitignore']
end
match_all(keyword) click to toggle source

指定キーワードにマッチする全てのパッケージを返す

# File lib/milkode/cdstk/milkode_yaml.rb, line 68
def match_all(keyword)
  @contents.find_all {|p| p.name.include? keyword }
end
migrate() click to toggle source

マイグレーション

# File lib/milkode/cdstk/milkode_yaml.rb, line 90
def migrate
  if (version != MILKODE_YAML_VERSION)
    # バージョン番号
    @data['version'] = MILKODE_YAML_VERSION

    # パッケージ
    contents.each{|v| v.migrate}

    # migrateが起きた
    true
  else
    false
  end
end
package_root(dir) click to toggle source

指定ディレクトリの所属するパッケージのルートディレクトリを得る。 見つからない場合はnilを返す。

# File lib/milkode/cdstk/milkode_yaml.rb, line 79
def package_root(dir)
  nd = Util.normalize_filename(dir)

  @contents.find_all {|v|
    nd =~ /^#{Regexp.escape(v.directory)}(:?\/|\Z)/
  }.max_by {|v|
    v.directory.length
  }
end
remove(package) click to toggle source

パッケージを削除

# File lib/milkode/cdstk/milkode_yaml.rb, line 51
def remove(package)
  @contents.delete(package)
  update_contents
end
remove_all() click to toggle source

全てのパッケージを削除

# File lib/milkode/cdstk/milkode_yaml.rb, line 57
def remove_all
  @contents = []
  update_contents
end
set_global_gitignore(filename) click to toggle source
# File lib/milkode/cdstk/milkode_yaml.rb, line 109
def set_global_gitignore(filename)
  @data['global_gitignore'] = filename
end
update(package) click to toggle source

同名パッケージの内容を置き換え

# File lib/milkode/cdstk/milkode_yaml.rb, line 43
def update(package)
  i = @contents.find_index {|v| v.same_name?(package.name) }
  raise unless i
  @contents[i] = package
  update_contents
end
version() click to toggle source
# File lib/milkode/cdstk/milkode_yaml.rb, line 32
def version
  @data['version']
end

Private Instance Methods

parse_contents() click to toggle source
# File lib/milkode/cdstk/milkode_yaml.rb, line 115
def parse_contents
  @data['contents'].map do |v|
    Package.new(v)
  end
end
update_contents() click to toggle source
# File lib/milkode/cdstk/milkode_yaml.rb, line 121
def update_contents
  @data['contents'] = @contents.map{|v| v.hash }
end