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
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
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?
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 |
# File 'mod/history/lib/card/action.rb', line 83 def action_type 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
107 108 109 |
# File 'mod/history/lib/card/action.rb', line 107 def change field changes[interpret_field field] end |
#changes ⇒ Hash
all action changes in hash form. { field1: Change1 }
126 127 128 129 130 131 |
# File 'mod/history/lib/card/action.rb', line 126 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
156 157 158 159 160 161 162 |
# File 'mod/history/lib/card/action.rb', line 156 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
169 170 171 172 173 174 175 176 177 178 |
# File 'mod/history/lib/card/action.rb', line 169 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?
141 142 143 |
# File 'mod/history/lib/card/action.rb', line 141 def new_content? !value(:db_content).nil? end |
#new_name? ⇒ true/false
does action change card's name?
147 148 149 |
# File 'mod/history/lib/card/action.rb', line 147 def new_name? !value(:name).nil? end |
#new_type? ⇒ true/false
does action change card's type?
135 136 137 |
# File 'mod/history/lib/card/action.rb', line 135 def new_type? !value(:type_id).nil? end |
#previous_change(field) ⇒ Change
most recent change to given field before this one
114 115 116 117 118 119 120 121 122 |
# File 'mod/history/lib/card/action.rb', line 114 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
98 99 100 101 102 |
# File 'mod/history/lib/card/action.rb', line 98 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
90 91 92 93 |
# File 'mod/history/lib/card/action.rb', line 90 def value field return unless (change = change field) interpret_value field, change.value end |