cistern 2.8.1 → 2.8.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6949d6bf767316892c02a7ae3ae1f14afc2cff8331b4fc0a72bf93295e126e7a
4
- data.tar.gz: d2a27bae1d717ec47ed4f6135cc7fa4e635423a1f81e7facd2b616cf33eed3ef
3
+ metadata.gz: 13428a2696bc1c11c76ec323e498a73268070325702dac6b5107ac16786537a8
4
+ data.tar.gz: 58c19d84a3d6f0b9fd347a10c916aa925136896f91f49634a9c2bbbcc011ed26
5
5
  SHA512:
6
- metadata.gz: '02565729c04cff5108f5b3b7547e635b3c3a56dd239d00bb3108b8106a05ad7a50d79b03992dddea1a136bf66552d97a3c140d282a1218c73c5b0e4df1116b2a'
7
- data.tar.gz: aa96a0b7dd8ad8e985e4ee8c9f1d22f8c8ca673b9ef9346d7771a4b853440791a7acef4a9f95fb6cb2c86b69f0d969bc8c8cc8f62f9a92c793798781601631cc
6
+ metadata.gz: 4f8642906b69eb047b6f907b786a3a42c14e6313ba177f5c314994abdc652285dabbba8cd594e8661c651f3fbf4e926dd82d788bf8a3ae2fb9a902e25a3ad604
7
+ data.tar.gz: 406ed32508a96668915a3485e61dc9f7abd9fc68a9989ff9c1f2ccfb16d5646400501fbad4c29cfdd8d6ee82ef3fe9fffc577d947bcdff4eaf510529e090b22f
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cistern::Associations
4
-
5
4
  def self.extended(klass)
6
5
  def klass.association_overlay
7
6
  @association_overlay ||= const_set(:Associations, Module.new)
@@ -15,7 +14,7 @@ module Cistern::Associations
15
14
  # Lists the associations defined on the resource
16
15
  # @return [Hash{Symbol=>Array}] mapping of association type to name
17
16
  def associations
18
- @associations ||= Hash.new { |h,k| h[k] = [] }
17
+ @associations ||= Hash.new { |h, k| h[k] = [] }
19
18
  end
20
19
 
21
20
  # Define an assocation that references a collection.
@@ -51,9 +50,15 @@ module Cistern::Associations
51
50
 
52
51
  association_overlay.module_eval do
53
52
  define_method writer_method do |models|
54
- attributes[name] = Array(models).map do |model|
55
- model.respond_to?(:attributes) ? model.attributes : model
56
- end
53
+ previous_value = attributes[name_sym]
54
+ new_value =
55
+ attributes[name_sym] = Array(models).map do |model|
56
+ model.respond_to?(:attributes) ? model.attributes : model
57
+ end
58
+
59
+ changed!(name_sym, previous_value, new_value)
60
+
61
+ new_value
57
62
  end
58
63
  end
59
64
 
@@ -90,9 +95,13 @@ module Cistern::Associations
90
95
 
91
96
  association_overlay.module_eval do
92
97
  define_method writer_method do |model|
93
- data = model.respond_to?(:attributes) ? model.attributes : model
94
- attributes[name_sym] = data
95
- model
98
+ previous_value = attributes[name_sym]
99
+ new_value = model.respond_to?(:attributes) ? model.attributes : model
100
+ attributes[name_sym] = new_value
101
+
102
+ changed!(name_sym, previous_value, new_value)
103
+
104
+ new_value
96
105
  end
97
106
  end
98
107
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cistern
4
- VERSION = '2.8.1'
4
+ VERSION = '2.8.2'
5
5
  end
@@ -3,18 +3,35 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe 'Cistern::Model#dirty' do
6
- subject {
6
+ subject do
7
7
  Class.new(Sample::Model) do
8
8
  identity :id
9
9
 
10
10
  attribute :name
11
11
  attribute :properties, type: :array
12
12
 
13
+ has_many :many, -> { [] }
14
+ belongs_to :one, -> { true }
15
+
13
16
  def save
14
17
  merge_attributes(attributes)
15
18
  end
16
19
  end
17
- }
20
+ end
21
+
22
+ it 'marks has_many associations as dirty' do
23
+ model = subject.new(many: [1, 2])
24
+ expect(model.changed).to be_empty
25
+ expect { model.many = [3, 4] }.to change { model.dirty? }.to(true)
26
+ expect(model.changed).to eq(many: [[1, 2], [3, 4]])
27
+ end
28
+
29
+ it 'marks belongs_to associations as dirty' do
30
+ model = subject.new(one: 1)
31
+ expect(model.changed).to be_empty
32
+ expect { model.one = 2 }.to change { model.dirty? }.to(true)
33
+ expect(model.changed).to eq(one: [1, 2])
34
+ end
18
35
 
19
36
  it 'should mark a existing record as dirty' do
20
37
  model = subject.new(id: 1, name: 'steve')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cistern
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.1
4
+ version: 2.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Lane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-01 00:00:00.000000000 Z
11
+ date: 2018-05-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: API client framework extracted from Fog
14
14
  email: