class_inheritable_attributes 0.0.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/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in class_inheritable_attributes.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Burke Libbey
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # ClassInheritableAttributes
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'class_inheritable_attributes'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install class_inheritable_attributes
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/class_inheritable_attributes/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Burke Libbey"]
6
+ gem.email = ["burke@burkelibbey.org"]
7
+ gem.description = %q{Forward-port of deprectaed ClassInheritableAttributes functionality removed in rails 3.2}
8
+ gem.summary = %q{Forward-port of deprectaed ClassInheritableAttributes functionality removed in rails 3.2.}
9
+ gem.homepage = ""
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "class_inheritable_attributes"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = ClassInheritableAttributes::VERSION
17
+ end
@@ -0,0 +1,3 @@
1
+ module ClassInheritableAttributes
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,180 @@
1
+ require "class_inheritable_attributes/version"
2
+
3
+ require 'active_support/core_ext/object/duplicable'
4
+ require 'active_support/core_ext/array/extract_options'
5
+ require 'active_support/deprecation'
6
+
7
+ # Retained for backward compatibility. Methods are now included in Class.
8
+ module ClassInheritableAttributes # :nodoc:
9
+ DEPRECATION_WARNING_MESSAGE = "class_inheritable_attribute is deprecated, please use class_attribute method instead. Notice their behavior are slightly different, so refer to class_attribute documentation first"
10
+ end
11
+
12
+ # It is recommended to use <tt>class_attribute</tt> over methods defined in this file. Please
13
+ # refer to documentation for <tt>class_attribute</tt> for more information. Officially it is not
14
+ # deprecated but <tt>class_attribute</tt> is faster.
15
+ #
16
+ # Allows attributes to be shared within an inheritance hierarchy. Each descendant gets a copy of
17
+ # their parents' attributes, instead of just a pointer to the same. This means that the child can add elements
18
+ # to, for example, an array without those additions being shared with either their parent, siblings, or
19
+ # children. This is unlike the regular class-level attributes that are shared across the entire hierarchy.
20
+ #
21
+ # The copies of inheritable parent attributes are added to subclasses when they are created, via the
22
+ # +inherited+ hook.
23
+ #
24
+ # class Person
25
+ # class_inheritable_accessor :hair_colors
26
+ # end
27
+ #
28
+ # Person.hair_colors = [:brown, :black, :blonde, :red]
29
+ # Person.hair_colors # => [:brown, :black, :blonde, :red]
30
+ # Person.new.hair_colors # => [:brown, :black, :blonde, :red]
31
+ #
32
+ # To opt out of the instance writer method, pass :instance_writer => false.
33
+ # To opt out of the instance reader method, pass :instance_reader => false.
34
+ #
35
+ # class Person
36
+ # class_inheritable_accessor :hair_colors :instance_writer => false, :instance_reader => false
37
+ # end
38
+ #
39
+ # Person.new.hair_colors = [:brown] # => NoMethodError
40
+ # Person.new.hair_colors # => NoMethodError
41
+ class Class # :nodoc:
42
+ def class_inheritable_reader(*syms)
43
+ ActiveSupport::Deprecation.warn ClassInheritableAttributes::DEPRECATION_WARNING_MESSAGE
44
+ options = syms.extract_options!
45
+ syms.each do |sym|
46
+ next if sym.is_a?(Hash)
47
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
48
+ def self.#{sym} # def self.after_add
49
+ read_inheritable_attribute(:#{sym}) # read_inheritable_attribute(:after_add)
50
+ end # end
51
+ #
52
+ #{" #
53
+ def #{sym} # def after_add
54
+ self.class.#{sym} # self.class.after_add
55
+ end # end
56
+ " unless options[:instance_reader] == false } # # the reader above is generated unless options[:instance_reader] == false
57
+ EOS
58
+ end
59
+ end
60
+
61
+ def class_inheritable_writer(*syms)
62
+ ActiveSupport::Deprecation.warn ClassInheritableAttributes::DEPRECATION_WARNING_MESSAGE
63
+ options = syms.extract_options!
64
+ syms.each do |sym|
65
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
66
+ def self.#{sym}=(obj) # def self.color=(obj)
67
+ write_inheritable_attribute(:#{sym}, obj) # write_inheritable_attribute(:color, obj)
68
+ end # end
69
+ #
70
+ #{" #
71
+ def #{sym}=(obj) # def color=(obj)
72
+ self.class.#{sym} = obj # self.class.color = obj
73
+ end # end
74
+ " unless options[:instance_writer] == false } # # the writer above is generated unless options[:instance_writer] == false
75
+ EOS
76
+ end
77
+ end
78
+
79
+ def class_inheritable_array_writer(*syms)
80
+ ActiveSupport::Deprecation.warn ClassInheritableAttributes::DEPRECATION_WARNING_MESSAGE
81
+ options = syms.extract_options!
82
+ syms.each do |sym|
83
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
84
+ def self.#{sym}=(obj) # def self.levels=(obj)
85
+ write_inheritable_array(:#{sym}, obj) # write_inheritable_array(:levels, obj)
86
+ end # end
87
+ #
88
+ #{" #
89
+ def #{sym}=(obj) # def levels=(obj)
90
+ self.class.#{sym} = obj # self.class.levels = obj
91
+ end # end
92
+ " unless options[:instance_writer] == false } # # the writer above is generated unless options[:instance_writer] == false
93
+ EOS
94
+ end
95
+ end
96
+
97
+ def class_inheritable_hash_writer(*syms)
98
+ ActiveSupport::Deprecation.warn ClassInheritableAttributes::DEPRECATION_WARNING_MESSAGE
99
+ options = syms.extract_options!
100
+ syms.each do |sym|
101
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
102
+ def self.#{sym}=(obj) # def self.nicknames=(obj)
103
+ write_inheritable_hash(:#{sym}, obj) # write_inheritable_hash(:nicknames, obj)
104
+ end # end
105
+ #
106
+ #{" #
107
+ def #{sym}=(obj) # def nicknames=(obj)
108
+ self.class.#{sym} = obj # self.class.nicknames = obj
109
+ end # end
110
+ " unless options[:instance_writer] == false } # # the writer above is generated unless options[:instance_writer] == false
111
+ EOS
112
+ end
113
+ end
114
+
115
+ def class_inheritable_accessor(*syms)
116
+ class_inheritable_reader(*syms)
117
+ class_inheritable_writer(*syms)
118
+ end
119
+
120
+ def class_inheritable_array(*syms)
121
+ class_inheritable_reader(*syms)
122
+ class_inheritable_array_writer(*syms)
123
+ end
124
+
125
+ def class_inheritable_hash(*syms)
126
+ class_inheritable_reader(*syms)
127
+ class_inheritable_hash_writer(*syms)
128
+ end
129
+
130
+ def inheritable_attributes
131
+ @inheritable_attributes ||= EMPTY_INHERITABLE_ATTRIBUTES
132
+ end
133
+
134
+ def write_inheritable_attribute(key, value)
135
+ if inheritable_attributes.equal?(EMPTY_INHERITABLE_ATTRIBUTES)
136
+ @inheritable_attributes = {}
137
+ end
138
+ inheritable_attributes[key] = value
139
+ end
140
+
141
+ def write_inheritable_array(key, elements)
142
+ write_inheritable_attribute(key, []) if read_inheritable_attribute(key).nil?
143
+ write_inheritable_attribute(key, read_inheritable_attribute(key) + elements)
144
+ end
145
+
146
+ def write_inheritable_hash(key, hash)
147
+ write_inheritable_attribute(key, {}) if read_inheritable_attribute(key).nil?
148
+ write_inheritable_attribute(key, read_inheritable_attribute(key).merge(hash))
149
+ end
150
+
151
+ def read_inheritable_attribute(key)
152
+ inheritable_attributes[key]
153
+ end
154
+
155
+ def reset_inheritable_attributes
156
+ ActiveSupport::Deprecation.warn ClassInheritableAttributes::DEPRECATION_WARNING_MESSAGE
157
+ @inheritable_attributes = EMPTY_INHERITABLE_ATTRIBUTES
158
+ end
159
+
160
+ private
161
+ # Prevent this constant from being created multiple times
162
+ EMPTY_INHERITABLE_ATTRIBUTES = {}.freeze
163
+
164
+ def inherited_with_inheritable_attributes(child)
165
+ inherited_without_inheritable_attributes(child) if respond_to?(:inherited_without_inheritable_attributes)
166
+
167
+ if inheritable_attributes.equal?(EMPTY_INHERITABLE_ATTRIBUTES)
168
+ new_inheritable_attributes = EMPTY_INHERITABLE_ATTRIBUTES
169
+ else
170
+ new_inheritable_attributes = Hash[inheritable_attributes.map do |(key, value)|
171
+ [key, value.duplicable? ? value.dup : value]
172
+ end]
173
+ end
174
+
175
+ child.instance_variable_set('@inheritable_attributes', new_inheritable_attributes)
176
+ end
177
+
178
+ alias inherited_without_inheritable_attributes inherited
179
+ alias inherited inherited_with_inheritable_attributes
180
+ end
@@ -0,0 +1,64 @@
1
+ ORIG_ARGV = ARGV.dup
2
+
3
+ begin
4
+ old, $VERBOSE = $VERBOSE, nil
5
+ # require File.expand_path('../../../load_paths', __FILE__)
6
+ ensure
7
+ $VERBOSE = old
8
+ end
9
+
10
+ lib = File.expand_path("#{File.dirname(__FILE__)}/../lib")
11
+ $:.unshift(lib) unless $:.include?('lib') || $:.include?(lib)
12
+
13
+ require 'active_support/core_ext/kernel/reporting'
14
+
15
+ require 'active_support/core_ext/string/encoding'
16
+ if "ruby".encoding_aware?
17
+ # These are the normal settings that will be set up by Railties
18
+ # TODO: Have these tests support other combinations of these values
19
+ silence_warnings do
20
+ Encoding.default_internal = "UTF-8"
21
+ Encoding.default_external = "UTF-8"
22
+ end
23
+ end
24
+
25
+ require 'test/unit'
26
+ # require 'empty_bool'
27
+
28
+ silence_warnings { require 'mocha' }
29
+
30
+ ENV['NO_RELOAD'] = '1'
31
+ require 'active_support'
32
+
33
+ # Include shims until we get off 1.8.6
34
+ require 'active_support/ruby/shim' if RUBY_VERSION < '1.8.7'
35
+
36
+ def uses_memcached(test_name)
37
+ require 'memcache'
38
+ begin
39
+ MemCache.new('localhost:11211').stats
40
+ yield
41
+ rescue MemCache::MemCacheError
42
+ $stderr.puts "Skipping #{test_name} tests. Start memcached and try again."
43
+ end
44
+ end
45
+
46
+ def with_kcode(code)
47
+ if RUBY_VERSION < '1.9'
48
+ begin
49
+ old_kcode, $KCODE = $KCODE, code
50
+ yield
51
+ ensure
52
+ $KCODE = old_kcode
53
+ end
54
+ else
55
+ yield
56
+ end
57
+ end
58
+
59
+ # Show backtraces for deprecated behavior for quicker cleanup.
60
+ ActiveSupport::Deprecation.debug = true
61
+
62
+ if RUBY_VERSION < '1.9'
63
+ $KCODE = 'UTF8'
64
+ end
@@ -0,0 +1,230 @@
1
+ require './test/abstract_unit'
2
+ require './lib/class_inheritable_attributes'
3
+
4
+ class ClassInheritableAttributesTest < Test::Unit::TestCase
5
+ def setup
6
+ ActiveSupport::Deprecation.silenced = true
7
+ @klass = Class.new
8
+ end
9
+
10
+ def teardown
11
+ ActiveSupport::Deprecation.silenced = false
12
+ end
13
+
14
+ def test_reader_declaration
15
+ assert_nothing_raised do
16
+ @klass.class_inheritable_reader :a
17
+ assert_respond_to @klass, :a
18
+ assert_respond_to @klass.new, :a
19
+ end
20
+ end
21
+
22
+ def test_writer_declaration
23
+ assert_nothing_raised do
24
+ @klass.class_inheritable_writer :a
25
+ assert_respond_to @klass, :a=
26
+ assert_respond_to @klass.new, :a=
27
+ end
28
+ end
29
+
30
+ def test_writer_declaration_without_instance_writer
31
+ assert_nothing_raised do
32
+ @klass.class_inheritable_writer :a, :instance_writer => false
33
+ assert_respond_to @klass, :a=
34
+ assert !@klass.new.respond_to?(:a=)
35
+ end
36
+ end
37
+
38
+ def test_accessor_declaration
39
+ assert_nothing_raised do
40
+ @klass.class_inheritable_accessor :a
41
+ assert_respond_to @klass, :a
42
+ assert_respond_to @klass.new, :a
43
+ assert_respond_to @klass, :a=
44
+ assert_respond_to @klass.new, :a=
45
+ end
46
+ end
47
+
48
+ def test_accessor_declaration_without_instance_writer
49
+ assert_nothing_raised do
50
+ @klass.class_inheritable_accessor :a, :instance_writer => false
51
+ assert_respond_to @klass, :a
52
+ assert_respond_to @klass.new, :a
53
+ assert_respond_to @klass, :a=
54
+ assert !@klass.new.respond_to?(:a=)
55
+ end
56
+ end
57
+
58
+ def test_array_declaration
59
+ assert_nothing_raised do
60
+ @klass.class_inheritable_array :a
61
+ assert_respond_to @klass, :a
62
+ assert_respond_to @klass.new, :a
63
+ assert_respond_to @klass, :a=
64
+ assert_respond_to @klass.new, :a=
65
+ end
66
+ end
67
+
68
+ def test_array_declaration_without_instance_writer
69
+ assert_nothing_raised do
70
+ @klass.class_inheritable_array :a, :instance_writer => false
71
+ assert_respond_to @klass, :a
72
+ assert_respond_to @klass.new, :a
73
+ assert_respond_to @klass, :a=
74
+ assert !@klass.new.respond_to?(:a=)
75
+ end
76
+ end
77
+
78
+ def test_hash_declaration
79
+ assert_nothing_raised do
80
+ @klass.class_inheritable_hash :a
81
+ assert_respond_to @klass, :a
82
+ assert_respond_to @klass.new, :a
83
+ assert_respond_to @klass, :a=
84
+ assert_respond_to @klass.new, :a=
85
+ end
86
+ end
87
+
88
+ def test_hash_declaration_without_instance_writer
89
+ assert_nothing_raised do
90
+ @klass.class_inheritable_hash :a, :instance_writer => false
91
+ assert_respond_to @klass, :a
92
+ assert_respond_to @klass.new, :a
93
+ assert_respond_to @klass, :a=
94
+ assert !@klass.new.respond_to?(:a=)
95
+ end
96
+ end
97
+
98
+ def test_reader
99
+ @klass.class_inheritable_reader :a
100
+ assert_nil @klass.a
101
+ assert_nil @klass.new.a
102
+
103
+ @klass.send(:write_inheritable_attribute, :a, 'a')
104
+
105
+ assert_equal 'a', @klass.a
106
+ assert_equal 'a', @klass.new.a
107
+ assert_equal @klass.a, @klass.new.a
108
+ assert_equal @klass.a.object_id, @klass.new.a.object_id
109
+ end
110
+
111
+ def test_writer
112
+ @klass.class_inheritable_reader :a
113
+ @klass.class_inheritable_writer :a
114
+
115
+ assert_nil @klass.a
116
+ assert_nil @klass.new.a
117
+
118
+ @klass.a = 'a'
119
+ assert_equal 'a', @klass.a
120
+ @klass.new.a = 'A'
121
+ assert_equal 'A', @klass.a
122
+ end
123
+
124
+ def test_array
125
+ @klass.class_inheritable_array :a
126
+
127
+ assert_nil @klass.a
128
+ assert_nil @klass.new.a
129
+
130
+ @klass.a = %w(a b c)
131
+ assert_equal %w(a b c), @klass.a
132
+ assert_equal %w(a b c), @klass.new.a
133
+
134
+ @klass.new.a = %w(A B C)
135
+ assert_equal %w(a b c A B C), @klass.a
136
+ assert_equal %w(a b c A B C), @klass.new.a
137
+ end
138
+
139
+ def test_hash
140
+ @klass.class_inheritable_hash :a
141
+
142
+ assert_nil @klass.a
143
+ assert_nil @klass.new.a
144
+
145
+ @klass.a = { :a => 'a' }
146
+ assert_equal({ :a => 'a' }, @klass.a)
147
+ assert_equal({ :a => 'a' }, @klass.new.a)
148
+
149
+ @klass.new.a = { :b => 'b' }
150
+ assert_equal({ :a => 'a', :b => 'b' }, @klass.a)
151
+ assert_equal({ :a => 'a', :b => 'b' }, @klass.new.a)
152
+ end
153
+
154
+ def test_inheritance
155
+ @klass.class_inheritable_accessor :a
156
+ @klass.a = 'a'
157
+
158
+ @sub = eval("class FlogMe < @klass; end; FlogMe")
159
+
160
+ @klass.class_inheritable_accessor :b
161
+
162
+ assert_respond_to @sub, :a
163
+ assert_respond_to @sub, :b
164
+ assert_equal @klass.a, @sub.a
165
+ assert_equal @klass.b, @sub.b
166
+ assert_equal 'a', @sub.a
167
+ assert_nil @sub.b
168
+
169
+ @klass.b = 'b'
170
+ assert_not_equal @klass.b, @sub.b
171
+ assert_equal 'b', @klass.b
172
+ assert_nil @sub.b
173
+
174
+ @sub.a = 'A'
175
+ assert_not_equal @klass.a, @sub.a
176
+ assert_equal 'a', @klass.a
177
+ assert_equal 'A', @sub.a
178
+
179
+ @sub.b = 'B'
180
+ assert_not_equal @klass.b, @sub.b
181
+ assert_equal 'b', @klass.b
182
+ assert_equal 'B', @sub.b
183
+ end
184
+
185
+ def test_array_inheritance
186
+ @klass.class_inheritable_accessor :a
187
+ @klass.a = []
188
+
189
+ @sub = eval("class SubbyArray < @klass; end; SubbyArray")
190
+
191
+ assert_equal [], @klass.a
192
+ assert_equal [], @sub.a
193
+
194
+ @sub.a << :first
195
+
196
+ assert_equal [:first], @sub.a
197
+ assert_equal [], @klass.a
198
+ end
199
+
200
+ def test_array_inheritance_
201
+ @klass.class_inheritable_accessor :a
202
+ @klass.a = {}
203
+
204
+ @sub = eval("class SubbyHash < @klass; end; SubbyHash")
205
+
206
+ assert_equal Hash.new, @klass.a
207
+ assert_equal Hash.new, @sub.a
208
+
209
+ @sub.a[:first] = :first
210
+
211
+ assert_equal 1, @sub.a.keys.size
212
+ assert_equal 0, @klass.a.keys.size
213
+ end
214
+
215
+ def test_reset_inheritable_attributes
216
+ @klass.class_inheritable_accessor :a
217
+ @klass.a = 'a'
218
+
219
+ @sub = eval("class Inheriting < @klass; end; Inheriting")
220
+
221
+ assert_equal 'a', @klass.a
222
+ assert_equal 'a', @sub.a
223
+
224
+ @klass.reset_inheritable_attributes
225
+ @sub = eval("class NotInheriting < @klass; end; NotInheriting")
226
+
227
+ assert_nil @klass.a
228
+ assert_nil @sub.a
229
+ end
230
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: class_inheritable_attributes
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Burke Libbey
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-30 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Forward-port of deprectaed ClassInheritableAttributes functionality removed
15
+ in rails 3.2
16
+ email:
17
+ - burke@burkelibbey.org
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - .gitignore
23
+ - Gemfile
24
+ - LICENSE
25
+ - README.md
26
+ - Rakefile
27
+ - class_inheritable_attributes.gemspec
28
+ - lib/class_inheritable_attributes.rb
29
+ - lib/class_inheritable_attributes/version.rb
30
+ - test/abstract_unit.rb
31
+ - test/class_inheritable_attributes_test.rb
32
+ homepage: ''
33
+ licenses: []
34
+ post_install_message:
35
+ rdoc_options: []
36
+ require_paths:
37
+ - lib
38
+ required_ruby_version: !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ requirements: []
51
+ rubyforge_project:
52
+ rubygems_version: 1.8.11
53
+ signing_key:
54
+ specification_version: 3
55
+ summary: Forward-port of deprectaed ClassInheritableAttributes functionality removed
56
+ in rails 3.2.
57
+ test_files:
58
+ - test/abstract_unit.rb
59
+ - test/class_inheritable_attributes_test.rb