pro2-runner 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []