card-mod-assets 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|