activemodel-associations 0.0.1 → 0.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 78d28b409b8b4a0658df2eb0729e3737a7cf5fe6
4
- data.tar.gz: 3b84b0cbff584770cd0e8c247b036111d9a7a300
3
+ metadata.gz: 3d9c6e4e10b3abbddc32adb581c7986a5cb62efc
4
+ data.tar.gz: 5dc2e3d9acb6351c8d041f252e43454d221bd3e9
5
5
  SHA512:
6
- metadata.gz: 56f110e11d873c9916cb51325753d95f250957b225739df87b6812e33c62a01df41e8f1768f0f6fe08a6e74a5ed8ae429a10658f23a759740fda8c299e3bb898
7
- data.tar.gz: 1e83f7e627843b46949b8d6d1c7f48938c09513ccf47d291580df107d3fc84c8a20248c670ebc5c15484818bf9786eba0b7235456e3a838fd7e014ca1e509b48
6
+ metadata.gz: bdb223dd6a00f9571869a04cde42dbaabe997fefd9a02fc9bb9dac6ceb964b48f36ef84f5b8c41f259083ff7ddc315875013e01278cb6038961ce63919669e09
7
+ data.tar.gz: 1b75beaef925ef9149e7ebcefaf167eb094263a2b552224e56972d5ea6fafa331ab293d0960679378bbf71ffcf3813b910b19fe93bacd07f31749c615a48db8d
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Activemodel::Association
1
+ # Activemodel::Associations
2
2
  [![Build Status](https://travis-ci.org/joker1007/activemodel-associations.svg?branch=master)](https://travis-ci.org/joker1007/activemodel-associations)
3
3
  [![Coverage Status](https://coveralls.io/repos/joker1007/activemodel-associations/badge.png)](https://coveralls.io/r/joker1007/activemodel-associations)
4
4
 
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
8
8
  spec.version = ActiveModel::Associations::VERSION
9
9
  spec.authors = ["joker1007"]
10
10
  spec.email = ["kakyoin.hierophant@gmail.com"]
11
- spec.summary = %q{ActiveRecord Association Helper for PORO}
12
- spec.description = %q{ActiveRecord Association Helper for PORO}
13
- spec.homepage = ""
11
+ spec.summary = %q{ActiveRecord Association Helper for PORO (Plain Old Ruby Object)}
12
+ spec.description = %q{ActiveRecord Association Helper for PORO (Plain Old Ruby Object)}
13
+ spec.homepage = "https://github.com/joker1007/activemodel-associations"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
@@ -1,5 +1,5 @@
1
1
  module ActiveModel
2
2
  module Associations
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -12,20 +12,43 @@ module ActiveRecord::Associations
12
12
 
13
13
  # full replace simplely
14
14
  def replace(other_array)
15
+ original_target = load_target.dup
15
16
  other_array.each { |val| raise_on_type_mismatch!(val) }
16
17
  target_ids = reflection.options[:target_ids]
17
18
  owner[target_ids] = other_array.map(&:id)
19
+
20
+ old_records = original_target - other_array
21
+ old_records.each do |record|
22
+ @target.delete(record)
23
+ end
24
+
25
+ other_array.each do |record|
26
+ if index = @target.index(record)
27
+ @target[index] = record
28
+ else
29
+ @target << record
30
+ end
31
+ end
18
32
  end
19
33
 
20
- # no need load_target, and transaction
34
+ # no need transaction
21
35
  def concat(*records)
36
+ load_target
22
37
  flatten_records = records.flatten
23
38
  flatten_records.each { |val| raise_on_type_mismatch!(val) }
24
39
  target_ids = reflection.options[:target_ids]
25
40
  owner[target_ids] ||= []
26
41
  owner[target_ids].concat(flatten_records.map(&:id))
27
- reset
28
- reset_scope
42
+
43
+ flatten_records.each do |record|
44
+ if index = @target.index(record)
45
+ @target[index] = record
46
+ else
47
+ @target << record
48
+ end
49
+ end
50
+
51
+ target
29
52
  end
30
53
  end
31
54
  end
@@ -132,8 +132,8 @@ describe ActiveModel::Associations do
132
132
  end
133
133
 
134
134
  describe "defined accessor" do
135
- let(:user1) { User.create(name: "joker1007") }
136
- let(:user2) { User.create(name: "kakyoin") }
135
+ let!(:user1) { User.create(name: "joker1007") }
136
+ let!(:user2) { User.create(name: "kakyoin") }
137
137
  let(:group) { Group.new(user_ids: [user1.id, user2.id]) }
138
138
 
139
139
  it "returns ActiveRecord CollectionProxy of target class" do
@@ -148,6 +148,21 @@ describe ActiveModel::Associations do
148
148
  expect(group.users).to eq [user1, user2]
149
149
  end
150
150
 
151
+ it "replace target, and set target_ids attributes" do
152
+ expect(group.users).to eq [user1, user2]
153
+ group.users = [user1]
154
+ expect(group.users).to eq [user1]
155
+ group.users = []
156
+ expect(group.users).to be_empty
157
+ end
158
+
159
+ it "receives target ActiveRecord CollectionProxy, and set target_ids attributes" do
160
+ group = Group.new
161
+ expect(group.users).to be_empty
162
+ group.users = User.all
163
+ expect(group.users).to eq [user1, user2]
164
+ end
165
+
151
166
  it "can replace having association" do
152
167
  user3 = User.create(name: "jotaro")
153
168
  group = Group.new
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activemodel-associations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - joker1007
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-08 00:00:00.000000000 Z
11
+ date: 2014-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -150,7 +150,7 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
- description: ActiveRecord Association Helper for PORO
153
+ description: ActiveRecord Association Helper for PORO (Plain Old Ruby Object)
154
154
  email:
155
155
  - kakyoin.hierophant@gmail.com
156
156
  executables: []
@@ -182,7 +182,7 @@ files:
182
182
  - spec/db/migrate/10_create_users.rb
183
183
  - spec/lib/active_model/association_spec.rb
184
184
  - spec/spec_helper.rb
185
- homepage: ''
185
+ homepage: https://github.com/joker1007/activemodel-associations
186
186
  licenses:
187
187
  - MIT
188
188
  metadata: {}
@@ -205,7 +205,7 @@ rubyforge_project:
205
205
  rubygems_version: 2.2.2
206
206
  signing_key:
207
207
  specification_version: 4
208
- summary: ActiveRecord Association Helper for PORO
208
+ summary: ActiveRecord Association Helper for PORO (Plain Old Ruby Object)
209
209
  test_files:
210
210
  - spec/db/migrate/10_create_users.rb
211
211
  - spec/lib/active_model/association_spec.rb