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