active_attr 0.2.1 → 0.2.2

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.

Potentially problematic release.


This version of active_attr might be problematic. Click here for more details.

data/.yardopts CHANGED
@@ -1 +1 @@
1
- - CHANGELOG* *LICENSE*
1
+ --no-private - CHANGELOG* *LICENSE*
data/CHANGELOG.md CHANGED
@@ -1,4 +1,11 @@
1
- # ActiveAttr 0.2.1 (unreleased) #
1
+ # ActiveAttr 0.2.2 (November 2, 2011) #
2
+
3
+ * Fixed all instances of modules' #initialize not invoking its superclass
4
+ * Fixed redefining an attribute appending a new AttributeDefinition
5
+ * Subclassing a model using Attributes will now copy the parent's attribute
6
+ definitions to the subclass
7
+
8
+ # ActiveAttr 0.2.1 (October 19, 2011) #
2
9
 
3
10
  * Added AttributeDefinition#<=>
4
11
  * Added AttributeDefinition#to_sym
data/Gemfile CHANGED
@@ -9,7 +9,7 @@ group :development do
9
9
  gem "guard-rspec"
10
10
  gem "rb-fsevent"
11
11
  gem "rdiscount"
12
- gem "rdoc"
12
+ gem "rdoc", "~> 3.9.4"
13
13
  gem "ruby-debug", :platforms => :mri_18
14
14
  gem "ruby-debug19", :platforms => :mri_19 if RUBY_VERSION < "1.9.3"
15
15
  gem "spec_coverage", :platforms => :mri_19
data/Guardfile CHANGED
@@ -5,7 +5,7 @@ end
5
5
 
6
6
  guard "rspec", :version => 2, :cli=> "--format nested --debugger" do
7
7
  watch(%r{^spec/.+_spec\.rb$})
8
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
8
+ watch(%r{^lib/(.+)\.rb$}) { |m| ["spec/unit/#{m[1]}_spec.rb", "spec/functional/#{m[1]}_spec.rb"] }
9
9
  watch("spec/spec_helper.rb") { "spec" }
10
10
  watch(%r{^spec/support/(.+)\.rb$}) { |m| "spec" }
11
11
  end
data/Rakefile CHANGED
@@ -2,13 +2,23 @@ require "bundler/setup"
2
2
  require "bundler/gem_tasks"
3
3
  require "rspec/core/rake_task"
4
4
 
5
- task :default => ["spec"]
5
+ task :default => :spec
6
6
 
7
- RSpec::Core::RakeTask.new
7
+ task :spec => %w(spec:units spec:functionals)
8
8
 
9
9
  namespace :spec do
10
10
  desc "Run RSpec specs with code coverate analysis"
11
11
  RSpec::Core::RakeTask.new(:cov) do |spec|
12
12
  spec.rspec_opts = "--format nested --format SpecCoverage"
13
13
  end
14
+
15
+ desc "Run RSpec unit specs"
16
+ RSpec::Core::RakeTask.new(:units) do |spec|
17
+ spec.pattern = "spec/unit/**/*_spec.rb"
18
+ end
19
+
20
+ desc "Run RSpec functional specs"
21
+ RSpec::Core::RakeTask.new(:functionals) do |spec|
22
+ spec.pattern = "spec/functional/**/*_spec.rb"
23
+ end
14
24
  end
data/lib/active_attr.rb CHANGED
@@ -11,6 +11,7 @@ module ActiveAttr
11
11
  autoload :AttributeDefinition
12
12
  autoload :Attributes
13
13
  autoload :BasicModel
14
+ autoload :ChainableInitialization
14
15
  autoload :Error
15
16
  autoload :MassAssignment
16
17
  autoload :StrictMassAssignment
@@ -32,7 +32,7 @@ module ActiveAttr
32
32
  # @example Create an attribute defintion
33
33
  # AttributeDefinition.new(:amount)
34
34
  #
35
- # @param [Symbol, String, #to_sym] attribute name
35
+ # @param [Symbol, String, #to_sym] name attribute name
36
36
  #
37
37
  # @return [ActiveAttr::AttributeDefinition]
38
38
  #
@@ -1,4 +1,5 @@
1
1
  require "active_attr/attribute_definition"
2
+ require "active_attr/chainable_initialization"
2
3
  require "active_model"
3
4
  require "active_support/concern"
4
5
 
@@ -18,6 +19,7 @@ module ActiveAttr
18
19
  # @since 0.2.0
19
20
  module Attributes
20
21
  extend ActiveSupport::Concern
22
+ include ActiveAttr::ChainableInitialization
21
23
  include ActiveModel::AttributeMethods
22
24
 
23
25
  included do
@@ -54,8 +56,9 @@ module ActiveAttr
54
56
  end
55
57
 
56
58
  # @since 0.2.1
57
- def initialize(*args)
59
+ def initialize(*)
58
60
  @attributes ||= {}
61
+ super
59
62
  end
60
63
 
61
64
  # Returns the class name plus its attributes
@@ -119,12 +122,12 @@ module ActiveAttr
119
122
  # @example Define an attribute.
120
123
  # attribute :name
121
124
  #
122
- # @param [Symbol] name The name of the attribute.
125
+ # @param (see AttributeDefinition#initialize)
123
126
  #
124
127
  # @since 0.2.0
125
128
  def attribute(name, options={})
126
129
  AttributeDefinition.new(name, options).tap do |attribute_definition|
127
- attributes << attribute_definition
130
+ attributes << attribute_definition unless attributes.include? attribute_definition
128
131
  define_attribute_method attribute_definition.name
129
132
  end
130
133
  end
@@ -154,6 +157,29 @@ module ActiveAttr
154
157
  attributes_list = "(#{inspected_attributes.join(", ")})" unless inspected_attributes.empty?
155
158
  "#{self.name}#{attributes_list}"
156
159
  end
160
+
161
+ protected
162
+
163
+ # Assign a set of attribute definitions, used when subclassing models
164
+ #
165
+ # @param [Array<ActiveAttr::AttributeDefinition>] The Array of AttributeDefinition instances
166
+ #
167
+ # @since 0.2.2
168
+ def attributes=(attributes)
169
+ @attributes = attributes
170
+ end
171
+
172
+ private
173
+
174
+ # Ruby inherited hook to assign superclass attributes to subclasses
175
+ #
176
+ # @param [Class] subclass
177
+ #
178
+ # @since 0.2.2
179
+ def inherited(subclass)
180
+ super
181
+ subclass.attributes = attributes.dup
182
+ end
157
183
  end
158
184
  end
159
185
  end
@@ -0,0 +1,49 @@
1
+ module ActiveAttr
2
+ # Allows classes and modules to safely invoke super in its initialize method
3
+ #
4
+ # Many ActiveAttr modules enhance the behavior of the \#initialize method,
5
+ # and in doing so, these methods need to accept arguments. However, Ruby's
6
+ # Object and BasicObject classes, in most versions of Ruby, do not allow any
7
+ # arguments to be passed in. This module halts the propgation of
8
+ # initialization arguments before invoking the Object classes'
9
+ # initialization.
10
+ #
11
+ # In order to still allow a subclass mixing in this module (directly or
12
+ # through an ActiveSupport::Concern) to still pass its initialization
13
+ # arguments to its superclass, the module has to install itself into the
14
+ # ancestors of the base class, the class that inherits directly from Object
15
+ # or BasicObject.
16
+ #
17
+ # @since 0.2.2
18
+ module ChainableInitialization
19
+ class << self
20
+ # A collection of Ruby base objects
21
+ # [Object] on Ruby 1.8
22
+ # [Object, BasicObject] on Ruby 1.9
23
+ BASE_OBJECTS = begin
24
+ base_objects = []
25
+ superclass = Class.new
26
+ base_objects << superclass while superclass = superclass.superclass
27
+ base_objects
28
+ end
29
+
30
+ # Only append the features of this module to the class that inherits
31
+ # directly from one of the BASE_OBJECTS
32
+ def append_features(base)
33
+ if base.respond_to? :superclass
34
+ base = base.superclass while !BASE_OBJECTS.include?(base.superclass)
35
+ end
36
+
37
+ super
38
+ end
39
+ end
40
+
41
+ # Continue to propagate any superclass calls, but stop passing arguments
42
+ #
43
+ # This prevents problems in versions of Ruby where Object#initialize does
44
+ # not take arguments
45
+ def initialize(*)
46
+ super()
47
+ end
48
+ end
49
+ end
@@ -1,3 +1,6 @@
1
+ require "active_attr/chainable_initialization"
2
+ require "active_support/concern"
3
+
1
4
  module ActiveAttr
