kaiser-ruby 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8ecdc0cb2c7bfb8c9480d9cd5113835efab137c28b48468ea3b31001c11df8f0
4
- data.tar.gz: 3610bc55b430d53ca418a618def266cf31a3520653e1a8f73090d5cbd12ccb0e
3
+ metadata.gz: 9b5718545e9c7f76ee7424888738a48381168802086130192a15fee4d6c2f11a
4
+ data.tar.gz: a01209b2869ccbef8a0aa9824bba5b2cee0383e4a5cdb8044db5a0447d1805cf
5
5
  SHA512:
6
- metadata.gz: de150bc12da3bb9d8ffedf78a150185f967ee3784649b30b053ea13404e50325a0e636009205a5b88004269cdd21522dd19674fb7f92663fa06d8700445a5179
7
- data.tar.gz: 6f06bad2235550bcc58a80a6c70f70dd61fbccdc7dfb3c9aa1801713acc7e1f65ba46162bbaf3380c10fffdc0dde9b3aa1e4ea72e559b9423357266d479eff68
6
+ metadata.gz: 535f03ccac46331c49ef62b7b22f529ad4a7248c35fefacb6d3c3ee77603eb4a85c6cbb50580aa20fe210f3a8dabd4fa8a1cb381a6fb2fb0d97dea728a474a07
7
+ data.tar.gz: 328d6528bb967ca27e7eea4e69df429f08ad7659b28bd3058e357f28113153933a75de32d0efbdb817a7e7a6afb62d54b2b3379df50cf7d44df77f40da633af2
data/.gitignore CHANGED
@@ -9,4 +9,5 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
- .DS_Store
12
+ .DS_Store
13
+ *.gem
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kaiser-ruby (0.1.0)
5
- parslet
4
+ kaiser-ruby (0.2.0)
5
+ parslet (~> 1.8)
6
+ thor (~> 0.20)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
@@ -28,6 +29,7 @@ GEM
28
29
  diff-lcs (>= 1.2.0, < 2.0)
29
30
  rspec-support (~> 3.7.0)
30
31
  rspec-support (3.7.1)
32
+ thor (0.20.0)
31
33
 
32
34
  PLATFORMS
33
35
  ruby
@@ -35,7 +37,7 @@ PLATFORMS
35
37
  DEPENDENCIES
36
38
  bundler (~> 1.16)
37
39
  kaiser-ruby!
38
- pry
40
+ pry (~> 0.11)
39
41
  rake (~> 10.0)
40
42
  rspec (~> 3.0)
41
43
 
data/README.md CHANGED
@@ -1,38 +1,65 @@
1
- # Kaiser::Ruby
1
+ # KaiserRuby - a Rockstar to Ruby transpiler
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/kaiser/ruby`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ This tool translates a file containing a program written in the [Rockstar language](https://github.com/dylanbeattie/rockstar) to Ruby code.
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ This is still a work in progress. For details on that, see the TODO.md file.
6
6
 
7
7
  ## Installation
8
8
 
9
- Add this line to your application's Gemfile:
9
+ Install the gem by issuing the following command.
10
+
11
+ $ gem install kaiser-ruby
12
+
13
+ ## Usage
14
+
15
+ The most common usage of this gem is to transpile (or transpile and run immediately) Rockstar code into Ruby code.
16
+
17
+ This gem provides a commandline tool for you to use:
18
+
19
+ $ kaiser-ruby
20
+
21
+ There are a few ways you can use it. First one will just output the result of the transpilation.
10
22
 
11
- ```ruby
12
- gem 'kaiser-ruby'
13
23
  ```
24
+ $ kaiser-ruby transpile ./examples/assignment.rock
25
+ tommy = 15
26
+ puts tommy
14
27
 
15
- And then execute:
28
+ ```
16
29
 
17
- $ bundle
30
+ The `--show-source` flag will output the Rockstar code along with the resulting Ruby code like this:
18
31
 
19
- Or install it yourself as:
32
+ This will have a following output:
20
33
 
21
- $ gem install kaiser-ruby
34
+ ```
35
+ $ kaiser-ruby transpile ./examples/assignment.rock --show-source
36
+ Tommy is a rebel
37
+ Shout Tommy
38
+ ----------------------------------------
39
+ tommy = 15
40
+ puts tommy
22
41
 
23
- ## Usage
42
+ ```
24
43
 
25
- TODO: Write usage instructions here
44
+ You can also use the `--save=FILE` option to write the resulting transpiled code as a file instead of outputting it:
26
45
 
27
- ## Development
46
+ ```
47
+ $ kaiser-ruby transpile ./examples/assignment.rock --save=a.rb
48
+ Saved output in `a.rb`
28
49
 
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
50
+ ```
30
51
 
31
- 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`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
52
+ Finally, you can also transpile and immediately execute the code, like this:
53
+
54
+ ```
55
+ $ kaiser-ruby execute ./examples/assignment.rock
56
+ 15
57
+
58
+ ```
32
59
 
33
60
  ## Contributing
34
61
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/kaiser-ruby.
62
+ Bug reports and pull requests are welcome on GitHub at https://github.com/marcinruszkiewicz/kaiser-ruby.
36
63
 
37
64
  ## License
38
65
 
data/TODO.md ADDED
@@ -0,0 +1,43 @@
1
+ # TODO notes for KaiserRuby transpiler
2
+
3
+ ## Variables
4
+
5
+ - [ ] Handle pronouns - he, she, it, and others should refer to the last used variable
6
+
7
+ ## Types
8
+
9
+ - [ ] Handle null type differently - nil in Ruby isn't really comparable to 0
10
+ - [ ] Handle mysterious type - probably this should be nil and what is now nil should be 0 instead
11
+ - [ ] Handle object type
12
+
13
+ ## Comparisons
14
+
15
+ - [ ] Handle gt, gte, lt, lte comparisons
16
+ - [ ] Handle negation
17
+
18
+ ## Input
19
+
20
+ - [ ] Handle input from STDIN
21
+
22
+ ## Flow Control
23
+
24
+ - [ ] While loop
25
+ - [ ] Until loop
26
+ - [ ] Break and continue
27
+
28
+ ## Functions
29
+
30
+ - [ ] Define functions
31
+ - [ ] Handle function calls
32
+
33
+ ## Examples
34
+
35
+ - [ ] FizzBuzz example (should also be in tests to check if it runs)
36
+ - [ ] Should be able to run the [Cellular Rockomata](https://github.com/Rifhutch/cellular-rocktomata)
37
+ - [ ] Fibonacci example https://github.com/dylanbeattie/rockstar/issues/94#issuecomment-408217504
38
+ - [ ] Math module https://gist.github.com/wrenoud/6be6f7509c88a3d8f9867ae782fb768f
39
+
40
+ ## Other stuff
41
+
42
+ - [ ] Test if it handles metal umlauts (Ruby shouldn't care much, but tests should be made)
43
+ - [ ] Ignore comments in parentheses
data/bin/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "bundler/setup"
4
- require "kaiser/ruby"
4
+ require "kaiser_ruby"
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
data/exe/kaiser-ruby ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ require "rubygems"
3
+ require "bundler/setup"
4
+ require "kaiser_ruby"
5
+ require "kaiser_ruby/cli"
6
+
7
+ KaiserRuby::CLI.start(ARGV)
data/kaiser-ruby.gemspec CHANGED
@@ -14,15 +14,16 @@ Gem::Specification.new do |spec|
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
- f.match(%r{^(test|spec|features)/})
17
+ f.match(%r{^(spec|examples)/})
18
18
  end
19
19
  spec.bindir = "exe"
20
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.executables = ['kaiser-ruby']
21
21
  spec.require_paths = ["lib"]
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.16"
24
24
  spec.add_development_dependency "rake", "~> 10.0"
25
25
  spec.add_development_dependency "rspec", "~> 3.0"
26
- spec.add_development_dependency "pry"
27
- spec.add_dependency "parslet"
26
+ spec.add_development_dependency "pry", "~> 0.11"
27
+ spec.add_dependency "parslet", "~> 1.8"
28
+ spec.add_dependency "thor", "~> 0.20"
28
29
  end
data/lib/kaiser_ruby.rb CHANGED
@@ -1,11 +1,17 @@
1
1
  require 'parslet'
2
2
  require 'kaiser_ruby/rockstar_parser'
3
3
  require 'kaiser_ruby/rockstar_transform'
4
+ require 'pry'
4
5
 
5
6
  module KaiserRuby
6
7
  def self.parse(input)
7
- KaiserRuby::RockstarParser.new.parse(input)
8
+ if input.split("\n").size == 1
9
+ KaiserRuby::RockstarSingleLineParser.new.parse(input.chomp)
10
+ else
11
+ KaiserRuby::RockstarParser.new.parse(input)
12
+ end
8
13
  rescue Parslet::ParseFailed => failure
14
+ puts input.inspect
9
15
  puts failure.parse_failure_cause.ascii_tree
10
16
  end
11
17
 
@@ -0,0 +1,37 @@
1
+ require 'thor'
2
+
3
+ module KaiserRuby
4
+ class CLI < Thor
5
+ desc "transpile FILE", "transpile a .rock FILE and output the result"
6
+ option 'show-source'.to_sym, type: :boolean, desc: "prints out the source file along with the transpiled output"
7
+ option :save, desc: "saves the transpiled output in SAVE"
8
+ def transpile(filename)
9
+ file = File.read filename
10
+ output = KaiserRuby.transpile(file)
11
+
12
+ if options['show-source'.to_sym]
13
+ puts file
14
+ puts "-" * 40
15
+ end
16
+
17
+ if options[:save]
18
+ out = File.new(options[:save], 'w')
19
+ out.write output
20
+ out.close
21
+ puts "Saved output in `#{options[:save]}`"
22
+ else
23
+ puts output
24
+ end
25
+ puts
26
+ end
27
+
28
+ desc "execute FILE", "transpiles and runs a .rock FILE"
29
+ def execute(filename)
30
+ file = File.read filename
31
+ output = KaiserRuby.transpile(file)
32
+
33
+ eval output
34
+ puts
35
+ end
36
+ end
37
+ end
@@ -1,16 +1,181 @@
1
1
  module KaiserRuby
2
2
  class RockstarParser < Parslet::Parser
3
- root(:poetic_literal)
3
+ rule(:reserved) do
4
+ nil_value_keywords | true_value_keywords | false_value_keywords | plus_keywords | minus_keywords | times_keywords | over_keywords |
5
+ str('Knock') | str('Build') | str('Put') | str('into') | str('says') | poetic_number_keywords | say_keywords
6
+ end
4
7
 
5
- # declare spaces to DRY out later definitions
6
- rule(:space) { match(' ').repeat(1) }
8
+ rule(:nil_value_keywords) { str('nothing') | str('nowhere') | str('nobody') | str('empty') | str('gone') }
9
+ rule(:false_value_keywords) { str('false') | str('wrong') | str('no') | str('lies') }
10
+ rule(:true_value_keywords) { str('true') | str('right') | str('yes') | str('ok') }
11
+ rule(:plus_keywords) { str('plus') | str('with') }
12
+ rule(:minus_keywords) { str('minus') | str('without') }
13
+ rule(:minus_keywords) { str('minus') | str('without') }
14
+ rule(:times_keywords) { str('times') | str('of') }
15
+ rule(:over_keywords) { str('over') }
16
+ rule(:poetic_number_keywords) { str('is') | str('was') | str('were') }
17
+ rule(:say_keywords) { str('Say') | str('Shout') | str('Scream') | str('Whisper') }
18
+ rule(:flow_keywords) { str('If') | str('Else') | str('While') | str('Until') }
7
19
 
8
- # parts of a variable assignment
9
- rule(:proper_variable_name) { (match('[A-Z]') >> match('[a-z]').repeat(1)) }
10
- rule(:assignment) { space >> (str('is') | str('was') | str('were')) >> space }
11
- rule(:number_literal) { (match['a-z'].repeat(1) >> space.maybe).repeat.as(:number_str) }
20
+ rule(:proper_word) { reserved.absent? >> match['A-Z'] >> match['A-Za-z'].repeat }
21
+ rule(:common_word) { reserved.absent? >> match['A-Za-z'].repeat }
22
+ rule(:common_variable_name) do
23
+ (
24
+ str('A ') | str('a ') |
25
+ str('An ') | str('an ') |
26
+ str('The ') | str('the ') |
27
+ str('My ') | str('my ') |
28
+ str('Your ') | str('your ')
29
+ ) >> reserved.absent? >> match['a-z'].repeat
30
+ end
31
+ rule(:proper_variable_name) do
32
+ (proper_word >> (space >> proper_word).repeat).repeat(1)
33
+ end
12
34
 
13
- rule(:poetic_literal) { poetic_number_literal.as(:var) }
14
- rule(:poetic_number_literal) { proper_variable_name.as(:var_name) >> assignment >> number_literal.as(:var_value) }
35
+ rule(:variable_names) do
36
+ (common_variable_name | proper_variable_name).as(:variable_name)
37
+ end
38
+
39
+ rule(:nil_value) { nil_value_keywords.as(:nil_value) }
40
+ rule(:true_value) { true_value_keywords.as(:true_value) }
41
+ rule(:false_value) { false_value_keywords.as(:false_value) }
42
+ rule(:string_value) { (str('"') >> match['A-Za-z '].repeat >> str('"')).as(:string_value) }
43
+ rule(:numeric_value) { match['0-9\.'].repeat.as(:numeric_value) }
44
+ rule(:unquoted_string) { match['^\n'].repeat.as(:unquoted_string) }
45
+ rule(:string_as_number) { reserved.absent? >> match['^\n'].repeat.as(:string_as_number) }
46
+
47
+ rule(:basic_assignment_expression) do
48
+ match('Put ').present? >>
49
+ (
50
+ str('Put ') >> string_input.as(:right) >> str(' into ') >> variable_names.as(:left)
51
+ ).as(:assignment)
52
+ end
53
+
54
+ rule(:increment) do
55
+ (
56
+ str('Build ') >> variable_names.as(:variable_name) >> str(' up')
57
+ ).as(:increment)
58
+ end
59
+
60
+ rule(:decrement) do
61
+ (
62
+ str('Knock ') >> variable_names.as(:variable_name) >> str(' down')
63
+ ).as(:decrement)
64
+ end
65
+
66
+ # math operations
67
+
68
+ rule(:addition) do
69
+ (match('.*? plus') | match('.*? with')).present? >>
70
+ (
71
+ value_or_variable.as(:left) >> space >> plus_keywords >> space >> value_or_variable.as(:right)
72
+ ).as(:addition)
73
+ end
74
+
75
+ rule(:subtraction) do
76
+ (match('.*? minus') | match('.*? without')).present? >>
77
+ (
78
+ value_or_variable.as(:left) >> space >> minus_keywords >> space >> value_or_variable.as(:right)
79
+ ).as(:subtraction)
80
+ end
81
+
82
+ rule(:division) do
83
+ match('.*? over').present? >>
84
+ (
85
+ value_or_variable.as(:left) >> space >> over_keywords >> space >> value_or_variable.as(:right)
86
+ ).as(:division)
87
+ end
88
+
89
+ rule(:multiplication) do
90
+ (match('.*? times') | match('.*? of')).present? >>
91
+ (
92
+ value_or_variable.as(:left) >> space >> times_keywords >> space >> value_or_variable.as(:right)
93
+ ).as(:multiplication)
94
+ end
95
+
96
+ # poetic assignments
97
+
98
+ rule(:poetic_type_literal) do
99
+ (flow_keywords.absent?) >>
100
+ (
101
+ variable_names.as(:left) >> str(' is ') >> (nil_value | false_value | true_value).as(:right)
102
+ ).as(:assignment)
103
+ end
104
+
105
+ rule(:poetic_string_literal) do
106
+ (
107
+ variable_names.as(:left) >> str(' says ') >> unquoted_string.as(:right)
108
+ ).as(:assignment)
109
+ end
110
+
111
+ rule(:poetic_number_literal) do
112
+ (flow_keywords.absent?) >>
113
+ (
114
+ variable_names.as(:left) >> space >> poetic_number_keywords >> space >> string_as_number.as(:right)
115
+ ).as(:assignment)
116
+ end
117
+
118
+ rule(:print_function) do
119
+ (
120
+ say_keywords >> space >> value_or_variable.as(:output)
121
+ ).as(:print)
122
+ end
123
+
124
+ # comparisons
125
+
126
+ rule(:equality) do
127
+ (
128
+ value_or_variable.as(:left) >> str(' is ') >> (string_as_number | value_or_variable).as(:right)
129
+ ).as(:equals)
130
+ end
131
+
132
+ # flow control
133
+
134
+ rule(:if_block) do
135
+ (
136
+ str('If ') >> comparisons.as(:if_condition) >> eol >>
137
+ scope {
138
+ inner_block_line.repeat.as(:if_block) >>
139
+ (eol | eof).as(:endif)
140
+ }
141
+ ).as(:if)
142
+ end
143
+
144
+ rule(:if_else_block) do
145
+ (
146
+ str('If ') >> comparisons.as(:if_condition) >> eol >>
147
+ scope {
148
+ inner_block_line.repeat.as(:if_block)
149
+ } >>
150
+ str('Else') >> eol >>
151
+ scope {
152
+ inner_block_line.repeat.as(:else_block) >>
153
+ (eol | eof).as(:endif)
154
+ }
155
+ ).as(:if_else)
156
+ end
157
+
158
+ rule(:simple_values) { nil_value | false_value | true_value | string_value | numeric_value }
159
+ rule(:value_or_variable) { variable_names | simple_values }
160
+ rule(:expressions) { basic_assignment_expression | increment | decrement | addition | subtraction | multiplication | division }
161
+ rule(:comparisons) { equality }
162
+ rule(:flow_control) { if_block | if_else_block }
163
+ rule(:poetics) { poetic_type_literal | poetic_string_literal | poetic_number_literal }
164
+ rule(:functions) { print_function }
165
+ rule(:line_elements) { flow_control | poetics | expressions | functions | eol }
166
+
167
+ rule(:string_input) { line_elements | value_or_variable }
168
+ rule(:line) { (line_elements >> eol.maybe).as(:line) }
169
+ rule(:inner_block_line) { ( (flow_control | poetics | expressions | functions) >> eol.maybe).as(:line) }
170
+ rule(:lyrics) { line.repeat.as(:lyrics) }
171
+ root(:lyrics)
172
+
173
+ rule(:eol) { match["\n"] }
174
+ rule(:eof) { any.absent? }
175
+ rule(:space) { match[' \t'].repeat(1) }
176
+ end
177
+
178
+ class RockstarSingleLineParser < KaiserRuby::RockstarParser
179
+ root(:string_input)
15
180
  end
