wandbox 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/.gitignore +10 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/README.md +192 -0
- data/Rakefile +2 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/exe/wandbox +7 -0
- data/lib/wandbox.rb +22 -0
- data/lib/wandbox/cli.rb +15 -0
- data/lib/wandbox/cli/cli.rb +27 -0
- data/lib/wandbox/cli/compiler.rb +19 -0
- data/lib/wandbox/cli/compiler_list.rb +24 -0
- data/lib/wandbox/cli/run.rb +61 -0
- data/lib/wandbox/compiler.rb +70 -0
- data/lib/wandbox/converter.rb +62 -0
- data/lib/wandbox/list.rb +39 -0
- data/lib/wandbox/version.rb +3 -0
- data/lib/wandbox/web.rb +42 -0
- data/wandbox.gemspec +27 -0
- metadata +122 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: e518c86bb13c805d640cc3a4d950db78efe38b47
         | 
| 4 | 
            +
              data.tar.gz: cc964f90a52475b52d690490f9b36176fc1583c0
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: fc0fd9dd6bd5ce3f8741d8aa44f365130b1d33c7512b0ce82b0dc4b58c5286a4009feb4cb264502643bdb3f1ca7e064f5c95cc9167ff0ce0b396364971149adf
         | 
| 7 | 
            +
              data.tar.gz: 424226aa5b1557b1d1c82328ea01b3ec924f0eac70959166ce18dea4a7424c2ae492bffcfbec6d5b16bc061b9542c3663c27ebabdf67decd3291a589f5f986fd
         | 
    
        data/.gitignore
    ADDED
    
    
    
        data/.rspec
    ADDED
    
    
    
        data/.travis.yml
    ADDED
    
    
    
        data/Gemfile
    ADDED
    
    
    
        data/README.md
    ADDED
    
    | @@ -0,0 +1,192 @@ | |
| 1 | 
            +
            # Wandbox
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Run Wandbox(http://melpon.org/wandbox/) in CLI.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ## Installation
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Add this line to your application's Gemfile:
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            ```ruby
         | 
| 10 | 
            +
            gem 'wandbox'
         | 
| 11 | 
            +
            ```
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            And then execute:
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                $ bundle
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            Or install it yourself as:
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                $ gem install wandbox
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            ## Usage
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            ```shell
         | 
| 24 | 
            +
            $ cat test.rb
         | 
| 25 | 
            +
            5.times.each { |n|
         | 
| 26 | 
            +
            	puts n
         | 
| 27 | 
            +
            }
         | 
| 28 | 
            +
            $ wandbox run test.rb
         | 
| 29 | 
            +
            0
         | 
| 30 | 
            +
            1
         | 
| 31 | 
            +
            2
         | 
| 32 | 
            +
            3
         | 
| 33 | 
            +
            4
         | 
| 34 | 
            +
            ```
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            #### Using Boost in C++
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            Using `--options` option.
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            ```shell
         | 
| 41 | 
            +
            $ cat test.cpp
         | 
| 42 | 
            +
            #include <boost/config.hpp>
         | 
| 43 | 
            +
            #include <iostream>
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            int
         | 
| 46 | 
            +
            main(){
         | 
| 47 | 
            +
            	std::cout << BOOST_COMPILER << std::endl;
         | 
| 48 | 
            +
            	return 0;
         | 
| 49 | 
            +
            }
         | 
| 50 | 
            +
            $ wandbox run test.cpp --options="boost-1.58"
         | 
| 51 | 
            +
            GNU C++ version 6.0.0 20150711 (experimental)
         | 
| 52 | 
            +
            ```
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            #### Using Clang Compiler
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            Using `--compiler` option.
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            ```shell
         | 
| 59 | 
            +
            $ cat test.cpp
         | 
| 60 | 
            +
            #include <iostream>
         | 
| 61 | 
            +
             | 
| 62 | 
            +
            int
         | 
| 63 | 
            +
            main(){
         | 
| 64 | 
            +
            	std::cout << __VERSION__ << std::endl;
         | 
| 65 | 
            +
            	return 0;
         | 
| 66 | 
            +
            }
         | 
| 67 | 
            +
            $ wandbox run test.cpp --compiler=clang-head
         | 
| 68 | 
            +
            4.2.1 Compatible Clang 3.7.0 (trunk 241983)
         | 
| 69 | 
            +
            ```
         | 
| 70 | 
            +
             | 
| 71 | 
            +
            #### Run multiple source files.
         | 
| 72 | 
            +
             | 
| 73 | 
            +
            ```shell
         | 
| 74 | 
            +
            $ cat prog.rb
         | 
| 75 | 
            +
            require_relative "./test"
         | 
| 76 | 
            +
             | 
| 77 | 
            +
            puts X.method
         | 
| 78 | 
            +
            $ cat test.rb
         | 
| 79 | 
            +
            module X
         | 
| 80 | 
            +
            	def self.method
         | 
| 81 | 
            +
            		"X.method"
         | 
| 82 | 
            +
            	end
         | 
| 83 | 
            +
            end
         | 
| 84 | 
            +
            $ wandbox run prog.rb test.rb
         | 
| 85 | 
            +
            X.method
         | 
| 86 | 
            +
            ```
         | 
| 87 | 
            +
             | 
| 88 | 
            +
            #### Save source code in Wandbox
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            Using `--save` option.
         | 
| 91 | 
            +
             | 
| 92 | 
            +
            ```shell
         | 
| 93 | 
            +
            $ wandbox run prog.rb --save
         | 
| 94 | 
            +
            http://melpon.org/wandbox/permlink/rCVQCfbdmsqGXaO7
         | 
| 95 | 
            +
            hello world
         | 
| 96 | 
            +
            ```
         | 
| 97 | 
            +
             | 
| 98 | 
            +
            #### Output compiler list
         | 
| 99 | 
            +
             | 
| 100 | 
            +
            Using `compiler-list` in sub command.
         | 
| 101 | 
            +
             | 
| 102 | 
            +
            ```shell
         | 
| 103 | 
            +
            $ wandbox compiler-list
         | 
| 104 | 
            +
            Compiler list:
         | 
| 105 | 
            +
              gcc-head
         | 
| 106 | 
            +
              gcc-5.1.0
         | 
| 107 | 
            +
              gcc-4.9.2
         | 
| 108 | 
            +
              gcc-4.9.1
         | 
| 109 | 
            +
              gcc-4.9.0
         | 
| 110 | 
            +
              gcc-4.8.2
         | 
| 111 | 
            +
              gcc-4.8.1
         | 
| 112 | 
            +
              gcc-4.7.3
         | 
| 113 | 
            +
              gcc-4.6.4
         | 
| 114 | 
            +
              gcc-4.5.4
         | 
| 115 | 
            +
              gcc-4.4.7
         | 
| 116 | 
            +
              gcc-4.3.6
         | 
| 117 | 
            +
              clang-head
         | 
| 118 | 
            +
              clang-3.6
         | 
| 119 | 
            +
              clang-3.5
         | 
| 120 | 
            +
              clang-3.4
         | 
| 121 | 
            +
              clang-3.3
         | 
| 122 | 
            +
              clang-3.2
         | 
| 123 | 
            +
              clang-3.1
         | 
| 124 | 
            +
              clang-3.0
         | 
| 125 | 
            +
            ...
         | 
| 126 | 
            +
            ```
         | 
| 127 | 
            +
             | 
| 128 | 
            +
            #### Output compiler options
         | 
| 129 | 
            +
             | 
| 130 | 
            +
            ```shell
         | 
| 131 | 
            +
            $ wandbox compiler gcc-head --options="warning,c++11"
         | 
| 132 | 
            +
            [Compiler]:
         | 
| 133 | 
            +
              gcc HEAD
         | 
| 134 | 
            +
             | 
| 135 | 
            +
            [Language]:
         | 
| 136 | 
            +
              C++
         | 
| 137 | 
            +
             | 
| 138 | 
            +
            [Version]:
         | 
| 139 | 
            +
              6.0.0 20150718 (experimental)
         | 
| 140 | 
            +
             | 
| 141 | 
            +
            [Compiler command]:
         | 
| 142 | 
            +
              $ g++ prog.cc -Wall -Wextra -std=c++11
         | 
| 143 | 
            +
             | 
| 144 | 
            +
            [Option list]:
         | 
| 145 | 
            +
              boost-1.47           : -I/usr/local/boost-1.47.0/include
         | 
| 146 | 
            +
              boost-1.48           : -I/usr/local/boost-1.48.0/include
         | 
| 147 | 
            +
              boost-1.49           : -I/usr/local/boost-1.49.0/include
         | 
| 148 | 
            +
              boost-1.50           : -I/usr/local/boost-1.50.0/include
         | 
| 149 | 
            +
              boost-1.51           : -I/usr/local/boost-1.51.0/include
         | 
| 150 | 
            +
              boost-1.52           : -I/usr/local/boost-1.52.0/include
         | 
| 151 | 
            +
              boost-1.53           : -I/usr/local/boost-1.53.0/include
         | 
| 152 | 
            +
              boost-1.54           : -I/usr/local/boost-1.54.0/include
         | 
| 153 | 
            +
              boost-1.55           : -I/usr/local/boost-1.55.0/include
         | 
| 154 | 
            +
              boost-1.56           : -I/usr/local/boost-1.56.0/include
         | 
| 155 | 
            +
              boost-1.57           : -I/usr/local/boost-1.57.0/include
         | 
| 156 | 
            +
              boost-1.58           : -I/usr/local/boost-1.58.0/include
         | 
| 157 | 
            +
              c++11                : -std=c++11
         | 
| 158 | 
            +
              c++14                : -std=c++14
         | 
| 159 | 
            +
              c++1z                : -std=c++1z
         | 
| 160 | 
            +
              c++98                : -std=c++98
         | 
| 161 | 
            +
              cpp-pedantic         : -pedantic
         | 
| 162 | 
            +
              cpp-pedantic-errors  : -pedantic-errors
         | 
| 163 | 
            +
              cpp-verbose          : -v
         | 
| 164 | 
            +
              gnu++11              : -std=gnu++11
         | 
| 165 | 
            +
              gnu++14              : -std=gnu++14
         | 
| 166 | 
            +
              gnu++1z              : -std=gnu++1z
         | 
| 167 | 
            +
              gnu++98              : -std=gnu++98
         | 
| 168 | 
            +
              optimize             : -O2 -march=native
         | 
| 169 | 
            +
              sprout               : -I/usr/local/sprout
         | 
| 170 | 
            +
              warning              : -Wall -Wextra
         | 
| 171 | 
            +
            ```
         | 
| 172 | 
            +
             | 
| 173 | 
            +
             | 
| 174 | 
            +
            ## Development
         | 
| 175 | 
            +
             | 
| 176 | 
            +
            After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment. Run `bundle exec wandbox` to use the code located in this directory, ignoring other installed copies of this gem.
         | 
| 177 | 
            +
             | 
| 178 | 
            +
            To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
         | 
| 179 | 
            +
             | 
| 180 | 
            +
            ## Contributing
         | 
| 181 | 
            +
             | 
| 182 | 
            +
            1. Fork it ( https://github.com/osyo-manga/gem-wandbox/fork )
         | 
| 183 | 
            +
            2. Create your feature branch (`git checkout -b my-new-feature`)
         | 
| 184 | 
            +
            3. Commit your changes (`git commit -am 'Add some feature'`)
         | 
| 185 | 
            +
            4. Push to the branch (`git push origin my-new-feature`)
         | 
| 186 | 
            +
            5. Create a new Pull Request
         | 
| 187 | 
            +
             | 
| 188 | 
            +
            ## Release note
         | 
| 189 | 
            +
             | 
| 190 | 
            +
            * 0.1.0
         | 
| 191 | 
            +
             * Release!!
         | 
| 192 | 
            +
             | 
    
        data/Rakefile
    ADDED
    
    
    
        data/bin/console
    ADDED
    
    | @@ -0,0 +1,14 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "bundler/setup"
         | 
| 4 | 
            +
            require "wandbox"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            # You can add fixtures and/or initialization code here to make experimenting
         | 
| 7 | 
            +
            # with your gem easier. You can also use a different console, if you like.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            # (If you use this, don't forget to add pry to your Gemfile!)
         | 
| 10 | 
            +
            # require "pry"
         | 
| 11 | 
            +
            # Pry.start
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            require "irb"
         | 
| 14 | 
            +
            IRB.start
         | 
    
        data/bin/setup
    ADDED
    
    
    
        data/exe/wandbox
    ADDED
    
    
    
        data/lib/wandbox.rb
    ADDED
    
    | @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            # -*- encoding: UTF-8 -*-
         | 
| 2 | 
            +
            require "wandbox/version"
         | 
| 3 | 
            +
            require "wandbox/list"
         | 
| 4 | 
            +
            require "wandbox/web"
         | 
| 5 | 
            +
            require "wandbox/converter"
         | 
| 6 | 
            +
            require "wandbox/compiler"
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            module Wandbox
         | 
| 9 | 
            +
            	def list
         | 
| 10 | 
            +
            		List.new Web.list
         | 
| 11 | 
            +
            	end
         | 
| 12 | 
            +
            	module_function :list
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            	def run compiler, code, **opt
         | 
| 15 | 
            +
            		Web.compile opt.merge({compiler: compiler, code: code})
         | 
| 16 | 
            +
            	end
         | 
| 17 | 
            +
            	module_function :run
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            	def run_by_file filename, **opt
         | 
| 20 | 
            +
            		
         | 
| 21 | 
            +
            	end
         | 
| 22 | 
            +
            end
         | 
    
        data/lib/wandbox/cli.rb
    ADDED
    
    
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            # -*- encoding: UTF-8 -*-
         | 
| 2 | 
            +
            require "thor"
         | 
| 3 | 
            +
            require "wandbox"
         | 
| 4 | 
            +
            require "wandbox/version"
         | 
| 5 | 
            +
            require "wandbox/cli/compiler_list"
         | 
| 6 | 
            +
            require "wandbox/cli/compiler"
         | 
| 7 | 
            +
            require "wandbox/cli/run"
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            module Wandbox module CLI
         | 
| 10 | 
            +
            	class CLI < Thor
         | 
| 11 | 
            +
            		register CompilerList, "compilerlist", "compiler-list [OPTIONS]...", "Output compiler list."
         | 
| 12 | 
            +
            		tasks["compilerlist"].options = CompilerList.class_options
         | 
| 13 | 
            +
            		map "compiler-list" => "compilerlist"
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            		register Compiler, "compiler", "compiler [COMPILER] [OPTIONS]...", "Output compiler setting."
         | 
| 16 | 
            +
            		tasks["compiler"].options = Compiler.class_options
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            		register Run,  "run_", "run [OPTIONS]... [FILES]...", "Run for [FILES] by Wandbox."
         | 
| 19 | 
            +
            		tasks["run_"].options = Run.class_options
         | 
| 20 | 
            +
            		map "run" => "run_"
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            		desc "version", "Output version"
         | 
| 23 | 
            +
            		def version
         | 
| 24 | 
            +
            			puts Wandbox::VERSION
         | 
| 25 | 
            +
            		end
         | 
| 26 | 
            +
            	end
         | 
| 27 | 
            +
            end end
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            # -*- encoding: UTF-8 -*-
         | 
| 2 | 
            +
            require "thor"
         | 
| 3 | 
            +
            require "wandbox"
         | 
| 4 | 
            +
             | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Wandbox module CLI
         | 
| 7 | 
            +
            	class Compiler < Thor::Group
         | 
| 8 | 
            +
            		argument     :compiler, type: :string, desc: "Compiler name."
         | 
| 9 | 
            +
            		class_option :options,  type: :string, desc: "Using options. e.g.) --options=warning,c++11"
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            		def execute
         | 
| 12 | 
            +
            			name = compiler
         | 
| 13 | 
            +
            			compiler = Wandbox::Compiler.from_compiler_name name
         | 
| 14 | 
            +
            			return puts "Not found '#{name}'." unless compiler
         | 
| 15 | 
            +
            			opts = options["options"] || ""
         | 
| 16 | 
            +
            			puts compiler.to_stdio opts.split ","
         | 
| 17 | 
            +
            		end
         | 
| 18 | 
            +
            	end
         | 
| 19 | 
            +
            end end
         | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            # -*- encoding: UTF-8 -*-
         | 
| 2 | 
            +
            require "thor"
         | 
| 3 | 
            +
            require "wandbox"
         | 
| 4 | 
            +
            # require "iolite"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Wandbox module CLI
         | 
| 7 | 
            +
            	class CompilerList < Thor::Group
         | 
| 8 | 
            +
            		class_option :lang, type: :string, desc: "Output [LANGUAGE] compilers."
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            		def execute
         | 
| 11 | 
            +
            			list = Wandbox.list
         | 
| 12 | 
            +
            			if options[:lang]
         | 
| 13 | 
            +
            				list = list.select_by_language options[:lang]
         | 
| 14 | 
            +
            			end
         | 
| 15 | 
            +
            			if list.empty?
         | 
| 16 | 
            +
            				return puts "Not found compiler list."
         | 
| 17 | 
            +
            			end
         | 
| 18 | 
            +
            			puts "Compiler list:"
         | 
| 19 | 
            +
            			list.each {|it|
         | 
| 20 | 
            +
            				puts "  #{it["name"]}"
         | 
| 21 | 
            +
            			}
         | 
| 22 | 
            +
            		end
         | 
| 23 | 
            +
            	end
         | 
| 24 | 
            +
            end end
         | 
| @@ -0,0 +1,61 @@ | |
| 1 | 
            +
            # -*- encoding: UTF-8 -*-
         | 
| 2 | 
            +
            require "thor"
         | 
| 3 | 
            +
            require "wandbox"
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Wandbox module CLI
         | 
| 6 | 
            +
            	class Run < Thor::Group
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            		argument :filenames, type: :array
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            		class_option :lang,     type: :string, desc: "Programming language. e.g.) --lang=C++"
         | 
| 11 | 
            +
            		class_option :compiler, type: :string, desc: "Run compiler. e.g.) --compiler=clang-head"
         | 
| 12 | 
            +
            		class_option :stdin,    type: :string, desc: "Stdin value."
         | 
| 13 | 
            +
            		class_option :options,  type: :string, desc: "Wandbox options. e.g.) --options=warning,c++11"
         | 
| 14 | 
            +
            		class_option :save,     type: :boolean, desc: "Output wandbox permanent link."
         | 
| 15 | 
            +
            		class_option :"post-parameter", type: :hash,  desc: "POST parameter."
         | 
| 16 | 
            +
            		class_option :debug,    type: :boolean, desc: ""
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            		def execute
         | 
| 19 | 
            +
            			filenames.each{ |filename|
         | 
| 20 | 
            +
            				return puts "File '#{filename}' not found." unless File.exist? filename
         | 
| 21 | 
            +
            			}
         | 
| 22 | 
            +
            			filename, *filenames_ = filenames
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            			lang     = options[:lang]     || Wandbox.file2lang(filename)
         | 
| 25 | 
            +
            			compiler = options[:compiler] || Wandbox.lang2compiler(lang)["name"]
         | 
| 26 | 
            +
            			if compiler.nil?
         | 
| 27 | 
            +
            				return puts "No supported language."
         | 
| 28 | 
            +
            			end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            # 			puts compiler["display-compile-command"].sub(/prog\..+/, filename)
         | 
| 31 | 
            +
            # 			puts "Running by #{compiler}..."
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            			code = File.open(filename).read
         | 
| 34 | 
            +
            			param = {}
         | 
| 35 | 
            +
            			param[:codes] = filenames_.map { |filename|
         | 
| 36 | 
            +
            				{ "file" => filename, "code" => File.open(filename).read }
         | 
| 37 | 
            +
            			}
         | 
| 38 | 
            +
            			param[:stdin]  = options[:stdin] || ""
         | 
| 39 | 
            +
            			param[:save]   = options[:save]  || false
         | 
| 40 | 
            +
            			param[:options] = options[:options]
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            			# String to Symbol from key
         | 
| 43 | 
            +
            			param.merge! Hash[options[:"post-parameter"].map{|k,v| [k.to_sym, v] }] if options[:"post-parameter"]
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            			puts param if options[:debug]
         | 
| 46 | 
            +
            			result = Wandbox.run compiler, code, param
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            			progfile = "prog#{File.extname filename}"
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            			if param[:save]
         | 
| 51 | 
            +
            				puts result["url"]
         | 
| 52 | 
            +
            			end
         | 
| 53 | 
            +
            			puts result if options[:debug]
         | 
| 54 | 
            +
            			puts "#{result["compiler_message"]}#{result["program_message"]}"
         | 
| 55 | 
            +
            			status = result["status"].to_i
         | 
| 56 | 
            +
            			if status != 0
         | 
| 57 | 
            +
            				exit status
         | 
| 58 | 
            +
            			end
         | 
| 59 | 
            +
            		end
         | 
| 60 | 
            +
            	end
         | 
| 61 | 
            +
            end end
         | 
| @@ -0,0 +1,70 @@ | |
| 1 | 
            +
            require "wandbox"
         | 
| 2 | 
            +
            require "iolite"
         | 
| 3 | 
            +
            require "json"
         | 
| 4 | 
            +
            require_relative "./list"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Wandbox
         | 
| 7 | 
            +
            	class Compiler < Hash
         | 
| 8 | 
            +
            		include Iolite::Placeholders
         | 
| 9 | 
            +
            		include Iolite::Adaptor::ToLazy
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            		def initialize data
         | 
| 12 | 
            +
            			data.each { |key, value| self[key] = value }
         | 
| 13 | 
            +
            		end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            		def self.from_compiler_name name
         | 
| 16 | 
            +
            			compiler = Wandbox.list.find_compiler name
         | 
| 17 | 
            +
            			return nil unless compiler
         | 
| 18 | 
            +
            			Compiler.new compiler
         | 
| 19 | 
            +
            		end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            		def self.from_json json
         | 
| 22 | 
            +
            			Compiler.new JSON.parse json
         | 
| 23 | 
            +
            		end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            		def options
         | 
| 26 | 
            +
            			options = self["switches"].select &arg1["type"] == "single"
         | 
| 27 | 
            +
            			options + self["switches"].select(&arg1["type"] == "select").map(&arg1["options"]).flatten
         | 
| 28 | 
            +
            		end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            		def find_option_by_name name
         | 
| 31 | 
            +
            			options.find &arg1["name"] == name
         | 
| 32 | 
            +
            		end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            		def to_stdio enable_options=[]
         | 
| 35 | 
            +
            			opts = options
         | 
| 36 | 
            +
            			opts.reject! &arg1["display-flags"].empty?
         | 
| 37 | 
            +
            			opts.sort_by! &arg1["name"]
         | 
| 38 | 
            +
            			width = (opts.max_by(&arg1["name"].length) || { "name" => "" })["name"].length
         | 
| 39 | 
            +
            			
         | 
| 40 | 
            +
            			enable_options_s = enable_options.map(&to_l.find_option_by_name(arg1)).compact.map(&arg1["display-flags"]).join " "
         | 
| 41 | 
            +
            <<"EOS"
         | 
| 42 | 
            +
            [Compiler]:
         | 
| 43 | 
            +
              #{self["display-name"]}
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            [Language]:
         | 
| 46 | 
            +
              #{self["language"]}
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            [Version]:
         | 
| 49 | 
            +
              #{self["version"]}
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            [Compiler command]:
         | 
| 52 | 
            +
              $ #{self["display-compile-command"]}#{ " " + enable_options_s unless enable_options_s.empty?}
         | 
| 53 | 
            +
            #{
         | 
| 54 | 
            +
            unless opts.empty?
         | 
| 55 | 
            +
            <<"EOS"
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            [Option list]:
         | 
| 58 | 
            +
              #{"Option name".ljust width + 1} : Added extra option
         | 
| 59 | 
            +
            #{
         | 
| 60 | 
            +
            			opts.map { |it|
         | 
| 61 | 
            +
            				"  #{it["name"].ljust width + 1} : #{it["display-flags"]}"
         | 
| 62 | 
            +
            			}.join "\n"
         | 
| 63 | 
            +
            }
         | 
| 64 | 
            +
            EOS
         | 
| 65 | 
            +
            end
         | 
| 66 | 
            +
            }
         | 
| 67 | 
            +
            EOS
         | 
| 68 | 
            +
            		end
         | 
| 69 | 
            +
            	end
         | 
| 70 | 
            +
            end
         | 
| @@ -0,0 +1,62 @@ | |
| 1 | 
            +
            # -*- encoding: UTF-8 -*-
         | 
| 2 | 
            +
            require "wandbox/list"
         | 
| 3 | 
            +
            require "wandbox"
         | 
| 4 | 
            +
             | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Wandbox
         | 
| 7 | 
            +
            	FILE_EXTENTIONS = {
         | 
| 8 | 
            +
            		".cpp" => "C++",
         | 
| 9 | 
            +
            		".c" => "C",
         | 
| 10 | 
            +
            		".d" => "D",
         | 
| 11 | 
            +
            		".rill" => "Rill",
         | 
| 12 | 
            +
            		".hs" => "Haskell",
         | 
| 13 | 
            +
            		".lhs" => "Haskell",
         | 
| 14 | 
            +
            		".cs" => "C#",
         | 
| 15 | 
            +
            		".pl" => "Perl",
         | 
| 16 | 
            +
            		".py" => "Python",
         | 
| 17 | 
            +
            		".rb" => "Ruby",
         | 
| 18 | 
            +
            		".php" => "PHP",
         | 
| 19 | 
            +
            		".erl" => "Erlang",
         | 
| 20 | 
            +
            		".exs" => "Elixir",
         | 
| 21 | 
            +
            		".js" => "JavaScript",
         | 
| 22 | 
            +
            		".coffee" => "CoffeeScript",
         | 
| 23 | 
            +
            		".sql" => "SQL",
         | 
| 24 | 
            +
            		".scala" => "Scala",
         | 
| 25 | 
            +
            		".lua" => "Lua",
         | 
| 26 | 
            +
            		".rs" => "Rust",
         | 
| 27 | 
            +
            		".vim" => "Vim script",
         | 
| 28 | 
            +
            		".bash" => "Bash script",
         | 
| 29 | 
            +
            		".lazy" => "Lazy K",
         | 
| 30 | 
            +
            		".lisp" => "Lisp",
         | 
| 31 | 
            +
            		".pas" => "Pascal",
         | 
| 32 | 
            +
            		".java" => "Java",
         | 
| 33 | 
            +
            		".groovy" => "Groovy",
         | 
| 34 | 
            +
            	}
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            	def ext2lang ext
         | 
