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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MzY4ZWNjZDY5OWY5NzM0MDFmNzZmMjQ4ODA5MDY4YjM1Mzg1ODhiMQ==
4
+ YjI0ODg5YWM2NzMwODFiNmY5MDAwYTEzYWJjMGQyNjg4YTQ2N2Q0Ng==
5
5
  data.tar.gz: !binary |-
6
- ODZkMTk1Zjg1NWRlY2RkOTA0ZmE0ZDljMDg3MjRjZDYzZTQ4N2VmOA==
6
+ YzQ3Mzk4YzVhMTMwYTVmZjI2NzExYTk1YWRmZWRkODA4NDhkZjg5OA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YzkxNTJlOWM0MTRjN2MwY2FhNGU4NmU5NGFlMzMzNmYxZjhiNjk2MWI1ZGU1
10
- MGJkNTk0MTdlMWYyMzg3NTIwYzkwODBhMjNhNWRiZGQxZGM0MDQ0YmM4ZjJm
11
- MTJkMTkyYTNiNDUyZTgyYTYyZGNjMTAzMzZlZmEwNTIwYmQxNjg=
9
+ ZDQwYTkwMzI2MThjYzEzMjIwODcwZDNjMmVjZTNmNDUzNjFiNTVjMmE3NDBk
10
+ NzQ4N2Q0MGZjMDcxYzE0NjBhNzZjYTE4NTM5NzdiOTc3MTgyZjJiMTZmN2Y2
11
+ NmUyZTBkYmY4MjRkNDc1ZThjZDIzNmUxNjVmOWUzMjg1MDUyZmI=
12
12
  data.tar.gz: !binary |-
13
- YjJjNjlkYWViMjE5MGRhZTkwNTA3MDk5MTY5ZjliNzEyNGQ3YTdhMzIwOTQ5
14
- MGE1NGJkMTE0NzFkN2JkMTc0YmQ3ZmFiMWU5YWZiOWIwNjYxNWU0MDAyNzJk
15
- NjcyZmEzMDUyNzQ3NWU1M2NlYjEzZTBjODQ4MWQzOTAwNDFlNDY=
13
+ YzI4M2ZlOWZhM2FlM2QzNWIzNmM0YTI2MDZiMDllZDUzNGFmOTEwYjQ4MGQ2
14
+ NmU1NTg2MGQwNGI1MDYzNDQ5Y2I4OGYxOWU0NTkzZjNiNTAyNjMxNGMyNzlj
15
+ MzYxN2VjMTU1MTQ1NjQxZGFhYTU1ZWRkYjczNDBkYThhMWU5MTM=
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0-beta
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
@@ -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
 
@@ -0,0 +1,13 @@
1
+ module Sourcerer
2
+
3
+ require 'singleton'
4
+ class Cache
5
+
6
+ include Singleton
7
+ @@memory= []
8
+
9
+
10
+
11
+ end
12
+
13
+ end
@@ -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
@@ -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
- # defaults
11
- begin
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
@@ -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
- # defaults
8
- begin
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 < String
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
@@ -1,5 +1,5 @@
1
1
  module Sourcerer
2
- class ProcSourceBody < String
2
+ class ProcSourceBody < SourceCode
3
3
 
4
4
  def +(oth_str)
5
5
  ProcSourceBody.new(self.dup.concat("\n").concat(oth_str.to_s))
@@ -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.0.pre.beta
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-25 00:00:00.000000000 Z
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/string.rb
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: 1.3.1
61
+ version: '0'
59
62
  requirements: []
60
63
  rubyforge_project:
61
64
  rubygems_version: 2.2.1
@@ -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