Module: Card::Model::SaveHelper
- Included in:
- Card::Migration
- Defined in:
- lib/card/model/save_helper.rb
Overview
API to create and update cards. It is intended as a helper for "external" scripts (seeding, testing, migrating, etc) and not for internal application code. The general pattern is: All methods use the ActiveRecord !-methods that throw exceptions if somethings fails. All !-methods in this module rename existing cards to resolve name conflicts)
Instance Method Summary collapse
- #add_coderule_item(name, prefix, type_id, to) ⇒ Object
- #add_name(name, content_or_args) ⇒ Object
- #add_script(name, opts = {}) ⇒ Object
- #add_style(name, opts = {}) ⇒ Object
- #create_card(name_or_args, content_or_args = nil) ⇒ Object (also: #create)
-
#create_card!(name_or_args, content_or_args = nil) ⇒ Object
(also: #create!)
if card with same name exists move it out of the way.
- #create_or_update_card(name_or_args, content_or_args = nil) ⇒ Object (also: #create_or_update)
- #create_or_update_card!(name_or_args, content_or_args = nil) ⇒ Object (also: #create_or_update!)
- #delete_card(name) ⇒ Object (also: #delete)
- #delete_code_card(name) ⇒ Object
- #ensure_attributes(card, args) ⇒ Object
-
#ensure_card(name_or_args, content_or_args = nil) ⇒ Object
(also: #ensure)
create if card doesn't exist updates existing card only if given attributes are different except the name.
-
#ensure_card!(name_or_args, content_or_args = nil) ⇒ Object
(also: #ensure!)
create if card doesn't exist updates existing card only if given attributes are different including the name For example if a card with name "under_score" exists then
ensure_card "Under Score"renames it to "Under Score". -
#ensure_trait(name, codename, args = {}) ⇒ Object
Creates or updates a trait card with codename and right rules.
- #ensure_trait_rule(trait, setting, value) ⇒ Object
- #name_from_args(name_or_args) ⇒ Object
- #normalize_trait_rule_args(setting, value) ⇒ Object
- #resolve_name_conflict(args) ⇒ Object
-
#standardize_args(name_or_args, content_or_args) ⇒ Object
Args.
- #standardize_update_args(name_or_args, content_or_args) ⇒ Object
- #update_card(name, content_or_args) ⇒ Object (also: #update)
- #update_card!(name, content_or_args) ⇒ Object (also: #update!)
- #validate_setting(setting) ⇒ Object
- #with_user(user_name) ⇒ Object
Instance Method Details
#add_coderule_item(name, prefix, type_id, to) ⇒ Object
209 210 211 212 213 214 215 216 |
# File 'lib/card/model/save_helper.rb', line 209 def add_coderule_item name, prefix, type_id, to codename = "#{prefix}_#{name.tr(' ', '_').underscore}" name = "#{prefix}: #{name}" ensure_card name, type_id: type_id, codename: codename Card[to].add_item! name end |
#add_name(name, content_or_args) ⇒ Object
159 160 161 162 163 164 165 |
# File 'lib/card/model/save_helper.rb', line 159 def add_name name, content_or_args if content_or_args.is_a?(String) { content: content_or_args, name: name } else content_or_args.reverse_merge name: name end end |
#add_script(name, opts = {}) ⇒ Object
199 200 201 202 203 204 205 206 |
# File 'lib/card/model/save_helper.rb', line 199 def add_script name, opts={} name.sub!(/^script\:?\s?/, '') # in case name is given with prefix # remove it so that we don't double it add_coderule_item name, "script", opts[:type_id] || Card::CoffeeScriptID, opts[:to] || "*all+*script" end |
#add_style(name, opts = {}) ⇒ Object
190 191 192 193 194 195 196 197 |
# File 'lib/card/model/save_helper.rb', line 190 def add_style name, opts={} name.sub!(/^style\:?\s?/, '') # in case name is given with prefix # remove it so that we don't double it add_coderule_item name, "style", opts[:type_id] || Card::ScssID, opts[:to] || "*all+*style" end |
#create_card(name_or_args, content_or_args = nil) ⇒ Object Also known as: create
18 19 20 21 22 |
# File 'lib/card/model/save_helper.rb', line 18 def create_card name_or_args, content_or_args=nil args = standardize_args name_or_args, content_or_args resolve_name_conflict args Card.create! args end |
#create_card!(name_or_args, content_or_args = nil) ⇒ Object Also known as: create!
if card with same name exists move it out of the way
122 123 124 125 |
# File 'lib/card/model/save_helper.rb', line 122 def create_card! name_or_args, content_or_args=nil args = standardize_args name_or_args, content_or_args create_card args.reverse_merge(rename_if_conflict: :old) end |
#create_or_update_card(name_or_args, content_or_args = nil) ⇒ Object Also known as: create_or_update
30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/card/model/save_helper.rb', line 30 def create_or_update_card name_or_args, content_or_args=nil name = name_from_args name_or_args if Card[name] args = standardize_update_args name_or_args, content_or_args update_card(name, args) else args = standardize_args name_or_args, content_or_args create_card(args) end end |
#create_or_update_card!(name_or_args, content_or_args = nil) ⇒ Object Also known as: create_or_update!
132 133 134 135 |
# File 'lib/card/model/save_helper.rb', line 132 def create_or_update_card! name_or_args, content_or_args=nil args = standardize_args name_or_args, content_or_args create_or_update args.reverse_merge(rename_if_conflict: :new) end |
#delete_card(name) ⇒ Object Also known as: delete
42 43 44 45 |
# File 'lib/card/model/save_helper.rb', line 42 def delete_card name return unless (card = Card[name]) card.delete! end |
#delete_code_card(name) ⇒ Object
47 48 49 50 |
# File 'lib/card/model/save_helper.rb', line 47 def delete_code_card name update name, codename: nil delete name end |
#ensure_attributes(card, args) ⇒ Object
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/card/model/save_helper.rb', line 173 def ensure_attributes card, args args = args.with_indifferent_access subcards = card.extract_subcard_args! args update_args = args.select do |key, value| if key =~ /^\+/ subfields[key] = value false else card.send(key) != value end end return if update_args.empty? && subcards.empty? # FIXME: use ensure_attributes for subcards card.update_attributes! update_args.merge(subcards: subcards) end |
#ensure_card(name_or_args, content_or_args = nil) ⇒ Object Also known as: ensure
create if card doesn't exist updates existing card only if given attributes are different except the name
59 60 61 62 63 64 65 66 67 68 |
# File 'lib/card/model/save_helper.rb', line 59 def ensure_card name_or_args, content_or_args=nil args = standardize_args name_or_args, content_or_args name = args.delete(:name) if (card = Card[name]) ensure_attributes card, args card else Card.create! args.merge(name: name) end end |
#ensure_card!(name_or_args, content_or_args = nil) ⇒ Object Also known as: ensure!
create if card doesn't exist
updates existing card only if given attributes are different including
the name
For example if a card with name "under_score" exists
then ensure_card "Under Score" renames it to "Under Score"
75 76 77 78 79 80 81 82 |
# File 'lib/card/model/save_helper.rb', line 75 def ensure_card! name_or_args, content_or_args=nil args = standardize_args name_or_args, content_or_args if (card = Card[args[:name]]) ensure_attributes card, args else Card.create! args end end |
#ensure_trait(name, codename, args = {}) ⇒ Object
Creates or updates a trait card with codename and right rules. Content for rules that are pointer cards by default is converted to pointer format.
93 94 95 96 97 98 |
# File 'lib/card/model/save_helper.rb', line 93 def ensure_trait name, codename, args={} ensure_card name, codename: codename args.each do |setting, value| ensure_trait_rule name, setting, value end end |
#ensure_trait_rule(trait, setting, value) ⇒ Object
100 101 102 103 104 |
# File 'lib/card/model/save_helper.rb', line 100 def ensure_trait_rule trait, setting, value validate_setting setting card_args = normalize_trait_rule_args setting, value ensure_card [trait, :right, setting], card_args end |
#name_from_args(name_or_args) ⇒ Object
155 156 157 |
# File 'lib/card/model/save_helper.rb', line 155 def name_from_args name_or_args name_or_args.is_a?(Hash) ? name_or_args[:name] : name_or_args end |
#normalize_trait_rule_args(setting, value) ⇒ Object
113 114 115 116 117 118 119 |
# File 'lib/card/model/save_helper.rb', line 113 def normalize_trait_rule_args setting, value return value if value.is_a? Hash if Card.fetch_type_id([setting, :right, :default]) == PointerID value = Array(value).to_pointer_content end { content: value } end |
#resolve_name_conflict(args) ⇒ Object
167 168 169 170 171 |
# File 'lib/card/model/save_helper.rb', line 167 def resolve_name_conflict args rename = args.delete :rename_if_conflict return unless args[:name] && rename args[:name] = Card.uniquify_name args[:name], rename end |
#standardize_args(name_or_args, content_or_args) ⇒ Object
Returns args.
138 139 140 141 142 143 144 |
# File 'lib/card/model/save_helper.rb', line 138 def standardize_args name_or_args, content_or_args if name_or_args.is_a?(Hash) name_or_args else add_name name_or_args, content_or_args || {} end end |
#standardize_update_args(name_or_args, content_or_args) ⇒ Object
146 147 148 149 150 151 152 153 |
# File 'lib/card/model/save_helper.rb', line 146 def standardize_update_args name_or_args, content_or_args return name_or_args if name_or_args.is_a?(Hash) if content_or_args.is_a?(String) { content: content_or_args } else content_or_args end end |
#update_card(name, content_or_args) ⇒ Object Also known as: update
24 25 26 27 28 |
# File 'lib/card/model/save_helper.rb', line 24 def update_card name, content_or_args args = standardize_update_args name, content_or_args resolve_name_conflict args Card[name].update_attributes! args end |
#update_card!(name, content_or_args) ⇒ Object Also known as: update!
127 128 129 130 |
# File 'lib/card/model/save_helper.rb', line 127 def update_card! name, content_or_args args = standardize_update_args name, content_or_args update_card name, args.reverse_merge(rename_if_conflict: :new) end |
#validate_setting(setting) ⇒ Object
106 107 108 109 110 111 |
# File 'lib/card/model/save_helper.rb', line 106 def validate_setting setting unless Card::Codename[setting] && Card.fetch_type_id(setting) == SettingID raise ArgumentError, "not a valid setting: #{setting}" end end |
#with_user(user_name) ⇒ Object
12 13 14 15 16 |
# File 'lib/card/model/save_helper.rb', line 12 def with_user user_name Card::Auth.with current_id: Card.fetch_id(user_name) do yield end end |