ruval 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2b863b7435fb17b88d4ffd5daa5d1ca2a0222e2a57d3cd429fbea1f57d06c433
4
+ data.tar.gz: 4a2771ba61e7ff6a3baa0e809907b34c7f6bba63f1c0720c94d932b0ae9f2291
5
+ SHA512:
6
+ metadata.gz: 219ac8814e1c26af0f1082e6249f40817c0ac5ac3590daf6ff18a04937d83ddb4aa5c8a4bddbc955359a1f3b66575dfb3d6795895fdad76dd8ef6cd11329bbf7
7
+ data.tar.gz: a339bf6e4baaf077c8c06339bb084b4effb7acfea61e3f7ba6e2ea23de10b6e552491609c826a898a4ce086c9944b3848e7d150875ddef41da0e33ed7ab0d820
@@ -0,0 +1,57 @@
1
+ # files without extensions except directories
2
+ #*
3
+ #!/**/
4
+ #!?*.*
5
+
6
+ # directories
7
+ /.bundle
8
+ /_yardoc
9
+ /coverage
10
+ /doc
11
+ /pkg
12
+ /spec/reports
13
+ /tmp
14
+ /vendor
15
+
16
+ # files
17
+ *.dump
18
+ *.log
19
+ *.mod
20
+ *.o
21
+ *~
22
+ .*.swp
23
+ .DS_Store
24
+ .byebug
25
+ .idea
26
+ .project
27
+ .rake*
28
+ .rake*
29
+ .ruby-*
30
+ .rvmrc
31
+ .rubocop*
32
+ .secret
33
+ .yardoc
34
+ TODO.md
35
+ core.*
36
+ cscope.out
37
+ secrets.yml
38
+ .tags
39
+
40
+ # don't ignore
41
+ !.gitignore
42
+ !.keep
43
+ !Capfile
44
+ !Cheffile
45
+ !Gemfile
46
+ ![MR]akefile
47
+ !bin/**/[^.]*
48
+ !exe/**/[^.]*
49
+
50
+ /.bundle/
51
+ /.yardoc
52
+ /_yardoc/
53
+ /coverage/
54
+ /doc/
55
+ /pkg/
56
+ /spec/reports/
57
+ /tmp/
@@ -0,0 +1,6 @@
1
+ ---
2
+ language: ruby
3
+ cache: bundler
4
+ rvm:
5
+ - 2.7.0
6
+ before_install: gem install bundler -v 2.1.4
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in ruval.gemspec
4
+ gemspec
5
+
6
+ gem "rake", "~> 12.0"
7
+ gem "minitest", "~> 5.0"
@@ -0,0 +1,21 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ruval (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ minitest (5.14.3)
10
+ rake (12.3.3)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ minitest (~> 5.0)
17
+ rake (~> 12.0)
18
+ ruval!
19
+
20
+ BUNDLED WITH
21
+ 2.1.4
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2021 sergioro
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,53 @@
1
+ # Ruval
2
+
3
+ Consider this program:
4
+
5
+ $ cat prog.rb
6
+ 'hola'
7
+
8
+ def good; ':)'; end
9
+
10
+ def bad
11
+ ':('
12
+ end
13
+
14
+ class Person
15
+ attr_accessor :name, :mood
16
+
17
+ def initialize(name='bob')
18
+ @name='bob'
19
+ end
20
+ end
21
+
22
+ person1 = Person.new
23
+ person1.name
24
+ person1.mood = good
25
+ person1.mood
26
+
27
+ Run it with ruval:
28
+
29
+ $ ruval prog.rb
30
+ 'hola'
31
+ => hola
32
+ def good; ':)'; end
33
+ => good
34
+ def bad
35
+ ':('
36
+ end
37
+ => bad
38
+ class Person
39
+ attr_accessor :name, :mood
40
+
41
+ def initialize(name='bob')
42
+ @name='bob'
43
+ end
44
+ end
45
+ => initialize
46
+ person1 = Person.new
47
+ => #<Person:0x00000000010cfc50>
48
+ person1.name
49
+ => bob
50
+ person1.mood = bad
51
+ => :)
52
+ person1.mood
53
+ => :)
@@ -0,0 +1,14 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+ require 'rake/clean'
4
+
5
+ CLEAN.include ['**/.*.sw?', '**/*.gem', 'test/test.log']
6
+
7
+ task default: %i[test package]
8
+ task package: :clean
9
+
10
+ Rake::TestTask.new do |t|
11
+ t.libs << 'lib' << 'test'
12
+ t.test_files = FileList['test/**/*_test.rb']
13
+ t.warning = false
14
+ end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "ruval"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
4
+
5
+ require "ruval"
data/exe/rv ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
4
+
5
+ system("ruval #{ARGV.join(' ')}")
@@ -0,0 +1,96 @@
1
+ $LOAD_PATH.unshift __dir__
2
+
3
+ require "ruval/version"
4
+
5
+ module Ruval
6
+ class Error < StandardError; end
7
+ # Your code goes here...
8
+ end
9
+
10
+ #!/usr/bin/env -S ruby -W0
11
+ # vim: ft=ruby:syntax=ruby
12
+
13
+ DEFAULT_NEWLINES = 1
14
+ KEYWORDS_REGEX = /\b(?:class|module|def|if|do|end)\b/
15
+
16
+ def prog
17
+ File.basename $0
18
+ end
19
+
20
+ def help
21
+ puts <<~e
22
+ Usage: #{prog} <file> [option]
23
+ Print the value of statements in a file
24
+
25
+ Options:
26
+ -h, --help print this message
27
+ -n N line spacing between evaluations (non-negative value, default 1)
28
+ e
29
+ exit
30
+ end
31
+
32
+ class String
33
+ def remove_comments(padding)
34
+ # not a perfect regex but good enough to detect most comments. eg it wont work for lines like "fun('#not a comment')"
35
+ self.gsub(/ *#.*/, '').chop.ljust(padding) + ' # '
36
+ end
37
+ end
38
+
39
+ # true if line is a comment
40
+ def comment?(line)
41
+ line.strip[0] == '#'
42
+ end
43
+
44
+ if ARGV.empty? || (%w(-h --help) & ARGV).length > 0
45
+ help
46
+ end
47
+
48
+ file = ARGV.shift
49
+
50
+ if ARGV.include?('-n')
51
+ _, line_spacing = ARGV[ARGV.index('-n'),2]
52
+ line_spacing = line_spacing.to_i
53
+ end
54
+ line_spacing ||= DEFAULT_NEWLINES
55
+
56
+ if line_spacing < 0
57
+ puts "line_spacing cannot be negative"
58
+ exit
59
+ end
60
+
61
+ # get longest line
62
+ longest = 0
63
+ File.read(file).each_line do |l|
64
+ next if(comment?(l) || l.strip.empty?)
65
+ line_width = l.remove_comments(0).length
66
+ longest = line_width > longest ? line_width : longest
67
+ end
68
+
69
+ def update_scope(line, line_stack, scope)
70
+ keywords = line.scan(KEYWORDS_REGEX)
71
+ return if keywords.empty? && scope.empty?
72
+ line_stack << line
73
+ keywords.each do |kw|
74
+ unless kw == 'end'
75
+ scope.push kw
76
+ else
77
+ scope.pop
78
+ end
79
+ end
80
+ end
81
+
82
+ line_stack = []
83
+ scope = []
84
+
85
+ File.read(file).each_line do |l|
86
+ update_scope(l, line_stack, scope)
87
+ next if(comment?(l) || l.strip.empty? || !scope.empty?)
88
+ l = if line_stack.empty?
89
+ line_spacing == 0 ? l.remove_comments(longest) : l
90
+ else
91
+ line_stack.join
92
+ end
93
+ line_stack = []
94
+ puts l + "=> #{eval l, TOPLEVEL_BINDING}" + "\n"*line_spacing
95
+ end
96
+
@@ -0,0 +1,3 @@
1
+ module Ruval
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,29 @@
1
+ require_relative 'lib/ruval/version'
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "ruval"
5
+ spec.version = Ruval::VERSION
6
+ spec.authors = ["sergio"]
7
+ spec.email = ["yo@sergioro.com"]
8
+
9
+ spec.summary = %q{Print the value of every statement in a Ruby progam}
10
+ spec.description = %q{Print the value of every statement in a Ruby progam}
11
+ #spec.homepage = "TODO: Put your gem's website or public repo URL here."
12
+ spec.license = "MIT"
13
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
14
+
15
+ #spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
16
+
17
+ #spec.metadata["homepage_uri"] = spec.homepage
18
+ #spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
19
+ #spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
20
+
21
+ # Specify which files should be added to the gem when it is released.
22
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
23
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
24
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ end
26
+ spec.bindir = "exe"
27
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ["lib"]
29
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruval
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - sergio
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-01-17 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Print the value of every statement in a Ruby progam
14
+ email:
15
+ - yo@sergioro.com
16
+ executables:
17
+ - ruval
18
+ - rv
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - ".gitignore"
23
+ - ".travis.yml"
24
+ - Gemfile
25
+ - Gemfile.lock
26
+ - LICENSE.txt
27
+ - README.md
28
+ - Rakefile
29
+ - bin/console
30
+ - bin/setup
31
+ - exe/ruval
32
+ - exe/rv
33
+ - lib/ruval.rb
34
+ - lib/ruval/version.rb
35
+ - ruval.gemspec
36
+ homepage:
37
+ licenses:
38
+ - MIT
39
+ metadata: {}
40
+ post_install_message:
41
+ rdoc_options: []
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 2.3.0
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubygems_version: 3.1.4
56
+ signing_key:
57
+ specification_version: 4
58
+ summary: Print the value of every statement in a Ruby progam
59
+ test_files: []