her 0.7.1 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/her/model/associations.rb +10 -0
- data/lib/her/model/attributes.rb +5 -1
- data/lib/her/model/nested_attributes.rb +3 -3
- data/lib/her/version.rb +1 -1
- data/spec/model/dirty_spec.rb +13 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3f3ebeacfc88f8ba6fbb3dc98cb7527975c8531
|
4
|
+
data.tar.gz: c96e0c1b82ef1528529ac806a3d1b71e7e1aa434
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71d3c48cf6fc0aa560e5349d695cc234d981602d721e9c6d59e3ce64ab2b4916af39ff360c691c5e1a3f341381d6d4fc158b19d17cacb6ea0fc7310f18fe9d70
|
7
|
+
data.tar.gz: fdda014a8f9c66bf5f9f99b013022be531a798912a8e856d1b098fc846017e181237813849ebad7961d206ad799ab08948f47d64591a0b1955f3a9d3ff3cd476
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
<a href="https://rubygems.org/gems/her"><img src="http://img.shields.io/gem/v/her.svg" /></a>
|
9
9
|
<a href="https://codeclimate.com/github/remiprev/her"><img src="http://img.shields.io/codeclimate/github/remiprev/her.svg" /></a>
|
10
10
|
<a href='https://gemnasium.com/remiprev/her'><img src="http://img.shields.io/gemnasium/remiprev/her.svg" /></a>
|
11
|
-
<a href="https://travis-ci.org/remiprev/her"><img src="http://img.shields.io/travis/remiprev/her.svg" /></a>
|
11
|
+
<a href="https://travis-ci.org/remiprev/her"><img src="http://img.shields.io/travis/remiprev/her/master.svg" /></a>
|
12
12
|
</p>
|
13
13
|
|
14
14
|
---
|
@@ -36,6 +36,16 @@ module Her
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
+
# @private
|
40
|
+
def association_names
|
41
|
+
associations.inject([]) { |memo, (name, details)| memo << details }.flatten.map { |a| a[:name] }
|
42
|
+
end
|
43
|
+
|
44
|
+
# @private
|
45
|
+
def association_keys
|
46
|
+
associations.inject([]) { |memo, (name, details)| memo << details }.flatten.map { |a| a[:data_key] }
|
47
|
+
end
|
48
|
+
|
39
49
|
# Parse associations data after initializing a new object
|
40
50
|
#
|
41
51
|
# @private
|
data/lib/her/model/attributes.rb
CHANGED
@@ -49,8 +49,12 @@ module Her
|
|
49
49
|
#
|
50
50
|
# @private
|
51
51
|
def self.use_setter_methods(model, params)
|
52
|
-
setter_method_names = model.class.setter_method_names
|
53
52
|
params ||= {}
|
53
|
+
|
54
|
+
reserved_keys = [:id, model.class.primary_key] + model.class.association_keys
|
55
|
+
model.class.attributes *params.keys.reject { |k| reserved_keys.include?(k) || reserved_keys.map(&:to_s).include?(k) }
|
56
|
+
|
57
|
+
setter_method_names = model.class.setter_method_names
|
54
58
|
params.inject({}) do |memo, (key, value)|
|
55
59
|
setter_method = key.to_s + '='
|
56
60
|
if setter_method_names.include?(setter_method)
|
@@ -20,10 +20,10 @@ module Her
|
|
20
20
|
#
|
21
21
|
# user = User.new(name: "Tobias", role_attributes: { title: "moderator" })
|
22
22
|
# user.role # => #<Role title="moderator">
|
23
|
-
def accepts_nested_attributes_for(*
|
24
|
-
allowed_association_names =
|
23
|
+
def accepts_nested_attributes_for(*associations)
|
24
|
+
allowed_association_names = association_names
|
25
25
|
|
26
|
-
|
26
|
+
associations.each do |association_name|
|
27
27
|
unless allowed_association_names.include?(association_name)
|
28
28
|
raise Her::Errors::AssociationUnknownError.new("Unknown association name :#{association_name}")
|
29
29
|
end
|
data/lib/her/version.rb
CHANGED
data/spec/model/dirty_spec.rb
CHANGED
@@ -10,6 +10,7 @@ describe "Her::Model and ActiveModel::Dirty" do
|
|
10
10
|
builder.adapter :test do |stub|
|
11
11
|
stub.get("/users/1") { |env| [200, {}, { :id => 1, :fullname => "Lindsay Fünke" }.to_json] }
|
12
12
|
stub.get("/users/2") { |env| [200, {}, { :id => 2, :fullname => "Maeby Fünke" }.to_json] }
|
13
|
+
stub.get("/users/3") { |env| [200, {}, { :user_id => 3, :fullname => "Maeby Fünke" }.to_json] }
|
13
14
|
stub.put("/users/1") { |env| [200, {}, { :id => 1, :fullname => "Tobias Fünke" }.to_json] }
|
14
15
|
stub.put("/users/2") { |env| [400, {}, { :errors => ["Email cannot be blank"] }.to_json] }
|
15
16
|
stub.post("/users") { |env| [200, {}, { :id => 1, :fullname => "Tobias Fünke" }.to_json] }
|
@@ -19,6 +20,9 @@ describe "Her::Model and ActiveModel::Dirty" do
|
|
19
20
|
spawn_model "Foo::User" do
|
20
21
|
attributes :fullname, :email
|
21
22
|
end
|
23
|
+
spawn_model "Dynamic::User" do
|
24
|
+
primary_key :user_id
|
25
|
+
end
|
22
26
|
end
|
23
27
|
|
24
28
|
context "for existing resource" do
|
@@ -36,11 +40,20 @@ describe "Her::Model and ActiveModel::Dirty" do
|
|
36
40
|
user.save
|
37
41
|
user.should_not be_changed
|
38
42
|
end
|
43
|
+
|
39
44
|
it "tracks previous changes" do
|
40
45
|
user.fullname = "Tobias Fünke"
|
41
46
|
user.save
|
42
47
|
user.previous_changes.should eq({"fullname"=>"Lindsay Fünke"})
|
43
48
|
end
|
49
|
+
|
50
|
+
it 'tracks dirty attribute for mass assign for dynamic created attributes' do
|
51
|
+
user = Dynamic::User.find(3)
|
52
|
+
user.assign_attributes(:fullname => 'New Fullname')
|
53
|
+
user.fullname_changed?.should be_truthy
|
54
|
+
user.should be_changed
|
55
|
+
user.changes.length.should eq(1)
|
56
|
+
end
|
44
57
|
end
|
45
58
|
|
46
59
|
context "with erroneous save" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: her
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rémi Prévost
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|