This is an automated email from the ASF dual-hosted git repository. sebb pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/whimsy.git
The following commit(s) were added to refs/heads/master by this push: new abf8406 Simplify by using instance variables abf8406 is described below commit abf840629a995caf0e02d9e15dacd783bfe672ad Author: Sebb <s...@apache.org> AuthorDate: Fri Jul 6 11:35:25 2018 +0100 Simplify by using instance variables Also now agrees with other action modules --- www/project/icla/views/actions/update.json.rb | 107 ++++++++++++-------------- 1 file changed, 48 insertions(+), 59 deletions(-) diff --git a/www/project/icla/views/actions/update.json.rb b/www/project/icla/views/actions/update.json.rb index 50c6d32..ff71da8 100644 --- a/www/project/icla/views/actions/update.json.rb +++ b/www/project/icla/views/actions/update.json.rb @@ -35,9 +35,8 @@ VALID_PHASES=%w{discuss vote cancelled tallied invite} VALID_VOTES=%w{+1 +0 -0 -1} # Tally the votes and send them -def sendTally(data, contents) - member = data['member'] # currently logged in - user_email = "#{member}@apache.org" +def sendTally(contents) + user_email = "#{@member}@apache.org" pmc = ASF::Committee.find(contents['project']) pmc_email = "#{pmc.mail_list}@apache.org" subject = "[RESULT]" + contents['subject'] @@ -77,79 +76,72 @@ def sendTally(data, contents) mail.deliver end -def update(data) +def update() # setup and validation - token = data['token'] - raise ArgumentError.new('token must not be nil') unless token - action = data['action'] - raise ArgumentError.new("Invalid action: '#{action}'") unless VALID_ACTIONS.include? action - member = data['member'] - comment = data['comment'] # may be nil - expectedPhase = data['expectedPhase'] - raise ArgumentError.new('expectedPhase must not be nil') unless expectedPhase - newPhase = data['newPhase'] # nil for no change - if newPhase and not VALID_PHASES.include? newPhase - raise ArgumentError.new("Invalid newPhase: '#{newPhase}'") + raise ArgumentError.new('token must not be nil') unless @token + raise ArgumentError.new("Invalid action: '#{@action}'") unless VALID_ACTIONS.include? @action + raise ArgumentError.new('expectedPhase must not be nil') unless @expectedPhase + if @newPhase and not VALID_PHASES.include? @newPhase + raise ArgumentError.new("Invalid @newPhase: '#{@newPhase}'") end timestamp = Time.now.utc.to_s addComment = nil voteinfo = nil - if action == 'submitVote' - vote = data['vote'] - raise ArgumentError.new("Invalid vote: '#{vote}'") unless VALID_VOTES.include? vote - raise ArgumentError.new('member must not be nil') unless member - if vote == '-1' - raise ArgumentError.new('-1 vote must have comment') unless comment + if @action == 'submitVote' + raise ArgumentError.new("Invalid vote: '#{@vote}'") unless VALID_VOTES.include? @vote + raise ArgumentError.new('member must not be nil') unless @member + if @vote == '-1' + raise ArgumentError.new('-1 vote must have comment') unless @comment end - if comment # allow comment for other votes + if @comment # allow comment for other votes voteinfo = { - 'vote' => vote, - 'comment' => comment, - 'member' => member, + 'vote' => @vote, + 'comment' => @comment, + 'member' => @member, 'timestamp' => timestamp, } else voteinfo = { - 'vote' => vote, - 'member' => member, + 'vote' => @vote, + 'member' => @member, 'timestamp' => timestamp, } end - elsif HAS_COMMENT.include? action - if comment + elsif HAS_COMMENT.include? @action + if @comment addComment = { - 'comment' => comment, - 'member' => member, + 'comment' => @comment, + 'member' => @member, 'timestamp' => timestamp, } else - raise ArgumentError.new("comment must not be nil for '#{action}'") + raise ArgumentError.new("comment must not be nil for '#{@action}'") end end - file = "/srv/icla/#{token}.json" + file = "/srv/icla/#{@token}.json" # now read/update the file if necessary contents = {} # define the var outside the block rewrite = false # should the file be updated? - phases = *expectedPhase # convert string to array + phases = *@expectedPhase # convert string to array LockFile.lockfile(file, 'r+', File::LOCK_EX) do |f| contents = JSON::parse(f.read) phase = contents['phase'] - raise ArgumentError.new("Phase '#{phase}': expected '#{expectedPhase}'") unless expectedPhase == '*' or phases.include? phase - if newPhase && newPhase != phase - contents['phase'] = newPhase + raise ArgumentError.new("Phase '#{phase}': expected '#{@expectedPhase}'") unless @expectedPhase == '*' or phases.include? phase + if @newPhase && @newPhase != phase + contents['phase'] = @newPhase rewrite = true end - if action == 'startVoting' # need to add a vote to start this off + if @action == 'startVoting' # need to add a vote to start this off comment0 = contents['comments'][0]['comment'] # initial comment voteinfo = { 'vote' => '+1', 'comment' => "#{comment0}\nHere is my +1", # append to original comment - 'member' => member, + 'member' => @member, 'timestamp' => timestamp, } addComment['comment'] += "\n**Starting the vote.**" @@ -169,8 +161,8 @@ def update(data) end end - if action == 'tallyVote' - sendTally(data, contents) + if @action == 'tallyVote' + sendTally(contents) end # return the data @@ -179,10 +171,10 @@ def update(data) end # error handler -def process(data) +def process() contents = {} begin - contents = update(data) + contents = update rescue => e _error e _backtrace e.backtrace[0] # can be rather large @@ -190,14 +182,6 @@ def process(data) _contents contents end -def embed # called by Sinatra which sets params - process(params) -end - -def main(params) # called by CLI which passes params - process(params) -end - if __FILE__ == $0 # Allow independent testing require 'whimsy/asf' require 'mail' @@ -208,17 +192,22 @@ if __FILE__ == $0 # Allow independent testing ret[n] = a end end - data = Hash[*ARGV] # cannot combine this with next line as hash doesn't yet exist - data.each{|k,v| data[k] = v.split(',') if v =~ /,/} # fix up lists - puts data.inspect - if data['action'] == 'sendTally' # special for testing stand-alone - contents = JSON.parse(File.read("/srv/icla/#{data['token']}.json")) - sendTally(data, contents) + params = Hash[*ARGV] # cannot combine this with next line as hash doesn't yet exist + params.each{|k,v| params[k] = v.split(',') if v =~ /,/} # fix up lists + params.each{|k,v| instance_variable_set("@#{k}", v)} + puts params.inspect + if @action == 'sendTally' # special for testing stand-alone + contents = JSON.parse(File.read("/srv/icla/#{@token}.json")) + begin + sendTally(contents) + rescue => err + puts err + end puts ret['body_text'] else - main(data) + process puts JSON.pretty_generate(ret) # output the return data end else - embed # Sinatra sets params + process end \ No newline at end of file