bindless 1.0.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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ODU5YTA1NTIyMjUxZTM2Y2ViMTAzNDc0YTQ2ZTI2MDVlNWU4MGJiYw==
5
+ data.tar.gz: !binary |-
6
+ MTIzYTUyYTBlMzE0MDU5OTliN2Y0MmU0ZDE1MDcwOGI2NjM2Y2Q3Mg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ODFiYjljODU4MmE5ZjhjYTJlNjkwMzBkZjAxNjdkODRjNjQwN2Y4YTEzYWU4
10
+ M2M1YmE2YjFjODlmZWYyNmI2NjI0ODNlMzNjMTk2ZmNkYTYxMTllZjY1ZTEx
11
+ M2QxOGI5MDE4YzI4YzE2MjNiMWZhOTlmNzdhNGQ4NjFjNGM5NTA=
12
+ data.tar.gz: !binary |-
13
+ NzczMDJjZjUyNDJjMGU1ZWI0NzY0MjA0ZGEzMTBiOWQ4NzdhMzk0ZDIxMDhi
14
+ ZWVkOTQyNzUwNDZlYmQ0OTQxZjI3NjhhZTAyYjJhNzczNjliMzc5MjgwMDBi
15
+ Y2JhNWUzZjM5YjY0MjFjYmM2ODE2MGY5MWQ0N2VmYjM0YzhiNTQ=
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ bindless
2
+ ========
3
+
4
+ run ruby procs with different binds on the fly!
5
+
6
+ simple use
7
+
8
+ ```ruby
9
+
10
+ require "bindless"
11
+
12
+ test_proc= Proc.new{
13
+ self.hello_world
14
+ }
15
+
16
+ class Test
17
+
18
+ def self.hello_world
19
+ puts "hello world!"
20
+ end
21
+
22
+ def self.test_call proc_obj
23
+ proc_obj.call_with_binding(self.binding?)
24
+ end
25
+
26
+ end
27
+
28
+ Test.test_call test_proc
29
+ #> "hello world!"
30
+
31
+ ```
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require File.join "bundler","gem_tasks"
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
data/bindless.gemspec ADDED
@@ -0,0 +1,22 @@
1
+ # coding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__),"files.rb"))
4
+
5
+ ### Specification for the new Gem
6
+ Gem::Specification.new do |spec|
7
+
8
+ spec.name = "bindless"
9
+ spec.version = File.open(File.join(File.dirname(__FILE__),"VERSION")).read.split("\n")[0].chomp.gsub(' ','')
10
+ spec.authors = ["Adam Luzsi"]
11
+ spec.email = ["adamluzsi@gmail.com"]
12
+ spec.description = %q{Run any ruby procs with different binds on the fly!}
13
+ spec.summary = %q{run ruby procs with different binds on the fly!}
14
+ spec.homepage = "https://github.com/adamluzsi/asynchronous"
15
+ #spec.license = "MIT"
16
+
17
+ spec.files = SpecFiles
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ end
@@ -0,0 +1,20 @@
1
+ require_relative "../lib/bindless"
2
+
3
+ test_proc= Proc.new{
4
+ self.hello_world
5
+ }
6
+
7
+ class Test
8
+
9
+ def self.hello_world
10
+ puts "hello world!"
11
+ end
12
+
13
+ def self.test_call proc_obj
14
+ proc_obj.call_with_binding(self.binding?)
15
+ end
16
+
17
+ end
18
+
19
+ Test.test_call test_proc
20
+ #> "hello world!"
data/files.rb ADDED
@@ -0,0 +1,24 @@
1
+ ### Get Files from dir
2
+ begin
3
+
4
+ files_to_be_loaded = %w[version.rb]
5
+
6
+ SpecFiles= Array.new
7
+
8
+ Dir[File.expand_path(File.join(File.dirname(__FILE__),"**","*"))].sort.uniq.each do |one_file_name|
9
+ one_file_name = File.expand_path one_file_name
10
+ file_name = one_file_name[(File.expand_path(File.dirname(__FILE__)).to_s.length+1)..(one_file_name.length-1)]
11
+
12
+ if !one_file_name.include?("pkg")
13
+ if !File.directory? file_name
14
+ SpecFiles.push file_name
15
+ STDOUT.puts file_name if $DEBUG
16
+ if files_to_be_loaded.include? one_file_name.split(File::SEPARATOR).last
17
+ load one_file_name
18
+ end
19
+ end
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,59 @@
1
+ module Bindless
2
+ class Model
3
+
4
+ def initialize(bindings = [])
5
+ @bindings = bindings
6
+ end
7
+
8
+ def method_missing(m, *args)
9
+ @bindings.reverse_each do |bind|
10
+ begin
11
+ method = eval("method(%s)" % m.inspect, bind)
12
+ rescue NameError
13
+ else
14
+ return method.call(*args)
15
+ end
16
+ begin
17
+ value = eval(m.to_s, bind)
18
+ return value
19
+ rescue NameError
20
+ end
21
+ end
22
+ raise NoMethodError, "No such variable or method: %s" % m
23
+ end
24
+
25
+ def pop_binding
26
+ @bindings.pop
27
+ end
28
+
29
+ def push_binding(bind)
30
+ @bindings.push bind
31
+ end
32
+
33
+ def push_instance(obj)
34
+ @bindings.push obj.instance_eval { binding }
35
+ end
36
+
37
+ def push_hash(vars)
38
+ push_instance Struct.new(*vars.keys).new(*vars.values)
39
+ end
40
+
41
+ def get_binding
42
+ instance_eval { binding }
43
+ end
44
+
45
+ def run_proc(p, *args)
46
+ instance_exec(*args, &p)
47
+ end
48
+
49
+ def push_method(name, p, obj=nil)
50
+ x = Object.new
51
+ singleton = class << x; self; end
52
+ singleton.send(:define_method, name, lambda { |*args|
53
+ obj.instance_exec(*args, &p)
54
+ })
55
+ push_instance x
56
+ end
57
+
58
+ end
59
+ end
@@ -0,0 +1,10 @@
1
+ class Object
2
+
3
+ # return the object Binding
4
+ def binding?
5
+ return binding
6
+ end
7
+
8
+ alias :get_binding :binding?
9
+
10
+ end
@@ -0,0 +1,18 @@
1
+ class Proc
2
+
3
+ def call_with_binding(bind, *args)
4
+ Bindless::Model.new([bind]).run_proc(self, *args)
5
+ end
6
+
7
+ def call_with_obj(obj, *args)
8
+ m = nil
9
+ p = self
10
+ Object.class_eval do
11
+ define_method :a_temp_method_name, &p
12
+ m = instance_method :a_temp_method_name
13
+ remove_method :a_temp_method_name
14
+ end
15
+ m.bind(obj).call(*args)
16
+ end
17
+
18
+ end
data/lib/bindless.rb ADDED
@@ -0,0 +1,8 @@
1
+ #encoding: UTF-8
2
+ module Bindless
3
+
4
+ require File.join(File.dirname(__FILE__),"bindless","model")
5
+ require File.join(File.dirname(__FILE__),"bindless","proc")
6
+ require File.join(File.dirname(__FILE__),"bindless","object")
7
+
8
+ end
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bindless
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Adam Luzsi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Run any ruby procs with different binds on the fly!
14
+ email:
15
+ - adamluzsi@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - Gemfile
21
+ - README.md
22
+ - Rakefile
23
+ - VERSION
24
+ - bindless.gemspec
25
+ - examples/simple_use_case.rb
26
+ - files.rb
27
+ - lib/bindless.rb
28
+ - lib/bindless/model.rb
29
+ - lib/bindless/object.rb
30
+ - lib/bindless/proc.rb
31
+ homepage: https://github.com/adamluzsi/asynchronous
32
+ licenses: []
33
+ metadata: {}
34
+ post_install_message:
35
+ rdoc_options: []
36
+ require_paths:
37
+ - lib
38
+ required_ruby_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ required_rubygems_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ requirements: []
49
+ rubyforge_project:
50
+ rubygems_version: 2.2.1
51
+ signing_key:
52
+ specification_version: 4
53
+ summary: run ruby procs with different binds on the fly!
54
+ test_files: []
55
+ has_rdoc: