pro2-runner 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/pro2 +58 -0
- data/lib/pro2-runner.rb +106 -0
- data/pro2-runner.gemspec +32 -0
- 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
|
data/lib/pro2-runner.rb
ADDED
@@ -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
|
data/pro2-runner.gemspec
ADDED
@@ -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: []
|