Class: Commander::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/commander/runner.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Runner

Init



19
20
21
22
23
24
# File 'lib/commander/runner.rb', line 19

def initialize(opts = {})
  @options         = opts
  @options[:force] = opts[:force]
  @selected_commander = opts[:force] || opts[:status] || opts[:vacation]
  @users = YAML.load_file("#{File.join(ENV['HOME'])}/.config/happy-commander/members.yml")
end

Instance Attribute Details

#boardObject

Returns the value of attribute board.



16
17
18
# File 'lib/commander/runner.rb', line 16

def board
  @board
end

#optionsObject

Returns the value of attribute options.



16
17
18
# File 'lib/commander/runner.rb', line 16

def options
  @options
end

#selected_commanderObject

Returns the value of attribute selected_commander.



16
17
18
# File 'lib/commander/runner.rb', line 16

def selected_commander
  @selected_commander
end

#usersObject

Returns the value of attribute users.



16
17
18
# File 'lib/commander/runner.rb', line 16

def users
  @users
end

Instance Method Details

#add_member_to_cardObject

Adds commander to Trello Card



113
114
115
# File 'lib/commander/runner.rb', line 113

def add_member_to_card
  @trello.add_commander_to_card(find_member, @card)
end

#comment_on_cardObject

Comments on Trello Card



150
151
152
153
# File 'lib/commander/runner.rb', line 150

def comment_on_card
  @comment_string = "@#{@users[@selected_commander][:trello_name]} is your commanding officer for the next 7 Days."
  @trello.comment_on_card(@comment_string, @card)
end

#count_upObject

Increments the counter



133
134
135
# File 'lib/commander/runner.rb', line 133

def count_up
  users[@selected_commander][:times_commander] += 1
end

#delete_assigned_membersObject

Delete assigned commander from Trello Card



108
109
110
# File 'lib/commander/runner.rb', line 108

def delete_assigned_members
  @card.members.each{|member| @card.remove_member member}
end

#evaluate_vacations(commander) ⇒ Object

Check for timespans



62
63
64
65
66
67
68
69
# File 'lib/commander/runner.rb', line 62

def evaluate_vacations(commander)
  parse_vacations.each do |check|
    check[1] = check[0] unless check[1] # Rewrite if statement with catch to prevent this error?
    if (check[0]..check[1]).cover?(Date.today)
      set_vacation_flag(commander, 'true')
    end
  end
end

#find_cardObject

Finds the Commander Card on Trello



123
124
125
# File 'lib/commander/runner.rb', line 123

def find_card
  @card = @trello.find_card_by_id(CONFIG['card_id']) # replace when move to real board
end

#find_memberObject

Finds the member on Trello



128
129
130
# File 'lib/commander/runner.rb', line 128

def find_member
  @trello.find_member_by_username(users[@selected_commander][:trello_name])
end

#importObject

Imports TrelloConnection



145
146
147
# File 'lib/commander/runner.rb', line 145

def import
  @trello = Commander::TrelloConnection.new
end

#list_all_membersObject

List all available Users



118
119
120
# File 'lib/commander/runner.rb', line 118

def list_all_members
  @users.each { |x| puts "-#{x.first}"}
end

#manipulate_trelloObject

All Trello actions



38
39
40
41
42
# File 'lib/commander/runner.rb', line 38

def manipulate_trello
  comment_on_card
  delete_assigned_members
  add_member_to_card
end

#parse_vacationsObject

Parsing vacation to computable format



72
73
74
75
# File 'lib/commander/runner.rb', line 72

def parse_vacations
  split = @vacations.map { |x| x.split(' - ') }
  split.map { |x| x.map { |b| Date.parse(b) } }
end

#select_commanderObject

Sorting logic



78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/commander/runner.rb', line 78

def select_commander
  @selected_commander = Hash[@users.select { |_, v| !v[:vacation] }].sort_by{ |_, v| v[:times_commander] }
  if @selected_commander.count > 1
    if @selected_commander[0][1][:times_commander] == @selected_commander[1][1][:times_commander]
      @selected_commander = @selected_commander.sort_by { |_,v| v[:date] }[0][0]
    else
      @selected_commander = @selected_commander[0][0]
    end
  else
    @selected_commander = @selected_commander[0][0]
  end
  write_attributes
end

#set_commanderObject

Steps



27
28
29
30
31
32
33
34
35
# File 'lib/commander/runner.rb', line 27

def set_commander
  import
  find_card
  update_vacations
  select_commander if @options[:auto]
  write_attributes if @options[:force]
  manipulate_trello
  puts "Chose: #{@selected_commander}"
end

#set_vacation_flag(commander, state) ⇒ Object

Sets :vacation true if vacation



55
56
57
58
59
# File 'lib/commander/runner.rb', line 55

def set_vacation_flag(commander, state)
  Commander::Helpers.to_boolean(state)
  puts "#{commander} is on vacation"
  @users[commander][:vacation] = true
end

#show_status(commander) ⇒ Object

Prints out the status



93
94
95
96
97
# File 'lib/commander/runner.rb', line 93

def show_status(commander)
  puts "#{commander} was #{@users[commander][:times_commander] } times Commanding officer of the week."
  puts "#{commander} is currently on vacation" if @users[commander][:vacation]
  @users[commander][:vacations].each { |x| puts x}
end

#update_vacationsObject

Updates all vacations



45
46
47
48
49
50
51
52
# File 'lib/commander/runner.rb', line 45

def update_vacations
  self.users.keys.each do |name|
    @vacations = Commander::Vacations.find_vacations(self.users[name][:tel_name]) #tel_name
    evaluate_vacations(name)
    @users[name][:vacations] = @vacations
  end
  write_to_file('members', @users.to_yaml)
end

#write_attributesObject

And writes



100
101
102
103
104
105
# File 'lib/commander/runner.rb', line 100

def write_attributes
  users[@selected_commander][:vacation] = false
  users[@selected_commander][:times_commander] = count_up
  users[@selected_commander][:date] = Time.now
  write_to_file('members', @users.to_yaml)
end

#write_to_file(filename, content) ⇒ Object

Writes to yaml



138
139
140
141
142
# File 'lib/commander/runner.rb', line 138

def write_to_file(filename, content)
  File.open("#{File.join(Dir.home)}/.config/happy-commander/#{filename}.yml", 'w') do |f|
    f.write(content)
  end
end