virtus 0.0.10 → 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.
Files changed (154) hide show
  1. data/.gitignore +33 -7
  2. data/.travis.yml +4 -74
  3. data/Changelog.md +11 -2
  4. data/Gemfile +10 -9
  5. data/README.md +85 -1
  6. data/TODO +18 -0
  7. data/config/flay.yml +2 -2
  8. data/config/flog.yml +1 -1
  9. data/config/roodi.yml +3 -3
  10. data/config/site.reek +8 -3
  11. data/lib/virtus.rb +5 -0
  12. data/lib/virtus/attribute.rb +137 -30
  13. data/lib/virtus/attribute/array.rb +17 -1
  14. data/lib/virtus/attribute/boolean.rb +8 -13
  15. data/lib/virtus/attribute/collection.rb +96 -0
  16. data/lib/virtus/attribute/default_value.rb +11 -7
  17. data/lib/virtus/attribute/embedded_value.rb +70 -0
  18. data/lib/virtus/attribute/set.rb +25 -0
  19. data/lib/virtus/attribute_set.rb +18 -16
  20. data/lib/virtus/attributes_accessor.rb +66 -0
  21. data/lib/virtus/class_methods.rb +50 -28
  22. data/lib/virtus/coercion/array.rb +23 -0
  23. data/lib/virtus/coercion/string.rb +10 -4
  24. data/lib/virtus/instance_methods.rb +38 -31
  25. data/lib/virtus/support/options.rb +6 -8
  26. data/lib/virtus/support/type_lookup.rb +4 -11
  27. data/lib/virtus/version.rb +1 -1
  28. data/spec/integration/collection_member_coercion_spec.rb +75 -0
  29. data/spec/integration/custom_attributes_spec.rb +49 -0
  30. data/spec/integration/default_values_spec.rb +32 -0
  31. data/spec/integration/defining_attributes_spec.rb +79 -0
  32. data/spec/integration/embedded_value_spec.rb +50 -0
  33. data/spec/integration/overriding_virtus_spec.rb +46 -0
  34. data/spec/integration/virtus/instance_level_attributes_spec.rb +23 -0
  35. data/spec/rcov.opts +1 -0
  36. data/spec/shared/constants_helpers.rb +9 -0
  37. data/spec/shared/options_class_method.rb +19 -0
  38. data/spec/spec_helper.rb +20 -7
  39. data/spec/unit/virtus/attribute/array/coerce_spec.rb +13 -0
  40. data/spec/unit/virtus/attribute/boolean/coerce_spec.rb +85 -0
  41. data/spec/unit/virtus/attribute/boolean/define_reader_method_spec.rb +15 -0
  42. data/spec/unit/virtus/attribute/boolean/value_coerced_spec.rb +97 -0
  43. data/spec/unit/virtus/attribute/boolean_spec.rb +2 -81
  44. data/spec/unit/virtus/attribute/class/coerce_spec.rb +13 -0
  45. data/spec/unit/virtus/attribute/class_methods/accessor_spec.rb +12 -0
  46. data/spec/unit/virtus/attribute/class_methods/build_spec.rb +37 -0
  47. data/spec/unit/virtus/attribute/class_methods/coercion_method_spec.rb +9 -0
  48. data/spec/unit/virtus/attribute/class_methods/default_spec.rb +9 -0
  49. data/spec/unit/virtus/attribute/class_methods/determine_type_spec.rb +31 -1
  50. data/spec/unit/virtus/attribute/class_methods/merge_options_spec.rb +11 -0
  51. data/spec/unit/virtus/attribute/class_methods/primitive_spec.rb +9 -0
  52. data/spec/unit/virtus/attribute/class_methods/reader_spec.rb +9 -0
  53. data/spec/unit/virtus/attribute/class_methods/writer_spec.rb +9 -0
  54. data/spec/unit/virtus/attribute/coerce_spec.rb +30 -0
  55. data/spec/unit/virtus/attribute/coercion_method_spec.rb +12 -0
  56. data/spec/unit/virtus/attribute/collection/class_methods/merge_options_spec.rb +40 -0
  57. data/spec/unit/virtus/attribute/collection/coerce_spec.rb +26 -0
  58. data/spec/unit/virtus/attribute/date/coerce_spec.rb +47 -0
  59. data/spec/unit/virtus/attribute/date/value_coerced_spec.rb +46 -0
  60. data/spec/unit/virtus/attribute/date_time/coerce_spec.rb +68 -0
  61. data/spec/unit/virtus/attribute/decimal/coerce_spec.rb +117 -0
  62. data/spec/unit/virtus/attribute/default_spec.rb +32 -0
  63. data/spec/unit/virtus/attribute/default_value/attribute_spec.rb +11 -0
  64. data/spec/unit/virtus/attribute/default_value/class_methods/new_spec.rb +4 -2
  65. data/spec/unit/virtus/attribute/default_value/evaluate_spec.rb +51 -0
  66. data/spec/unit/virtus/attribute/default_value/instance_methods/evaluate_spec.rb +9 -6
  67. data/spec/unit/virtus/attribute/default_value/value_spec.rb +11 -0
  68. data/spec/unit/virtus/attribute/define_accessor_methods_spec.rb +26 -0
  69. data/spec/unit/virtus/attribute/define_reader_method_spec.rb +24 -0
  70. data/spec/unit/virtus/attribute/define_writer_method_spec.rb +24 -0
  71. data/spec/unit/virtus/attribute/embedded_value/class_methods/merge_options_spec.rb +17 -0
  72. data/spec/unit/virtus/attribute/embedded_value/coerce_spec.rb +50 -0
  73. data/spec/unit/virtus/attribute/float/coerce_spec.rb +117 -0
  74. data/spec/unit/virtus/attribute/get_spec.rb +80 -0
  75. data/spec/unit/virtus/attribute/inspect_spec.rb +27 -0
  76. data/spec/unit/virtus/attribute/instance_variable_name_spec.rb +12 -0
  77. data/spec/unit/virtus/attribute/integer/coerce_spec.rb +105 -0
  78. data/spec/unit/virtus/attribute/name_spec.rb +12 -0
  79. data/spec/unit/virtus/attribute/numeric/class_methods/descendants_spec.rb +1 -1
  80. data/spec/unit/virtus/attribute/numeric/class_methods/max_spec.rb +9 -0
  81. data/spec/unit/virtus/attribute/numeric/class_methods/min_spec.rb +9 -0
  82. data/spec/unit/virtus/attribute/object/class_methods/descendants_spec.rb +9 -7
  83. data/spec/unit/virtus/attribute/options_spec.rb +14 -0
  84. data/spec/unit/virtus/attribute/public_reader_spec.rb +24 -0
  85. data/spec/unit/virtus/attribute/public_writer_spec.rb +24 -0
  86. data/spec/unit/virtus/attribute/reader_visibility_spec.rb +24 -0
  87. data/spec/unit/virtus/attribute/set/coerce_spec.rb +13 -0
  88. data/spec/unit/virtus/attribute/set_spec.rb +49 -0
  89. data/spec/unit/virtus/attribute/string/coerce_spec.rb +11 -0
  90. data/spec/unit/virtus/attribute/time/coerce_spec.rb +67 -0
  91. data/spec/unit/virtus/attribute/value_coerced_spec.rb +19 -0
  92. data/spec/unit/virtus/attribute/writer_visibility_spec.rb +24 -0
  93. data/spec/unit/virtus/attribute_set/append_spec.rb +12 -0
  94. data/spec/unit/virtus/attribute_set/element_reference_spec.rb +4 -0
  95. data/spec/unit/virtus/attribute_set/element_set_spec.rb +29 -9
  96. data/spec/unit/virtus/attributes_accessor/inspect_spec.rb +9 -0
  97. data/spec/unit/virtus/class_methods/attribute_spec.rb +23 -5
  98. data/spec/unit/virtus/class_methods/attributes_spec.rb +3 -5
  99. data/spec/unit/virtus/class_methods/const_missing_spec.rb +27 -0
  100. data/spec/unit/virtus/class_methods/inherited_spec.rb +21 -0
  101. data/spec/unit/virtus/coercion/array/to_set_spec.rb +12 -0
  102. data/spec/unit/virtus/coercion/date/class_methods/to_date_spec.rb +10 -0
  103. data/spec/unit/virtus/coercion/date_time/class_methods/to_datetime_spec.rb +10 -0
  104. data/spec/unit/virtus/coercion/hash/class_methods/to_date_spec.rb +10 -3
  105. data/spec/unit/virtus/coercion/hash/class_methods/to_datetime_spec.rb +10 -3
  106. data/spec/unit/virtus/coercion/hash/class_methods/to_time_spec.rb +10 -3
  107. data/spec/unit/virtus/coercion/object/class_methods/method_missing_spec.rb +8 -8
  108. data/spec/unit/virtus/coercion/string/class_methods/to_boolean_spec.rb +2 -2
  109. data/spec/unit/virtus/coercion/string/class_methods/to_constant_spec.rb +1 -1
  110. data/spec/unit/virtus/coercion/string/class_methods/to_date_spec.rb +1 -1
  111. data/spec/unit/virtus/coercion/string/class_methods/to_datetime_spec.rb +13 -13
  112. data/spec/unit/virtus/coercion/string/class_methods/to_decimal_spec.rb +25 -1
  113. data/spec/unit/virtus/coercion/string/class_methods/to_float_spec.rb +25 -1
  114. data/spec/unit/virtus/coercion/string/class_methods/to_integer_spec.rb +30 -1
  115. data/spec/unit/virtus/coercion/string/class_methods/to_time_spec.rb +13 -13
  116. data/spec/unit/virtus/coercion/time/class_methods/to_time_spec.rb +10 -0
  117. data/spec/unit/virtus/coercion/true_class/class_methods/to_string_spec.rb +1 -1
  118. data/spec/unit/virtus/instance_methods/attributes_spec.rb +77 -20
  119. data/spec/unit/virtus/instance_methods/element_reference_spec.rb +1 -1
  120. data/spec/unit/virtus/instance_methods/element_set_spec.rb +2 -2
  121. data/spec/unit/virtus/instance_methods/to_hash_spec.rb +23 -0
  122. data/spec/unit/virtus/options/accept_options_spec.rb +10 -11
  123. data/spec/unit/virtus/options/accepted_options_spec.rb +1 -1
  124. data/spec/unit/virtus/options/options_spec.rb +27 -4
  125. data/tasks/metrics/ci.rake +2 -1
  126. data/tasks/metrics/heckle.rake +207 -0
  127. data/tasks/spec.rake +14 -7
  128. data/virtus.gemspec +1 -1
  129. metadata +111 -97
  130. data/VERSION +0 -1
  131. data/examples/custom_coercion_spec.rb +0 -50
  132. data/examples/default_values_spec.rb +0 -21
  133. data/examples/override_attribute_methods_spec.rb +0 -40
  134. data/spec/integration/virtus/attributes/attribute/set_spec.rb +0 -36
  135. data/spec/integration/virtus/class_methods/attribute_spec.rb +0 -82
  136. data/spec/integration/virtus/class_methods/attributes_spec.rb +0 -22
  137. data/spec/integration/virtus/class_methods/const_missing_spec.rb +0 -44
  138. data/spec/unit/shared/attribute.rb +0 -7
  139. data/spec/unit/shared/attribute/accept_options.rb +0 -37
  140. data/spec/unit/shared/attribute/accepted_options.rb +0 -5
  141. data/spec/unit/shared/attribute/get.rb +0 -44
  142. data/spec/unit/shared/attribute/inspect.rb +0 -7
  143. data/spec/unit/shared/attribute/set.rb +0 -37
  144. data/spec/unit/virtus/attribute/array_spec.rb +0 -24
  145. data/spec/unit/virtus/attribute/class_spec.rb +0 -24
  146. data/spec/unit/virtus/attribute/date_spec.rb +0 -59
  147. data/spec/unit/virtus/attribute/date_time_spec.rb +0 -87
  148. data/spec/unit/virtus/attribute/decimal_spec.rb +0 -109
  149. data/spec/unit/virtus/attribute/float_spec.rb +0 -109
  150. data/spec/unit/virtus/attribute/hash_spec.rb +0 -11
  151. data/spec/unit/virtus/attribute/integer_spec.rb +0 -99
  152. data/spec/unit/virtus/attribute/string_spec.rb +0 -21
  153. data/spec/unit/virtus/attribute/time_spec.rb +0 -82
  154. data/spec/unit/virtus/class_methods/new_spec.rb +0 -41
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'custom attribtues' do
4
+
5
+ module Virtus
6
+ class Coercion
7
+ class String < Virtus::Coercion::Object
8
+ def self.to_upcase(value)
9
+ value.upcase
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ before do
16
+ module Examples
17
+ class UpperCase < Virtus::Attribute::Object
18
+ primitive String
19
+ coercion_method :to_upcase
20
+ end
21
+
22
+ class RegularExpression < Virtus::Attribute::Object
23
+ primitive Regexp
24
+ end
25
+
26
+ class User
27
+ include Virtus
28
+
29
+ attribute :name, String
30
+ attribute :scream, UpperCase
31
+ attribute :expression, RegularExpression
32
+ end
33
+ end
34
+ end
35
+
36
+ subject { Examples::User.new }
37
+
38
+ specify 'allows you to define custom attributes' do
39
+ regexp = /awesome/
40
+ subject.expression = regexp
41
+ subject.expression.should == regexp
42
+ end
43
+
44
+ specify 'allows you to define coercion methods' do
45
+ subject.scream = 'welcome'
46
+ subject.scream.should == 'WELCOME'
47
+ end
48
+
49
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe "default values" do
4
+
5
+ before do
6
+ module Examples
7
+ class Page
8
+ include Virtus
9
+
10
+ attribute :title, String
11
+ attribute :slug, String, :default => lambda { |post, attribute| post.title.downcase.gsub(' ', '-') }
12
+ attribute :view_count, Integer, :default => 0
13
+ end
14
+ end
15
+ end
16
+
17
+ subject { Examples::Page.new }
18
+
19
+ specify 'without a default the value is nil' do
20
+ subject.title.should be_nil
21
+ end
22
+
23
+ specify 'can be supplied with the :default option' do
24
+ subject.view_count.should == 0
25
+ end
26
+
27
+ specify "you can pass a 'callable-object' to the :default option" do
28
+ subject.title = 'Example Blog Post'
29
+ subject.slug.should == 'example-blog-post'
30
+ end
31
+
32
+ end
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ describe "virtus attribute definitions" do
4
+
5
+ before do
6
+ module Examples
7
+ class Person
8
+ include Virtus
9
+
10
+ attribute :name, String
11
+ attribute :age, Integer
12
+ attribute :doctor, Boolean
13
+ attribute :salery, Decimal
14
+ end
15
+
16
+ class Manager < Person
17
+
18
+ end
19
+ end
20
+ end
21
+
22
+ subject { Examples::Person.new }
23
+
24
+ specify 'virtus creates accessor methods' do
25
+ subject.name = 'Peter'
26
+ subject.name.should == 'Peter'
27
+ end
28
+
29
+ specify 'the constructor accepts a hash for mass-assignment' do
30
+ john = Examples::Person.new(:name => 'John', :age => 13)
31
+ john.name.should == 'John'
32
+ john.age.should == 13
33
+ end
34
+
35
+ specify 'Boolean attributes have a getter with questionmark' do
36
+ subject.doctor?.should be_false
37
+ subject.doctor = true
38
+ subject.doctor?.should be_true
39
+ end
40
+
41
+ context 'with attributes' do
42
+ let(:attributes) { {:name => 'Jane', :age => 45, :doctor => true, :salery => 4500} }
43
+ subject { Examples::Person.new(attributes) }
44
+
45
+ specify "#attributes returns the object's attributes as a hash" do
46
+ subject.attributes.should == attributes
47
+ end
48
+
49
+ specify "#to_hash returns the object's attributes as a hash" do
50
+ subject.to_hash.should == attributes
51
+ end
52
+ end
53
+
54
+ context 'inheritance' do
55
+ specify 'inherits all the attribtues from the base class' do
56
+ fred = Examples::Manager.new(:name => 'Fred', :age => 29)
57
+ fred.name.should == 'Fred'
58
+ fred.age.should == 29
59
+ end
60
+
61
+ specify 'lets you add attributes to the base class at runtime' do
62
+ frank = Examples::Manager.new(:name => 'Frank')
63
+ Examples::Person.attribute :just_added, String
64
+ frank.just_added = 'it works!'
65
+ frank.just_added.should == 'it works!'
66
+ end
67
+
68
+ specify 'lets you add attributes to the subclass at runtime' do
69
+ person_jack = Examples::Person.new(:name => 'Jack')
70
+ manager_frank = Examples::Manager.new(:name => 'Frank')
71
+ Examples::Manager.attribute :just_added, String
72
+
73
+ manager_frank.just_added = 'awesome!'
74
+ manager_frank.just_added.should == 'awesome!'
75
+ person_jack.should_not respond_to(:just_added)
76
+ person_jack.should_not respond_to(:just_added=)
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'embedded values' do
4
+ before do
5
+ module Examples
6
+ class City
7
+ include Virtus
8
+
9
+ attribute :name, String
10
+ end
11
+
12
+ class Address
13
+ include Virtus
14
+
15
+ attribute :street, String
16
+ attribute :zipcode, String
17
+ attribute :city, City
18
+ end
19
+
20
+ class User
21
+ include Virtus
22
+
23
+ attribute :name, String
24
+ attribute :address, Address
25
+ end
26
+ end
27
+ end
28
+
29
+ subject { Examples::User.new(:name => 'the guy',
30
+ :address => address_attributes) }
31
+ let(:address_attributes) do
32
+ { :street => 'Street 1/2', :zipcode => '12345', :city => { :name => 'NYC' } }
33
+ end
34
+
35
+ specify '#attributes returns instances of the embedded values' do
36
+ subject.attributes.should == {
37
+ :name => 'the guy',
38
+ :address => subject.address
39
+ }
40
+ end
41
+
42
+ specify 'allows you to pass a hash for the embedded value' do
43
+ user = Examples::User.new
44
+ user.address = address_attributes
45
+ user.address.street.should == 'Street 1/2'
46
+ user.address.zipcode.should == '12345'
47
+ user.address.city.name.should == 'NYC'
48
+ end
49
+
50
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'overriding virtus behavior' do
4
+
5
+ before do
6
+ module Examples
7
+ class Article
8
+ include Virtus
9
+
10
+ attribute :title, String
11
+
12
+ def title
13
+ super || '<unknown>'
14
+ end
15
+
16
+ def title=(name)
17
+ super unless self.title == "can't be changed"
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ describe 'overriding an attribute getter' do
24
+ specify 'calls the defined getter' do
25
+ Examples::Article.new.title.should == '<unknown>'
26
+ end
27
+
28
+ specify 'super can be used to access the getter defined by virtus' do
29
+ Examples::Article.new(:title => 'example article').title.should == 'example article'
30
+ end
31
+ end
32
+
33
+ describe 'overriding an attribute setter' do
34
+ specify 'calls the defined setter' do
35
+ article = Examples::Article.new(:title => "can't be changed")
36
+ article.title = 'this will never be assigned'
37
+ article.title.should == "can't be changed"
38
+ end
39
+
40
+ specify 'super can be used to access the setter defined by virtus' do
41
+ article = Examples::Article.new(:title => 'example article')
42
+ article.title = 'my new title'
43
+ article.title.should == 'my new title'
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus, 'instance level attributes' do
4
+ subject do
5
+ subject = Object.new
6
+ subject.singleton_class.send(:include, Virtus)
7
+ subject
8
+ end
9
+
10
+ let(:attribute) { subject.singleton_class.attribute(:name, String) }
11
+
12
+ before do
13
+ pending if RUBY_VERSION < '1.9'
14
+ end
15
+
16
+ context 'adding an attribute' do
17
+ it 'allows setting the attribute value on the instance' do
18
+ attribute
19
+ subject.name = 'foo'
20
+ subject.name.should eql('foo')
21
+ end
22
+ end
23
+ end
@@ -4,3 +4,4 @@
4
4
  --xrefs
