card-mod-history 0.11.2 → 0.12.0

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: 286bded3a208950a302fd702d114bcc8282b9c99c78842e0c9869cce83c0b19f
4
- data.tar.gz: 79163beb623d989a421a58e980b9e240d473bb85d8e59e299233e4b2df2c4847
3
+ metadata.gz: d848324e8a24e138fcc1ec9f18e99ecfd18f7ea5e0ff9799e2b82f0f5a2becca
4
+ data.tar.gz: 505d838330e918f31384618fe6ec82464f13a28cd62027194d8a10ddcad99eee
5
5
  SHA512:
6
- metadata.gz: aa183bb4950d1f6c21251a690348718d8df8380428564dfa1718bfd8963a5dcf71fa027c71ffd66bfd2fbc0af9d95662057291c0a1d7558900ecd6f742f041ea
7
- data.tar.gz: a2e9354cd5fc2c789f439aa5c764c49e023f3289d51663e7a79620ecc3e8fb0255e40a5b84c41b2be5d63b2aad6803260a74e44ba6e3f9dc496769f1d7f6adb7
6
+ metadata.gz: 2188ff8e94fc293926720efdc1577ac67f57c311388ff0f2aea52ebe237ad27b52a10c64519bd58cc700f5bc6a56eda3129af9e5648127af9a053d3b73d5fa79
7
+ data.tar.gz: d1fd88f32ba0976226a5722e76542f3c83a934c2bcd2c4ac103b22feee3be0c2bbcd42b69092837dae111dcfc7030fead37e4ce75bbc65026c37fe5032005816
data/lib/card/act.rb CHANGED
@@ -16,7 +16,7 @@ class Card
16
16
  # - _acted_at_, a timestamp of the action
17
17
  # - the _ip_address_ of the actor where applicable.
18
18
  #
19
- class Act < ApplicationRecord
19
+ class Act < Cardio::Record
20
20
  before_save :assign_actor
21
21
  has_many :ar_actions, -> { order :id }, foreign_key: :card_act_id,
22
22
  inverse_of: :act,
@@ -108,7 +108,7 @@ class Card
108
108
  end
109
109
 
110
110
  def draft?
111
- main_action.draft
111
+ main_action&.draft
112
112
  end
113
113
 
114
114
  # time (in words) since act took place
@@ -10,7 +10,7 @@ class Card
10
10
  @context = @args[:act_context]
11
11
  end
12
12
 
13
- include ::Bootstrapper
13
+ include Card::Bootstrapper
14
14
 
15
15
  def method_missing method_name, *args, &block
16
16
  if block_given?
@@ -31,7 +31,7 @@ class Card
31
31
  end
32
32
 
33
33
  def header
34
- #::Bootstrap.new(self).render do
34
+ # Card::Bootstrap.new(self).render do
35
35
  bs_layout do
36
36
  row xs: [10, 2] do
37
37
  column do
@@ -123,7 +123,7 @@ class Card
123
123
  # here. The problem is that here we have extra links in the title
124
124
  # that are not supposed to expand the accordion
125
125
  def act_accordion
126
- context = @act.main_action.draft ? :warning : :default
126
+ context = @act.main_action&.draft ? :warning : :default
127
127
  <<-HTML
128
128
  <div class="card card-#{context} nodblclick">
129
129
  #{act_accordion_panel}
@@ -173,7 +173,7 @@ class Card
173
173
  # save as current:
174
174
  # not current, not deletion
175
175
  def rollback_link
176
- return unless card.ok? :update
176
+ return unless @card.ok? :update
177
177
 
178
178
  wrap_with :div, class: "act-link collapse #{collapse_id} float-right" do
179
179
  content_tag(:small, revert_link)
@@ -22,7 +22,7 @@ class Card
22
22
  def revert_link
23
23
  revert_actions_link "revert to previous",
24
24
  { revert_to: :previous, revert_act: @act.id },
25
- "data-slot-selector": "#main > .card-slot"
25
+ { "data-slot-selector": "#main > .card-slot" }
26
26
  end
27
27
 
28
28
  def actions
@@ -6,9 +6,8 @@ class Card
6
6
  # for the card of the format that renders the act.
7
7
  class RelativeActRenderer < ActRenderer
8
8
  def title
9
- "<span class=\"nr\">##{@args[:act_seq]}</span>" +
9
+ %(<span class="nr">##{@args[:act_seq]}</span>) +
10
10
  accordion_expand_link(@act.actor.name) +
11
- " " +
12
11
  wrap_with(:small, edited_ago)
13
12
  end
14
13
 
@@ -50,8 +49,8 @@ class Card
50
49
  def revert_link
51
50
  revert_actions_link "revert to this",
52
51
  { revert_actions: actions.map(&:id) },
53
- class: "_close-modal",
54
- "data-slotter-mode": "update-modal-origin"
52
+ { class: "_close-modal",
53
+ "data-slotter-mode": "update-modal-origin" }
55
54
  end
56
55
  end
57
56
  end
data/lib/card/action.rb CHANGED
@@ -20,7 +20,7 @@ class Card
20
20
  # * a boolean indicated whether the action is a _draft_
21
21
  # * a _comment_ (where applicable)
22
22
  #
23
- class Action < ApplicationRecord
23
+ class Action < Cardio::Record
24
24
  include Differ
25
25
  extend Admin
26
26
 
@@ -48,7 +48,7 @@ class Card
48
48
  # @return [Action, nil]
49
49
  def fetch id
50
50
  cache.fetch id.to_s do
51
- find id.to_i
51
+ where(id: id.to_i).take
52
52
  end
53
53
  end
54
54
 
@@ -177,9 +177,7 @@ class Card
177
177
 
178
178
  # all changed values in hash form. { field1: new_value }
179
179
  def changed_values
180
- @changed_values ||= changes.each_with_object({}) do |(key, change), h|
181
- h[key] = change.value
182
- end
180
+ @changed_values ||= changes.transform_values(&:value)
183
181
  end
184
182
 
185
183
  # @return [Hash]
@@ -2,6 +2,7 @@ class Card
2
2
  class Action
3
3
  class ActionRenderer
4
4
  attr_reader :action, :header
5
+
5
6
  def initialize format, action, header=true, action_view=:summary, hide_diff=false
6
7
  @format = format
7
8
  @action = action
@@ -10,7 +11,7 @@ class Card
10
11
  @hide_diff = hide_diff
11
12
  end
12
13
 
13
- include ::Bootstrapper
14
+ include Card::Bootstrapper
14
15
  def method_missing method_name, *args, &block
15
16
  if block_given?
16
17
  @format.send(method_name, *args, &block)
@@ -58,7 +59,7 @@ class Card
58
59
  else
59
60
  link_to_view(
60
61
  :related, name_changes,
61
- path: { slot: { items: { view: "history", nest_name: @action.card.name } } },
62
+ path: { slot: { items: { view: "history", nest_name: @action.card.name } } }
62
63
  # "data-slot-selector" => ".card-slot.history-view"
63
64
  )
64
65
  end
data/lib/card/change.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # -*- encoding : utf-8 -*-
2
- require 'activerecord-import'
2
+
3
+ require "activerecord-import"
3
4
 
4
5
  class Card
5
6
  # A _change_ is an alteration to a card's name, type, content, or trash state.
@@ -16,7 +17,7 @@ class Card
16
17
  # * the new _value_ of that field
17
18
  # * the {Action action} of which the change is part
18
19
  #
19
- class Change < ApplicationRecord
20
+ class Change < Cardio::Record
20
21
  belongs_to :action, foreign_key: :card_action_id,
21
22
  inverse_of: :card_changes
22
23
 
data/set/all/history.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  event :update_ancestor_timestamps, :integrate do
2
2
  ids = history_ancestor_ids
3
3
  return unless ids.present?
4
+
4
5
  Card.where(id: ids).update_all(updater_id: Auth.current_id, updated_at: Time.now)
5
6
  ids.map { |anc_id| Card.expire anc_id.cardname }
6
7
  end
@@ -24,7 +25,7 @@ def history_ancestor_ids recursion_level=0
24
25
  return [] if recursion_level > 5
25
26
 
26
27
  ids = history_parent_ids +
27
- history_parent_ids.map { |id| Card[id].history_ancestor_ids(recursion_level + 1) }
28
+ history_parent_ids.map { |id| Card[id].history_ancestor_ids(recursion_level + 1) }
28
29
  ids.flatten
29
30
  end
30
31
 
@@ -86,8 +86,11 @@ format :html do
86
86
 
87
87
  def act_paging acts, context
88
88
  return unless controller.request # paginate requires a request
89
+
89
90
  wrap_with :div, class: "slotter btn-sm" do
90
- paginate current_page_acts(acts), act_paging_opts(context)
91
+ # normally we let method_missing handle the action_view stuff,
92
+ # but that doesn't handle **arguments yet
93
+ action_view.send :paginate, current_page_acts(acts), **act_paging_opts(context)
91
94
  end
92
95
  end
93
96
 
@@ -7,12 +7,16 @@ end
7
7
  def action_from_id action_id
8
8
  return unless action_id.is_a?(Integer) || action_id =~ /^\d+$/
9
9
 
10
- # if not an integer revision id is probably a mod (e.g. if you request
10
+ # if not an integer, action_id is probably a mod (e.g. if you request
11
11
  # files/:logo/standard.png)
12
- action = Action.fetch action_id
13
- return unless action.card_id == id
14
12
 
15
- action
13
+ action_if_on_self Action.fetch(action_id)
14
+ end
15
+
16
+ def action_if_on_self action
17
+ return unless action.is_a? Action
18
+
19
+ action if action.card_id == id
16
20
  end
17
21
 
18
22
  def old_actions
@@ -18,7 +18,7 @@ def actionable?
18
18
  end
19
19
 
20
20
  event :detect_conflict, :validate, on: :update, when: :edit_conflict? do
21
- errors.add :conflict, tr(:error_not_latest_revision)
21
+ errors.add :conflict, Cardio.t(:history_error_not_latest_revision)
22
22
  end
23
23
 
24
24
  def edit_conflict?
@@ -34,7 +34,7 @@ event :finalize_action, :finalize, when: :finalize_action? do
34
34
  if changed_fields.present?
35
35
  @current_action.update! card_id: id
36
36
 
37
- # Note: #last_change_on uses the id to sort by date
37
+ # NOTE: #last_change_on uses the id to sort by date
38
38
  # so the changes for the create changes have to be created before the first change
39
39
  store_card_changes_for_create_action if first_change?
40
40
  store_card_changes unless first_create?
@@ -64,7 +64,7 @@ def store_each_history_field action_id, fields=nil
64
64
  if false # Card::Change.supports_import?
65
65
  # attach.feature fails with this
66
66
  values = fields.map.with_index { |field, index| [index, yield(field), action_id] }
67
- Card::Change.import [:field, :value, :card_action_id], values #, validate: false
67
+ Card::Change.import %i[field value card_action_id], values # , validate: false
68
68
  else
69
69
  fields.each do |field|
70
70
  Card::Change.create field: field,
@@ -24,7 +24,7 @@ def select_action action_id
24
24
  end
25
25
 
26
26
  def selected_action_id
27
- @selected_action_id || (@current_action&.id) || last_action_id
27
+ @selected_action_id || @current_action&.id || last_action_id
28
28
  end
29
29
 
30
30
  def selected_action_id= action_id
@@ -41,8 +41,8 @@ def selected_content
41
41
  end
42
42
 
43
43
  def content_at_time_of_selected_action
44
- lc = last_change_on(:db_content, not_after: @selected_action_id, including_drafts: true)
45
- lc&.value
44
+ last_change_on(:db_content, not_after: selected_action_id,
45
+ including_drafts: true)&.value
46
46
  end
47
47
 
48
48
  def with_selected_action_id action_id
@@ -2,30 +2,17 @@ format :html do
2
2
  view :creator_credit,
3
3
  wrap: { div: { class: "text-muted creator-credit" } }, cache: :never do
4
4
  return "" unless card.real?
5
+
5
6
  "Created by #{nest card.creator, view: :link} "\
6
7
  "#{time_ago_in_words(card.created_at)} ago"
7
8
  end
8
9
 
9
10
  view :updated_by, wrap: { div: { class: "text-muted" } } do
10
- return "" unless card.id
11
- updaters = Card.search(updater_of: { id: card.id })
12
- return "" unless updaters.present?
13
-
14
- updaters = updater_links updaters, others_target: Card.fetch(card, :editors)
15
- "Updated by #{updaters}"
16
- end
17
-
18
- def updater_links updaters, item_view: :link, max_count: 3, others_target: card
11
+ updaters = Card.search(updater_of: { id: card.id }) if card.id
19
12
  return "" unless updaters.present?
20
13
 
21
- total = updaters.size
22
- fetch_count = total > max_count ? max_count - 1 : max_count
23
-
24
- reduced = first_card(fetch_count).map { |c| nest c, view: item_view }
25
- if total > max_count
26
- reduced << link_to_card(others_target, "#{total - fetch_count} others")
27
- end
28
- reduced.to_sentence
14
+ links = updater_links updaters, others_target: card.fetch(:editors)
15
+ "Updated by #{links}"
29
16
  end
30
17
 
31
18
  def acts_bridge_layout acts, context=:bridge
@@ -62,4 +49,31 @@ format :html do
62
49
  act_listing(act, opts[:act_seq], :bridge)
63
50
  end
64
51
  end
52
+
53
+ private
54
+
55
+ def updater_links updaters, item_view: :link, max_count: 3, others_target: card
56
+ total = updaters.size
57
+ num_to_show = number_of_updaters_to_show total, max_count
58
+
59
+ links =
60
+ links_to_updaters(updaters, num_to_show, item_view) +
61
+ link_to_other_updaters(total, others_target, num_to_show)
62
+
63
+ links.to_sentence
64
+ end
65
+
66
+ def number_of_updaters_to_show total, max_count
67
+ total > max_count ? max_count - 1 : max_count
68
+ end
69
+
70
+ def links_to_updaters updaters, num_to_show, item_view
71
+ updaters[0..(num_to_show - 1)].map { |c| nest c, view: item_view }
72
+ end
73
+
74
+ def link_to_other_updaters total, target, num_to_show
75
+ return [] unless total > num_to_show
76
+
77
+ link_to_card target, "#{total - num_to_show} others"
78
+ end
65
79
  end
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.11.2
4
+ version: 0.12.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-03-15 00:00:00.000000000 Z
13
+ date: 2021-07-05 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.101.2
21
+ version: 1.102.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.101.2
28
+ version: 1.102.0
29
29
  description: ''
30
30
  email:
31
31
  - info@decko.org
@@ -78,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
78
  - !ruby/object:Gem::Version
79
79
  version: '0'
80
80
  requirements: []
81
- rubygems_version: 3.0.3
81
+ rubygems_version: 3.2.15
82
82
  signing_key:
83
83
  specification_version: 4
84
84
  summary: Revision histories in acts, actions, and changes