Sha256: 71eb174a4f77bfeb2e9eee4056112a15eb8e290140546802ee2a1551c9b42e4b

Contents?: true

Size: 1.64 KB

Versions: 3

Compression:

Stored size: 1.64 KB

Contents

require 'clicoder/site_base'
require 'clicoder/config'

require 'mechanize'

module Clicoder
  class AtCoder < SiteBase

    def initialize(contest_id, task_id)
      config.local['contest_id'] = contest_id
      config.local['task_id'] = task_id
      @contest_id = contest_id
      @task_id = task_id
    end

    def submit
      login do |mechanize, contest_page|
        problem_page = mechanize.get(problem_url)
        submit_page = problem_page.link_with(href: /submit/).click
        submit_page.form_with(action: /submit/) do |f|
          f.field_with(name: 'source_code').value = File.read(detect_main)
        end.click_button
      end
    end

    def open_submission
      Launchy.open("http://#{@contest_id}.contest.atcoder.jp/submissions/me")
    end

    def login
      Mechanize.start do |m|
        login_page = m.get("http://#{@contest_id}.contest.atcoder.jp/login")
        contest_home_page = login_page.form_with(action: '/login') do |f|
          f.field_with(name: 'name').value = config.get('atcoder', 'user_id')
          f.field_with(name: 'password').value = config.get('atcoder', 'password')
        end.click_button

        yield m, contest_home_page
      end
    end

    def site_name
      'atcoder'
    end

    def problem_url
      "http://#{@contest_id}.contest.atcoder.jp/tasks/#{@task_id}"
    end

    def description_xpath
      '//div[@id="task-statement"]'
    end

    def inputs_xpath
      '//pre[preceding-sibling::h3[1][contains(text(), "入力例")]]'
    end

    def outputs_xpath
      '//pre[preceding-sibling::h3[1][contains(text(), "出力例")]]'
    end

    def working_directory
      @task_id
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
clicoder-0.0.6 lib/clicoder/sites/atcoder.rb
clicoder-0.0.5 lib/clicoder/sites/atcoder.rb
clicoder-0.0.4 lib/clicoder/sites/atcoder.rb