card-mod-assets 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/db/migrate_core_cards/20200806112346_add_mod_type.rb +13 -0
- data/set/abstract/01_manifest_group.rb +13 -0
- data/set/abstract/asset_file.rb +71 -0
- data/set/abstract/asset_list.rb +66 -0
- data/set/abstract/local_folder_group.rb +23 -0
- data/set/abstract/local_manifest_group.rb +25 -0
- data/set/abstract/mod_assets.rb +170 -0
- data/set/type/mod.rb +52 -0
- data/set/type/remote_manifest_group.rb +38 -0
- metadata +102 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b59f6f6f70adc14e63bc31249f6800971fcff3558d05fe332f29ea5ddbdfdbe7
|
4
|
+
data.tar.gz: b0c4afd0e8497fd44ed495812893dcbb4386f25d2c0898ce1c8f53fc3c4bcc4d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b9a5fc6b02f596d3fc34616d6c9cceca46b6b04077c6687630b27b11a823ff33c1dc15d22bf777a98aa54b0e80426df615e0802eae51567a0f404bbfb864e576
|
7
|
+
data.tar.gz: 4091054b08b2ddcb3c9c07d4ab973d57fc11c41547b77911ce608636f057370ccda3f62104a74f21d27245a1f204dc73dc0171a52bb5c7cb6d8d4be6d9fc1050
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
|
3
|
+
class AddModType < Cardio::Migration::Core
|
4
|
+
def up
|
5
|
+
add_cardtypes
|
6
|
+
Card::Cache.reset_all
|
7
|
+
end
|
8
|
+
|
9
|
+
def add_cardtypes
|
10
|
+
ensure_code_card name: "Remote manifest group", type_id: Card::CardtypeID
|
11
|
+
ensure_code_card name: "Mod", type_id: Card::CardtypeID
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
include_set Abstract::CodeFile
|
2
|
+
|
3
|
+
attr_accessor :base_path
|
4
|
+
|
5
|
+
def source_paths
|
6
|
+
source_files.map do |file|
|
7
|
+
::File.join base_path, file
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def source_files
|
12
|
+
[db_content]
|
13
|
+
end
|
14
|
+
|
15
|
+
def find_file path
|
16
|
+
path.tap do |file_path|
|
17
|
+
return nil if unknown_file? file_path
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def unknown_file? file_path
|
22
|
+
return false if ::File.exist? file_path
|
23
|
+
|
24
|
+
Rails.logger.info "couldn't locate #{file_path}"
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
def virtual?
|
29
|
+
true
|
30
|
+
end
|
31
|
+
|
32
|
+
def new?
|
33
|
+
false
|
34
|
+
end
|
35
|
+
|
36
|
+
def compress?
|
37
|
+
@minimize
|
38
|
+
end
|
39
|
+
|
40
|
+
def minimize
|
41
|
+
@minimze = true
|
42
|
+
end
|
43
|
+
|
44
|
+
def local
|
45
|
+
@local = true
|
46
|
+
end
|
47
|
+
|
48
|
+
format do
|
49
|
+
def link_view opts={}
|
50
|
+
opts[:path] = { card: { type: card.type, content: card.db_content } }
|
51
|
+
link_to_card card.name, _render_title, opts
|
52
|
+
end
|
53
|
+
|
54
|
+
def link_to_view view, text=nil, opts={}
|
55
|
+
opts[:path] = { card: { type: card.type, content: card.db_content } }
|
56
|
+
super view, (text || view), opts
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
format :html do
|
61
|
+
view :javascript_include_tag do
|
62
|
+
card.existing_source_paths.map do |path|
|
63
|
+
javascript_include_tag(path)
|
64
|
+
end.join "\n"
|
65
|
+
end
|
66
|
+
|
67
|
+
def short_content
|
68
|
+
fa_icon("exclamation-circle", class: "text-muted pr-2") +
|
69
|
+
wrap_with(:span, "asset file", class: "text-muted")
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
include_set Abstract::ReadOnly
|
2
|
+
include_set Abstract::Sources
|
3
|
+
include_set Abstract::Items
|
4
|
+
|
5
|
+
def refresh_output force: false
|
6
|
+
update_items! if refresh_output? || force
|
7
|
+
end
|
8
|
+
|
9
|
+
def refresh_output?
|
10
|
+
!output_updated_at || source_changed?(since: output_updated_at)
|
11
|
+
end
|
12
|
+
|
13
|
+
event :update_asset_list, :prepare_to_store, on: :save do
|
14
|
+
self.db_content = relative_paths.join("\n")
|
15
|
+
end
|
16
|
+
|
17
|
+
def render_items_and_compress format
|
18
|
+
item_cards.map do |mcard|
|
19
|
+
js = mcard.format(format)._render_core
|
20
|
+
js = mcard.compress js if minimize?
|
21
|
+
"// #{mcard.name}\n#{js}"
|
22
|
+
end.join "\n"
|
23
|
+
end
|
24
|
+
|
25
|
+
def update_items!
|
26
|
+
Card::Auth.as_bot do
|
27
|
+
save!
|
28
|
+
end
|
29
|
+
regenerate_machine_output
|
30
|
+
end
|
31
|
+
|
32
|
+
def item_name_to_path name
|
33
|
+
name
|
34
|
+
end
|
35
|
+
|
36
|
+
def fetch_item_card name, _args={}
|
37
|
+
new_asset_file_card item_name_to_path(name)
|
38
|
+
end
|
39
|
+
|
40
|
+
def new_asset_file_card path, name=::File.basename(path)
|
41
|
+
return unless (constants = new_asset_constants path)
|
42
|
+
asset_card = Card.new(name: name, type_id: constants[:type_id], content: path)
|
43
|
+
asset_card.include_set_module constants[:set_module]
|
44
|
+
asset_card.minimize if @minimize
|
45
|
+
asset_card.local if @local
|
46
|
+
asset_card.base_path = base_path
|
47
|
+
asset_card
|
48
|
+
end
|
49
|
+
|
50
|
+
def source_paths
|
51
|
+
paths
|
52
|
+
end
|
53
|
+
|
54
|
+
def self_machine_input?
|
55
|
+
true
|
56
|
+
end
|
57
|
+
|
58
|
+
def local
|
59
|
+
@local = true
|
60
|
+
end
|
61
|
+
|
62
|
+
def source_changed? since:
|
63
|
+
difference = (relative_paths + item_names) - (relative_paths & item_names)
|
64
|
+
difference.present? ||
|
65
|
+
existing_source_paths.any? { |path| ::File.mtime(path) > since }
|
66
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
def paths
|
2
|
+
return [] unless (path = left&.assets_path)
|
3
|
+
|
4
|
+
relative_paths.map { |child| ::File.join path, child }
|
5
|
+
end
|
6
|
+
|
7
|
+
def relative_paths
|
8
|
+
return [] unless (path = left&.assets_path)
|
9
|
+
|
10
|
+
Dir.children path
|
11
|
+
end
|
12
|
+
|
13
|
+
def item_name_to_path name
|
14
|
+
::File.join base_path, name
|
15
|
+
end
|
16
|
+
|
17
|
+
def base_path
|
18
|
+
left&.assets_path
|
19
|
+
end
|
20
|
+
|
21
|
+
def minimize?
|
22
|
+
@minimize = true
|
23
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
include_set Abstract::ManifestGroup
|
2
|
+
|
3
|
+
def paths
|
4
|
+
return [] unless left
|
5
|
+
|
6
|
+
relative_paths.map { |path| ::File.join(base_path, path) } || []
|
7
|
+
end
|
8
|
+
|
9
|
+
def relative_paths
|
10
|
+
return [] unless left
|
11
|
+
|
12
|
+
left.manifest_group_items group_name
|
13
|
+
end
|
14
|
+
|
15
|
+
def item_name_to_path name
|
16
|
+
::File.join base_path, name
|
17
|
+
end
|
18
|
+
|
19
|
+
def minimize?
|
20
|
+
left.manifest_group_minimize? group_name
|
21
|
+
end
|
22
|
+
|
23
|
+
def base_path
|
24
|
+
left&.assets_path
|
25
|
+
end
|
@@ -0,0 +1,170 @@
|
|
1
|
+
include_set Abstract::Pointer
|
2
|
+
|
3
|
+
def mod_name
|
4
|
+
left&.codename.to_s.sub(/^mod_/, "")
|
5
|
+
end
|
6
|
+
|
7
|
+
def mod
|
8
|
+
@mod ||= Cardio::Mod.dirs.fetch_mod(mod_name)
|
9
|
+
end
|
10
|
+
|
11
|
+
def assets_path
|
12
|
+
return unless mod&.assets_path.present?
|
13
|
+
|
14
|
+
File.join mod&.assets_path, subpath
|
15
|
+
end
|
16
|
+
|
17
|
+
def manifest_path
|
18
|
+
return unless assets_path
|
19
|
+
|
20
|
+
File.join(assets_path, "manifest.yml")
|
21
|
+
end
|
22
|
+
|
23
|
+
def expected_item_keys
|
24
|
+
return [] unless assets_dir_exists?
|
25
|
+
|
26
|
+
if manifest_exists?
|
27
|
+
manifest.keys.map { |group_key| "#{name}+#{group_key}".to_name.key }
|
28
|
+
else
|
29
|
+
["#{name}+#{local_group_name}".to_name.key]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def local_group_name
|
34
|
+
"local"
|
35
|
+
end
|
36
|
+
|
37
|
+
def update_items
|
38
|
+
# return unless groups_changed?
|
39
|
+
|
40
|
+
delete_unused_items do
|
41
|
+
self.content = ""
|
42
|
+
return unless assets_dir_exists?
|
43
|
+
|
44
|
+
ensure_update_items
|
45
|
+
save!
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def ensure_update_items
|
50
|
+
if manifest_exists?
|
51
|
+
ensure_manifest_groups_cards
|
52
|
+
else
|
53
|
+
ensure_item local_group_name, local_folder_group_type_id
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def delete_unused_items
|
58
|
+
@old_items = ::Set.new item_keys
|
59
|
+
yield
|
60
|
+
remove_deprecated_items @old_items
|
61
|
+
end
|
62
|
+
|
63
|
+
def assets_dir_exists?
|
64
|
+
path = assets_path
|
65
|
+
path && Dir.exist?(path)
|
66
|
+
end
|
67
|
+
|
68
|
+
def manifest_exists?
|
69
|
+
manifest_path && File.exist?(manifest_path)
|
70
|
+
end
|
71
|
+
|
72
|
+
def manifest_group_items group_name
|
73
|
+
manifest.dig(group_name, "items") || []
|
74
|
+
end
|
75
|
+
|
76
|
+
def manifest_group_minimize? group_name
|
77
|
+
manifest.dig group_name, "minimize"
|
78
|
+
end
|
79
|
+
|
80
|
+
def manifest
|
81
|
+
@manifest ||= YAML.load_file manifest_path
|
82
|
+
end
|
83
|
+
|
84
|
+
def with_manifest_groups
|
85
|
+
manifest.each_pair do |key, config|
|
86
|
+
yield key, config
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def ensure_manifest_groups_cards
|
91
|
+
with_manifest_groups { |group_name, config| new_manifest_group group_name, config }
|
92
|
+
end
|
93
|
+
|
94
|
+
def new_manifest_group group_name, config
|
95
|
+
type_id =
|
96
|
+
config["remote"] ? ::Card::RemoteManifestGroupID : local_manifest_group_type_id
|
97
|
+
ensure_item group_name, type_id
|
98
|
+
end
|
99
|
+
|
100
|
+
def ensure_item field, type_id
|
101
|
+
item_name = "#{name}+#{field}"
|
102
|
+
ensure_item_content item_name
|
103
|
+
|
104
|
+
card = Card[item_name]
|
105
|
+
args = ensure_item_args field, type_id, item_name
|
106
|
+
return if item_already_coded? card, args
|
107
|
+
|
108
|
+
ensure_item_save card, args
|
109
|
+
card.try :update_machine_output
|
110
|
+
end
|
111
|
+
|
112
|
+
def item_already_coded? card, args
|
113
|
+
card&.type_id == args[:type_id] && card.codename == args[:codename]
|
114
|
+
end
|
115
|
+
|
116
|
+
def ensure_item_content item_name
|
117
|
+
@old_items.delete item_name.to_name.key
|
118
|
+
add_item item_name
|
119
|
+
end
|
120
|
+
|
121
|
+
def ensure_item_save card, args
|
122
|
+
if card
|
123
|
+
card.update args
|
124
|
+
else
|
125
|
+
Card.create! args
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def ensure_item_args field, type_id, name
|
130
|
+
{
|
131
|
+
type_id: type_id,
|
132
|
+
codename: "#{mod_name}_group__#{field}",
|
133
|
+
name: name
|
134
|
+
}
|
135
|
+
end
|
136
|
+
|
137
|
+
def refresh_output force: false
|
138
|
+
update_items
|
139
|
+
item_cards.each do |item_card|
|
140
|
+
item_card.try :refresh_output, force: force
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def make_machine_output_coded verbose=false
|
145
|
+
item_cards.each do |item_card|
|
146
|
+
puts "coding machine output for #{item_card.name}" if verbose
|
147
|
+
item_card.try(:make_machine_output_coded, mod_name)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def no_action?
|
152
|
+
new? && !assets_dir_exists?
|
153
|
+
end
|
154
|
+
|
155
|
+
private
|
156
|
+
|
157
|
+
# def groups_changed?
|
158
|
+
# expected_items = expected_item_keys
|
159
|
+
# actual_items = item_keys
|
160
|
+
# difference = (expected_items + actual_items) - (expected_items & actual_items)
|
161
|
+
# difference.present?
|
162
|
+
# end
|
163
|
+
|
164
|
+
def remove_deprecated_items items
|
165
|
+
items.each do |deprecated_item|
|
166
|
+
next unless (item_card = Card.fetch(deprecated_item))
|
167
|
+
item_card.update codename: nil
|
168
|
+
item_card.delete
|
169
|
+
end
|
170
|
+
end
|
data/set/type/mod.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
def ensure_mod_script_card
|
2
|
+
ensure_mod_asset_card :script, Card::ModScriptAssetsID
|
3
|
+
end
|
4
|
+
|
5
|
+
def ensure_mod_style_card
|
6
|
+
ensure_mod_asset_card :style, Card::ModStyleAssetsID
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def ensure_mod_asset_card asset_type, type_id
|
12
|
+
asset_card = fetch_mod_assets_card asset_type, type_id
|
13
|
+
return if asset_card.no_action?
|
14
|
+
asset_card.save! if asset_card.new?
|
15
|
+
|
16
|
+
asset_card.update_items
|
17
|
+
if asset_card.item_cards.present?
|
18
|
+
add_asset asset_type
|
19
|
+
else
|
20
|
+
drop_asset asset_type, asset_card
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_asset asset_type
|
25
|
+
all_rule(asset_type).add_item! codename_for(asset_type).to_sym
|
26
|
+
end
|
27
|
+
|
28
|
+
def drop_asset asset_type, asset_card
|
29
|
+
asset_card.update codename: nil
|
30
|
+
asset_card.delete update_referers: true
|
31
|
+
all_rule(asset_type).drop_item! asset_card
|
32
|
+
end
|
33
|
+
|
34
|
+
def codename_for asset_type
|
35
|
+
"#{codename}_#{asset_type}"
|
36
|
+
end
|
37
|
+
|
38
|
+
def all_rule asset_type
|
39
|
+
Card[:all, asset_type]
|
40
|
+
end
|
41
|
+
|
42
|
+
def fetch_mod_assets_card asset_type, type_id
|
43
|
+
codename = codename_for asset_type
|
44
|
+
if Card::Codename.exists? codename
|
45
|
+
Card[codename.to_sym]
|
46
|
+
else
|
47
|
+
Card.fetch [name, asset_type], new: {
|
48
|
+
type_id: type_id,
|
49
|
+
codename: codename
|
50
|
+
}
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
include_set Abstract::ReadOnly
|
2
|
+
include_set Abstract::ManifestGroup
|
3
|
+
|
4
|
+
def local?
|
5
|
+
@local = false
|
6
|
+
end
|
7
|
+
|
8
|
+
def minimize?
|
9
|
+
@minimize = false
|
10
|
+
end
|
11
|
+
|
12
|
+
def paths
|
13
|
+
return [] unless left
|
14
|
+
|
15
|
+
left.manifest_group_items group_name
|
16
|
+
end
|
17
|
+
|
18
|
+
def item_names _content=nil
|
19
|
+
paths
|
20
|
+
end
|
21
|
+
|
22
|
+
def content
|
23
|
+
paths.join "\n"
|
24
|
+
end
|
25
|
+
|
26
|
+
format :html do
|
27
|
+
view :javascript_include_tag do
|
28
|
+
paths.map do |path|
|
29
|
+
javascript_include_tag path
|
30
|
+
end.join("\n")
|
31
|
+
end
|
32
|
+
|
33
|
+
view :stylesheet_include_tag do
|
34
|
+
paths.map do |path|
|
35
|
+
tag "link", href: path, media: "all", rel: "stylesheet", type: "text/css"
|
36
|
+
end.join("\n")
|
37
|
+
end
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: card-mod-assets
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.13.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ethan McCutchen
|
8
|
+
- Philipp Kühl
|
9
|
+
- Gerry Gleason
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2021-08-06 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: card
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - '='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.103.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - '='
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: 1.103.0
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: card-mod-machines
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - '='
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 0.13.0
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - '='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.13.0
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: card-mod-content
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - '='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 0.13.0
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - '='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 0.13.0
|
57
|
+
description: ''
|
58
|
+
email:
|
59
|
+
- info@decko.org
|
60
|
+
executables: []
|
61
|
+
extensions: []
|
62
|
+
extra_rdoc_files: []
|
63
|
+
files:
|
64
|
+
- db/migrate_core_cards/20200806112346_add_mod_type.rb
|
65
|
+
- set/abstract/01_manifest_group.rb
|
66
|
+
- set/abstract/asset_file.rb
|
67
|
+
- set/abstract/asset_list.rb
|
68
|
+
- set/abstract/local_folder_group.rb
|
69
|
+
- set/abstract/local_manifest_group.rb
|
70
|
+
- set/abstract/mod_assets.rb
|
71
|
+
- set/type/mod.rb
|
72
|
+
- set/type/remote_manifest_group.rb
|
73
|
+
homepage: https://decko.org
|
74
|
+
licenses:
|
75
|
+
- GPL-3.0
|
76
|
+
metadata:
|
77
|
+
source_code_uri: https://github.com/decko-commons/decko
|
78
|
+
homepage_uri: https://decko.org
|
79
|
+
bug_tracker_uri: https://github.com/decko-commons/decko/issues
|
80
|
+
wiki_uri: https://decko.org
|
81
|
+
documentation_url: http://docs.decko.org/
|
82
|
+
card-mod: assets
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options: []
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '2.5'
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
requirements: []
|
98
|
+
rubygems_version: 3.1.6
|
99
|
+
signing_key:
|
100
|
+
specification_version: 4
|
101
|
+
summary: decko asset pipeline
|
102
|
+
test_files: []
|