card-mod-mirror 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e7b9160a101445c73c8c54a068117118904ff0a54347ef666b8f0a5dfdf9ce8
4
- data.tar.gz: ed3a86a1ad65b17d860d8c08be205b60ac6d78406e3e7582d6694a89a4a498a6
3
+ metadata.gz: 3a03627c98bc1228609133d186a4c4e12b8b0d9353afb856f3a4169d640437dd
4
+ data.tar.gz: b037feb0fbecef3d2ec8088298edfacde1b6d9e5ec9b052dd613a882a33361b4
5
5
  SHA512:
6
- metadata.gz: c8d1504824debb0bcb40a696390397c5fa3faa125742abaf6610b1a43af9602ea1f362f48ac95baebb29fbb8648ffffee2c713dfe722eb09571823f967c7ddb2
7
- data.tar.gz: '0185f499ace9e7efa11bd1c9156b3355d06e01f4b7c12619b3f70f5b7fe8cc8f93a01f6217c2272a165bec9904cdcfc8239f71c949f19a58c49d4dedebc4caaa'
6
+ metadata.gz: b26a2ca35ace3fd3b34fc91342690b9d9020d96269c3224a535c592779836e03eb47f0c2d19c39caa5fb649fd134a62db2eab9e935487eb0bce7d2b9a7522ee2
7
+ data.tar.gz: 49722cac50ab8fef88ef5a1a74f720d5369fd17eea36f1a2b99d845aacfe9f4bc2ecaff7679fc4ca5c50efe554b94c3cfb027d9b67e408971c0ca993cfbccc7d
@@ -0,0 +1,72 @@
1
+ include_set Abstract::Pointer
2
+
3
+ event :validate_mirrorable, :validate, on: :save, changed: :name do
4
+ return if right&.type_code == :cardtype
5
+
6
+ errors.add :name, t(:mirror_cardtype_right)
7
+ end
8
+
9
+ event :validate_mirror_items, :validate, on: :save do
10
+ item_cards.each do |item_card|
11
+ next if item_card.type_id == item_type_id
12
+
13
+ errors.add :content, t(:mirror_only_type_allowed,
14
+ cardname: item_card.name,
15
+ cardtype: item_type_name)
16
+ end
17
+ end
18
+
19
+ event :update_mirroring_card, :prepare_to_validate,
20
+ changed: :content, skip: :allowed do
21
+ remove_mirrored_items dropped_item_names
22
+ add_mirrored_items added_item_names
23
+ end
24
+
25
+ def remove_mirrored_items items
26
+ each_mirrored_subcard(items) { |sc| sc.drop_item name.left }
27
+ end
28
+
29
+ def add_mirrored_items items
30
+ each_mirrored_subcard(items) { |sc| sc.add_item name.left }
31
+ end
32
+
33
+ def each_mirrored_subcard items
34
+ items.each do |item|
35
+ sc = subcard mirrored_card(item)
36
+ sc.skip_event! :update_mirroring_card
37
+ yield sc
38
+ end
39
+ end
40
+
41
+ def mirrored_card item
42
+ Card.fetch [item, left.type_name], new: { type: mirroring_type }
43
+ end
44
+
45
+ def generate_content
46
+ listed_by.map { |item| item.to_name.left }.join "\n"
47
+ end
48
+
49
+ def listed_by
50
+ Card.search({ type: :mirrored_list,
51
+ right: trunk.type_name,
52
+ left: { type_id: item_type_id },
53
+ refer_to: name.trunk,
54
+ return: :name }, "all cards listed by #{name}")
55
+ end
56
+
57
+ def item_type
58
+ name.right
59
+ end
60
+
61
+ def item_type_name
62
+ name.right_name
63
+ end
64
+
65
+ def item_type_card
66
+ name.right
67
+ end
68
+
69
+ def item_type_id
70
+ right_id
71
+ end
72
+
@@ -1,49 +1,15 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
- def list_fields
4
- Card.search({ left: name, type_id: MirroredListID }, "list fields")
3
+ event :preserve_mirrors, :validate,
4
+ on: :update, changed: :type_id, when: :item_in_mirror? do
5
+ errors.add :type, "cannot change type of item in mirrors: #{items_in_mirrors.join ', '}"
5
6
  end
6
7
 
7
- def listed_by_fields
8
- Card.search({ left: name, type_id: MirrorListID }, "listed by fields")
8
+ def items_in_mirrors
9
+ @items_in_mirrors ||=
10
+ Card.search left: name, type_id: [MirrorListID, MirroredListID], return: :name
9
11
  end
