attribute_predicates 0.1.0 → 0.1.1

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/CHANGELOG.rdoc CHANGED
@@ -1,5 +1,9 @@
1
1
  == master
2
2
 
3
+ == 0.1.1 / 2008-07-06
4
+
5
+ * Remove dependency on active_support for non-ActiveRecord predicates
6
+
3
7
  == 0.1.0 / 2008-07-03
4
8
 
5
9
  * Rename to attribute_predicates
data/README.rdoc CHANGED
@@ -70,7 +70,7 @@ is equivalent to:
70
70
 
71
71
  ==== attr_reader
72
72
 
73
- This method is equivalent to calling <tt>battr(symbol, false)</tt> on each symbol in
73
+ This method is equivalent to calling <tt>attr(symbol, false)</tt> on each symbol in
74
74
  turn. For example,
75
75
 
76
76
  module Mod
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'rake/contrib/sshpublisher'
5
5
 
6
6
  spec = Gem::Specification.new do |s|
7
7
  s.name = 'attribute_predicates'
8
- s.version = '0.1.0'
8
+ s.version = '0.1.1'
9
9
  s.platform = Gem::Platform::RUBY
10
10
  s.summary = 'Adds automatic generation of predicate methods for attributes.'
11
11
 
@@ -1,22 +1,53 @@
1
1
  module PluginAWeek #:nodoc:
2
2
  module AttributePredicates
3
- module ActiveRecord
4
- private
5
- # For Strings, returns true when value is:
6
- # * "true"
7
- # * "t"
8
- #
9
- # For Integers, returns true when value is:
10
- # * 1
11
- def attr_predicate(symbol)
12
- define_method("#{symbol}?") do
13
- ::ActiveRecord::ConnectionAdapters::Column.value_to_boolean(instance_variable_get("@#{symbol}"))
3
+ module Extensions
4
+ # Adds support for automatically defining predicate methods using +attr_predicate+
5
+ # when defining attributes using +attr+, +attr_reader+, +attr_reader+, and
6
+ # +attr_accessor+. In comparison to normal Ruby attributes, ActiveRecord
7
+ # predicates use a different system for defining true/false.
8
+ #
9
+ # == Examples
10
+ #
11
+ # The predicate methods for attributes use ActiveRecord's type conversion
12
+ # for booleans for determing whether to return true or false. For example,
13
+ #
14
+ # class Person < ActiveRecord::Base
15
+ # attr_accessor :value
16
+ # end
17
+ #
18
+ # p = Person.new
19
+ # p.value = false
20
+ # p.value? # => false
21
+ #
22
+ # p.value = 'false'
23
+ # p.value? # => false
24
+ #
25
+ # p.value = 'true'
26
+ # p.value? # => true
27
+ #
28
+ # p.value = 't'
29
+ # p.value? # => true
30
+ #
31
+ # p.value = 1
32
+ # p.value? # => true
33
+ module ActiveRecord
34
+ private
35
+ # For Strings, returns true when value is:
36
+ # * "true"
37
+ # * "t"
38
+ #
39
+ # For Integers, returns true when value is:
40
+ # * 1
41
+ def attr_predicate(symbol)
42
+ define_method("#{symbol}?") do
43
+ ::ActiveRecord::ConnectionAdapters::Column.value_to_boolean(instance_variable_get("@#{symbol}"))
44
+ end
14
45
  end
15
- end
46
+ end
16
47
  end
17
48
  end
18
49
  end
19
50
 
20
51
  ActiveRecord::Base.class_eval do
21
- extend PluginAWeek::AttributePredicates::ActiveRecord
52
+ extend PluginAWeek::AttributePredicates::Extensions::ActiveRecord
22
53
  end if defined?(ActiveRecord)
@@ -1,37 +1,81 @@
1
1
  module PluginAWeek #:nodoc:
2
2
  module AttributePredicates