16
181
  end
@@ -1,13 +1,56 @@
1
1
  module KaiserRuby
2
2
  class RockstarTransform < Parslet::Transform
3
- rule(:number_str => simple(:str)) { str.to_s.split(/\s+/).map {|e| e.length % 10}.join.to_i }
3
+ rule(variable_name: simple(:str)) { |c| parameterize(c[:str]) }
4
4
 
5
- rule(:var => { :var_name => simple(:name), :var_value => simple(:value) }) do |context|
6
- "#{parameterize(context[:name])} = #{context[:value]}"
5
+ rule(nil_value: simple(:_)) { 'nil' }
6
+ rule(true_value: simple(:_)) { 'true' }
7
+ rule(false_value: simple(:_)) { 'false' }
8
+ rule(string_value: simple(:str)) { str }
9
+ rule(numeric_value: simple(:num)) { num }
10
+ rule(unquoted_string: simple(:str)) { "\"#{str}\"" }
11
+ rule(string_as_number: simple(:str)) do |c|
12
+ if c[:str].to_s.include?('.')
13
+ c[:str].to_s.gsub(/[^A-Za-z\s\.]/, '').split('.').map do |sub|
14
+ str_to_num(sub)
15
+ end.join('.').to_f
16
+ else
17
+ str_to_num(c[:str])
18
+ end
7
19
  end