| 37 | 
            +
            		ext = ext.downcase
         | 
| 38 | 
            +
            		FILE_EXTENTIONS[ext]
         | 
| 39 | 
            +
            	end
         | 
| 40 | 
            +
            	module_function :ext2lang
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            	def file2lang filename
         | 
| 43 | 
            +
            		ext2lang File.extname filename
         | 
| 44 | 
            +
            	end
         | 
| 45 | 
            +
            	module_function :file2lang
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            	def lang2compilers lang
         | 
| 48 | 
            +
            		Wandbox.list.select_by_language(lang)
         | 
| 49 | 
            +
            	end
         | 
| 50 | 
            +
            	module_function :lang2compilers
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            	def lang2compiler lang
         | 
| 53 | 
            +
            		lang2compilers(lang).first
         | 
| 54 | 
            +
            	end
         | 
| 55 | 
            +
            	module_function :lang2compiler
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            	def file2compiler filename
         | 
| 58 | 
            +
            		lang = file2lang filename
         | 
| 59 | 
            +
            		lang2compiler lang if lang
         | 
| 60 | 
            +
            	end
         | 
| 61 | 
            +
            	module_function :file2compiler
         | 
| 62 | 
            +
            end
         | 
    
        data/lib/wandbox/list.rb
    ADDED
    
    | @@ -0,0 +1,39 @@ | |