3
- module Module
4
- def self.included(base) #:nodoc:
5
- base.class_eval do
6
- [:attr, :attr_reader, :attr_writer, :attr_accessor].each do |method|
7
- alias_method_chain method, :predicates
3
+ module Extensions
4
+ # Adds support for automatically defining predicate methods using +attr_predicate+
5
+ # when defining attributes using +attr+, +attr_reader+, +attr_reader+, and
6
+ # +attr_accessor+.
7
+ #
8
+ # == Examples
9
+ #
10
+ # The predicate methods for attributes checks whether the value is blank?
11
+ # for determining whether true or false should be returned. For example,
12
+ #
13
+ # class Person
14
+ # attr_accessor :value
15
+ # end
16
+ #
17
+ # p = Person.new
18
+ # p.value = false
19
+ # p.value? # => false
20
+ #
21
+ # p.value = true
22
+ # p.value? # => true
23
+ #
24
+ # p.value = []
25
+ # p.value? # => false
26
+ #
27
+ # p.value = [false]
28
+ # p.value? # => true
29
+ module Module
30
+ def self.included(base) #:nodoc:
31
+ base.class_eval do
32
+ %w(attr attr_reader attr_writer attr_accessor).each do |method|
33
+ alias_method "#{method}_without_predicates", method
34
+ alias_method method, "#{method}_with_predicates"
35
+ end
8
36
  end
9
37
  end
10
- end
11
-
12
- def attr_with_predicates(*args) #:nodoc:
13
- attr_without_predicates(*args)
14
- attr_predicate(args.first)
15
- end
16
-
17
- [:attr_reader, :attr_writer, :attr_accessor].each do |method|
18
- define_method("#{method}_with_predicates") do |*symbols|
19
- send("#{method}_without_predicates", *symbols)
20
- symbols.each {|symbol| attr_predicate(symbol)}
38
+
39
+ # Defines a predicate method, using +attr_predicate+, in addition to the
40
+ # attribute accessors. For example,
41
+ #
42
+ # module Mod
43
+ # attr :is_okay
44
+ # end
45
+ #
46
+ # Mod.instance-methods.sort # => ["is_okay", "is_okay?"]
47
+ def attr_with_predicates(*args)
48
+ attr_without_predicates(*args)
49
+ attr_predicate(args.first)
21
50
  end
22
- end
23
-
24
- private
25
- # Returns true if the specified variable is not blank, otherwise false
26
- def attr_predicate(symbol)
27
- define_method("#{symbol}?") do
28
- !instance_variable_get("@#{symbol}").blank?
51
+
52
+ [:attr_reader, :attr_writer, :attr_accessor].each do |method|
53
+ define_method("#{method}_with_predicates") do |*symbols|
54
+ send("#{method}_without_predicates", *symbols)
55
+ symbols.each {|symbol| attr_predicate(symbol)}
29
56
  end
30
57
  end
58
+
59
+ private
60
+ # Returns true if the specified variable is not blank, otherwise false
61
+ def attr_predicate(symbol)
62
+ define_method("#{symbol}?") do
63
+ value = instance_variable_get("@#{symbol}")
64
+ if value.respond_to?(:blank?)
65
+ # Use ActiveSupport's implementation
66
+ !value.blank?
67
+ elsif value.respond_to?(:empty?)
68
+ !value.empty?
69
+ else
70
+ !!value
71
+ end
72
+ end
73
+ end
74
+ end
31
75
  end
32
76
  end
33
77
  end
34
78
 
35
79
  ::Module.class_eval do
36
- include PluginAWeek::AttributePredicates::Module
80
+ include PluginAWeek::AttributePredicates::Extensions::Module
37
81
  end
data/test/module_test.rb CHANGED
@@ -15,18 +15,18 @@ class ModuleAttrTest < Test::Unit::TestCase
15
15
 
16
16
  def test_should_create_predicate_for_readonly_attr
17
17
  @module.attr(:foo)
18
- ['foo', 'foo?'].each do |method|
18
+ %w(foo foo?).each do |method|
19
19
  assert @module.instance_methods.include?(method), "#{method} does not exist"
20
20
  end
21
21
 
22
- ['foo='].each do |method|
22
+ %w(foo=).each do |method|
23
23
  assert !@module.instance_methods.include?(method), "#{method} exists"
24
24
  end
25
25
  end
26
26
 
27
27
  def test_should_create_predicate_for_readwrite_attr
28
28
  @module.attr(:foo, true)
29
- ['foo', 'foo=', 'foo?'].each do |method|
29
+ %w(foo foo= foo?).each do |method|
30
30
  assert @module.instance_methods.include?(method), "#{method} does not exist"
31
31
  end
