arst 0.0.1 → 0.0.3

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,62 @@
1
+ require 'pathname'
2
+ require 'rake/tasklib'
3
+ require 'arst'
4
+
5
+ module ARST
6
+
7
+ class RakeTask < Rake::TaskLib
8
+
9
+ attr_reader :generators
10
+
11
+ def initialize(&block)
12
+ @generators = []
13
+
14
+ block.call(self) if block_given?
15
+
16
+ define_tasks
17
+ end
18
+
19
+ def add_generator(generator_options={})
20
+ # TODO: Validate generator_options
21
+ generators << generator_options
22
+ end
23
+
24
+ protected
25
+
26
+ def define_tasks
27
+ namespace :arst do
28
+ desc 'Generate all ARST files'
29
+ task :generate do
30
+ @generators.each { |options| generate(options) }
31
+ end
32
+ end
33
+ end
34
+
35
+ def generate(options)
36
+ # TODO: Validate options
37
+ # TODO: Check if input_path is a valid ARST file
38
+ # TODO: Check if output_path is a directory if split_files == true
39
+
40
+ input_path = Pathname.new( options.delete(:input_path) )
41
+ output_path = Pathname.new( options.delete(:output_path) )
42
+ generator_type = options.delete(:type)
43
+
44
+ tree = ARST::Parser.parse( input_path.read )
45
+ output = ARST::Generator.generate( generator_type, tree, options )
46
+
47
+ output.each do |output|
48
+ file_path = output_path.join( output[:filename] )
49
+ file_path.dirname.mkpath
50
+
51
+ unless file_path.exist?
52
+ puts "[GENERATE] #{file_path}"
53
+ file_path.open('w+') { |file| file.write( output[:body] ) }
54
+ else
55
+ puts "[EXISTS] #{file_path}"
56
+ end
57
+ end
58
+ end
59
+
60
+ end
61
+
62
+ end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arst
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Ryan Scott Lewis
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-05-17 00:00:00.000000000 Z
11
+ date: 2013-09-15 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: active_support
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: parslet
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,15 +34,27 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
45
40
  version: 1.5.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 10.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 10.0.0
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: version
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
59
  - - ~>
52
60
  - !ruby/object:Gem::Version
@@ -54,7 +62,6 @@ dependencies:
54
62
  type: :runtime
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
66
  - - ~>
60
67
  - !ruby/object:Gem::Version
@@ -62,7 +69,6 @@ dependencies:
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: awesome_print
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
73
  - - ~>
68
74
  - !ruby/object:Gem::Version
@@ -70,7 +76,6 @@ dependencies:
70
76
  type: :development
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
80
  - - ~>
76
81
  - !ruby/object:Gem::Version
@@ -78,7 +83,6 @@ dependencies:
78
83
  - !ruby/object:Gem::Dependency
79
84
  name: cocaine
80
85
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
86
  requirements:
83
87
  - - ~>
84
88
  - !ruby/object:Gem::Version
@@ -86,7 +90,6 @@ dependencies:
86
90
  type: :development
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
94
  - - ~>
92
95
  - !ruby/object:Gem::Version
@@ -94,7 +97,6 @@ dependencies:
94
97
  - !ruby/object:Gem::Dependency
95
98
  name: guard-bundler
96
99
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
100
  requirements:
99
101
  - - ~>
100
102
  - !ruby/object:Gem::Version
@@ -102,7 +104,6 @@ dependencies:
102
104
  type: :development
103
105
  prerelease: false
104
106
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
107
  requirements:
107
108
  - - ~>
108
109
  - !ruby/object:Gem::Version
@@ -110,7 +111,6 @@ dependencies:
110
111
  - !ruby/object:Gem::Dependency
111
112
  name: guard-shell
112
113
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
114
  requirements:
115
115
  - - ~>
116
116
  - !ruby/object:Gem::Version
@@ -118,31 +118,13 @@ dependencies:
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
121
  requirements:
123
122
  - - ~>
124
123
  - !ruby/object:Gem::Version
125
124
  version: 0.5.0
126
- - !ruby/object:Gem::Dependency
127
- name: rake
128
- requirement: !ruby/object:Gem::Requirement
129
- none: false
130
- requirements:
131
- - - ~>
132
- - !ruby/object:Gem::Version
133
- version: 10.0.0
134
- type: :development
135
- prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ~>
140
- - !ruby/object:Gem::Version
141
- version: 10.0.0
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: rb-fsevent
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
129
  - - ~>
148
130
  - !ruby/object:Gem::Version
@@ -150,7 +132,6 @@ dependencies:
150
132
  type: :development
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
136
  - - ~>
156
137
  - !ruby/object:Gem::Version
@@ -169,40 +150,50 @@ files:
169
150
  - VERSION
170
151
  - LICENSE
171
152
  - arst.gemspec
172
- - examples/indentation_sensitive.rb
173
- - examples/simple.rb
153
+ - lib/arst/generator/arst.rb
154
+ - lib/arst/generator/base.rb
155
+ - lib/arst/generator/c.rb
156
+ - lib/arst/generator/ruby.rb
157
+ - lib/arst/generator.rb
158
+ - lib/arst/helpers.rb
159
+ - lib/arst/node/base.rb
160
+ - lib/arst/node/class.rb
161
+ - lib/arst/node/extend.rb
162
+ - lib/arst/node/include.rb
163
+ - lib/arst/node/module.rb
164
+ - lib/arst/node/namable.rb
165
+ - lib/arst/node/root.rb
166
+ - lib/arst/node.rb
167
+ - lib/arst/parser.rb
168
+ - lib/arst/rake_task.rb
169
+ - lib/arst.rb
170
+ - examples/Rakefile
171
+ - examples/simple.arst
174
172
  homepage: http://github.com/RyanScottLewis/
