sourcerer 0.5.0.pre.beta → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/VERSION +1 -1
- data/examples/simple_test.rb +29 -0
- data/lib/sourcerer.rb +6 -3
- data/lib/sourcerer/cache.rb +13 -0
- data/lib/sourcerer/file.rb +6 -2
- data/lib/sourcerer/helpers.rb +44 -0
- data/lib/sourcerer/method.rb +2 -56
- data/lib/sourcerer/proc.rb +3 -34
- data/lib/sourcerer/proc_source.rb +1 -2
- data/lib/sourcerer/proc_source_body.rb +1 -1
- data/lib/sourcerer/source_code.rb +53 -0
- metadata +8 -5
- data/lib/sourcerer/string.rb +0 -25
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YjI0ODg5YWM2NzMwODFiNmY5MDAwYTEzYWJjMGQyNjg4YTQ2N2Q0Ng==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YzQ3Mzk4YzVhMTMwYTVmZjI2NzExYTk1YWRmZWRkODA4NDhkZjg5OA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZDQwYTkwMzI2MThjYzEzMjIwODcwZDNjMmVjZTNmNDUzNjFiNTVjMmE3NDBk
|
10
|
+
NzQ4N2Q0MGZjMDcxYzE0NjBhNzZjYTE4NTM5NzdiOTc3MTgyZjJiMTZmN2Y2
|
11
|
+
NmUyZTBkYmY4MjRkNDc1ZThjZDIzNmUxNjVmOWUzMjg1MDUyZmI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YzI4M2ZlOWZhM2FlM2QzNWIzNmM0YTI2MDZiMDllZDUzNGFmOTEwYjQ4MGQ2
|
14
|
+
NmU1NTg2MGQwNGI1MDYzNDQ5Y2I4OGYxOWU0NTkzZjNiNTAyNjMxNGMyNzlj
|
15
|
+
MzYxN2VjMTU1MTQ1NjQxZGFhYTU1ZWRkYjczNDBkYThhMWU5MTM=
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.1
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative "../lib/sourcerer.rb"
|
2
|
+
|
3
|
+
test= Proc.new do |sym,options={},*params,&block|
|
4
|
+
|
5
|
+
puts "some awsome code here" # comment
|
6
|
+
puts "yo"
|
7
|
+
|
8
|
+
end # Proc
|
9
|
+
|
10
|
+
#puts method(:hello_this).source
|
11
|
+
#puts test.source
|
12
|
+
|
13
|
+
def hello sym,sym2= "#{sym}", options={},*params,&block # the params
|
14
|
+
|
15
|
+
[1,2,3].each do |do_|
|
16
|
+
|
17
|
+
puts do_ # comment
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
puts "some code" # some comment
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
require 'debugger'
|
26
|
+
#debugger
|
27
|
+
|
28
|
+
#TODO finish up method reader
|
29
|
+
puts method(:hello).source
|
data/lib/sourcerer.rb
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
#encoding: UTF-8
|
2
2
|
module Sourcerer
|
3
3
|
|
4
|
+
require File.join(File.dirname(__FILE__),"sourcerer","helpers")
|
5
|
+
require File.join(File.dirname(__FILE__),"sourcerer","cache")
|
6
|
+
|
7
|
+
require File.join(File.dirname(__FILE__),"sourcerer","source_code")
|
8
|
+
require File.join(File.dirname(__FILE__),"sourcerer","file")
|
9
|
+
|
4
10
|
require File.join(File.dirname(__FILE__),"sourcerer","proc_source")
|
5
11
|
require File.join(File.dirname(__FILE__),"sourcerer","proc_source_body")
|
6
12
|
require File.join(File.dirname(__FILE__),"sourcerer","proc_source_params")
|
7
13
|
|
8
|
-
require File.join(File.dirname(__FILE__),"sourcerer","string")
|
9
|
-
require File.join(File.dirname(__FILE__),"sourcerer","file")
|
10
|
-
|
11
14
|
require File.join(File.dirname(__FILE__),"sourcerer","method")
|
12
15
|
require File.join(File.dirname(__FILE__),"sourcerer","proc")
|
13
16
|
|
data/lib/sourcerer/file.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
class File
|
1
|
+
class SourceFile < File
|
2
2
|
|
3
3
|
# start read the file object on each line
|
4
4
|
# optionable an integer value to start read line at
|
@@ -8,9 +8,13 @@ class File
|
|
8
8
|
raise ArgumentError, "invalid line index"
|
9
9
|
end
|
10
10
|
begin
|
11
|
+
|
11
12
|
line_num= 1
|
12
13
|
text= self.read
|
13
14
|
text.gsub!(/\r\n?/, "\n")
|
15
|
+
text.gsub!(';',"\n")
|
16
|
+
text.gsub!(/\bdo\b/,'{')
|
17
|
+
text.gsub!(/\bend\b/,'}')
|
14
18
|
text.each_line do |*line|
|
15
19
|
if line_num >= start_at
|
16
20
|
block.call *line
|
@@ -20,4 +24,4 @@ class File
|
|
20
24
|
end
|
21
25
|
end
|
22
26
|
|
23
|
-
end
|
27
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Sourcerer
|
2
|
+
class << self
|
3
|
+
|
4
|
+
def raw_source obj
|
5
|
+
|
6
|
+
# default values
|
7
|
+
begin
|
8
|
+
block = 0
|
9
|
+
return_string = ProcSource.new
|
10
|
+
end
|
11
|
+
|
12
|
+
case RUBY_VERSION
|
13
|
+
|
14
|
+
when "1.9.3"
|
15
|
+
begin
|
16
|
+
|
17
|
+
if obj.source_location.nil?
|
18
|
+
puts "WARN: Native Ruby 1.9.3 can't return sourceless code sources"
|
19
|
+
return "Proc.new { }"
|
20
|
+
end
|
21
|
+
|
22
|
+
SourceFile.open(File.expand_path(obj.source_location[0])
|
23
|
+
).each_line_from obj.source_location[1] do |line|
|
24
|
+
line = SourceCode.new(line)
|
25
|
+
block += line.source_formater_for_line_sub
|
26
|
+
return_string.concat(line)
|
27
|
+
break if block == 0
|
28
|
+
end
|
29
|
+
|
30
|
+
return return_string
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
return nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def cache
|
40
|
+
Cache
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
data/lib/sourcerer/method.rb
CHANGED
@@ -1,73 +1,19 @@
|
|
1
1
|
module Sourcerer
|
2
|
-
|
3
2
|
module MethodDSL
|
4
3
|
|
5
|
-
|
6
4
|
# creatue a raw eval-able process source, so you can set
|
7
5
|
# the right bindings using the .to_proc call from String methods
|
8
6
|
def source
|
9
7
|
|
10
|
-
|
11
|
-
|
12
|
-
return_string= Sourcerer::ProcSource.new
|
13
|
-
block= 0
|
14
|
-
end
|
15
|
-
|
16
|
-
unless Sourcerer::ProcSource.source_cache[self.inspect].nil?
|
17
|
-
return Sourcerer::ProcSource.source_cache[self.inspect]
|
18
|
-
else
|
19
|
-
|
20
|
-
if self.source_location.nil?
|
21
|
-
return nil
|
22
|
-
end
|
23
|
-
|
24
|
-
File.open(File.expand_path(self.source_location[0])
|
25
|
-
).each_line_from self.source_location[1] do |line|
|
26
|
-
block += line.source_formater_for_line_sub
|
27
|
-
return_string.concat(line)
|
28
|
-
break if block == 0
|
29
|
-
end
|
30
|
-
|
31
|
-
begin
|
32
|
-
|
33
|
-
if return_string.split("\n")[0].include? '('
|
34
|
-
return_string.sub!('(',' ')
|
35
|
-
return_string.sub!(')',' ')
|
36
|
-
end
|
37
|
-
|
38
|
-
args_to_replace = return_string.split("\n")[0].match(/\s*def\s*\S*\s*(.*)/).captures[0]
|
8
|
+
return_string= Sourcerer.raw_source(self).convert_from_method!
|
9
|
+
return return_string
|
39
10
|
|
40
|
-
if args_to_replace != String.new
|
41
|
-
return_string.sub!(args_to_replace,"|#{args_to_replace}|")
|
42
|
-
end
|
43
|
-
|
44
|
-
rescue TypeError,NoMethodError
|
45
|
-
return nil
|
46
|
-
end
|
47
|
-
|
48
|
-
return_string.sub!(/\s*\bdef\s*[\w\S]*/,'Proc.new{')
|
49
|
-
return_string.sub!(/}[^}]*$/,"}")
|
50
|
-
|
51
|
-
if !return_string.include?('Proc.new')
|
52
|
-
return_string.sub!(/^[^{]*(?!={)/,'Proc.new')
|
53
|
-
end
|
54
|
-
|
55
|
-
if !self.source_location.nil?
|
56
|
-
Sourcerer::ProcSource.source_cache[self.inspect]= return_string
|
57
|
-
end
|
58
|
-
|
59
|
-
return return_string
|
60
|
-
end
|
61
11
|
end
|
62
|
-
|
63
12
|
alias :source_string :source
|
64
|
-
alias :proc_source :source
|
65
13
|
|
66
14
|
end
|
67
|
-
|
68
15
|
end
|
69
16
|
|
70
|
-
|
71
17
|
class Method
|
72
18
|
include Sourcerer::MethodDSL
|
73
19
|
end
|
data/lib/sourcerer/proc.rb
CHANGED
@@ -2,42 +2,11 @@ class Proc
|
|
2
2
|
|
3
3
|
# create a raw eval-able process source, so you can set
|
4
4
|
# the right bindings using the .to_proc call from String methods
|
5
|
-
def source
|
5
|
+
def source # trim_comment= true
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
return_string= Sourcerer::ProcSource.new
|
10
|
-
block= 0
|
11
|
-
end
|
7
|
+
return_string= Sourcerer.raw_source(self).convert_from_proc!
|
8
|
+
return return_string
|
12
9
|
|
13
|
-
unless Sourcerer::ProcSource.source_cache[self.inspect].nil?
|
14
|
-
return Sourcerer::ProcSource.source_cache[self.inspect]
|
15
|
-
else
|
16
|
-
|
17
|
-
if self.source_location.nil?
|
18
|
-
return "Proc.new { }"
|
19
|
-
end
|
20
|
-
|
21
|
-
File.open(File.expand_path(self.source_location[0])
|
22
|
-
).each_line_from self.source_location[1] do |line|
|
23
|
-
block += line.source_formater_for_line_sub
|
24
|
-
return_string.concat(line)
|
25
|
-
break if block == 0
|
26
|
-
end
|
27
|
-
|
28
|
-
return_string.sub!(/^[\w\W]*Proc.new\s*{/,'Proc.new{')
|
29
|
-
return_string.sub!(/}[^}]*$/,"}")
|
30
|
-
|
31
|
-
if !return_string.include?('Proc.new')
|
32
|
-
return_string.sub!(/^[^{]*(?!={)/,'Proc.new')
|
33
|
-
end
|
34
|
-
|
35
|
-
if !self.source_location.nil?
|
36
|
-
Sourcerer::ProcSource.source_cache[self.inspect]= return_string
|
37
|
-
end
|
38
|
-
|
39
|
-
return return_string
|
40
|
-
end
|
41
10
|
end
|
42
11
|
alias :source_string :source
|
43
12
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Sourcerer
|
2
|
-
class ProcSource <
|
2
|
+
class ProcSource < SourceCode
|
3
3
|
|
4
4
|
class << self
|
5
5
|
attr_accessor :source_cache
|
@@ -8,7 +8,6 @@ module Sourcerer
|
|
8
8
|
self.source_cache= Hash.new
|
9
9
|
self.eval_keys= Array.new
|
10
10
|
|
11
|
-
|
12
11
|
def self.build(source_code_to_be_wrappered,*params_obj_array)
|
13
12
|
self.new(source_code_to_be_wrappered).wrapper_around!(*params_obj_array)
|
14
13
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Sourcerer
|
2
|
+
class SourceCode < String
|
3
|
+
|
4
|
+
# return the number how often the str is with in the self
|
5
|
+
# by default with \b regex border
|
6
|
+
def frequency(str)
|
7
|
+
begin
|
8
|
+
if str.class == String
|
9
|
+
str= '\b'+str+'\b'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
self.scan(/#{str}/).count
|
13
|
+
end
|
14
|
+
|
15
|
+
# this is a helper to create source strings from procs
|
16
|
+
def source_formater_for_line_sub trim_comment_out= true
|
17
|
+
|
18
|
+
if trim_comment_out == true
|
19
|
+
trim_comment= self.match(/^.*#/)
|
20
|
+
unless trim_comment.nil?
|
21
|
+
self.replace trim_comment[0][0..(trim_comment[0].length-2)].concat("\n")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
self.frequency(/{/)+
|
26
|
+
self.frequency(/def/)-
|
27
|
+
self.frequency(/}/)
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
def convert_from_proc!
|
32
|
+
|
33
|
+
self.sub!(/^[\w =]*Proc.new\s*{ */,'Proc.new { ')
|
34
|
+
|
35
|
+
return self
|
36
|
+
end
|
37
|
+
|
38
|
+
def convert_from_method!
|
39
|
+
|
40
|
+
#self.sub!
|
41
|
+
the_params= self.scan(/ *def *[\w]*[\( ] *(.*)/)[0][0]
|
42
|
+
puts the_params.inspect
|
43
|
+
|
44
|
+
self.sub!(
|
45
|
+
self.split("\n")[0],
|
46
|
+
"Proc.new { |#{the_params}|"
|
47
|
+
)
|
48
|
+
|
49
|
+
return self
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sourcerer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Luzsi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: ! ' DSL for for simple to use proc source generating from methods, unbound
|
14
14
|
methods and of course Proc/lambda. It will allow you to play with the source or
|
@@ -26,16 +26,19 @@ files:
|
|
26
26
|
- Rakefile
|
27
27
|
- VERSION
|
28
28
|
- examples/fun_with_procs_and_methods.rb
|
29
|
+
- examples/simple_test.rb
|
29
30
|
- files.rb
|
30
31
|
- lib/source.rb
|
31
32
|
- lib/sourcerer.rb
|
33
|
+
- lib/sourcerer/cache.rb
|
32
34
|
- lib/sourcerer/file.rb
|
35
|
+
- lib/sourcerer/helpers.rb
|
33
36
|
- lib/sourcerer/method.rb
|
34
37
|
- lib/sourcerer/proc.rb
|
35
38
|
- lib/sourcerer/proc_source.rb
|
36
39
|
- lib/sourcerer/proc_source_body.rb
|
37
40
|
- lib/sourcerer/proc_source_params.rb
|
38
|
-
- lib/sourcerer/
|
41
|
+
- lib/sourcerer/source_code.rb
|
39
42
|
- sourcerer.gemspec
|
40
43
|
- test/test.rb
|
41
44
|
homepage: https://github.com/adamluzsi/sourcerer
|
@@ -53,9 +56,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
53
56
|
version: '0'
|
54
57
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
58
|
requirements:
|
56
|
-
- - ! '
|
59
|
+
- - ! '>='
|
57
60
|
- !ruby/object:Gem::Version
|
58
|
-
version:
|
61
|
+
version: '0'
|
59
62
|
requirements: []
|
60
63
|
rubyforge_project:
|
61
64
|
rubygems_version: 2.2.1
|
data/lib/sourcerer/string.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
class String
|
2
|
-
|
3
|
-
# return the number how often the str is with in the self
|
4
|
-
# by default with \b regex border
|
5
|
-
def frequency(str)
|
6
|
-
begin
|
7
|
-
if str.class == String
|
8
|
-
str= '\b'+str+'\b'
|
9
|
-
end
|
10
|
-
end
|
11
|
-
self.scan(/#{str}/).count
|
12
|
-
end
|
13
|
-
|
14
|
-
# this is a helper to create source strings from procs
|
15
|
-
def source_formater_for_line_sub
|
16
|
-
self.gsub!(';',"\n")
|
17
|
-
self.gsub!(/\bdo\b/,'{')
|
18
|
-
self.gsub!(/\bend\b/,'}')
|
19
|
-
|
20
|
-
self.frequency(/{/)+
|
21
|
-
self.frequency(/def/)-
|
22
|
-
self.frequency(/}/)
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|