sourcerer 0.5.0.pre.beta → 0.5.1

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,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