5
5
  --profile
6
6
  --text-summary
7
+ --failure-threshold 100
@@ -0,0 +1,9 @@
1
+ module ConstantsHelpers
2
+
3
+ extend self
4
+
5
+ # helper to remove constants after test-runs.
6
+ def undef_constant(mod, constant_name)
7
+ mod.send(:remove_const, constant_name)
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ shared_examples_for 'an options class method' do
2
+ context 'with no argument' do
3
+ subject { object.send(method) }
4
+
5
+ it { should be(default) }
6
+ end
7
+
8
+ context 'with a default value' do
9
+ subject { object.send(method, value) }
10
+
11
+ let(:value) { stub('value') }
12
+
13
+ it { should equal(object) }
14
+
15
+ it 'sets the default value for the class method' do
16
+ expect { subject }.to change { object.send(method) }.from(nil).to(value)
17
+ end
18
+ end
19
+ end
@@ -1,27 +1,40 @@
1
1
  require 'backports'
2
- require 'pathname'
3
2
  require 'rubygems'
4
- require 'rspec'
3
+
4
+ begin
5
+ require 'rspec' # try for RSpec 2
6
+ rescue LoadError
7
+ require 'spec' # try for RSpec 1
8
+ RSpec = Spec::Runner
9
+ end
5
10
 
6
11
  require 'virtus'
7
12
 
8
13
  ENV['TZ'] = 'UTC'
9
14
 
10
- SPEC_ROOT = Pathname(__FILE__).dirname.expand_path
11
-
12
- Pathname.glob((SPEC_ROOT + '**/shared/**/*.rb').to_s).each { |file| require file }
15
+ # require spec support files and shared behavior
16
+ Dir[File.expand_path('../**/shared/**/*.rb', __FILE__)].each { |file| require file }
13
17
 
14
18
  RSpec.configure do |config|
15
19
 
16
- # Remove anonymous Attribute classes from Attribute descendants
20
+ # Remove anonymous- and example- Attribute classes from Attribute descendants
17
21
  config.after :all do
18
22
  stack = [ Virtus::Attribute ]
19
23
  while klass = stack.pop
20
24
  klass.descendants.delete_if do |descendant|
21
- descendant.name.nil? || descendant.name.empty?
25
+ descendant.name.nil? || descendant.name.empty? || descendant.name.start_with?('Examples::')
22
26
  end
23
27
  stack.concat(klass.descendants)
24
28
  end
25
29
  end
26
30
 
31
+ # Remove constants in the Example-Module
32
+ config.after :each do
33
+ if defined?(Examples)
34
+ Examples.constants.each do |const_name|
35
+ ConstantsHelpers.undef_constant(Examples, const_name)
36
+ end
37
+ end
38
+ end
39
+
27
40
  end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::Array, '#coerce' do
4
+ subject { attribute.coerce(value) }
5
+
6
+ let(:attribute) { described_class.new(:colors) }
7
+
8
+ context 'with a Hash' do
9
+ let(:value) { { :foo => 'bar' } }
10
+
11
+ it { should eql([ [ :foo, 'bar' ] ]) }
12
+ end
13
+ end
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::Boolean, '#coerce' do
4
+ subject { attribute.coerce(value) }
5
+
6
+ let(:attribute) { described_class.new(:is_admin) }
7
+
8
+ context 'with 1' do
9
+ let(:value) { 1 }
10
+
11
+ it { should be(true) }
12
+ end
13
+
14
+ context 'with "1"' do
15
+ let(:value) { '1' }
16
+
17
+ it { should be(true) }
18
+ end
19
+
20
+ context 'with "true"' do
21
+ let(:value) { 'true' }
22
+
23
+ it { should be(true) }
24
+ end
25
+
26
+ context 'with "TRUE"' do
27
+ let(:value) { 'TRUE' }
28
+
29
+ it { should be(true) }
30
+ end
31
+
32
+ context 'with "t"' do
33
+ let(:value) { 't' }
34
+
35
+ it { should be(true) }
36
+ end
37
+
38
+ context 'with "T"' do
39
+ let(:value) { 'T' }
40
+
41
+ it { should be(true) }
42
+ end
43
+
44
+ context 'with 0' do
45
+ let(:value) { 0 }
46
+
47
+ it { should be(false) }
48
+ end
49
+
50
+ context 'with "0"' do
51
+ let(:value) { '0' }
52
+
53
+ it { should be(false) }
54
+ end
55
+
56
+ context 'with "false"' do
57
+ let(:value) { 'false' }
58
+
59
+ it { should be(false) }
60
+ end
61
+
62
+ context 'with "FALSE"' do
63
+ let(:value) { 'FALSE' }
64
+
65
+ it { should be(false) }
66
+ end
67
+
68
+ context 'with "f"' do
69
+ let(:value) { 'f' }
70
+
71
+ it { should be(false) }
72
+ end
73
+
74
+ context 'with "F"' do
75
+ let(:value) { 'F' }
76
+
77
+ it { should be(false) }
78
+ end
79
+
80
+ context 'with "Foo"' do
81
+ let(:value) { 'Foo' }
82
+
83
+ it { should equal(value) }
84
+ end
85
+ end