pro2-runner 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/bin/pro2 +58 -0
  3. data/lib/pro2-runner.rb +106 -0
  4. data/pro2-runner.gemspec +32 -0
  5. metadata +77 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 653a5aab4f6f60986766d716bac5a5b2cad8583b
4
+ data.tar.gz: c0274fb7ea2b40e69deb64cb43cd63e2036d6938
5
+ SHA512:
6
+ metadata.gz: caa98e60c329618b21a607c98cfd6d501310546c0143cd560eb01875b6a78fe669a728c1b6c3181d93d154fdc63cd86a7c87124c1ec362bb6ac3eb775489e93f
7
+ data.tar.gz: 8956d78924cc81cb98e2274f408f7af91408ec448c4a846cc7493a27ed14f5c6868f33f8a56eb17a3edf5b483d68da7ff122fa56b0d065e768cca895f6b15e8b
data/bin/pro2 ADDED
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: utf-8
3
+ require "pro2-runner"
4
+
5
+ module Pro2
6
+ class << self
7
+ def main
8
+ subcommand = ARGV.shift
9
+ print_help if subcommand.nil? || !%(init build execute run lint).include?(subcommand)
10
+
11
+ case subcommand
12
+ when "init"
13
+ prefix = ARGV.shift
14
+ num_file = ARGV.shift
15
+
16
+ if prefix.nil? || num_file.nil?
17
+ puts "usage: pro2 init <prefix> <num_file>"
18
+ puts " <prefix>\tX for ProbXY"
19
+ puts " <num_file>\tlargest Y for ProbXY"
20
+ puts "`pro2 init 2 3` will create these files:"
21
+ puts " - project.yaml"
22
+ puts " - Prob21.java"
23
+ puts " - Prob22.java"
24
+ puts " - Prob23.java"
25
+ exit 1
26
+ end
27
+ Pro2::command_init(prefix.to_i, num_file.to_i)
28
+ when "build"
29
+ Pro2::command_build(ARGV.shift)
30
+ when "execute"
31
+ Pro2::command_execute(ARGV.shift)
32
+ when "run"
33
+ Pro2::command_run(ARGV.shift)
34
+ else
35
+ print_help
36
+ end
37
+ end
38
+
39
+ def print_help
40
+ puts %{
41
+ usage: pro2 <command> [<args>]
42
+
43
+ Following commands are available:
44
+ init \tCreate an empty Java files and project.yaml
45
+ build \tBuild Java files based on project.yaml
46
+ execute\tExecute Java files based on project.yaml
47
+ run \tBuild Java files and run them (equivalent to `pro2 build && pro2 execute`)
48
+ }
49
+ exit 1
50
+ end
51
+ # pro2 init -> generate project.yml
52
+ # pro2 build -> compile entries
53
+ # pro2 execute -> execute entries
54
+ # pro2 run -> compile & execute entries
55
+ # pro2 lint -> linter
56
+ end
57
+ end
58
+ Pro2::main
@@ -0,0 +1,106 @@
1
+ require 'yaml'
2
+
3
+ module Pro2
4
+ class << self
5
+ # data javajava {
6
+ # filename :: String
7
+ # build :: String
8
+ # run :: String
9
+ # }
10
+
11
+ # prefix: X for ProbXY.java
12
+ # num_file: Y for ProbXY.java
13
+ # Int -> Int -> javajava
14
+ def initialize_project(prefix, num_file)
15
+ javajava = []
16
+ 1.upto(num_file) do |i|
17
+ filename = "Prob#{prefix}#{i}"
18
+ javajava.push({
19
+ 'filename' => "#{filename}.java",
20
+ 'build' => "javac #{filename}.java",
21
+ 'run' => "java #{filename}",
22
+ })
23
+ end
24
+ javajava
25
+ end
26
+
27
+ # :: javajava
28
+ def parse_project!
29
+ project_file = 'project.yaml'
30
+ raise "#{project_file} not found!! Run `pro2 init`" unless File.exists? project_file
31
+ yaml = File.read(project_file)
32
+ YAML.load yaml
33
+ end
34
+
35
+ # javajava -> filter -> javajava
36
+ def filter_javajava(javajava, filter)
37
+ javajava.select {|java| java.fetch('filename') == filter}
38
+ end
39
+
40
+ # String -> String
41
+ def generate_java(filename)
42
+ class_name = File.basename(filename, '.java')
43
+
44
+ content =
45
+ %(public class #{class_name} {
46
+ public static void main(String[] args) {
47
+ System.out.println("Hello World!");
48
+ }
49
+ })
50
+ end
51
+
52
+ # javajava -> (Java files)
53
+ def generate_empty_javajava(javajava)
54
+ javajava.each do |java|
55
+ filename = java.fetch('filename')
56
+ file_write!(filename, generate_java(filename))
57
+ end
58
+ end
59
+
60
+ # filename :: String -> content :: String -> (File write)
61
+ def file_write!(filename, content)
62
+ raise "#{filename} already exist!" if File.exists? filename
63
+ File.write(filename, content)
64
+ end
65
+
66
+ # Int -> Int -> (project.yaml)
67
+ def command_init(prefix, num_file)
68
+ project_file = 'project.yaml'
69
+
70
+ javajava = initialize_project(prefix, num_file)
71
+ file_write!(project_file, javajava.to_yaml)
72
+ generate_empty_javajava(javajava)
73
+ end
74
+
75
+ def command_build(filter = nil)
76
+ javajava = parse_project!
77
+ javajava = filter_javajava(javajava, filter) if filter
78
+ javajava.each do |java|
79
+ filename = java.fetch('filename')
80
+ build_cmd = java.fetch('build')
81
+
82
+ puts "Build #{filename} ..."
83
+ puts %x(#{build_cmd})
84
+ puts ""
85
+ end
86
+ end
87
+
88
+ def command_execute(filter = nil)
89
+ javajava = parse_project!
90
+ javajava = filter_javajava(javajava, filter) if filter
91
+ javajava.each do |java|
92
+ filename = java.fetch('filename')
93
+ run_cmd = java.fetch('run')
94
+
95
+ puts "Execute #{filename} ..."
96
+ puts %x(#{run_cmd})
97
+ puts ""
98
+ end
99
+ end
100
+
101
+ def command_run(filter = nil)
102
+ command_build(filter)
103
+ command_execute(filter)
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "pro2-runner"
7
+ spec.version = "0.1.0"
8
+ spec.authors = ["Kumassy"]
9
+ spec.email = ["kumassyii@gmail.com"]
10
+
11
+ spec.summary = %q{Pro2 Runner}
12
+ spec.description = %q{Pro2 Runner}
13
+ spec.homepage = "https://github.com/Kumassy/pro2-runner"
14
+ spec.license = "MIT"
15
+
16
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
18
+ if spec.respond_to?(:metadata)
19
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
20
+ else
21
+ raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
22
+ end
23
+
24
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ # spec.bindir = "exe"
26
+ # spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.executables = ["pro2"]
28
+ spec.require_paths = ["lib"]
29
+
30
+ spec.add_development_dependency "bundler", "~> 1.12"
31
+ spec.add_development_dependency "rake", "~> 10.0"
32
+ end
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pro2-runner
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Kumassy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-04-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Pro2 Runner
42
+ email:
43
+ - kumassyii@gmail.com
44
+ executables:
45
+ - pro2
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - lib/pro2-runner.rb
50
+ - pro2-runner.gemspec
51
+ - bin/pro2
52
+ homepage: https://github.com/Kumassy/pro2-runner
53
+ licenses:
54
+ - MIT
55
+ metadata:
56
+ allowed_push_host: https://rubygems.org
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubyforge_project:
73
+ rubygems_version: 2.0.14.1
74
+ signing_key:
75
+ specification_version: 4
76
+ summary: Pro2 Runner
77
+ test_files: []