| 1 | 
            +
            # -*- encoding: UTF-8 -*-
         | 
| 2 | 
            +
            require "iolite"
         | 
| 3 | 
            +
            require_relative "./compiler"
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Wandbox
         | 
| 6 | 
            +
            	class List
         | 
| 7 | 
            +
            		include Enumerable
         | 
| 8 | 
            +
            		include Iolite::Placeholders
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            		def initialize list
         | 
| 11 | 
            +
            			@list = list
         | 
| 12 | 
            +
            		end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            		def each &block
         | 
| 15 | 
            +
            			@list.each &block
         | 
| 16 | 
            +
            		end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            		def languages
         | 
| 19 | 
            +
            			map(&arg1["language"]).uniq
         | 
| 20 | 
            +
            		end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            		def select_by_language lang
         | 
| 23 | 
            +
            			lang = lang.downcase
         | 
| 24 | 
            +
            			select &arg1["language"].downcase == lang
         | 
| 25 | 
            +
            		end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            		def find_compiler compiler
         | 
| 28 | 
            +
            			find &arg1["name"] == compiler
         | 
| 29 | 
            +
            		end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            		def empty?
         | 
| 32 | 
            +
            			@list.empty?
         | 
| 33 | 
            +
            		end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            		def to_ary
         | 
| 36 | 
            +
            			@list
         | 
| 37 | 
            +
            		end
         | 
| 38 | 
            +
            	end
         | 
| 39 | 
            +
            end
         | 
    
        data/lib/wandbox/web.rb
    ADDED
    
    | @@ -0,0 +1,42 @@ | |
| 1 | 
            +
            # -*- encoding: UTF-8 -*-
         | 
| 2 | 
            +
            require "net/http"
         | 
| 3 | 
            +
            require "uri"
         | 
| 4 | 
            +
            require "json"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
             | 
| 7 | 
            +
            module Wandbox module Web
         | 
| 8 | 
            +
            	def list
         | 
| 9 | 
            +
            		res = Net::HTTP.get_response URI.parse('http://melpon.org/wandbox/api/list.json')
         | 
| 10 | 
            +
            		if res.code != "200"
         | 
| 11 | 
            +
            			return []
         | 
| 12 | 
            +
            		end
         | 
| 13 | 
            +
            		JSON.parse(res.body)
         | 
| 14 | 
            +
            	end
         | 
| 15 | 
            +
            	module_function :list
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            	def compile compiler: "", code: "", codes: [], options: "", stdin: "", compiler_option_raw: "", runtime_option_raw: "", save: false
         | 
| 18 | 
            +
            		body = {
         | 
| 19 | 
            +
            			"code" => code,
         | 
| 20 | 
            +
            			"compiler" => compiler,
         | 
| 21 | 
            +
            			"codes" => codes,
         | 
| 22 | 
            +
            			"options" => options,
         | 
| 23 | 
            +
            			"stdin" => stdin,
         | 
| 24 | 
            +
            			"compiler-option-raw" => compiler_option_raw,
         | 
| 25 | 
            +
            			"runtime-option-raw" => runtime_option_raw,
         | 
| 26 | 
            +
            			"save" => save,
         | 
| 27 | 
            +
            		}
         | 
| 28 | 
            +
            # 		p body
         | 
| 29 | 
            +
            		uri = URI.parse("http://melpon.org/wandbox/api/compile.json")
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            		request = Net::HTTP::Post.new(uri.request_uri, initheader = { "Content-type" => "application/json" },)
         | 
| 32 | 
            +
            		request.body = body.to_json
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            		http = Net::HTTP.new(uri.host, uri.port)
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            		http.start do |http|
         | 
| 37 | 
            +
            			response = http.request(request)
         | 
| 38 | 
            +
            			JSON.parse(response.body)
         | 
| 39 | 
            +
            		end
         | 
| 40 | 
            +
            	end
         | 
| 41 | 
            +
            	module_function :compile
         | 
| 42 | 
            +
            end end
         | 
    
        data/wandbox.gemspec
    ADDED
    
    | @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            # coding: utf-8
         | 
| 2 | 
            +
            lib = File.expand_path('../lib', __FILE__)
         | 
| 3 | 
            +
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         | 
| 4 | 
            +
            require 'wandbox/version'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            Gem::Specification.new do |spec|
         | 
| 7 | 
            +
              spec.name          = "wandbox"
         | 
| 8 | 
            +
              spec.version       = Wandbox::VERSION
         | 
| 9 | 
            +
              spec.authors       = ["manga_osyo"]
         | 
| 10 | 
            +
              spec.email         = ["manga.osyo@gmail.com"]
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              spec.summary       = %q{Wandbox(http://melpon.org/wandbox/) in CLI.}
         | 
| 13 | 
            +
              spec.description   = %q{Wandbox(http://melpon.org/wandbox/) in CLI.}
         | 
| 14 | 
            +
              spec.homepage      = "https://github.com/osyo-manga/gem-wandbox"
         | 
| 15 | 
            +
              spec.license       = "MIT"
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              spec.files         = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
         | 
| 18 | 
            +
              spec.bindir        = "exe"
         | 
| 19 | 
            +
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 20 | 
            +
              spec.require_paths = ["lib"]
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              spec.add_dependency "thor", "0.19.1"
         | 
| 23 | 
            +
              spec.add_dependency "iolite", "0.0.3"
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              spec.add_development_dependency "bundler", "~> 1.8"
         | 
| 26 | 
            +
              spec.add_development_dependency "rake", "~> 10.0"
         | 
| 27 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,122 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: wandbox
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - manga_osyo
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: exe
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2015-07-20 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: thor
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - '='
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: 0.19.1
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - '='
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: 0.19.1
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: iolite
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - '='
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: 0.0.3
         | 
| 34 | 
            +
              type: :runtime
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - '='
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: 0.0.3
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: bundler
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - "~>"
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '1.8'
         | 
| 48 | 
            +
              type: :development
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - "~>"
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '1.8'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: rake
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - "~>"
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '10.0'
         | 
| 62 | 
            +
              type: :development
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - "~>"
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: '10.0'
         | 
| 69 | 
            +
            description: Wandbox(http://melpon.org/wandbox/) in CLI.
         | 
| 70 | 
            +
            email:
         | 
| 71 | 
            +
            - manga.osyo@gmail.com
         | 
| 72 | 
            +
            executables:
         | 
| 73 | 
            +
            - wandbox
         | 
| 74 | 
            +
            extensions: []
         | 
| 75 | 
            +
            extra_rdoc_files: []
         | 
| 76 | 
            +
            files:
         | 
| 77 | 
            +
            - ".gitignore"
         | 
| 78 | 
            +
            - ".rspec"
         | 
| 79 | 
            +
            - ".travis.yml"
         | 
| 80 | 
            +
            - Gemfile
         | 
| 81 | 
            +
            - README.md
         | 
| 82 | 
            +
            - Rakefile
         | 
| 83 | 
            +
            - bin/console
         | 
| 84 | 
            +
            - bin/setup
         | 
| 85 | 
            +
            - exe/wandbox
         | 
| 86 | 
            +
            - lib/wandbox.rb
         | 
| 87 | 
            +
            - lib/wandbox/cli.rb
         | 
| 88 | 
            +
            - lib/wandbox/cli/cli.rb
         | 
| 89 | 
            +
            - lib/wandbox/cli/compiler.rb
         | 
| 90 | 
            +
            - lib/wandbox/cli/compiler_list.rb
         | 
| 91 | 
            +
            - lib/wandbox/cli/run.rb
         | 
| 92 | 
            +
            - lib/wandbox/compiler.rb
         | 
| 93 | 
            +
            - lib/wandbox/converter.rb
         | 
| 94 | 
            +
            - lib/wandbox/list.rb
         | 
| 95 | 
            +
            - lib/wandbox/version.rb
         | 
| 96 | 
            +
            - lib/wandbox/web.rb
         | 
| 97 | 
            +
            - wandbox.gemspec
         | 
| 98 | 
            +
            homepage: https://github.com/osyo-manga/gem-wandbox
         | 
| 99 | 
            +
            licenses:
         | 
| 100 | 
            +
            - MIT
         | 
| 101 | 
            +
            metadata: {}
         | 
| 102 | 
            +
            post_install_message: 
         | 
| 103 | 
            +
            rdoc_options: []
         | 
| 104 | 
            +
            require_paths:
         | 
| 105 | 
            +
            - lib
         | 
| 106 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 107 | 
            +
              requirements:
         | 
| 108 | 
            +
              - - ">="
         | 
| 109 | 
            +
                - !ruby/object:Gem::Version
         | 
| 110 | 
            +
                  version: '0'
         | 
| 111 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 112 | 
            +
              requirements:
         | 
| 113 | 
            +
              - - ">="
         | 
| 114 | 
            +
                - !ruby/object:Gem::Version
         | 
| 115 | 
            +
                  version: '0'
         | 
| 116 | 
            +
            requirements: []
         | 
| 117 | 
            +
            rubyforge_project: 
         | 
| 118 | 
            +
            rubygems_version: 2.4.5
         | 
| 119 | 
            +
            signing_key: 
         | 
| 120 | 
            +
            specification_version: 4
         | 
| 121 | 
            +
            summary: Wandbox(http://melpon.org/wandbox/) in CLI.
         | 
| 122 | 
            +
            test_files: []
         |