miracle_extensions 0.1.2
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.
- data/Rakefile +14 -0
- data/lib/miracle_extensions.rb +62 -0
- data/test/miracle_extensions_test.rb +69 -0
- metadata +57 -0
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
|
5
|
+
desc 'Default: run tests.'
|
6
|
+
task :default => :test
|
7
|
+
|
8
|
+
desc 'Test the plugin.'
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
10
|
+
t.libs << 'lib'
|
11
|
+
t.libs << 'test'
|
12
|
+
t.pattern = 'test/**/*_test.rb'
|
13
|
+
t.verbose = true
|
14
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module MiracleExtensions
|
2
|
+
|
3
|
+
def self.sprinkle_the_magic!
|
4
|
+
::Object.class_eval { include MiracleExtensions::Object }
|
5
|
+
::Array.class_eval { include MiracleExtensions::Array }
|
6
|
+
end
|
7
|
+
|
8
|
+
module Object
|
9
|
+
alias_method :ivar_set, :instance_variable_set
|
10
|
+
alias_method :ivar_get, :instance_variable_get
|
11
|
+
|
12
|
+
def self.included(base)
|
13
|
+
base.extend(ClassMethods)
|
14
|
+
end
|
15
|
+
|
16
|
+
module ClassMethods
|
17
|
+
def boolean_attr_accessor(*names)
|
18
|
+
names.each do |name|
|
19
|
+
name = name.to_s
|
20
|
+
class_eval %{
|
21
|
+
def #{name}
|
22
|
+
@#{name} == true
|
23
|
+
end
|
24
|
+
alias_method :#{name}?, :#{name}
|
25
|
+
|
26
|
+
def #{name}=(v)
|
27
|
+
if v.is_a?(TrueClass) || v.is_a?(FalseClass)
|
28
|
+
@#{name} = v
|
29
|
+
elsif v.is_a? String
|
30
|
+
v = v.downcase.strip
|
31
|
+
@#{name} = (v == '1' || v == 'true')
|
32
|
+
elsif v.is_a? Integer
|
33
|
+
@#{name} = (v == 1)
|
34
|
+
else
|
35
|
+
raise "You must pass a boolean (true,false), or string ('1','0','true','false'), or integer (1,0)."
|
36
|
+
end
|
37
|
+
end
|
38
|
+
}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
module Array
|
45
|
+
# from http://dev.castwide.com/news/28
|
46
|
+
def except(*exceptions)
|
47
|
+
result = self.clone
|
48
|
+
result.delete_if { |i| exceptions.include?(i) }
|
49
|
+
result
|
50
|
+
end
|
51
|
+
def except!(*exceptions)
|
52
|
+
self.delete_if { |i| exceptions.include?(i) }
|
53
|
+
self
|
54
|
+
end
|
55
|
+
def each_except(*exceptions)
|
56
|
+
self.each { |i| yield(i) if exceptions.include?(i) == false }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
MiracleExtensions::sprinkle_the_magic!
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'shoulda'
|
4
|
+
require 'miracle_extensions'
|
5
|
+
|
6
|
+
class MiracleExtensionsTest < Test::Unit::TestCase
|
7
|
+
context "instance variable getter/setter shortcuts" do
|
8
|
+
context "#ivar_set" do
|
9
|
+
setup do
|
10
|
+
@foo = Object.new
|
11
|
+
end
|
12
|
+
should "set instance variable" do
|
13
|
+
@foo.send(:ivar_set, '@bar', 'hello!')
|
14
|
+
assert_equal 'hello!', @foo.send(:instance_variable_get, '@bar')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "#ivar_get" do
|
19
|
+
setup do
|
20
|
+
@foo = Object.new
|
21
|
+
@foo.send(:instance_variable_set, '@bar', 'Hello')
|
22
|
+
end
|
23
|
+
should "get instance variable" do
|
24
|
+
assert_equal 'Hello', @foo.send(:ivar_get, '@bar')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "Object.boolean_attr_accessor :awesome" do
|
30
|
+
setup do
|
31
|
+
class Foo
|
32
|
+
boolean_attr_accessor :awesome
|
33
|
+
end
|
34
|
+
@foo = Foo.new
|
35
|
+
end
|
36
|
+
should "create a method called 'awesome'" do
|
37
|
+
assert_respond_to @foo, :awesome
|
38
|
+
end
|
39
|
+
should "create a method called 'awesome='" do
|
40
|
+
assert_respond_to @foo, :awesome=
|
41
|
+
end
|
42
|
+
should "create a method called 'awesome?'" do
|
43
|
+
assert_respond_to @foo, :awesome?
|
44
|
+
end
|
45
|
+
should "return false by default" do
|
46
|
+
assert_equal false, @foo.awesome
|
47
|
+
assert_equal false, @foo.awesome?
|
48
|
+
end
|
49
|
+
{ true => true, false => false, 'true' => true, 'false' => false, '0' => false, '1' => true, 0 => false, 1 => true }.each do |passed, expects|
|
50
|
+
context "when passed boolean #{passed.to_s} (#{passed.class.name})" do
|
51
|
+
setup { @foo.awesome = passed }
|
52
|
+
should "return #{expects.to_s} (#{expects.class.name})" do
|
53
|
+
assert_equal expects, @foo.awesome
|
54
|
+
assert_equal expects, @foo.awesome?
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
[3.142, Object.new, [1,2,3], { :my => 'shoe' }].each do |bad_value|
|
59
|
+
context "when passed a #{bad_value.class.name}" do
|
60
|
+
should "raise an exception" do
|
61
|
+
assert_raise RuntimeError do
|
62
|
+
@foo.awesome = bad_value
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
metadata
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: miracle_extensions
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mark Dodwell
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-12-18 00:00:00 +00:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: hi@mkdynamic.co.uk
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- Rakefile
|
26
|
+
- lib/miracle_extensions.rb
|
27
|
+
- test/miracle_extensions_test.rb
|
28
|
+
has_rdoc: true
|
29
|
+
homepage: http://github.com/mkdynamic/miracle_extensions
|
30
|
+
licenses: []
|
31
|
+
|
32
|
+
post_install_message:
|
33
|
+
rdoc_options: []
|
34
|
+
|
35
|
+
require_paths:
|
36
|
+
- lib
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: "0"
|
42
|
+
version:
|
43
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: "0"
|
48
|
+
version:
|
49
|
+
requirements: []
|
50
|
+
|
51
|
+
rubyforge_project:
|
52
|
+
rubygems_version: 1.3.5
|
53
|
+
signing_key:
|
54
|
+
specification_version: 3
|
55
|
+
summary: A bunch of useful Ruby extensions
|
56
|
+
test_files: []
|
57
|
+
|