2
5
  # MassAssignment allows you to bulk set and update attributes
3
6
  #
@@ -11,6 +14,9 @@ module ActiveAttr
11
14
  #
12
15
  # @since 0.1.0
13
16
  module MassAssignment
17
+ extend ActiveSupport::Concern
18
+ include ChainableInitialization
19
+
14
20
  # Mass update a model's attributes
15
21
  #
16
22
  # @example Assigning a hash
@@ -54,6 +60,7 @@ module ActiveAttr
54
60
  # @since 0.1.0
55
61
  def initialize(attributes=nil, options={})
56
62
  assign_attributes attributes, options
63
+ super
57
64
  end
58
65
  end
59
66
  end
@@ -22,29 +22,29 @@ module ActiveAttr
22
22
  # @since 0.2.0
23
23
  class HaveAttributeMatcher
24
24
  # @return [Symbol]
25
- # @api private
25
+ # @private
26
26
  attr_reader :attribute_name
27
27
 
28
28
  # @return [String] Description
29
- # @api private
29
+ # @private
30
30
  def description
31
31
  "have attribute named #{attribute_name}"
32
32
  end
33
33
 
34
34
  # @return [String] Failure message
35
- # @api private
35
+ # @private
36
36
  def failure_message
37
37
  "Expected #{@model_class} to #{description}"
38
38
  end
39
39
 
40
40
  # @param [Symbol, String, #to_sym] attribute_name
41
- # @api private
41
+ # @private
42
42
  def initialize(attribute_name)
43
43
  raise TypeError, "can't convert #{attribute_name.class} into Symbol" unless attribute_name.respond_to? :to_sym
44
44
  @attribute_name = attribute_name.to_sym
45
45
  end
46
46
 
47
- # @api private
47
+ # @private
48
48
  def matches?(model_or_model_class)
49
49
  @model_class = class_from(model_or_model_class)
50
50
 
@@ -54,7 +54,7 @@ module ActiveAttr
54
54
  end
55
55
 
56
56
  # @return [String] Negative failure message
57
- # @api private
57
+ # @private
58
58
  def negative_failure_message
59
59
  "Expected #{@model_class} to not #{description}"
60
60
  end
@@ -1,5 +1,5 @@
1
1
  module ActiveAttr
2
2
  # Complete version string
3
3
  # @since 0.1.0
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.2"
5
5
  end