8
20
 
21
+ rule(assignment: { left: simple(:left), right: simple(:right) }) { "#{left} = #{right}" }
22
+ rule(increment: simple(:str)) { "#{str} += 1" }
23
+ rule(decrement: simple(:str)) { "#{str} -= 1" }
24
+ rule(addition: { left: simple(:left), right: simple(:right) }) { "#{left} + #{right}" }
25
+ rule(subtraction: { left: simple(:left), right: simple(:right) }) { "#{left} - #{right}" }
26
+ rule(multiplication: { left: simple(:left), right: simple(:right) }) { "#{left} * #{right}" }
27
+ rule(division: { left: simple(:left), right: simple(:right) }) { "#{left} / #{right}" }
28
+
29
+ rule(print: { output: simple(:output) }) { "puts #{output}" }
30
+
31
+ rule(equals: { left: simple(:left), right: simple(:right) }) { "#{left} == #{right}" }
32
+ rule(if: { if_condition: simple(:if_condition), if_block: sequence(:if_block_lines), endif: simple(:_)} ) do
33
+ "if #{if_condition}\n" +
34
+ if_block_lines.map { |l| "#{l}\n" }.join +
35
+ "end"
36
+ end
37
+ rule(if_else: { if_condition: simple(:if_condition), if_block: sequence(:if_block_lines), else_block: sequence(:else_block_lines), endif: simple(:_)} ) do
38
+ "if #{if_condition}\n" +
39
+ if_block_lines.map { |l| "#{l}\n" }.join +
40
+ "else\n" +
41
+ else_block_lines.map { |l| "#{l}\n" }.join +
42
+ "end"
43
+ end
44
+
45
+ rule(line: simple(:line)) { line == "\n" ? nil : line }
46
+ rule(lyrics: sequence(:lines)) { lines.join("\n") + "\n" }
47
+
9
48
  def self.parameterize(string)
10
49
  string.to_s.downcase.gsub(/\s+/, '_')
11
50
  end
51
+
52
+ def self.str_to_num(string)
53
+ string.to_s.split(/\s+/).map { |e| e.length % 10 }.join.to_i
54
+ end
12
55
  end
13
56
  end
@@ -1,3 +1,3 @@
1
1
  module KaiserRuby
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaiser-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcin Ruszkiewicz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-31 00:00:00.000000000 Z
11
+ date: 2018-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -56,34 +56,49 @@ dependencies:
56
56
  name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '0.11'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '0.11'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: parslet
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '1.8'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.8'
83
+ - !ruby/object:Gem::Dependency
84
+ name: thor
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.20'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '0'
96
+ version: '0.20'
83
97
  description:
84
98
  email:
85
99
  - marcin.ruszkiewicz@polcode.net
86
- executables: []
100
+ executables:
101
+ - kaiser-ruby
87
102
  extensions: []
88
103
  extra_rdoc_files: []
89
104
  files:
@@ -95,10 +110,13 @@ files:
95
110
  - LICENSE.txt
96
111
  - README.md
97
112
  - Rakefile
113
+ - TODO.md
98
114
  - bin/console
99
115
  - bin/setup
116
+ - exe/kaiser-ruby
100
117
  - kaiser-ruby.gemspec
101
118
  - lib/kaiser_ruby.rb
119
+ - lib/kaiser_ruby/cli.rb
102
120
  - lib/kaiser_ruby/rockstar_parser.rb
103
121
  - lib/kaiser_ruby/rockstar_transform.rb
104
122
  - lib/kaiser_ruby/version.rb