cistern 2.8.1 → 2.8.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
  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: