discombobulator 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .ruby-version
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in discombobulator.gemspec
4
3
  gemspec
data/README.md CHANGED
@@ -1,29 +1,15 @@
1
1
  # Discombobulator
2
2
 
3
- TODO: Write a gem description
3
+ https://github.com/obrok/discombobulator
4
4
 
5
- ## Installation
5
+ Don't you hate seeing this in your face when working on your next $1,000,000,000 startup idea?
6
6
 
7
- Add this line to your application's Gemfile:
7
+ ```
8
+ NoMethodError: undefined method `+' for nil:NilClass
9
+ ```
8
10
 
9
- gem 'discombobulator'
11
+ Well fear no more, discombobulator is here to save the day!
10
12
 
11
- And then execute:
12
-
13
- $ bundle
14
-
15
- Or install it yourself as:
16
-
17
- $ gem install discombobulator
18
-
19
- ## Usage
20
-
21
- TODO: Write usage instructions here
22
-
23
- ## Contributing
24
-
25
- 1. Fork it ( http://github.com/<my-github-username>/discombobulator/fork )
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request
13
+ ```
14
+ gem 'discombobulator'
15
+ ```
@@ -1,15 +1,14 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'discombobulator/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
6
  spec.name = "discombobulator"
8
- spec.version = Discombobulator::VERSION
9
- spec.authors = ["Paweł Obrok"]
10
- spec.email = ["pawel.obrok@gmail.com"]
11
- spec.summary = %q{Discombobulates}
12
- spec.description = %q{Discombobulates}
7
+ spec.version = "0.1.0"
8
+ spec.authors = ["Paweł Obrok", "Norbert Wojtowicz"]
9
+ spec.email = ["pawel.obrok@gmail.com", "wojtowicz.norbert@gmail.com"]
10
+ spec.summary = "Discombobulate for the greater good!"
11
+ spec.description = spec.summary
13
12
  spec.homepage = ""
14
13
  spec.license = "MIT"
15
14
 
@@ -18,6 +17,6 @@ Gem::Specification.new do |spec|
18
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
18
  spec.require_paths = ["lib"]
20
19
 
21
- spec.add_development_dependency "bundler", "~> 1.5"
20
+ spec.add_development_dependency "bundler", ">= 1.3"
22
21
  spec.add_development_dependency "rake"
23
22
  end
@@ -1,5 +1,27 @@
1
- require "discombobulator/version"
1
+ $DISCOMBOBULATOR_SAFETY_FEATURE = 42
2
2
 
3
- module Discombobulator
4
- # Your code goes here...
3
+ class Discombobulator < BasicObject
5
4
  end
5
+
6
+ require "discombobulator/config"
7
+
8
+ class Discombobulator < BasicObject
9
+ def self.method_missing(meth, *args, &block)
10
+ self.new.method_missing(meth, *args, &block)
11
+ end
12
+
13
+ def method_missing(meth, *args, &block)
14
+ plugin = plugins.sample
15
+ plugin.call(meth, *args, &block)
16
+ end
17
+
18
+ private
19
+ def plugins
20
+ ::Discombobulator::Config.instance.plugins
21
+ end
22
+ end
23
+
24
+ require "discombobulator/dodge_attack"
25
+ require "discombobulator/super_call"
26
+ require "discombobulator/swap_globals"
27
+ require "discombobulator/super_polymorphic"
@@ -0,0 +1,13 @@
1
+ require "singleton"
2
+
3
+ class Discombobulator::Config
4
+ include Singleton
5
+
6
+ def add_plugin(plugin)
7
+ plugins << plugin
8
+ end
9
+
10
+ def plugins
11
+ @plugins ||= []
12
+ end
13
+ end
@@ -0,0 +1,8 @@
1
+ class Discombobulator::DodgeAttack
2
+ def self.call(meth, *args, &block)
3
+ puts "You made it this time!"
4
+ Discombobulator.new
5
+ end
6
+ end
7
+
8
+ Discombobulator::Config.instance.add_plugin(Discombobulator::DodgeAttack)
@@ -0,0 +1,26 @@
1
+ class Discombobulator::SuperCall
2
+ def self.call(meth, *args, &block)
3
+ self.new.call(meth, *args, &block)
4
+ end
5
+
6
+ def call(meth, *args, &block)
7
+ method = find_me_a_method(args.length)
8
+ if $DISCOMBOBULATOR_SAFETY_FEATURE == 42
9
+ p "CALLING: #{method.name} with #{args.inspect}"
10
+ else
11
+ method.call(*args, &block)
12
+ end
13
+ end
14
+
15
+ private
16
+ def find_me_a_method(arity)
17
+ ObjectSpace.each_object.to_a.shuffle.each do |obj|
18
+ obj.methods.shuffle.each do |name|
19
+ method = obj.method(name)
20
+ return method if method.arity == arity
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ Discombobulator::Config.instance.add_plugin(Discombobulator::SuperCall)
@@ -0,0 +1,31 @@
1
+ class Discombobulator::SuperPolymorphic
2
+ def self.call(meth, *args, &block)
3
+ self.new.call(meth, *args, &block)
4
+ end
5
+
6
+ def call(meth, *args, &block)
7
+ method = find_me_a_method(meth, args.length)
8
+ no_method_error(meth) unless method
9
+ if $DISCOMBOBULATOR_SAFETY_FEATURE == 42
10
+ p "Calling the BEST '##{method.name}' with #{args.inspect}"
11
+ else
12
+ method.call(*args, &block)
13
+ end
14
+ end
15
+
16
+ private
17
+ def no_method_error(name)
18
+ raise NoMethodError, "Dude, what have you been smoking? I could not find a single appropriate '#{name}' to call."
19
+ end
20
+
21
+ def find_me_a_method(name, arity)
22
+ name = name.to_sym
23
+ ObjectSpace.each_object.to_a.shuffle.each do |obj|
24
+ method = obj.method(name) rescue nil
25
+ return method if method && method.arity == arity
26
+ end
27
+ nil
28
+ end
29
+ end
30
+
31
+ Discombobulator::Config.instance.add_plugin(Discombobulator::SuperPolymorphic)
@@ -0,0 +1,30 @@
1
+ class Discombobulator::SwapGlobals
2
+ def self.call(meth, *args, &block)
3
+ self.new.call(meth, *args, &block)
4
+ end
5
+
6
+ def call(meth, *args, &block)
7
+ name1, name2 = global_variables.shuffle.take(2)
8
+ val1, val2 = get_global(name1), get_global(name2)
9
+ set_global(name1, val2)
10
+ set_global(name2, val1)
11
+ Discombobulator.new
12
+ rescue NameError, SyntaxError, TypeError, ArgumentError
13
+ retry
14
+ end
15
+
16
+ private
17
+ def get_global(name)
18
+ eval(name.to_s)
19
+ end
20
+
21
+ def set_global(name, value)
22
+ if $DISCOMBOBULATOR_SAFETY_FEATURE == 42
23
+ puts "Setting global #{name} to #{value.inspect}"
24
+ else
25
+ eval("#{name} = value")
26
+ end
27
+ end
28
+ end
29
+
30
+ Discombobulator::Config.instance.add_plugin(Discombobulator::SwapGlobals)
metadata CHANGED
@@ -1,81 +1,93 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: discombobulator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Paweł Obrok
9
+ - Norbert Wojtowicz
8
10
  autorequire:
9
11
  bindir: bin
10
12
  cert_chain: []
11
- date: 2014-03-20 00:00:00.000000000 Z
13
+ date: 2014-03-21 00:00:00.000000000 Z
12
14
  dependencies:
13
15
  - !ruby/object:Gem::Dependency
14
16
  name: bundler
15
17
  requirement: !ruby/object:Gem::Requirement
18
+ none: false
16
19
  requirements:
17
- - - "~>"
20
+ - - ! '>='
18
21
  - !ruby/object:Gem::Version
19
- version: '1.5'
22
+ version: '1.3'
20
23
  type: :development
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
23
27
  requirements:
24
- - - "~>"
28
+ - - ! '>='
25
29
  - !ruby/object:Gem::Version
26
- version: '1.5'
30
+ version: '1.3'
27
31
  - !ruby/object:Gem::Dependency
28
32
  name: rake
29
33
  requirement: !ruby/object:Gem::Requirement
34
+ none: false
30
35
  requirements:
31
- - - ">="
36
+ - - ! '>='
32
37
  - !ruby/object:Gem::Version
33
38
  version: '0'
34
39
  type: :development
35
40
  prerelease: false
36
41
  version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
37
43
  requirements:
38
- - - ">="
44
+ - - ! '>='
39
45
  - !ruby/object:Gem::Version
40
46
  version: '0'
41
- description: Discombobulates
47
+ description: Discombobulate for the greater good!
42
48
  email:
43
49
  - pawel.obrok@gmail.com
50
+ - wojtowicz.norbert@gmail.com
44
51
  executables: []
45
52
  extensions: []
46
53
  extra_rdoc_files: []
47
54
  files:
48
- - ".gitignore"
55
+ - .gitignore
49
56
  - Gemfile
50
57
  - LICENSE.txt
51
58
  - README.md
52
59
  - Rakefile
53
60
  - discombobulator.gemspec
54
61
  - lib/discombobulator.rb
55
- - lib/discombobulator/version.rb
62
+ - lib/discombobulator/config.rb
63
+ - lib/discombobulator/dodge_attack.rb
64
+ - lib/discombobulator/super_call.rb
65
+ - lib/discombobulator/super_polymorphic.rb
66
+ - lib/discombobulator/swap_globals.rb
56
67
  homepage: ''
57
68
  licenses:
58
69
  - MIT
59
- metadata: {}
60
70
  post_install_message:
61
71
  rdoc_options: []
62
72
  require_paths:
63
73
  - lib
64
74
  required_ruby_version: !ruby/object:Gem::Requirement
75
+ none: false
65
76
  requirements:
66
- - - ">="
77
+ - - ! '>='
67
78
  - !ruby/object:Gem::Version
68
79
  version: '0'
69
80
  required_rubygems_version: !ruby/object:Gem::Requirement
81
+ none: false
70
82
  requirements:
71
- - - ">="
83
+ - - ! '>='
72
84
  - !ruby/object:Gem::Version
73
85
  version: '0'
74
86
  requirements: []
75
87
  rubyforge_project:
76
- rubygems_version: 2.2.2
88
+ rubygems_version: 1.8.23
77
89
  signing_key:
78
- specification_version: 4
79
- summary: Discombobulates
90
+ specification_version: 3
91
+ summary: Discombobulate for the greater good!
80
92
  test_files: []
81
93
  has_rdoc:
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 292f2727f036a4a2e0dad0f1b5e3ad7238cf1869
4
- data.tar.gz: 4e1307be7319c248b4645203b53dd6438a710e3b
5
- SHA512:
6
- metadata.gz: 1ae63167877604bd681fad51ebae966f8f820663e91bbf4b7b7503b4040c79c087a3d78bf329ee64c088d393e4361dfbd8c631346558fad5590c6078de9c90de
7
- data.tar.gz: 251f5940643fd1e0555a727723862182ee4eed89b8307c53c25fda75e244872207995a05431e9970b43f36d6c88ce450a48d1f68d2baae0fc22801d3b480d355
@@ -1,3 +0,0 @@
1
- module Discombobulator
2
- VERSION = "0.0.1"
3
- end