ruby-eval-in 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d58e7440ce3e56c5514b8024d7ac3b95be797120
4
+ data.tar.gz: ecf3c84ba0c003b1a4bd178194a433334c5d5d37
5
+ SHA512:
6
+ metadata.gz: 45b7cb744a86ed758e616df02252d46644ed59dbc44cef1e4a67f2782a87456483e115346591ad5b32998630d61d6bb9a9849630da4e9700b716c54852565fde
7
+ data.tar.gz: 2d23181ff732dca4cf2e5f40879a4a98c65d7ee5c8ed3c4a0c4246c81af0bb43aa63b1c273a1bad8bfe8760deb20e9815f74137678857129b9817f93891f836f
@@ -0,0 +1 @@
1
+ --no-private --markup-provider=redcarpet --markup=markdown - README.md LICENSE
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 William Woodruff <william @ tuffbizz.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,40 @@
1
+ ruby-eval-in
2
+ ============
3
+
4
+ A basic Ruby interface to the [eval.in](https://eval.in) online evaluation
5
+ service.
6
+
7
+ ## Installation
8
+
9
+ `ruby-eval-in` can be installed as a RubyGem:
10
+
11
+ ```bash
12
+ $ gem install ruby-eval-in
13
+ ```
14
+
15
+ ## Examples
16
+
17
+ Making queries is very simple:
18
+
19
+ ```ruby
20
+ require 'eval-in'
21
+
22
+ result = EvalIn.eval(:ruby, 'puts 10**2')
23
+
24
+ result.output # => "100\n"
25
+ result.status # => "OK (0 sec real, 0 sec wall, 8 MB, 16 syscalls)"
26
+ result.url # => #<URI::HTTPS https://eval.in/xxxxxx>
27
+ ```
28
+
29
+ The provided command line script can also be used:
30
+
31
+ ```bash
32
+ $ eval-in ruby 'puts 10**2'
33
+ # 100
34
+ ```
35
+
36
+ ## License
37
+
38
+ `ruby-eval-in` is licensed under the MIT License.
39
+
40
+ See the LICENSE file for more details.
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'eval-in'
4
+
5
+ def usage
6
+ abort("Usage: #{$PROGRAM_NAME} <language> <code>")
7
+ end
8
+
9
+ lang, code = ARGV.shift(2)
10
+
11
+ usage if lang.nil? || code.nil?
12
+
13
+ print EvalIn.eval(lang, code).output
@@ -0,0 +1,21 @@
1
+ # eval-in.rb
2
+ # Author: William Woodruff
3
+ # A Ruby interface to the eval.in (https://eval.in) service.
4
+
5
+ require "eval-in/result"
6
+ require "eval-in/exceptions"
7
+
8
+ # The primary namespace.
9
+ # @author William Woodruff
10
+ # @since 0.0.1
11
+ module EvalIn
12
+ # Evaluate some code in a given language.
13
+ # @example
14
+ # EvalIn.eval(:ruby, 'puts "Hello, World"') # => #<EvalIn::Result:0xNN>
15
+ # @param [Symbol, String] lang the language to execute in
16
+ # @param [String] code the program code to execute
17
+ # @return [EvalIn::Result] the execution results
18
+ def self.eval(lang, code)
19
+ EvalIn::Result.new(lang.to_s.downcase, code)
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ module EvalIn
2
+ # A parent Error class for all eval-in errors.
3
+ class EvalInError < RuntimeError
4
+ end
5
+
6
+ # Raised when EvalIn.{EvalIn.eval} is given a bad input language.
7
+ class BadLanguageError < EvalInError
8
+ def initialize(lang)
9
+ super "No such language: #{lang}"
10
+ end
11
+ end
12
+
13
+ # Raised when EvalIn.{EvalIn.eval} is given blank or whitespace-only code.
14
+ class EmptyCodeError < EvalInError
15
+ def initialize
16
+ super "The code may not be empty"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,101 @@
1
+ require 'nokogiri'
2
+ require 'mechanize'
3
+ require 'uri'
4
+
5
+ module EvalIn
6
+ # A representation of a result produced by an eval.in query.
7
+ class Result
8
+ # @private
9
+ URL = "https://eval.in"
10
+
11
+ # The languages supported by eval.in.
12
+ # Any of these keys or values will work for the lang parameter in
13
+ # {EvalIn.eval}.
14
+ LANGS = {
15
+ "c" => "c/gcc-4.9.1",
16
+ "c++" => "c++/gcc-4.9.1",
17
+ "coffeescript" => "coffeescript/node-0.10.29-coffee-1.7.1",
18
+ "fortran" => "fortran/f95-4.4.3",
19
+ "haskell" => "haskell/hugs98-sep-2006",
20
+ "io" => "io/io-20131204",
21
+ "js" => "javascript/node-0.10.29",
22
+ "lua" => "lua/lua-5.2.3",
23
+ "ocaml" => "ocaml/ocaml-4.01.0",
24
+ "php" => "php/php-5.5.14",
25
+ "pascal" => "pascal/fpc-2.6.4",
26
+ "perl" => "perl/perl-5.20.0",
27
+ "python" => "python/cpython-3.4.1",
28
+ "ruby" => "ruby/mri-2.2",
29
+ "slash" => "slash/slash-head",
30
+ "nasm" => "assembly/nasm-2.07"
31
+ }
32
+
33
+ # @return [String] the expanded language used in execution
34
+ # @example
35
+ # result.language # => "ruby/mri-2.2"
36
+ attr_reader :language
37
+
38
+ # @return [String] the program code used in execution
39
+ # @example
40
+ # result.code # => "puts \"hello\""
41
+ attr_reader :code
42
+
43
+ # @return [String] any output produced by the program
44
+ # @example
45
+ # result.output # => "hello\n"
46
+ attr_reader :output
47
+
48
+ # @return [String] the program's exit status
49
+ # @example
50
+ # result.status # => "OK (0 sec real, 0 sec wall, 8 MB, 16 syscalls)"
51
+ attr_reader :status
52
+
53
+ # @return [URI] a permalink to the output webpage
54
+ # @example
55
+ # result.url # => #<URI::HTTPS https://eval.in/xxxxxx>
56
+ attr_reader :url
57
+
58
+ # @private
59
+ def initialize(lang, code)
60
+ if LANGS.key?(lang)
61
+ lang = LANGS[lang]
62
+ elsif !LANGS.value?(lang)
63
+ raise BadLanguageError.new(lang)
64
+ end
65
+
66
+ raise EmptyCodeError.new if code.strip.empty?
67
+
68
+ @lang = lang
69
+ @code = code
70
+ @html = get_page
71
+ @output = get_output
72
+ @status = get_status
73
+ @url = get_url
74
+ end
75
+
76
+ private
77
+
78
+ def get_page
79
+ mech = Mechanize.new
80
+ page = mech.get(URL)
81
+ form = page.forms.first
82
+
83
+ form.field_with(:name => "code").value = @code
84
+ form.field_with(:name => "lang").value = @lang
85
+ Nokogiri::HTML(mech.submit(form).body)
86
+ end
87
+
88
+ def get_output
89
+ @html.css("pre").last.text
90
+ end
91
+
92
+ def get_status
93
+ @html.css("p")[1].text
94
+ end
95
+
96
+ def get_url
97
+ number = @html.css("h2").first.text.delete("Paste \#")
98
+ URI("https://eval.in/#{number}")
99
+ end
100
+ end
101
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-eval-in
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - William Woodruff
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-08-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mechanize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: A Ruby interface to https://eval.in/.
42
+ email: william@tuffbizz.com
43
+ executables:
44
+ - eval-in
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".yardopts"
49
+ - LICENSE
50
+ - README.md
51
+ - bin/eval-in
52
+ - lib/eval-in.rb
53
+ - lib/eval-in/exceptions.rb
54
+ - lib/eval-in/result.rb
55
+ homepage: https://github.com/woodruffw/ruby-eval-in
56
+ licenses:
57
+ - MIT
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 2.0.0
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 2.4.5.1
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: ruby-eval-in - A Ruby interface to https://eval.in/.
79
+ test_files: []
80
+ has_rdoc: