diff --git a/app/models/merged/active_base.rb b/app/models/merged/active_base.rb index ad79422..b95dc94 100644 --- a/app/models/merged/active_base.rb +++ b/app/models/merged/active_base.rb @@ -2,11 +2,20 @@ module Merged class ActiveBase < ActiveYaml::Base def save + ChangeSet.edit(self.class.name , self.change_name) super self.class.save_all end + def add_save + ChangeSet.add(self.class.name , self.change_name) + super.save() + self.class.save_all + end + + def delete + ChangeSet.delete(self.class.name , self.change_name) self.class.delete(self.id) end diff --git a/app/models/merged/card.rb b/app/models/merged/card.rb index 7740be4..079d666 100644 --- a/app/models/merged/card.rb +++ b/app/models/merged/card.rb @@ -11,6 +11,11 @@ module Merged swap_index_with(next_card) end + def change_name + pagename = section ? section.page.name : section_id.to_s + "#{pagename}:#{header}" + end + def move_down swap_index_with(previous_card) end diff --git a/app/models/merged/change_set.rb b/app/models/merged/change_set.rb new file mode 100644 index 0000000..0cddf0d --- /dev/null +++ b/app/models/merged/change_set.rb @@ -0,0 +1,37 @@ +module Merged + module ChangeSet + @@adds = [] + @@edits = [] + @@deletes = [] + + mattr_accessor :adds , :edits , :deletes + + def self.add( type , text) + @@adds << [typed(type) , text ] + end + + def self.edit( type , text) + @@edits << [typed(type) , text ] + end + def self.delete( type , text) + @@deletes << [typed(type) , text ] + end + + def self.added( type ) + type = type.to_sym + @@adds.select { |a| a.first == type } + end + def self.edited( type ) + type = type.to_sym + @@edits.select { |a| a.first == type } + end + def self.deleted( type ) + type = type.to_sym + @@deletes.select { |a| a.first == type } + end + + def self.typed(class_name) + class_name.split("::").last.to_sym + end + end +end diff --git a/app/models/merged/page.rb b/app/models/merged/page.rb index 94405d3..5305c86 100644 --- a/app/models/merged/page.rb +++ b/app/models/merged/page.rb @@ -5,6 +5,10 @@ module Merged alias :template :type + def change_name + self.name + end + def add_redirect olds = self.redirects.to_s.split(" ") olds << self.name unless olds.include?(self.name) diff --git a/app/models/merged/section.rb b/app/models/merged/section.rb index 516b54d..7b88396 100644 --- a/app/models/merged/section.rb +++ b/app/models/merged/section.rb @@ -7,6 +7,10 @@ module Merged fields :template , :card_template fields :header, :text , :image_name + def change_name + "#{page.name}:#{header}" + end + def cards Card.where(section_id: id).order(index: :asc) end @@ -72,7 +76,7 @@ module Merged def delete( reindex = true ) has_cards = cards.length cards.each {|card| card.delete(false) } - Section.delete( self.id ) + super() page.reset_index if reindex has_cards end diff --git a/test/models/card_test.rb b/test/models/card_test.rb index b302b2a..f001350 100644 --- a/test/models/card_test.rb +++ b/test/models/card_test.rb @@ -28,6 +28,9 @@ module Merged assert_equal card.index , 1 end + def test_change_name + assert_equal "studios:Standard" , first.change_name + end end end diff --git a/test/models/page_test.rb b/test/models/page_test.rb index 56062b2..f9fbd07 100644 --- a/test/models/page_test.rb +++ b/test/models/page_test.rb @@ -34,5 +34,9 @@ module Merged assert_equal section.index , index + 1 # because we have human index end end + def test_change_name + assert_equal "index" , index.change_name + end + end end diff --git a/test/models/section_test.rb b/test/models/section_test.rb index 3c657f6..9c86c79 100644 --- a/test/models/section_test.rb +++ b/test/models/section_test.rb @@ -42,5 +42,8 @@ module Merged def test_last_has_no_next assert_nil last.next_section end + def test_change_name + assert_equal "studios:Studios" , first.change_name + end end end