mkdynamic-miracle_extensions 0.1.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.
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,64 @@
1
+ module MiracleExtensions
2
+
3
+ VERSION = "1.0.0"
4
+
5
+ def self.sprinkle_the_magic!
6
+ ::Object.class_eval { include MiracleExtensions::Object }
7
+ ::Array.class_eval { include MiracleExtensions::Array }
8
+ end
9
+
10
+ module Object
11
+ alias_method :ivar_set, :instance_variable_set
12
+ alias_method :ivar_get, :instance_variable_get
13
+
14
+ def self.included(base)
15
+ base.extend(ClassMethods)
16
+ end
17
+
18
+ module ClassMethods
19
+ def boolean_attr_accessor(*names)
20
+ names.each do |name|
21
+ name = name.to_s
22
+ class_eval %{
23
+ def #{name}
24
+ @#{name} == true
25
+ end
26
+ alias_method :#{name}?, :#{name}
27
+
28
+ def #{name}=(v)
29
+ if v.is_a?(TrueClass) || v.is_a?(FalseClass)
30
+ @#{name} = v
31
+ elsif v.is_a? String
32
+ v = v.downcase.strip
33
+ @#{name} = (v == '1' || v == 'true')
34
+ elsif v.is_a? Integer
35
+ @#{name} = (v == 1)
36
+ else
37
+ raise "You must pass a boolean (true,false), or string ('1','0','true','false'), or integer (1,0)."
38
+ end
39
+ end
40
+ }
41
+ end
42
+ end
43
+ end
44
+ end
45
+
46
+ module Array
47
+ # from http://dev.castwide.com/news/28
48
+ def except(*exceptions)
49
+ result = self.clone
50
+ result.delete_if { |i| exceptions.include?(i) }
51
+ result
52
+ end
53
+ def except!(*exceptions)
54
+ self.delete_if { |i| exceptions.include?(i) }
55
+ self
56
+ end
57
+ def each_except(*exceptions)
58
+ self.each { |i| yield(i) if exceptions.include?(i) == false }
59
+ end
60
+ end
61
+
62
+ end
63
+
64
+ 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,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mkdynamic-miracle_extensions
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mark Dodwell
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-16 00:00:00 -07: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: false
29
+ homepage: http://github.com/mkdynamic/miracle_extensions
30
+ licenses:
31
+ post_install_message:
32
+ rdoc_options: []
33
+
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "0"
41
+ version:
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ version:
48
+ requirements: []
49
+
50
+ rubyforge_project:
51
+ rubygems_version: 1.3.5
52
+ signing_key:
53
+ specification_version: 2
54
+ summary: A bunch of useful Ruby extensions
55
+ test_files: []
56
+