mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Add simple attribute implementation backed by ivars
This commit is contained in:
parent
d5d59230f4
commit
af5301089f
3 changed files with 48 additions and 0 deletions
|
@ -26,6 +26,7 @@ $:.unshift(activesupport_path) if File.directory?(activesupport_path)
|
|||
require 'active_support'
|
||||
|
||||
module ActiveModel
|
||||
autoload :Attributes, 'active_model/attributes'
|
||||
autoload :Base, 'active_model/base'
|
||||
autoload :DeprecatedErrorMethods, 'active_model/deprecated_error_methods'
|
||||
autoload :Errors, 'active_model/errors'
|
||||
|
|
17
activemodel/lib/active_model/attributes.rb
Normal file
17
activemodel/lib/active_model/attributes.rb
Normal file
|
@ -0,0 +1,17 @@
|
|||
require 'active_support/core_ext/object/instance_variables'
|
||||
|
||||
module ActiveModel
|
||||
module Attributes
|
||||
def attributes
|
||||
instance_values
|
||||
end
|
||||
|
||||
def read_attribute(attr_name)
|
||||
instance_variable_get(:"@#{attr_name}")
|
||||
end
|
||||
|
||||
def write_attribute(attr_name, value)
|
||||
instance_variable_set(:"@#{attr_name}", value)
|
||||
end
|
||||
end
|
||||
end
|
30
activemodel/test/cases/attributes_test.rb
Normal file
30
activemodel/test/cases/attributes_test.rb
Normal file
|
@ -0,0 +1,30 @@
|
|||
require 'cases/helper'
|
||||
|
||||
class AttributesTest < ActiveModel::TestCase
|
||||
class Person
|
||||
include ActiveModel::Attributes
|
||||
attr_accessor :name
|
||||
end
|
||||
|
||||
test "reads attribute" do
|
||||
p = Person.new
|
||||
assert_equal nil, p.read_attribute(:name)
|
||||
|
||||
p.name = "Josh"
|
||||
assert_equal "Josh", p.read_attribute(:name)
|
||||
end
|
||||
|
||||
test "writes attribute" do
|
||||
p = Person.new
|
||||
assert_equal nil, p.name
|
||||
|
||||
p.write_attribute(:name, "Josh")
|
||||
assert_equal "Josh", p.name
|
||||
end
|
||||
|
||||
test "returns all attributes" do
|
||||
p = Person.new
|
||||
p.name = "Josh"
|
||||
assert_equal({"name" => "Josh"}, p.attributes)
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue