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.
- 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: []
|