ripl-multi_line 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,6 @@
1
+ == 0.3.1
2
+ * Ruby 2.0 compatibility
3
+
1
4
  == 0.3.0
2
5
  * comes with five different multi-line implementations: live_error, error_check, irb, ripper and ruby_parser
3
6
  * can be changed with config[:multi_line_engine], default is :live_error
@@ -1,6 +1,6 @@
1
1
  The MIT LICENSE
2
2
 
3
- Copyright (c) 2010 Jan Lelis
3
+ Copyright (c) 2010, 2011, 2013 Jan Lelis
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
@@ -56,7 +56,8 @@ None of the above solutions is perfect, so... maybe it's time to roll your own ;
56
56
  Ripl::MultiLine.engine = Ripl::MultiLine::LiveError
57
57
  Ripl::Shell.include Ripl::MultiLine.engine
58
58
 
59
- == Credits
60
- Contributions & influences by cldwalker and godfat.
59
+ == TODO
60
+ * Write thousands of test cases
61
61
 
62
- J-_-L
62
+ == J-_-L
63
+ Contributions & influences by cldwalker and godfat.
data/Rakefile CHANGED
@@ -1,20 +1,22 @@
1
1
  require 'rake'
2
2
  require 'fileutils'
3
3
 
4
+ GEMSPEC_NAME = Dir['*.gemspec'].first
5
+
4
6
  def gemspec
5
- @gemspec ||= eval(File.read('.gemspec'), binding, '.gemspec')
7
+ @gemspec ||= eval(File.read(GEMSPEC_NAME), binding, GEMSPEC_NAME)
6
8
  end
7
9
 
8
10
  desc "Build the gem"
9
11
  task :gem => :gemspec do
10
- sh "gem build .gemspec"
12
+ sh "gem build #{GEMSPEC_NAME}"
11
13
  FileUtils.mkdir_p 'pkg'
12
14
  FileUtils.mv "#{gemspec.name}-#{gemspec.version}.gem", 'pkg'
13
15
  end
14
16
 
15
17
  desc "Install the gem locally"
16
18
  task :install => :gem do
