endlessruby 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,50 +13,40 @@ module Kernel
13
13
  # pathが./または/で以外で始まる場合は$LOAD_PATHと$:をそれぞれ参照してpathを探します。
14
14
  # もしpathがそれらで始まる場合はそれぞれ参照しません。(つまり通常のrequireの動作と同じです)
15
15
  def require path
16
- at = caller
17
16
  endlessruby_original_require path
18
17
  rescue SyntaxError, LoadError
19
- case path
20
- when /^\.\/.*?$/, /^\/.*?$/
21
- unless File.exist? path
22
- if File.exist? "#{path}.er"
23
- path = "#{path}.er"
18
+
19
+ load = lambda do |path, abspath|
20
+
21
+ if !File.exist?(abspath) || File.directory?(abspath)
22
+ if File.exist? "#{abspath}.er"
23
+ abspath = "#{abspath}.er"
24
24
  else
25
- $@ = at
26
25
  raise LoadError, "no such file to load -- #{path}"
27
26
 
28
- if File.directory? path
29
- $@ = at
27
+ return false if $".include? abspath
28
+
29
+ if File.directory? abspath
30
30
  raise LoadError, "Is a directory - #{path}"
31
31
 
32
- open(path) do |file|
33
- begin
34
- EndlessRuby.ereval file.read, TOPLEVEL_BINDING, path
35
- rescue Exception => e
36
- $@ = at
37
- raise e
32
+ open(abspath) do |file|
33
+ EndlessRuby.ereval file.read, TOPLEVEL_BINDING, abspath
34
+ $" << abspath
38
35
  return true
36
+
37
+ case path
38
+ when /^\~(.*?)$/
39
+ load.call path, File.join(ENV['HOME'], $1)
40
+ when /^\.\/.*?$/, /^\/.*?$/
41
+ load.call path, path
39
42
  else
40
43
  is_that_dir = false
41
- ($LOAD_PATH | $:).each do |load_path|
42
- real_path = File.join load_path, path
43
- unless File.exist? real_path
44
- if File.exist? "#{real_path}.er"
45
- real_path = "#{real_path}.er"
46
- else
47
- next
48
-
49
- next is_that_dir = true if File.directory? real_path
50
- open(real_path) do |file|
51
- begin
52
- EndlessRuby.ereval file.read, TOPLEVEL_BINDING, real_path
53
- rescue Exception => e
54
- $@ = at
55
- raise e
56
- return true
57
- $@ = at
58
- if is_that_dir
59
- raise LoadError, "Is a directory - #{path}"
60
- else
61
- raise LoadError, "no such file to load -- #{path}"
62
-
44
+ $:.each do |load_path|
45
+ abspath = File.join load_path, path
46
+ begin
47
+ return load.call path, abspath
48
+ rescue SyntaxError => e
49
+ $stderr.puts "*ENDLESSRUBY BUG*"
50
+ raise e
51
+ rescue LoadError => e
52
+ raise e if load_path == $:.last
@@ -9,16 +9,11 @@ module EndlessRuby::Main
9
9
 
10
10
  # er ファイルから読み込みそれをピュアなRubyにコンパイルしてrbに書き出します
11
11
  def compile er, rb
12
- open(er) do |erfile|
13
- open(rb, "w") do |rbfile|
14
- rbfile.write ER2PR(erfile.read)
12
+ ER2PR({ :in => { :any => er }, :out => { :any => rb } })
15
13
 
16
14
  # rbファイルを読み込みそれからすべてのendを取り除きます。
17
15
  def decompile rb, er
18
- open(rb) do |rbfile|
19
- open(er, "w") do |erfile|
20
- erfile.write PR2ER(rbfile.read)
21
-
16
+ PR2ER({ :in => { :any => rb }, :out => { :any => er } })
22
17
 
23
18
  # EndlessRuby::Main.main と同じ動作をします。このモジュールをincludeした場合に使用します。
24
19
  def endlessruby argv
@@ -39,16 +34,19 @@ module EndlessRuby::Main
39
34
  }
40
35
 
41
36
  parser = OptionParser.new do |opts|
42
- opts.on '-o OUT' do |out|
37
+
38
+ opts.version = EndlessRuby::VERSION
39
+
40
+ opts.on '-o OUT', 'appoint output directory.' do |out|
43
41
  options[:out] = out
44
42
 
45
- opts.on '-c', '--compile' do |c|
43
+ opts.on '-c', '--compile', 'compile endlessruby source code to pure ruby' do |c|
46
44
  options[:compile] = true
47
45
 
48
- opts.on '-d', '--decompile' do |d|
46
+ opts.on '-d', '--decompile', 'decompile pure ruby source code to endless ruby' do |d|
49
47
  options[:decompile] = true
50
48
 
51
- opts.on '-r' do |r|
49
+ opts.on '-r', 'unimplemented' do |r|
52
50
  options[:recursive] = true
53
51
 
54
52
  parser.parse! argv
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: endlessruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-19 00:00:00.000000000Z
12
+ date: 2011-11-23 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hoe
16
- requirement: &70324864753060 !ruby/object:Gem::Requirement
16
+ requirement: &70121416164700 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,8 +21,8 @@ dependencies:
21
21
  version: '2.12'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70324864753060
25
- description: ! 'EndlessRuby は Ruby を end なしで書けるプリプロセッサまたはコンパイラです。
24
+ version_requirements: *70121416164700
25
+ description: ! 'EndlessRuby は Ruby を end なしで代わりにインデントで書けるプリプロセッサまたはコンパイラです。
26
26
 
27
27
  * EndlessRuby で書かれたソースコードを Ruby プログラムから require
28
28
 
@@ -35,38 +35,7 @@ description: ! 'EndlessRuby は Ruby を end なしで書けるプリプロセ
35
35
 
36
36
  EndlessRubyの独自な拡張的な構文はありません。
37
37
 
38
- ただ行単位で処理しているので def method; a; end みたいな書式できません。
39
-
40
-
41
- コンパイルする場合は
42
-
43
- $ endlessruby -c src/example.er src/more.er -o lib
44
-
45
- とします。
46
-
47
- この場合、
48
-
49
- src/example.er => lib/example.rb
50
-
51
- src/more.er => lib/more.rb
52
-
53
- として書き出されます。
54
-
55
-
56
- 実行する場合は
57
-
58
- $ endlessruby src/example.er
59
-
60
-
61
- コンパイルされていないEndlessRubyのファイルをrequire する場合は
62
-
63
-
64
- require ''endlessruby''
65
-
66
- require ''example.er''
67
-
68
-
69
- たぶんバグだらけです'
38
+ ただ行単位で処理しているので def method; a; end みたいな書式できません。'
70
39
  email:
71
40
  - pasberth@gmail.com
72
41
  executables:
@@ -82,10 +51,10 @@ files:
82
51
  - Rakefile
83
52
  - bin/endlessruby
84
53
  - lib/endlessruby.rb
85
- - lib/endlessruby/extensions.rb
54
+ - lib/endlessruby/custom_require.rb
86
55
  - lib/endlessruby/main.rb
87
56
  - src/endlessruby.er
88
- - src/endlessruby/extensions.er
57
+ - src/endlessruby/custom_require.er
89
58
  - src/endlessruby/main.er
90
59
  - src/er.er
91
60
  - spec/blank_line_spec.rb
@@ -101,6 +70,7 @@ files:
101
70
  - spec/simply_spec.rb
102
71
  - spec/spec.opts
103
72
  - spec/spec_helper.rb
73
+ - spec/use_end_case_spec.rb
104
74
  - spec/test_data/er_omission.er
105
75
  - spec/test_data/file.er
106
76
  - spec/test_data/rb_omission.rb
@@ -136,12 +106,9 @@ rubyforge_project: endlessruby
136
106
  rubygems_version: 1.8.10
137
107
  signing_key:
138
108
  specification_version: 3
139
- summary: EndlessRuby は Ruby を end なしで書けるプリプロセッサまたはコンパイラです。 * EndlessRuby で書かれたソースコードを
140
- Ruby プログラムから require * EndlessRuby で書かれたソースコードを ピュア Ruby にコンパイル ができます。 基本的にRubyの構文からendを取り除いただけで書けます。endを取り除かなくても実行可能です。
141
- EndlessRubyの独自な拡張的な構文はありません。 ただ行単位で処理しているので def method; a; end みたいな書式できません。 コンパイルする場合は
142
- $ endlessruby -c src/example.er src/more.er -o lib とします。 この場合、 src/example.er =>
143
- lib/example.rb src/more.er => lib/more.rb として書き出されます。 実行する場合は $ endlessruby src/example.er コンパイルされていないEndlessRubyのファイルをrequire
144
- する場合は require 'endlessruby' require 'example.er' たぶんバグだらけです
109
+ summary: EndlessRuby は Ruby を end なしで代わりにインデントで書けるプリプロセッサまたはコンパイラです。 * EndlessRuby
110
+ で書かれたソースコードを Ruby プログラムから require * EndlessRuby で書かれたソースコードを ピュア Ruby にコンパイル ができます。 基本的にRubyの構文からendを取り除いただけで書けます。endを取り除かなくても実行可能です。
111
+ EndlessRubyの独自な拡張的な構文はありません。 ただ行単位で処理しているので def method; a; end みたいな書式できません。
145
112
  test_files:
146
113
  - test/test_helpers.rb
147
114
  - test/test_require.rb