@@ -0,0 +1,111 @@
1
+ require "spec_helper"
2
+ require "active_attr/attributes"
3
+ require "active_model"
4
+
5
+ module ActiveAttr
6
+ describe Attributes do
7
+ context "subclassing a model" do
8
+ let :parent_class do
9
+ Class.new do
10
+ include Attributes
11
+
12
+ attribute :parent
13
+ end
14
+ end
15
+
16
+ let! :child_class do
17
+ Class.new(parent_class) do
18
+ attribute :child
19
+ end
20
+ end
21
+
22
+ context "attributes defined on the parent" do
23
+ subject { child_class.new }
24
+
25
+ it "create a reader on the child" do
26
+ should respond_to :parent
27
+ end
28
+
29
+ it "create a writer on the child" do
30
+ should respond_to :parent=
31
+ end
32
+
33
+ it "add attribute definitions to the child" do
34
+ child_class.attributes.map(&:name).should include :parent
35
+ end
36
+ end
37
+
38
+ context "attributes defined on the child" do
39
+ subject { parent_class.new }
40
+
41
+ it "don't create a reader on the parent" do
42
+ should_not respond_to :child
43
+ end
44
+
45
+ it "don't create a writer on the parent" do
46
+ should_not respond_to :child=
47
+ end
48
+
49
+ it "don't add attribute definitions to the parent" do
50
+ parent_class.attributes.map(&:name).should_not include :child
51
+ end
52
+ end
53
+ end
54
+
55
+ context "serializing a model" do
56
+ let(:first_name) { "Chris" }
57
+
58
+ let :instance do
59
+ model_class.new.tap do |model|
60
+ model.first_name = first_name
61
+ end
62
+ end
63
+
64
+ let :model_class do
65
+ Class.new do
66
+ include Attributes
67
+ include ActiveModel::Serializers::JSON
68
+ include ActiveModel::Serializers::Xml
69
+
70
+ attribute :first_name
71
+ attribute :last_name
72
+
73
+ def self.name
74
+ "Person"
75
+ end
76
+ end
77
+ end
78
+
79
+ shared_examples "serialization method" do
80
+ it "includes assigned attributes" do
81
+ should include("first_name" => first_name)
82
+ end
83
+
84
+ it "includes unassigned, defined attributes" do
85
+ subject.keys.should include("last_name")
86
+ subject["last_name"].should be_nil
87
+ end
88
+ end
89
+
90
+ describe "#as_json" do
91
+ subject { instance.as_json["person"] }
92
+ include_examples "serialization method"
93
+ end
94
+
95
+ describe "#serializable_hash" do
96
+ subject { instance.serializable_hash }
97
+ include_examples "serialization method"
98
+ end
99
+
100
+ describe "#to_json" do
101
+ subject { ActiveSupport::JSON.decode(instance.to_json)["person"] }
102
+ include_examples "serialization method"
103
+ end
104
+
105
+ describe "#to_xml" do
106
+ subject { Hash.from_xml(instance.to_xml)["person"] }
107
+ include_examples "serialization method"
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,93 @@
1
+ require "spec_helper"
2
+ require "active_attr/chainable_initialization"
3
+ require "active_support/concern"
4
+
5
+ module ActiveAttr
6
+ describe ChainableInitialization do
7
+ subject { model_class.new("arg") }
8
+
9
+ shared_examples "chained initialization" do
10
+ describe "#initialize" do
11
+ it { expect { subject }.not_to raise_error }
12
+ it { subject.initialized?.should be_true }
13
+ end
14
+ end
15
+
16
+ context "mixed into a class with an argument to initialize" do
17
+ let :model_class do
18
+ Class.new do
19
+ include InitializationVerifier
20
+ include ChainableInitialization
21
+
22
+ def initialize(arg)
23
+ super
24
+ end
25
+ end
26
+ end
27
+
28
+ include_examples "chained initialization"
29
+ end
30
+
31
+ context "mixed into a subclass with an argument to initialize on the superclass" do
32
+ context "subclassing a model" do
33
+ let :parent_class do
34
+ Class.new do
35
+ include InitializationVerifier
36
+
37
+ def initialize(arg)
38
+ super
39
+ end
40
+ end
41
+ end
42
+
43
+ let :model_class do
44
+ Class.new(parent_class) do
45
+ include ChainableInitialization
46
+
47
+ def initialize(arg)
48
+ super
49
+ end
50
+ end
51
+ end
52
+
53
+ include_examples "chained initialization"
54
+ end
55
+ end
56
+
57
+ context "mixed into a concern which is mixed into a class with an argument to initialize" do
58
+ let :model_class do
59
+ Class.new do
60
+ include InitializationVerifier
61
+
62
+ include Module.new {
63
+ extend ActiveSupport::Concern
64
+ include ChainableInitialization
65
+ }
66
+
67
+ def initialize(arg)
68
+ super
69
+ end
70
+ end
71
+ end
72
+
73
+ include_examples "chained initialization"
74
+ end
75
+
76
+ if defined?(BasicObject)
77
+ context "mixed into a class that inherits from BasicObject with an argument to initialize" do
78
+ let :model_class do
79
+ Class.new(BasicObject) do
80
+ include InitializationVerifier
81
+ include ChainableInitialization
82
+
83
+ def initialize(arg)
84
+ super
85
+ end
86
+ end
87
+ end
88
+
89
+ include_examples "chained initialization"
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,9 @@
1
+ module InitializationVerifier
2
+ def initialize
3
+ @initialized = true
4
+ end
5
+
6
+ def initialized?
7
+ @initialized ||= false
8
+ end
9
+ end
@@ -1,6 +1,8 @@
1
1
  shared_examples "mass assignment class", :mass_assignment => true do
2
2
  let :model_class do
3
3
  Class.new do
4
+ include InitializationVerifier
5
+
4
6
  attr_accessor :first_name, :last_name, :middle_name
5
7
  private :middle_name=
6
8
 
@@ -77,6 +79,10 @@ shared_examples "#initialize", :initialize => true do
77
79
  subject.new(attributes)
78
80
  end
79
81
 
82
+ it "invokes the superclass initializer" do
83
+ subject.new.should be_initialized
84
+ end
85
+
80
86
  it "raises ArgumentError when called with three arguments" do
81
87
  expect { subject.new({}, {}, nil) }.to raise_error ArgumentError
82
88
  end
@@ -7,6 +7,7 @@ module ActiveAttr
7
7
 
8
8
  let :model_class do
9
9
  Class.new do
10
+ include InitializationVerifier
10
11
  include Attributes
11
12
  attribute :name
12
13
  attribute :amount
@@ -19,7 +20,7 @@ module ActiveAttr
19
20
  super
20
21
  end
21
22
 
22
- def amount=(*args)
23
+ def amount=(*)
23
24
  super
24
25
  end
25
26
 
@@ -68,6 +69,14 @@ module ActiveAttr
68
69
  subject.should_receive(:attribute=).with("amount", 1)
69
70
  subject.amount = 1
70
71
  end
72
+
73
+ it "defining an attribute twice does not make appear in the" do
74
+ Class.new do
75
+ include Attributes
76
+ attribute :name
77
+ attribute :name
78
+ end.should have(1).attributes
79
+ end
71
80
  end
72
81
 
73
82
  describe ".attributes" do
@@ -143,6 +152,12 @@ module ActiveAttr
143
152
  end
144
153
  end
145
154
 
155
+ describe "#initialize" do
156
+ it "invokes the superclass initializer" do
157
+ should be_initialized
158
+ end
159
+ end
160
+
146
161
  describe "#inspect" do
147
162
  before { subject.name = "Ben" }
148
163
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_attr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,12 +10,12 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-10-19 00:00:00.000000000 -05:00
13
+ date: 2011-11-02 00:00:00.000000000 -05:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activemodel
18
- requirement: &70255008815760 !ruby/object:Gem::Requirement
18
+ requirement: &70194693834500 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ~>
@@ -23,10 +23,10 @@ dependencies:
23
23
  version: '3.1'
24
24
  type: :runtime
25
25
  prerelease: false
26
- version_requirements: *70255008815760
26
+ version_requirements: *70194693834500
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
- requirement: &70255008814840 !ruby/object:Gem::Requirement
29
+ requirement: &70194693833280 !ruby/object:Gem::Requirement
30
30
  none: false
31
31
  requirements:
32
32
  - - ~>
@@ -34,10 +34,10 @@ dependencies:
34
34
  version: '3.1'
35
35
  type: :runtime
36
36
  prerelease: false
37
- version_requirements: *70255008814840
37
+ version_requirements: *70194693833280
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: bundler
40
- requirement: &70255008813600 !ruby/object:Gem::Requirement
40
+ requirement: &70194693832400 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
43
  - - ~>
@@ -45,10 +45,10 @@ dependencies:
45
45
  version: '1.0'
46
46
  type: :development
47
47
  prerelease: false
48
- version_requirements: *70255008813600
48
+ version_requirements: *70194693832400
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: rake
51
- requirement: &70255008812200 !ruby/object:Gem::Requirement
51
+ requirement: &70194693831640 !ruby/object:Gem::Requirement
52
52
  none: false
53
53
  requirements:
54
54
  - - ~>
@@ -56,10 +56,10 @@ dependencies:
56
56
  version: 0.9.0
57
57
  type: :development
58
58
  prerelease: false
59
- version_requirements: *70255008812200
59
+ version_requirements: *70194693831640
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: rspec
62
- requirement: &70255008809320 !ruby/object:Gem::Requirement
62
+ requirement: &70194693830660 !ruby/object:Gem::Requirement
63
63
  none: false
64
64
  requirements:
65
65
  - - ~>
@@ -67,7 +67,7 @@ dependencies:
67
67
  version: '2.6'
68
68
  type: :development
69
69
  prerelease: false
70
- version_requirements: *70255008809320
70
+ version_requirements: *70194693830660
71
71
  description: Create plain old ruby models without reinventing the wheel.
72
72
  email:
73
73
  - cgriego@gmail.com
@@ -92,6 +92,7 @@ files:
92
92
  - lib/active_attr/attribute_definition.rb
93
93
  - lib/active_attr/attributes.rb
94
94
  - lib/active_attr/basic_model.rb
95
+ - lib/active_attr/chainable_initialization.rb
95
96
  - lib/active_attr/error.rb
96
97
  - lib/active_attr/mass_assignment.rb
97
98
  - lib/active_attr/matchers.rb
@@ -100,18 +101,21 @@ files:
100
101
  - lib/active_attr/strict_mass_assignment.rb
101
102
  - lib/active_attr/unknown_attributes_error.rb
102
103
  - lib/active_attr/version.rb
103
- - spec/active_attr/attribute_definition_spec.rb
104
- - spec/active_attr/attributes_spec.rb
105
- - spec/active_attr/basic_model_spec.rb
106
- - spec/active_attr/error_spec.rb
107
- - spec/active_attr/mass_assignment_spec.rb
108
- - spec/active_attr/matchers/have_attribute_matcher_spec.rb
109
- - spec/active_attr/strict_mass_assignment_spec.rb
110
- - spec/active_attr/unknown_attributes_error_spec.rb
111
- - spec/active_attr/version_spec.rb
104
+ - spec/functional/active_attr/attributes_spec.rb
105
+ - spec/functional/active_attr/chainable_initialization_spec.rb
112
106
  - spec/spec_helper.rb
113
107
  - spec/support/active_model_lint.rb
108
+ - spec/support/initialization_verifier.rb
114
109
  - spec/support/mass_assignment_shared_examples.rb
110
+ - spec/unit/active_attr/attribute_definition_spec.rb
111
+ - spec/unit/active_attr/attributes_spec.rb
112
+ - spec/unit/active_attr/basic_model_spec.rb
113
+ - spec/unit/active_attr/error_spec.rb
114
+ - spec/unit/active_attr/mass_assignment_spec.rb
115
+ - spec/unit/active_attr/matchers/have_attribute_matcher_spec.rb
116
+ - spec/unit/active_attr/strict_mass_assignment_spec.rb
117
+ - spec/unit/active_attr/unknown_attributes_error_spec.rb
118
+ - spec/unit/active_attr/version_spec.rb
115
119
  has_rdoc: true
116
120
  homepage: https://github.com/cgriego/active_attr
117
121
  licenses: []
@@ -127,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
131
  version: '0'
128
132
  segments:
129
133
  - 0
130
- hash: -3746970680425630982
134
+ hash: 2011553241576823901
131
135
  required_rubygems_version: !ruby/object:Gem::Requirement
132
136
  none: false
133
137
  requirements:
@@ -136,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
140
  version: '0'
137
141
  segments:
138
142
  - 0
139
- hash: -3746970680425630982
143
+ hash: 2011553241576823901
140
144
  requirements: []
141
145
  rubyforge_project: active_attr
142
146
  rubygems_version: 1.5.2
@@ -144,15 +148,18 @@ signing_key:
144
148
  specification_version: 3
145
149
  summary: What ActiveModel left out
146
150
  test_files:
147
- - spec/active_attr/attribute_definition_spec.rb
148
- - spec/active_attr/attributes_spec.rb
149
- - spec/active_attr/basic_model_spec.rb
150
- - spec/active_attr/error_spec.rb
151
- - spec/active_attr/mass_assignment_spec.rb
152
- - spec/active_attr/matchers/have_attribute_matcher_spec.rb
153
- - spec/active_attr/strict_mass_assignment_spec.rb
154
- - spec/active_attr/unknown_attributes_error_spec.rb
155
- - spec/active_attr/version_spec.rb
151
+ - spec/functional/active_attr/attributes_spec.rb
152
+ - spec/functional/active_attr/chainable_initialization_spec.rb
156
153
  - spec/spec_helper.rb
157
154
  - spec/support/active_model_lint.rb
155
+ - spec/support/initialization_verifier.rb
158
156
  - spec/support/mass_assignment_shared_examples.rb
157
+ - spec/unit/active_attr/attribute_definition_spec.rb
158
+ - spec/unit/active_attr/attributes_spec.rb
159
+ - spec/unit/active_attr/basic_model_spec.rb
160
+ - spec/unit/active_attr/error_spec.rb
161
+ - spec/unit/active_attr/mass_assignment_spec.rb
162
+ - spec/unit/active_attr/matchers/have_attribute_matcher_spec.rb
163
+ - spec/unit/active_attr/strict_mass_assignment_spec.rb
164
+ - spec/unit/active_attr/unknown_attributes_error_spec.rb
165
+ - spec/unit/active_attr/version_spec.rb