Class: Card::Action
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Card::Action
- Extended by:
- Admin
- Includes:
- Differ
- Defined in:
- mod/history/lib/card/action.rb,
mod/history/lib/card/action/admin.rb,
mod/history/lib/card/action/differ.rb,
mod/history/lib/card/action/action_renderer.rb
Overview
An action is a group of changes to a single card that is recorded during an act. Together, acts, actions, and changes comprise a comprehensive card history tracking system.
For example, if a given web submission changes both the name and type of a given card, that would be recorded as one action with two changes. If there are multiple cards changed, each card would have its own action, but the whole submission would still comprise just one single act.
An Action records:
Defined Under Namespace
Modules: Admin, Differ Classes: ActionRenderer
Constant Summary collapse
- TYPE_OPTIONS =
these are the three possible values for action_type
[:create, :update, :delete].freeze
Class Method Summary collapse
-
.cache ⇒ Card::Cache
cache object for actions.
-
.fetch(id) ⇒ Action?
retrieve action from cache if available.
Instance Method Summary collapse
-
#action_type ⇒ Symbol
retrieve action_type (create, update, or delete).
-
#action_type=(value) ⇒ Integer
assign action_type (create, update, or delete).
-
#card ⇒ Card
each action is associated with on and only one card.
-
#change(field) ⇒ Change
action's Change object for given field.
-
#changes ⇒ Hash
all action changes in hash form.
-
#expire ⇒ Object
remove action from action cache.
-
#interpret_field(field) ⇒ Symbol
translate field into fieldname as referred to in database.
-
#interpret_value(field, value) ⇒ Integer, ...
value in form prescribed for specific field name.
-
#new_content? ⇒ true/false
does action change card's content?.
-
#new_name? ⇒ true/false
does action change card's name?.
-
#new_type? ⇒ true/false
does action change card's type?.
-
#previous_change(field) ⇒ Change
most recent change to given field before this one.
-
#previous_value(field) ⇒ Object
value of field set by most recent Change before this one.
-
#value(field) ⇒ Object
value set by action's Change to given field.
Methods included from Admin
delete_cardless, delete_changeless, delete_old
Methods included from Differ
#cardtype_diff, #content_diff, #green?, #name_diff, #raw_view, #red?, #summary_diff_omits_content?
Class Method Details
.cache ⇒ Card::Cache
cache object for actions
56 57 58 |
# File 'mod/history/lib/card/action.rb', line 56 def cache Card::Cache[Action] end |
.fetch(id) ⇒ Action?
retrieve action from cache if available
48 49 50 51 52 |
# File 'mod/history/lib/card/action.rb', line 48 def fetch id cache.fetch id.to_s do find id.to_i end end |
Instance Method Details
#action_type ⇒ Symbol
retrieve action_type (create, update, or delete)
83 84 85 86 |
# File 'mod/history/lib/card/action.rb', line 83 def action_type return :draft if draft TYPE_OPTIONS[read_attribute(:action_type)] end |
#action_type=(value) ⇒ Integer
assign action_type (create, update, or delete)
77 78 79 |
# File 'mod/history/lib/card/action.rb', line 77 def action_type= value write_attribute :action_type, TYPE_OPTIONS.index(value) end |
#card ⇒ Card
each action is associated with on and only one card
63 64 65 66 67 |
# File 'mod/history/lib/card/action.rb', line 63 def card res = Card.fetch card_id, look_in_trash: true, skip_modules: true return res unless res && res.type_id.in?([FileID, ImageID]) res.include_set_modules end |
#change(field) ⇒ Change
action's Change object for given field
108 109 110 |
# File 'mod/history/lib/card/action.rb', line 108 def change field changes[interpret_field field] end |
#changes ⇒ Hash
all action changes in hash form. { field1: Change1 }
127 128 129 130 131 132 |
# File 'mod/history/lib/card/action.rb', line 127 def changes @changes ||= card_changes.each_with_object({}) do |change, hash| hash[change.field.to_sym] = change end end |
#expire ⇒ Object
remove action from action cache
70 71 72 |
# File 'mod/history/lib/card/action.rb', line 70 def expire self.class.cache.delete id.to_s end |
#interpret_field(field) ⇒ Symbol
translate field into fieldname as referred to in database
157 158 159 160 161 162 163 |
# File 'mod/history/lib/card/action.rb', line 157 def interpret_field field case field when :content then :db_content when :cardtype then :type_id else field.to_sym end end |
#interpret_value(field, value) ⇒ Integer, ...
value in form prescribed for specific field name
170 171 172 173 174 175 176 177 178 179 |
# File 'mod/history/lib/card/action.rb', line 170 def interpret_value field, value case field.to_sym when :type_id value && value.to_i when :cardtype type_card = value && Card.quick_fetch(value.to_i) type_card && type_card.name.capitalize else value end end |
#new_content? ⇒ true/false
does action change card's content?
142 143 144 |
# File 'mod/history/lib/card/action.rb', line 142 def new_content? !value(:db_content).nil? end |
#new_name? ⇒ true/false
does action change card's name?
148 149 150 |
# File 'mod/history/lib/card/action.rb', line 148 def new_name? !value(:name).nil? end |
#new_type? ⇒ true/false
does action change card's type?
136 137 138 |
# File 'mod/history/lib/card/action.rb', line 136 def new_type? !value(:type_id).nil? end |
#previous_change(field) ⇒ Change
most recent change to given field before this one
115 116 117 118 119 120 121 122 123 |
# File 'mod/history/lib/card/action.rb', line 115 def previous_change field field = interpret_field field if @previous_changes && @previous_changes.key?(field) @previous_changes[field] else @previous_changes ||= {} @previous_changes[field] = card.last_change_on field, before: self end end |
#previous_value(field) ⇒ Object
value of field set by most recent Change before this one
99 100 101 102 103 |
# File 'mod/history/lib/card/action.rb', line 99 def previous_value field return if action_type == :create return unless (previous_change = previous_change field) interpret_value field, previous_change.value end |
#value(field) ⇒ Object
value set by action's Change to given field
91 92 93 94 |
# File 'mod/history/lib/card/action.rb', line 91 def value field return unless (change = change field) interpret_value field, change.value end |