Class: Settings

Inherits:
Object
  • Object
show all
Defined in:
lib/atcoder_tools/settings.rb

Defined Under Namespace

Classes: Credentials

Instance Method Summary collapse

Constructor Details

#initializeSettings

Returns a new instance of Settings.



8
9
10
11
12
13
14
# File 'lib/atcoder_tools/settings.rb', line 8

def initialize
  if File.exist?(".atcoder/settings.yml")
    @settings = YAML.load_file(".atcoder/settings.yml")
  else
    @settings = {}
  end
end

Instance Method Details

#ambiguous_contest(contest) ⇒ Object



20
21
22
23
24
25
26
27
28
29
# File 'lib/atcoder_tools/settings.rb', line 20

def ambiguous_contest(contest)
  case contest
  when String
    Contest.new(contest)
  when Contest
    contest
  else
    raise ArgumentError, "引数は StringまたはContestです。"
  end
end

#contest_language(contest) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/atcoder_tools/settings.rb', line 60

def contest_language(contest)
  if @settings[ambiguous_contest(contest).name]
    @settings[ambiguous_contest(contest).name]['language']
  else
    language
  end
end

#contest_language=(data) ⇒ Object

contest, languageの順に代入



69
70
71
72
73
# File 'lib/atcoder_tools/settings.rb', line 69

def contest_language=(data)
  name = ambiguous_contest(data[0]).name
  @settings[name] ||= {}
  @settings[name]['language'] = data[1]
end

#credentialsObject



88
89
90
91
92
93
# File 'lib/atcoder_tools/settings.rb', line 88

def credentials
  unless @settings.key?('username') && @settings.key?('password')
    raise "先にログインしてください!"
  end
  return Credentials.new(@settings['username'], Base64.decode64(@settings['password']))
end

#current_contestObject



16
17
18
# File 'lib/atcoder_tools/settings.rb', line 16

def current_contest
  @settings['current_contest'] && Contest.new(@settings['current_contest'])
end

#current_contest=(contest) ⇒ Object



31
32
33
34
# File 'lib/atcoder_tools/settings.rb', line 31

def current_contest=(contest)
  @settings['current_contest'] = ambiguous_contest(contest).name

end

#current_taskObject



36
37
38
# File 'lib/atcoder_tools/settings.rb', line 36

def current_task
  current_contest && @settings['current_task'] && Task.new(current_contest, @settings['current_task'])
end

#current_task=(task) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/atcoder_tools/settings.rb', line 40

def current_task=(task)
  case task
  when String
    task_name = task
  when Task
    task_name = task.name
  else
    raise ArgumentError, "引数は StringまたはTaskです。"
  end
  @settings['current_task'] = task_name
end

#destroy_credentials!Object



83
84
85
86
# File 'lib/atcoder_tools/settings.rb', line 83

def destroy_credentials!
  @settings.delete('username')
  @settings.delete('password')
end

#languageObject



52
53
54
# File 'lib/atcoder_tools/settings.rb', line 52

def language
  @settings['language'] || 'ruby'
end

#language=(lang) ⇒ Object



56
57
58
# File 'lib/atcoder_tools/settings.rb', line 56

def language=(lang)
  @settings['language'] = lang
end

#password=(password) ⇒ Object



75
76
77
# File 'lib/atcoder_tools/settings.rb', line 75

def password=(password)
  @settings['password'] = Base64.strict_encode64(password)
end

#save!Object



95
96
97
98
99
# File 'lib/atcoder_tools/settings.rb', line 95

def save!
  @settings['updated_at'] = Time.now
  FileUtils.mkdir_p '.atcoder'
  open('.atcoder/settings.yml' , 'w') {|f| YAML.dump(@settings , f ) }
end

#username=(username) ⇒ Object



79
80
81
# File 'lib/atcoder_tools/settings.rb', line 79

def username=(username)
  @settings['username'] = username
end