card-mod-history 0.13.4 → 0.14.0

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: 6711d4aa5fe199ee8bf00e6f7dcd62daf0bb919d74c0f1107275d3cf55198072
4
- data.tar.gz: f6c159b0d5c52a4fe94f88764a5985c28e615757c5cb372712170afdf843ef3c
3
+ metadata.gz: a64000335eb221dbc674b8417dd0bdc263de9b261dc818807e0d047473b0622b
4
+ data.tar.gz: 465d80814f678f513eda03f88d08e1ac58320d1f132d7743c66e4b30dccc9501
5
5
  SHA512:
6
- metadata.gz: 927077685819b79cfc7f8f6ea4c629e13e8efb0b318409d4fea207d44214e75222faca5e8448a9f9ca2c1bebf6ce952080885619884b1624e3edd7d328c46fb8
7
- data.tar.gz: d63114f4f3175383bfc9af9c1277747b9682a74372eb175ced6f6bdc41d06cca4bd8b627d58de58abbe17fcb06e46306e8f853a5025dbfb07fe73be1f2cf3cdc
6
+ metadata.gz: c887d9f69ba8bc9a8c2d5d763e140e38b8e1cbb3fa6412413429742e2a851c57f4978f73fa8fdcd2c10d9f68675b2b7bf8eb427b4acfeab6f7bdc417bc9e8689
7
+ data.tar.gz: e4c7b7455a6b91d76e345764d9e9aea30f4f3c9148c69975fd28c0d12ea427921dfc6fced5d3fca45ec39930f7c4f6b32bbfc2be2777fd65e7338c26ff5492ca
data/lib/card/act.rb CHANGED
@@ -72,16 +72,15 @@ class Card
72
72
  Card.fetch actor_id
73
73
  end
74
74
 
75
+ # sometimes Object#card_id interferes with default ActiveRecord attribute def
76
+ def card_id
77
+ _read_attribute "card_id"
78
+ end
79
+
75
80
  # the act's primary card
76
81
  # @return [Card]
77
82
  def card
78
- Card.fetch card_id, look_in_trash: true # , skip_modules: true
79
-
80
- # FIXME: if the following is necessary, we need to document why.
81
- # generally it's a very bad idea to have type-specific code here.
82
-
83
- # return res unless res&.type_id&.in?([Card::FileID, Card::ImageID])
84
- # res.include_set_modules
83
+ Card.fetch card_id, look_in_trash: true
85
84
  end
86
85
 
87
86
  # list of all actions that are part of the act
@@ -0,0 +1,114 @@
1
+ class Card
2
+ class Action
3
+ # methods for relating Card::Action to Card::Change
4
+ module Changes
5
+ # value set by action's {Change} to given field
6
+ # @see #interpret_field #interpret_field for field param
7
+ # @see #interpret_value #interpret_value for return values
8
+ def value field
9
+ return unless (change = change field)
10
+
11
+ interpret_value field, change.value
12
+ end
13
+
14
+ # value of field set by most recent {Change} before this one
15
+ # @see #interpret_field #interpret_field for field param
16
+ # @see #interpret_field #interpret_field for field param
17
+ def previous_value field
18
+ return if action_type == :create
19
+ return unless (previous_change = previous_change field)
20
+
21
+ interpret_value field, previous_change.value
22
+ end
23
+
24
+ # action's {Change} object for given field
25
+ # @see #interpret_field #interpret_field for field param
26
+ # @return [Change]
27
+ def change field
28
+ changes[interpret_field field]
29
+ end
30
+
31
+ # most recent change to given field before this one
32
+ # @see #interpret_field #interpret_field for field param
33
+ # @return [Change]
34
+ def previous_change field
35
+ return nil if action_type == :create
36
+
37
+ field = interpret_field field
38
+ if @previous_changes&.key?(field)
39
+ @previous_changes[field]
40
+ else
41
+ @previous_changes ||= {}
42
+ @previous_changes[field] = card.last_change_on field, before: self
43
+ end
44
+ end
45
+
46
+ def all_changes
47
+ self.class.cache.fetch("#{id}-changes") do
48
+ # using card_changes causes caching problem
49
+ Card::Change.where(card_action_id: id).to_a
50
+ end
51
+ end
52
+
53
+ # all action {Change changes} in hash form. { field1: Change1 }
54
+ # @return [Hash]
55
+ def changes
56
+ @changes ||=
57
+ if sole?
58
+ current_changes
59
+ else
60
+ all_changes.each_with_object({}) do |change, hash|
61
+ hash[change.field.to_sym] = change
62
+ end
63
+ end
64
+ end
65
+
66
+ # all changed values in hash form. { field1: new_value }
67
+ def changed_values
68
+ @changed_values ||= changes.transform_values(&:value)
69
+ end
70
+
71
+ # @return [Hash]
72
+ def current_changes
73
+ return {} unless card
74
+
75
+ @current_changes ||=
76
+ Card::Change::TRACKED_FIELDS.each_with_object({}) do |field, hash|
77
+ hash[field.to_sym] = Card::Change.new field: field,
78
+ value: card.send(field),
79
+ card_action_id: id
80
+ end
81
+ end
82
+
83
+ private
84
+
85
+ # translate field into fieldname as referred to in database
86
+ # @see Change::TRACKED_FIELDS
87
+ # @param field [Symbol] can be :type_id, :cardtype, :db_content, :content,
88
+ # :name, :trash
89
+ # @return [Symbol]
90
+ def interpret_field field
91
+ case field
92
+ when :content then :db_content
93
+ when :cardtype then :type_id
94
+ else field.to_sym
95
+ end
96
+ end
97
+
98
+ # value in form prescribed for specific field name
99
+ # @param value [value of {Change}]
100
+ # @return [Integer] for :type_id
101
+ # @return [String] for :name, :db_content, :content, :cardtype
102
+ # @return [True/False] for :trash
103
+ def interpret_value field, value
104
+ case field.to_sym
105
+ when :type_id
106
+ value&.to_i
107
+ when :cardtype
108
+ Card.fetch_name(value&.to_i)
109
+ else value
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
data/lib/card/action.rb CHANGED
@@ -22,6 +22,7 @@ class Card
22
22
  #
23
23
  class Action < Cardio::Record
24
24
  include Differ
25
+ include Changes
25
26
  extend Admin
26
27
 
27
28
  belongs_to :act, foreign_key: :card_act_id, inverse_of: :ar_actions
@@ -67,6 +68,11 @@ class Card
67
68
  end
68
69
  end
69
70
 
71
+ # sometimes Object#card_id interferes with default ActiveRecord attribute def
72
+ def card_id
73
+ _read_attribute "card_id"
74
+ end
75
+
70
76
  # each action is associated with on and only one card
71
77
  # @return [Card]
72
78
  def card
@@ -114,112 +120,6 @@ class Card
114
120
  Card::Action.where("id < ? AND card_id = ?", id, card_id).last
115
121
  end
116
122
 
117
- # value set by action's {Change} to given field
118
- # @see #interpret_field #interpret_field for field param
119
- # @see #interpret_value #interpret_value for return values
120
- def value field
121
- return unless (change = change field)
122
-
123
- interpret_value field, change.value
124
- end
125
-
126
- # value of field set by most recent {Change} before this one
127
- # @see #interpret_field #interpret_field for field param
128
- # @see #interpret_field #interpret_field for field param
129
- def previous_value field
130
- return if action_type == :create
131
- return unless (previous_change = previous_change field)
132
-
133
- interpret_value field, previous_change.value
134
- end
135
-
136
- # action's {Change} object for given field
137
- # @see #interpret_field #interpret_field for field param
138
- # @return [Change]
139
- def change field
140
- changes[interpret_field field]
141
- end
142
-
143
- # most recent change to given field before this one
144
- # @see #interpret_field #interpret_field for field param
145
- # @return [Change]
146
- def previous_change field
147
- return nil if action_type == :create
148
-
149
- field = interpret_field field
150
- if @previous_changes&.key?(field)
151
- @previous_changes[field]
152
- else
153
- @previous_changes ||= {}
154
- @previous_changes[field] = card.last_change_on field, before: self
155
- end
156
- end
157
-
158
- def all_changes
159
- self.class.cache.fetch("#{id}-changes") do
160
- # using card_changes causes caching problem
161
- Card::Change.where(card_action_id: id).to_a
162
- end
163
- end
164
-
165
- # all action {Change changes} in hash form. { field1: Change1 }
166
- # @return [Hash]
167
- def changes
168
- @changes ||=
169
- if sole?
170
- current_changes
171
- else
172
- all_changes.each_with_object({}) do |change, hash|
173
- hash[change.field.to_sym] = change
174
- end
175
- end
176
- end
177
-
178
- # all changed values in hash form. { field1: new_value }
179
- def changed_values
180
- @changed_values ||= changes.transform_values(&:value)
181
- end
182
-
183
- # @return [Hash]
184
- def current_changes
185
- return {} unless card
186
-
187
- @current_changes ||=
188
- Card::Change::TRACKED_FIELDS.each_with_object({}) do |field, hash|
189
- hash[field.to_sym] = Card::Change.new field: field,
190
- value: card.send(field),
191
- card_action_id: id
192
- end
193
- end
194
-
195
- # translate field into fieldname as referred to in database
196
- # @see Change::TRACKED_FIELDS
197
- # @param field [Symbol] can be :type_id, :cardtype, :db_content, :content,
198
- # :name, :trash
199
- # @return [Symbol]
200
- def interpret_field field
201
- case field
202
- when :content then :db_content
203
- when :cardtype then :type_id
204
- else field.to_sym
205
- end
206
- end
207
-
208
- # value in form prescribed for specific field name
209
- # @param value [value of {Change}]
210
- # @return [Integer] for :type_id
211
- # @return [String] for :name, :db_content, :content, :cardtype
212
- # @return [True/False] for :trash
213
- def interpret_value field, value
214
- case field.to_sym
215
- when :type_id
216
- value&.to_i
217
- when :cardtype
218
- Card.fetch_name(value&.to_i)
219
- else value
220
- end
221
- end
222
-
223
123
  def sole?
224
124
  all_changes.empty? &&
225
125
  (action_type == :create || Card::Action.where(card_id: card_id).count == 1)
data/locales/de.yml ADDED
@@ -0,0 +1,2 @@
1
+ de:
2
+ history_error_not_latest_revision: Änderungen basieren nicht auf der letzten Revision
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: card-mod-history
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.4
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan McCutchen
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-09-24 00:00:00.000000000 Z
13
+ date: 2021-12-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: card
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 1.103.4
21
+ version: 1.104.0
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - '='
27
27
  - !ruby/object:Gem::Version
28
- version: 1.103.4
28
+ version: 1.104.0
29
29
  description: ''
30
30
  email:
31
31
  - info@decko.org
@@ -41,8 +41,10 @@ files:
41
41
  - lib/card/action.rb
42
42
  - lib/card/action/action_renderer.rb
43
43
  - lib/card/action/admin.rb
44
+ - lib/card/action/changes.rb
44
45
  - lib/card/action/differ.rb
45
46
  - lib/card/change.rb
47
+ - locales/de.yml
46
48
  - locales/en.yml
47
49
  - set/all/history.rb
48
50
  - set/all/history/act_listing.rb
@@ -79,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
81
  - !ruby/object:Gem::Version
80
82
  version: '0'
81
83
  requirements: []
82
- rubygems_version: 3.1.6
84
+ rubygems_version: 3.2.15
83
85
  signing_key:
84
86
  specification_version: 4
85
87
  summary: Revision histories in acts, actions, and changes