32
32
  end
@@ -39,22 +39,22 @@ class ModuleAttrReaderTest < Test::Unit::TestCase
39
39
 
40
40
  def test_should_create_predicate
41
41
  @module.attr_reader(:foo)
42
- ['foo', 'foo?'].each do |method|
42
+ %w(foo foo?).each do |method|
43
43
  assert @module.instance_methods.include?(method), "#{method} does not exist"
44
44
  end
45
45
 
46
- ['foo='].each do |method|
46
+ %w(foo=).each do |method|
47
47
  assert !@module.instance_methods.include?(method), "#{method} exists"
48
48
  end
49
49
  end
50
50
 
51
51
  def test_should_create_predicate_for_multiple_attributes
52
52
  @module.attr_reader(:foo, :bar)
53
- ['foo', 'foo?', 'bar', 'bar?'].each do |method|
53
+ %w(foo foo? bar bar?).each do |method|
54
54
  assert @module.instance_methods.include?(method), "#{method} does not exist"
55
55
  end
56
56
 
57
- ['foo=', 'bar='].each do |method|
57
+ %w(foo= bar=).each do |method|
58
58
  assert !@module.instance_methods.include?(method), "#{method} exists"
59
59
  end
60
60
  end
@@ -67,14 +67,14 @@ class ModuleAttrAccessorTest < Test::Unit::TestCase
67
67
 
68
68
  def test_should_create_predicate
69
69
  @module.attr_accessor(:foo)
70
- ['foo', 'foo=', 'foo?'].each do |method|
70
+ %w(foo foo= foo?).each do |method|
71
71
  assert @module.instance_methods.include?(method), "#{method} does not exist"
72
72
  end
73
73
  end
74
74
 
75
75
  def test_should_create_predicate_for_multiple_attributes
76
76
  @module.attr_accessor(:foo, :bar)
77
- ['foo', 'foo=', 'foo?', 'bar', 'bar=', 'bar?'].each do |method|
77
+ %w(foo foo= foo? bar bar= bar?).each do |method|
78
78
  assert @module.instance_methods.include?(method), "#{method} does not exist"
79
79
  end
80
80
  end
@@ -87,22 +87,22 @@ class ModuleAttrWriterTest < Test::Unit::TestCase
87
87
 
88
88
  def test_should_create_predicate
89
89
  @module.attr_writer(:foo)
90
- ['foo=', 'foo?'].each do |method|
90
+ %w(foo= foo?).each do |method|
91
91
  assert @module.instance_methods.include?(method), "#{method} does not exist"
92
92
  end
93
93
 
94
- ['foo'].each do |method|
94
+ %w(foo).each do |method|
95
95
  assert !@module.instance_methods.include?(method), "#{method} exists"
96
96
  end
97
97
  end
98
98
 
99
99
  def test_should_create_predicate_for_multiple_attributes
100
100
  @module.attr_writer(:foo, :bar)
101
- ['foo=', 'foo?', 'bar=', 'bar?'].each do |method|
101
+ %w(foo= foo? bar= bar?).each do |method|
102
102
  assert @module.instance_methods.include?(method), "#{method} does not exist"
103
103
  end
104
104
 
105
- ['foo', 'bar'].each do |method|
105
+ %w(foo bar).each do |method|
106
106
  assert !@module.instance_methods.include?(method), "#{method} exists"
107
107
  end
108
108
  end
@@ -131,6 +131,7 @@ class ModuleTest < Test::Unit::TestCase
131
131
  def test_should_evaluate_false_values_for_predicate
132
132
  @klass.attr_accessor(:foo)
133
133
 
134
+ # *Note* ' ' is only false when ActiveSupport is being used
134
135
  [nil, '', ' ', {}, []].each do |value|
135
136
  assert_equal false, @klass.new(value).foo?, "#{value.inspect} is true"
136
137
  end
data/test/test_helper.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  # Load the plugin testing framework
2
2
  $:.unshift("#{File.dirname(__FILE__)}/../../plugin_test_helper/lib")
3
+
4
+ # Use the test helper for testing ActiveRecord
3
5
  require 'rubygems'
4
6
  require 'plugin_test_helper'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attribute_predicates
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Pfeifer
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-07-03 00:00:00 -04:00
12
+ date: 2008-07-06 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15