10
12
 
11
- def linker_lists
12
- Card.search({ type_id: MirroredListID, link_to: name },
13
- "lists that link to #{name}")
14
- end
15
-
16
- def codename_list_exist?
17
- Card::Codename.exist?(:mirrored_list) && Card::Codename.exist?(:mirror_list)
18
- end
19
-
20
- event :trunk_cardtype_of_a_list_relation_changed, :finalize,
21
- changed: :type, on: :update, when: :codename_list_exist? do
22
- type_key_was = Card.quick_fetch(type_id_before_act)&.key
23
-
24
- list_fields.each do |card|
25
- card.update_listed_by_cache_for card.item_keys, type_key: type_key_was
26
- card.update_listed_by_cache_for card.item_keys
27
- end
28
- listed_by_fields.each &:update_cached_list
29
- end
30
-
31
- event :trunk_name_of_a_list_relation_changed, :finalize,
32
- changed: :name, on: :update,
33
- when: :codename_list_exist? do
34
- list_fields.each do |card|
35
- card.update_listed_by_cache_for card.item_keys
36
- end
37
- listed_by_fields.each &:update_cached_list
38
- end
39
-
40
- event :cardtype_of_list_item_changed, :validate,
41
- changed: :type, on: :save,
42
- when: :codename_list_exist? do
43
- linker_lists.each do |card|
44
- next unless card.item_type_id != type_id
45
- errors.add(:type,
46
- "can't be changed because #{name} " \
47
- "is referenced by list card #{card.name}")
48
- end
13
+ def item_in_mirror?
14
+ items_in_mirrors.present?
49
15
  end
@@ -1,93 +1,5 @@
1
- include_set Abstract::Pointer
1
+ include_set Abstract::Reflection
2
2
 
3
- event :validate_listed_by_name, :validate, on: :save, changing: :name do
4
- if !compound? || !right || right.type_id != Card::CardtypeID
5
- errors.add :name, t(:mirror_cardtype_right)
6
- end
7
- end
8
-
9
- event :validate_listed_by_content, :validate,
10
- on: :save, changing: :content do
11
- item_cards(content: content).each do |item_card|
12
- next unless item_card.type_id != right.id
13
- errors.add(
14
- :content,
15
- "#{item_card.name} has wrong cardtype; " \
16
- "only cards of type #{name.right} are allowed"
17
- )
18
- end
19
- end
20
-
21
- event :update_content_in_list_cards, :prepare_to_validate,
22
- on: :save, changing: :content do
23
- return unless db_content.present?
24
- new_items = item_keys(content: db_content)
25
- old_items = item_keys(content: old_content)
26
- remove_items(old_items - new_items)
27
- add_items(new_items - old_items)
28
- end
29
-
30
- def old_content
31
- db_content_before_act.present? ? db_content_before_act : content_cache.read(key)
32
- end
33
-
34
- def remove_items items
35
- items.each do |item|
36
- next unless (lc = list_card item)
37
- lc.drop_item name.left
38
- subcards.add lc
39
- end
40
- end
41
-
42
- def add_items items
43
- items.each do |item|
44
- if (lc = list_card(item))
45
- lc.add_item name.left
46
- subcards.add lc
47
- else
48
- subcards.add(name: [item, left.type_name].cardname,
49
- type: "list",
50
- content: "[[#{name.left}]]")
51
- end
52
- end
53
- end
54
-
55
- def content_cache
56
- Card::Cache[Card::Set::Type::MirrorList]
57
- end
58
-
59
- def content
60
- content_cache.fetch(key) do
61
- generate_content
62
- end
63
- end
64
-
65
- def generate_content
66
- listed_by.map do |item|
67
- "[[%s]]" % item.to_name.left
68
- end.join "\n"
69
- end
70
-
71
- def listed_by
72
- Card.search(
73
- { type_id: Card::MirroredListID, right: trunk.type_name,
74
- left: { type: name.tag }, refer_to: name.trunk, return: :name },
75
- "all cards listed by #{name}"
76
- )
77
- end
78
-
79
- def update_cached_list
80
- if trunk
81
- Card::Cache[Card::Set::Type::MirrorList].write key, generate_content
82
- else
83
- Card::Cache[Card::Set::Type::MirrorList].delete key
84
- end
85
- end
86
-
87
- def list_card item
88
- Card.fetch item, left.type_name
89
- end
90
-
91
- def unfilled?
92
- false
3
+ def mirroring_type
4
+ :mirrored_list
93
5
  end
@@ -1,110 +1,5 @@
1
- include_set Abstract::Pointer
1
+ include_set Abstract::Reflection
2
2
 
3
- event :validate_list_name, :validate, on: :save, changed: :name do
4
- errors.add :name, t(:mirror_cardtype_right) unless right&.type_id == Card::CardtypeID
5
- end
6
-
7
- event :validate_list_item_type_change, :validate,
8
- on: :save, changed: :name do
9
- item_cards.each do |item_card|
10
- next unless item_card.type_name.key != item_type_name.key
11
- errors.add :name, t(:mirror_conflict_item_type)
12
- end
13
- end
14
-
15
- event :validate_list_content, :validate,
16
- on: :save, changed: :content do
17
- item_cards.each do |item_card|
18
- next unless item_card.type_name.key != item_type_name.key
19
- errors.add :content, t(
20
- :mirror_only_type_allowed,
21
- cardname: item_card.name,
22
- cardtype: name.right
23
- )
24
- end
25
- end
26
-
27
- event :create_listed_by_cards, :prepare_to_validate,
28
- on: :save, changed: :content do
29
- item_names.each do |item_name|
30
- listed_by_name = "#{item_name}+#{left.type_name}"
31
- next if director.main_director.card.key == listed_by_name.to_name.key
32
- if !Card[listed_by_name]
33
- add_subcard listed_by_name, type_id: Card::MirrorListID
34
- else
35
- Card[listed_by_name].update_references_out
36
- end
37
- end
38
- end
39
-
40
- event :update_related_listed_by_card_on_create, :finalize, on: :create do
41
- update_listed_by_cache_for item_keys
42
- end
43
-
44
- event :update_related_listed_by_card_on_content_update, :finalize,
45
- on: :update, changed: :content do
46
- new_items = item_keys
47
- changed_items =
48
- if db_content_before_act
49
- old_items = item_keys(content: db_content_before_act)
50
- old_items + new_items - (old_items & new_items)
51
- else
52
- new_items
53
- end
54
- update_listed_by_cache_for changed_items
55
- end
56
-
57
- event :update_related_listed_by_card_on_name_and_type_changes, :finalize,
58
- on: :update, changed: %i[name type_id] do
59
- update_all_items
60
- end
61
-
62
- event :update_related_listed_by_card_on_delete, :finalize,
63
- on: :delete, when: :compound? do
64
- update_listed_by_cache_for item_keys, type_key: @left_type_key
65
- end
66
-
67
- event :cache_type_key, :store, on: :delete, when: :compound? do
68
- @left_type_key = left.type_card.key
69
- end
70
-
71
- def update_all_items
72
- current_items = item_keys
73
- if db_content_before_act
74
- old_items = item_keys(content: db_content_before_act)
75
- update_listed_by_cache_for old_items
76
- end
77
- update_listed_by_cache_for current_items
78
- end
79
-
80
- def update_listed_by_cache_for item_keys, args={}
81
- type_key = args[:type_key] || left&.type_card&.key
82
- return unless type_key
83
-
84
- item_keys.each do |item_key|
85
- key = "#{item_key}+#{type_key}"
86
- next unless Card::Cache[Card::Set::Type::MirrorList].exist? key
87
- if (card = Card.fetch(key)) && card.left
88
- card.update_cached_list
89
- card.update_references_out
90
- else
91
- Card::Cache[Card::Set::Type::MirrorList].delete key
92
- end
93
- end
94
- end
95
-
96
- def item_type
97
- name.right
98
- end
99
-
100
- def item_type_name
101
- name.right_name
102
- end
103
-
104
- def item_type_card
105
- name.right
106
- end
107
-
108
- def item_type_id
109
- right.id
3
+ def mirroring_type
4
+ :mirror_list
110
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: card-mod-mirror
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Philipp Kühl
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-10-26 00:00:00.000000000 Z
12
+ date: 2021-12-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: card
@@ -33,6 +33,7 @@ extensions: []
33
33
  extra_rdoc_files: []
34
34
  files:
35
35
  - README.md
36
+ - set/abstract/reflection.rb
36
37
  - set/all/list_changes.rb
37
38
  - set/type/mirror_list.rb
38
39
  - set/type/mirrored_list.rb
@@ -56,7 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
56
57
  - !ruby/object:Gem::Version
57
58
  version: '0'
58
59
  requirements: []
59
- rubygems_version: 3.2.28
60
+ rubygems_version: 3.2.15
60
61
  signing_key:
61
62
  specification_version: 4
62
63
  summary: mirror