175
173
  licenses:
176
174
  - MIT
175
+ metadata: {}
177
176
  post_install_message:
178
177
  rdoc_options: []
179
178
  require_paths:
180
179
  - lib
181
180
  required_ruby_version: !ruby/object:Gem::Requirement
182
- none: false
183
181
  requirements:
184
182
  - - '>='
185
183
  - !ruby/object:Gem::Version
186
184
  version: '0'
187
- segments:
188
- - 0
189
- hash: 1607695465800406566
190
185
  required_rubygems_version: !ruby/object:Gem::Requirement
191
- none: false
192
186
  requirements:
193
187
  - - '>='
194
188
  - !ruby/object:Gem::Version
195
189
  version: '0'
196
- segments:
197
- - 0
198
- hash: 1607695465800406566
199
190
  requirements: []
200
191
  rubyforge_project:
201
- rubygems_version: 1.8.25
192
+ rubygems_version: 2.0.5
202
193
  signing_key:
203
- specification_version: 3
194
+ specification_version: 4
204
195
  summary: Abstract Ruby Syntax Tree (ARST) is a high-level language syntax denoting
205
196
  the object domain of a Ruby project.
206
197
  test_files:
207
- - examples/indentation_sensitive.rb
208
- - examples/simple.rb
198
+ - examples/Rakefile
199
+ - examples/simple.arst
@@ -1,84 +0,0 @@
1
- require 'parslet'
2
-
3
- # class IndentationSensitiveParser < Parslet::Parser
4
- #
5
- # rule(:indent) { str(' ') }
6
- # rule(:newline) { str("\n") }
7
- # rule(:identifier) { match['A-Za-z0-9'].repeat.as(:identifier) }
8
- #
9
- # rule(:node) { identifier >> newline >> (indent >> identifier >> newline.maybe).repeat.as(:children) }
10
- #
11
- # rule(:document) { node.repeat }
12
- #
13
- # root :document
14
- #
15
- # end
16
-
17
- # class IndentationSensitiveParser < Parslet::Parser
18
- #
19
- # def initialize
20
- # @indentation_size
21
- # end
22
- #
23
- # rule(:space) { str(' ') }
24
- # rule(:indent) { str(' ') }
25
- # rule(:newline) { str("\n") }
26
- # rule(:identifier) { match['A-Za-z0-9'].repeat.as(:identifier) }
27
- #
28
- # rule(:node) { identifier >> newline >> (indent >> identifier >> newline.maybe).repeat.as(:children) }
29
- #
30
- # rule(:document) { node.repeat }
31
- #
32
- # root :document
33
- #
34
- # end
35
-
36
- class IndentationSensitiveParser < Parslet::Parser
37
-
38
- def indent(depth)
39
- str(' ' * depth)
40
- end
41
-
42
- rule(:newline) { str("\n") }
43
-
44
- rule(:identifier) { match['A-Za-z0-9'].repeat(1).as(:identifier) }
45
-
46
- def node(depth)
47
- indent(depth) >> identifier >> newline.maybe >>
48
- (
49
- dynamic { |soutce, context| node(depth+1).repeat(0) }
50
- ).as(:children)
51
- end
52
-
53
- rule(:document) { node(0).repeat }
54
-
55
- root :document
56
- end
57
-
58
- require 'ap'
59
- require 'pp'
60
-
61
- begin
62
- input = DATA.read
63
-
64
- puts '', '----- input ----------------------------------------------------------------------', ''
65
- ap input
66
-
67
- tree = IndentationSensitiveParser.new.parse(input)
68
-
69
- puts '', '----- tree -----------------------------------------------------------------------', ''
70
- pp tree
71
-
72
- rescue IndentationSensitiveParser::ParseFailed => failure
73
- puts '', '----- error ----------------------------------------------------------------------', ''
74
- puts failure.cause.ascii_tree
75
- end
76
-
77
- __END__
78
- level0child0
79
- level0child1
80
- level1child0
81
- level1child1
82
- level2child0
83
- level1child2
84
- level0child3
@@ -1,31 +0,0 @@
1
- require 'arst'
2
-
3
- require 'ap'
4
- require 'pp'
5
-
6
- begin
7
- input = DATA.read
8
-
9
- puts '', '----- input ----------------------------------------------------------------------', ''
10
- ap input
11
-
12
- tree = ARST.parse(input)
13
-
14
- puts '', '----- tree -----------------------------------------------------------------------', ''
15
- ap tree
16
-
17
- rescue ARST::Parser::ParseFailed => failure
18
- puts '', '----- error ----------------------------------------------------------------------', ''
19
- puts failure.cause.ascii_tree
20
- end
21
-
22
- __END__
23
- module Test
24
- class Bar
25
- module Foo
26
- module Baz
27
- module Qux
28
- module NoWai
29
- module UserSystem
30
- class User
31
- class Admin < User