17
- sh %{gem install pkg/#{gemspec.name}-#{gemspec.version} --no-rdoc --no-ri}
19
+ sh %{gem install pkg/#{gemspec.name}-#{gemspec.version}.gem --no-rdoc --no-ri}
18
20
  end
19
21
 
20
22
  desc "Generate the gemspec"
@@ -1,9 +1,8 @@
1
1
  require 'ripl'
2
+ require 'ripl/multi_line/version'
2
3
 
3
4
  module Ripl
4
5
  module MultiLine
5
- VERSION = '0.3.0'
6
-
7
6
  class << self
8
7
  attr_accessor :engine
9
8
  end
@@ -5,15 +5,12 @@ require 'ripl/multi_line'
5
5
  require 'ripl/multi_line/live_error'
6
6
 
7
7
  # # # #
8
- # This multi-line implementation uses IRB's RubyLex parser
9
- # works on: 1.9 1.8 jruby rbx
8
+ # This multi-line implementation uses catches the syntax errors that are yielded by unfinsihed statements
9
+ # works on: 2.0 1.9 1.8 jruby rbx
10
10
  # analyze features: see live_error.rb
11
11
  # known issues: see live_error.rb
12
12
  module Ripl::MultiLine::ErrorCheck
13
- VERSION = '0.1.0'
14
-
15
- ruby_engine = defined?(RUBY_ENGINE) && RUBY_ENGINE.downcase.to_sym
16
- ruby_engine = :ruby if !Ripl::MultiLine::LiveError::ERROR_MESSAGES.keys.include?(ruby_engine)
13
+ VERSION = '0.2.0'
17
14
 
18
15
  define_method(:multiline?) do |string|
19
16
  break [:forced] if string =~ /;\s*\Z/ # force multi line with ;
@@ -21,7 +18,7 @@ module Ripl::MultiLine::ErrorCheck
21
18
  begin
22
19
  eval "if nil; #{string}; end"
23
20
  rescue SyntaxError => e
24
- Ripl::MultiLine::LiveError::ERROR_MESSAGES[ruby_engine].each{ |type, message|
21
+ Ripl::MultiLine::LiveError::ERROR_MESSAGES[Ripl::MultiLine::LiveError.ruby_engine].each{ |type, message|
25
22
  break type if message === e.message
26
23
  }
27
24
  end
@@ -7,7 +7,7 @@ require 'ripl/multi_line'
7
7
 
8
8
  # # # #
9
9
  # This multi-line implementation uses IRB's RubyLex parser
10
- # works on: 1.9 1.8 jruby rbx
10
+ # works on: 2.0 1.9 1.8 jruby rbx
11
11
  # analyze features: none
12
12
  module Ripl::MultiLine::Irb
13
13
  VERSION = '0.1.0'
@@ -4,8 +4,8 @@ Ripl.config[:multi_line_engine] ||= :live_error
4
4
  require 'ripl/multi_line'
5
5
 
6
6
  # # # #
7
- # This multi-line implementation uses IRB's RubyLex parser
8
- # works on: 1.9 1.8 jruby rbx
7
+ # This multi-line implementation uses catches the syntax errors that are yielded by unfinsihed statements
8
+ # works on: 2.0 1.9 1.8 jruby rbx
9
9
  # analyze features: [:literal, :string]
10
10
  # [:literal, :regexp]
11
11
  # [:literal, :array] (mri only)
@@ -13,59 +13,74 @@ require 'ripl/multi_line'
13
13
  # [:statement]
14
14
  # [:forced]
15
15
  # notes: rbx support buggy (depends on rubinius error messages)
16
- module Ripl::MultiLine::LiveError
17
- VERSION = "0.1.0"
16
+ module Ripl::MultiLine
17
+ module LiveError
18
+ VERSION = "0.2.0"
18
19
 
19
- ERROR_MESSAGES = {
20
- :ruby => [
21
- [[:literal, :string], /unterminated string meets end of file/],
22
- [[:literal, :regexp], /unterminated regexp meets end of file/],
23
- [[:literal, :array], /syntax error, unexpected \$end, expecting '\]'/],
24
- [[:literal, :hash], /syntax error, unexpected \$end, expecting '\}'/], # does not work for ranges or {5=>
25
- [[:statement], /syntax error, unexpected \$end/],
26
- ],
27
- :jruby => [
28
- [[:literal, :string], /unterminated string meets end of file/],
29
- [[:literal, :regexp], /unterminated regexp meets end of file/], # array or hash cannot be detected
30
- [[:statement], /syntax error, unexpected end-of-file/],
31
- ],
32
- :rbx => [
33
- [[:literal, :string], /unterminated [a-z]+ meets end of file/], # no extra message for regexes
34
- [[:literal], /expecting '\\n' or ';'/], # TODO: better rbx regexes or rbx bug report
35
- [[:literal, :hash], /expecting '\}'/],
36
- # [:literal, /expecting '\]'/],
37
- # [:literal, /expecting '\)'/],
38
- [[:statement], /syntax error, unexpected \$end/],
39
- [[:statement], /missing 'end'/], # for i in [2,3,4] do;
40
- ],
41
- }
42
- ruby_engine = defined?(RUBY_ENGINE) && RUBY_ENGINE.downcase.to_sym
43
- ruby_engine = :ruby if !ERROR_MESSAGES.keys.include?(ruby_engine)
20
+ def self.ruby_engine
21
+ return @ruby_engine if defined? @ruby_engine
22
+ @ruby_engine = defined?(RUBY_ENGINE) && RUBY_ENGINE.downcase.to_sym
23
+ @ruby_engine = :ruby if !ERROR_MESSAGES.keys.include?(ruby_engine) # 1.8 is same as 1.9
24
+ @ruby_engine = :ruby19 if ruby_engine == :ruby && RUBY_VERSION <= "2.0"
25
+ @ruby_engine
26
+ end
44
27
 
45
- define_method(:print_eval_error) do |e|
46
- if e.is_a? SyntaxError
47
- ERROR_MESSAGES[ruby_engine].each{ |type, message|
48
- handle_multiline(type) if message === e.message
49
- }
28
+ ERROR_MESSAGES = {
29
+ :ruby => [
30
+ [[:literal, :string], /unterminated string meets end of file/],
31
+ [[:literal, :regexp], /unterminated regexp meets end of file/],
32
+ [[:literal, :array], /syntax error, unexpected end-of-input, expecting '\]'/],
33
+ [[:literal, :hash], /syntax error, unexpected end-of-input, expecting '\}'/], # does not work for ranges or {5=>
34
+ [[:statement], /syntax error, unexpected end-of-input/],
35
+ ],
36
+ :ruby19 => [
37
+ [[:literal, :string], /unterminated string meets end of file/],
38
+ [[:literal, :regexp], /unterminated regexp meets end of file/],
39
+ [[:literal, :array], /syntax error, unexpected \$end, expecting '\]'/],
40
+ [[:literal, :hash], /syntax error, unexpected \$end, expecting '\}'/], # does not work for ranges or {5=>
41
+ [[:statement], /syntax error, unexpected \$end/],
42
+ ],
43
+ :jruby => [
44
+ [[:literal, :string], /unterminated string meets end of file/],
45
+ [[:literal, :regexp], /unterminated regexp meets end of file/], # array or hash cannot be detected
46
+ [[:statement], /syntax error, unexpected end-of-file/],
47
+ ],
48
+ :rbx => [
49
+ [[:literal, :string], /unterminated [a-z]+ meets end of file/], # no extra message for regexes
50
+ [[:literal], /expecting '\\n' or ';'/], # TODO: better rbx regexes or rbx bug report
51
+ [[:literal, :hash], /expecting '\}'/],
52
+ # [:literal, /expecting '\]'/],
53
+ # [:literal, /expecting '\)'/],
54
+ [[:statement], /syntax error, unexpected \$end/],
55
+ [[:statement], /missing 'end'/], # for i in [2,3,4] do;
56
+ ],
57
+ }
58
+
59
+ define_method(:print_eval_error) do |e|
60
+ if e.is_a? SyntaxError
61
+ ERROR_MESSAGES[LiveError.ruby_engine].each{ |type, message|
62
+ handle_multiline(type) if message === e.message
63
+ }
64
+ end
65
+ super(e)
50
66
  end
51
- super(e)
52
- end
53
67
 
54
- def eval_input(input)
55
- if input =~ /;\s*\Z/ # force multi line with ;
56
- handle_multiline(:forced)
57
- elsif input =~ /^=begin(\s.*)?$/ && !@buffer
58
- @ignore_mode = true # MAYBE: change prompt
59
- elsif !@ignore_mode
60
- super
68
+ def eval_input(input)
69
+ if input =~ /;\s*\Z/ # force multi line with ;
70
+ handle_multiline(:forced)
71
+ elsif input =~ /^=begin(\s.*)?$/ && !@buffer
72
+ @ignore_mode = true # MAYBE: change prompt
73
+ elsif !@ignore_mode
74
+ super
75
+ end
61
76
  end
62
- end
63
77
 
64
- def print_result(result)
65
- if @ignore_mode && @input == '=end'
66
- @ignore_mode = false
67
- elsif !@ignore_mode
68
- super
78
+ def print_result(result)
79
+ if @ignore_mode && @input == '=end'
80
+ @ignore_mode = false
81
+ elsif !@ignore_mode
82
+ super
83
+ end
69
84
  end
70
85
  end
71
86
  end
@@ -6,8 +6,8 @@ Ripl.config[:multi_line_engine] ||= :ripper
6
6
  require 'ripl/multi_line'
7
7
 
8
8
  # # # #
9
- # This multi-line implementation uses IRB's RubyLex parser
10
- # works on: 1.9 1.8(gem)
9
+ # This multi-line implementation uses Ripper
10
+ # works on: 2.0 1.9 1.8(gem)
11
11
  # analyze features: [:literal, :string]
12
12
  # [:literal, :regexp]
13
13
  # [:literal, :array] (mri only)
@@ -0,0 +1,6 @@
1
+ module Ripl
2
+ module MultiLine
3
+ VERSION = '0.3.1'
4
+ end
5
+ end
6
+
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require 'rubygems' unless defined? Gem
3
- require File.dirname(__FILE__) + "/lib/ripl/multi_line"
3
+ require File.dirname(__FILE__) + "/lib/ripl/multi_line/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "ripl-multi_line"
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
16
16
  s.add_development_dependency 'bacon-bits'
17
17
  s.add_development_dependency 'bacon-rr'
18
18
  s.add_development_dependency 'rr'
19
- s.files = Dir.glob(%w[{lib,test}/**/*.rb bin/* [A-Z]*.{txt,rdoc} ext/**/*.{rb,c} **/deps.rip]) + %w{Rakefile .gemspec}
19
+ s.files = Dir.glob(%w[{lib,test}/**/*.rb bin/* [A-Z]*.{txt,rdoc} ext/**/*.{rb,c} **/deps.rip Rakefile *.gemspec])
20
20
  s.extra_rdoc_files = ["README.rdoc", "LICENSE.txt"]
21
21
  s.license = 'MIT'
22
22
  end
@@ -8,24 +8,29 @@ describe "Shell" do
8
8
  end
9
9
 
10
10
  describe "multi-line behaviour" do
11
- should_eval %| "m" * 2 |
12
- should_eval %| "8989" |
13
- should_eval %| "zzz" |
14
-
15
- should_not_eval %| "m" * |
16
-
17
- should_not_eval %| " |
18
- should_not_eval %| ' |
19
- should_not_eval %| / |
20
-
21
- should_not_eval %| [ |
22
- should_not_eval %| { |
23
- should_not_eval %| ( |
24
-
25
- should_not_eval %| def hey |
26
- should_not_eval %| def hey; 89 |
27
- should_not_eval %| begin |
28
- should_eval %| for x in [2,3,4];7;end |
11
+ %w[live_error error_check ripper irb].each { |engine|
12
+ describe "[#{engine}]" do
13
+ should_eval %| "m" * 2 |
14
+ should_eval %| "8989" |
15
+ should_eval %| "zzz" |
16
+
17
+ should_not_eval %| "m" * |
18
+
19
+ should_not_eval %| " |
20
+ should_not_eval %| ' |
21
+ should_not_eval %| / |
22
+
23
+ should_not_eval %| [ |
24
+ should_not_eval %| { |
25
+ should_not_eval %| ( |
26
+
27
+ should_not_eval %| def hey |
28
+ should_not_eval %| def hey; 89 |
29
+ should_not_eval %| begin |
30
+ should_not_eval %| module Foo |
31
+ should_eval %| for x in [2,3,4];7;end |
32
+ end
33
+ }
29
34
  end
30
35
 
31
36
  # TODO add misc real tests for everything
metadata CHANGED
@@ -1,122 +1,141 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ripl-multi_line
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.1
4
5
  prerelease:
5
- version: 0.3.0
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Jan Lelis
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-04-28 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2013-04-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: ripl
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
23
21
  version: 0.3.6
24
22
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: bacon
28
23
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
30
25
  none: false
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.3.6
30
+ - !ruby/object:Gem::Dependency
31
+ name: bacon
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
34
37
  version: 1.1.0
35
38
  type: :development
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: bacon-bits
39
39
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- version: "0"
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.1.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: bacon-bits
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
46
54
  type: :development
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
49
- name: bacon-rr
50
55
  prerelease: false
51
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
52
57
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: "0"
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: bacon-rr
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
57
70
  type: :development
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
60
- name: rr
61
71
  prerelease: false
62
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
63
73
  none: false
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: "0"
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rr
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
68
86
  type: :development
69
- version_requirements: *id005
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
70
94
  description: This ripl plugin allows you to evaluate multiple lines of Ruby code.
71
95
  email: mail@janlelis.de
72
96
  executables: []
73
-
74
97
  extensions: []
75
-
76
- extra_rdoc_files:
98
+ extra_rdoc_files:
77
99
  - README.rdoc
78
100
  - LICENSE.txt
79
- files:
80
- - lib/ripl/multi_line.rb
101
+ files:
81
102
  - lib/ripl/multi_line/live_error.rb
82
- - lib/ripl/multi_line/error_check.rb
103
+ - lib/ripl/multi_line/irb.rb
104
+ - lib/ripl/multi_line/version.rb
83
105
  - lib/ripl/multi_line/ripper.rb
84
106
  - lib/ripl/multi_line/ruby_parser.rb
85
- - lib/ripl/multi_line/irb.rb
86
- - test/test_helper.rb
107
+ - lib/ripl/multi_line/error_check.rb
108
+ - lib/ripl/multi_line.rb
87
109
  - test/shell_test.rb
110
+ - test/test_helper.rb
88
111
  - LICENSE.txt
89
112
  - README.rdoc
90
113
  - CHANGELOG.rdoc
91
- - deps.rip
92
114
  - Rakefile
93
- - .gemspec
115
+ - ripl-multi_line.gemspec
94
116
  homepage: http://github.com/janlelis/ripl-multi_line
95
- licenses:
117
+ licenses:
96
118
  - MIT
97
119
  post_install_message:
98
120
  rdoc_options: []
99
-
100
- require_paths:
121
+ require_paths:
101
122
  - lib
102
- required_ruby_version: !ruby/object:Gem::Requirement
123
+ required_ruby_version: !ruby/object:Gem::Requirement
103
124
  none: false
104
- requirements:
105
- - - ">="
106
- - !ruby/object:Gem::Version
107
- version: "0"
108
- required_rubygems_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ! '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
130
  none: false
110
- requirements:
111
- - - ">="
112
- - !ruby/object:Gem::Version
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
113
134
  version: 1.3.6
114
135
  requirements: []
115
-
116
136
  rubyforge_project:
117
- rubygems_version: 1.7.2
137
+ rubygems_version: 1.8.25
118
138
  signing_key:
119
139
  specification_version: 3
120
140
  summary: A ripl plugin for multi-line eval.
121
141
  test_files: []
122
-
data/deps.rip DELETED
@@ -1 +0,0 @@
1
- ripl >=0.3.0