spiderfw 0.6.16 → 0.6.17
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.
- data/CHANGELOG +9 -0
- data/Rakefile +8 -5
- data/VERSION +1 -1
- data/apps/core/auth/data/locale/it/LC_MESSAGES/spider_auth.mo +0 -0
- data/apps/core/auth/po/it/spider_auth.po +3 -3
- data/apps/core/auth/po/spider_auth.pot +3 -3
- data/apps/core/components/data/locale/it/LC_MESSAGES/spider_components.mo +0 -0
- data/apps/core/components/po/it/spider_components.po +7 -7
- data/apps/core/components/po/spider_components.pot +7 -7
- data/apps/core/components/public/js/spider.js +4 -2
- data/apps/core/forms/data/locale/it/LC_MESSAGES/spider_forms.mo +0 -0
- data/apps/core/forms/po/it/spider_forms.po +2 -2
- data/apps/core/forms/po/spider_forms.pot +2 -2
- data/apps/core/forms/widgets/form/form.rb +20 -6
- data/apps/master/_init.rb +0 -1
- data/apps/master/data/locale/it/LC_MESSAGES/master.mo +0 -0
- data/apps/master/master.rb +4 -0
- data/apps/master/po/it/master.po +62 -25
- data/apps/master/po/master.pot +45 -20
- data/apps/messenger/_init.rb +2 -21
- data/apps/messenger/backends/sms/test.rb +25 -0
- data/apps/messenger/config/test.config.yml +6 -1
- data/apps/messenger/controllers/mixins/messenger_helper.rb +30 -5
- data/apps/messenger/data/locale/it/LC_MESSAGES/spider_messenger.mo +0 -0
- data/apps/messenger/messenger.rb +40 -2
- data/apps/servant/lib/commands_processor.rb +1 -1
- data/apps/worker/worker.rb +15 -10
- data/data/locale/it/LC_MESSAGES/spider.mo +0 -0
- data/lib/spiderfw/app.rb +3 -3
- data/lib/spiderfw/cache/template_cache.rb +4 -0
- data/lib/spiderfw/cmd/cmd.rb +0 -2
- data/lib/spiderfw/cmd/commands/app.rb +89 -6
- data/lib/spiderfw/cmd/commands/setup.rb +13 -40
- data/lib/spiderfw/config/configuration.rb +1 -0
- data/lib/spiderfw/config/options/spider.rb +9 -8
- data/lib/spiderfw/controller/mixins/http_mixin.rb +9 -0
- data/lib/spiderfw/env.rb +3 -1
- data/lib/spiderfw/i18n/cldr.rb +39 -13
- data/lib/spiderfw/i18n/i18n.rb +9 -0
- data/lib/spiderfw/i18n/javascript_parser.rb +1 -1
- data/lib/spiderfw/i18n/shtml_parser.rb +1 -1
- data/lib/spiderfw/model/base_model.rb +1 -1
- data/lib/spiderfw/model/inline_model.rb +13 -1
- data/lib/spiderfw/model/mappers/db_mapper.rb +5 -0
- data/lib/spiderfw/model/mappers/mapper.rb +9 -4
- data/lib/spiderfw/model/migrations/drop_element.rb +26 -0
- data/lib/spiderfw/model/migrations/irreversible_migration.rb +9 -0
- data/lib/spiderfw/model/migrations/migration.rb +7 -0
- data/lib/spiderfw/model/migrations/replace.rb +32 -0
- data/lib/spiderfw/model/migrations.rb +21 -0
- data/lib/spiderfw/model/model.rb +4 -1
- data/lib/spiderfw/model/storage/db/db_storage.rb +1 -1
- data/lib/spiderfw/setup/app_manager.rb +281 -200
- data/lib/spiderfw/setup/setup_task.rb +80 -35
- data/lib/spiderfw/spider.rb +28 -13
- data/lib/spiderfw/templates/layout.rb +40 -8
- data/lib/spiderfw/templates/resources/sass.rb +21 -0
- data/lib/spiderfw/test.rb +1 -1
- data/lib/spiderfw/utils/events/event_source.rb +1 -2
- data/lib/spiderfw/utils/gems.rb +5 -1
- metadata +11 -4
@@ -1,8 +1,10 @@
|
|
1
|
+
require 'spiderfw/model/migrations'
|
2
|
+
|
1
3
|
module Spider
|
2
4
|
|
3
5
|
class SetupTask
|
4
6
|
attr_reader :path, :version
|
5
|
-
attr_accessor :up, :down, :app
|
7
|
+
attr_accessor :before, :up, :down, :cleanup, :sync_models, :app
|
6
8
|
|
7
9
|
class <<self
|
8
10
|
def tasks
|
@@ -18,8 +20,11 @@ module Spider
|
|
18
20
|
Thread.critical = true unless crit
|
19
21
|
Kernel.load(path)
|
20
22
|
obj = self.new(path)
|
23
|
+
obj.before = Setup.before
|
21
24
|
obj.up = Setup.up
|
22
25
|
obj.down = Setup.down
|
26
|
+
obj.cleanup = Setup.cleanup
|
27
|
+
obj.sync_models = Setup.sync_models
|
23
28
|
#obj = @last_class.new(path)
|
24
29
|
# Kernel.send(:remove_const, @last_class.name)
|
25
30
|
#@last_class = nil
|
@@ -44,52 +49,87 @@ module Spider
|
|
44
49
|
end
|
45
50
|
|
46
51
|
def do_up
|
47
|
-
|
48
|
-
|
52
|
+
Spider::Model::Managed.no_set_dates = true
|
53
|
+
instance_eval(&@up)
|
54
|
+
#sync_schema unless @no_sync || @sync_done
|
55
|
+
Spider::Model::Managed.no_set_dates = false
|
49
56
|
end
|
50
57
|
|
51
58
|
def do_down
|
52
|
-
|
59
|
+
Spider::Model::Managed.no_set_dates = true
|
60
|
+
instance_eval(&@down) if @down
|
61
|
+
Spider::Model::Managed.no_set_dates = false
|
53
62
|
end
|
54
|
-
|
55
|
-
def
|
56
|
-
|
63
|
+
|
64
|
+
def do_cleanup
|
65
|
+
instance_eval(&@cleanup) if @cleanup
|
57
66
|
end
|
58
|
-
|
59
|
-
def
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
models = @app.models.reject{ |m| !(m < Spider::Model::Managed) }
|
67
|
+
|
68
|
+
def do_sync
|
69
|
+
return unless @sync_models
|
70
|
+
options = {
|
71
|
+
:no_foreign_key_constraints => true
|
72
|
+
}
|
73
|
+
@sync_models.each do |m|
|
74
|
+
m.mapper.sync_schema(false, options)
|
67
75
|
end
|
68
|
-
Spider::Model.sync_schema(
|
69
|
-
model, options[:force],
|
70
|
-
:drop_fields => options[:drop_fields],
|
71
|
-
:update_sequences => options[:update_sequences],
|
72
|
-
:no_foreign_key_constraints => options[:no_foreign_key_constraints]
|
73
|
-
)
|
74
|
-
@sync_done = true
|
75
76
|
end
|
76
77
|
|
77
|
-
def
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
end
|
78
|
+
# def no_sync_schema
|
79
|
+
# @no_sync = true
|
80
|
+
# end
|
81
|
+
|
82
|
+
# def sync_schema(*models)
|
83
|
+
# if models[-1].is_a?(Hash)
|
84
|
+
# options = models.pop
|
85
|
+
# else
|
86
|
+
# options = {}
|
87
|
+
# end
|
88
|
+
# if models.empty?
|
89
|
+
# models = @app.models.reject{ |m| !(m < Spider::Model::Managed) }
|
90
|
+
# end
|
91
|
+
# Spider::Model.sync_schema(
|
92
|
+
# model, options[:force],
|
93
|
+
# :drop_fields => options[:drop_fields],
|
94
|
+
# :update_sequences => options[:update_sequences],
|
95
|
+
# :no_foreign_key_constraints => options[:no_foreign_key_constraints]
|
96
|
+
# )
|
97
|
+
# @sync_done = true
|
98
|
+
# end
|
99
|
+
|
100
|
+
# def sync_schema!(*models)
|
101
|
+
# if models[-1].is_a?(Hash)
|
102
|
+
# options = models.pop
|
103
|
+
# else
|
104
|
+
# options = {}
|
105
|
+
# end
|
106
|
+
# options[:force] = true
|
107
|
+
# args = models + [options]
|
108
|
+
# sync_schema(*args)
|
109
|
+
# end
|
87
110
|
|
88
111
|
|
89
112
|
end
|
90
113
|
|
91
114
|
module Setup
|
92
|
-
|
115
|
+
|
116
|
+
def self.task(&proc)
|
117
|
+
self.instance_eval(&proc)
|
118
|
+
end
|
119
|
+
|
120
|
+
# TODO: pass options
|
121
|
+
def self.sync_schema(*models)
|
122
|
+
@sync_models = models
|
123
|
+
end
|
124
|
+
|
125
|
+
def self.sync_models
|
126
|
+
@sync_models
|
127
|
+
end
|
128
|
+
|
129
|
+
def self.before(&proc)
|
130
|
+
@before = proc if proc
|
131
|
+
@before
|
132
|
+
end
|
93
133
|
|
94
134
|
def self.up(&proc)
|
95
135
|
@up = proc if proc
|
@@ -100,7 +140,12 @@ module Spider
|
|
100
140
|
@down = proc if proc
|
101
141
|
@down
|
102
142
|
end
|
143
|
+
|
144
|
+
def self.cleanup(&proc)
|
145
|
+
@cleanup = proc if proc
|
146
|
+
@cleanup
|
147
|
+
end
|
103
148
|
|
104
149
|
end
|
105
150
|
|
106
|
-
end
|
151
|
+
end
|
data/lib/spiderfw/spider.rb
CHANGED
@@ -245,6 +245,11 @@ module Spider
|
|
245
245
|
@main_process_shutdown_blocks << block
|
246
246
|
end
|
247
247
|
|
248
|
+
|
249
|
+
def restart!
|
250
|
+
FileUtils.touch(@paths[:restart_file])
|
251
|
+
end
|
252
|
+
|
248
253
|
def current
|
249
254
|
Spider::Request.current
|
250
255
|
end
|
@@ -313,7 +318,7 @@ module Spider
|
|
313
318
|
def setup_paths(root)
|
314
319
|
@paths[:root] = root
|
315
320
|
@paths[:apps] = File.join(root, 'apps')
|
316
|
-
@paths[:core_apps] =
|
321
|
+
@paths[:core_apps] = $SPIDER_PATHS[:core_apps]
|
317
322
|
@paths[:config] = File.join(root, 'config')
|
318
323
|
@paths[:layouts] = File.join(root, 'layouts')
|
319
324
|
@paths[:var] = File.join(root, 'var')
|
@@ -326,11 +331,17 @@ module Spider
|
|
326
331
|
@paths[k] = File.expand_path(File.readlink(path)) if File.symlink?(path)
|
327
332
|
end
|
328
333
|
end
|
334
|
+
|
335
|
+
def app_paths
|
336
|
+
paths = [$SPIDER_PATHS[:core_apps]]
|
337
|
+
paths.unshift(@paths[:apps]) if @paths[:apps]
|
338
|
+
paths
|
339
|
+
end
|
329
340
|
|
330
341
|
# Finds an app by name, looking in paths[:apps] and paths[:core_apps]. Returns the found path.
|
331
342
|
def find_app(name)
|
332
343
|
path = nil
|
333
|
-
|
344
|
+
app_paths.each do |base|
|
334
345
|
test = File.join(base, name)
|
335
346
|
if File.exist?(File.join(test, '_init.rb'))
|
336
347
|
path = test
|
@@ -341,7 +352,7 @@ module Spider
|
|
341
352
|
end
|
342
353
|
|
343
354
|
def find_apps(name)
|
344
|
-
|
355
|
+
app_paths.each do |base|
|
345
356
|
test = File.join(base, name)
|
346
357
|
if File.exist?(test)
|
347
358
|
return find_apps_in_folder(test)
|
@@ -359,7 +370,7 @@ module Spider
|
|
359
370
|
def load_app_at_path(path)
|
360
371
|
return if @loaded_apps[path]
|
361
372
|
relative_path = path
|
362
|
-
if path.index(Spider.paths[:root])
|
373
|
+
if Spider.paths[:root] && path.index(Spider.paths[:root])
|
363
374
|
home = Pathname.new(Spider.paths[:root])
|
364
375
|
pname = Pathname.new(path)
|
365
376
|
relative_path = pname.relative_path_from(home).to_s
|
@@ -387,7 +398,8 @@ module Spider
|
|
387
398
|
end
|
388
399
|
|
389
400
|
def find_all_apps(paths=nil)
|
390
|
-
paths ||=
|
401
|
+
paths ||= self.app_paths
|
402
|
+
|
391
403
|
app_paths = []
|
392
404
|
Find.find(*paths) do |path|
|
393
405
|
if (File.basename(path) == '_init.rb')
|
@@ -456,7 +468,7 @@ module Spider
|
|
456
468
|
Spider.config.loaded_files.each do |f|
|
457
469
|
editor.load(f)
|
458
470
|
end
|
459
|
-
c_apps = Spider.config.get('apps')
|
471
|
+
c_apps = Spider.config.get('apps') || []
|
460
472
|
c_apps = (c_apps + apps).uniq
|
461
473
|
editor.set('apps', Spider.apps_load_order(c_apps, specs))
|
462
474
|
editor.save
|
@@ -600,7 +612,7 @@ module Spider
|
|
600
612
|
end
|
601
613
|
end
|
602
614
|
app = path_app
|
603
|
-
elsif owner_class <= Spider::App
|
615
|
+
elsif owner_class <= Spider::App || owner_class == Spider
|
604
616
|
app = owner_class
|
605
617
|
else
|
606
618
|
app = owner_class.app if (owner_class && owner_class.app)
|
@@ -777,16 +789,14 @@ module Spider
|
|
777
789
|
end
|
778
790
|
|
779
791
|
def locale
|
780
|
-
unless Thread.current[:current_languages] # Locale sets this
|
781
|
-
c_l = Spider.conf.get('locale')
|
782
|
-
return c_l if c_l
|
783
|
-
end
|
784
792
|
begin
|
785
793
|
@current_locale = Locale.current[0]
|
786
794
|
rescue
|
787
795
|
# There are problems with subsequent requests on Windows,
|
788
796
|
# so use cached locale if Locale.current fails
|
789
|
-
@current_locale
|
797
|
+
l = @current_locale
|
798
|
+
l ||= Locale::Tag.parse(Spider.conf.get('locale')) if Spider.conf.get('locale')
|
799
|
+
l ||= Locale::Tag.parse('en')
|
790
800
|
end
|
791
801
|
end
|
792
802
|
|
@@ -811,9 +821,14 @@ module Spider
|
|
811
821
|
mod.test_teardown if mod.respond_to?(:test_teardown)
|
812
822
|
end
|
813
823
|
end
|
824
|
+
|
825
|
+
def interactive?
|
826
|
+
!!$SPIDER_INTERACTIVE
|
827
|
+
end
|
814
828
|
|
815
829
|
def output(str, level=:INFO)
|
816
|
-
|
830
|
+
use_log = !Spider.interactive? && @logger_started
|
831
|
+
if use_log
|
817
832
|
@logger.log(level, str)
|
818
833
|
else
|
819
834
|
str = "#{level}: #{str}" if level == :ERROR
|
@@ -45,6 +45,9 @@ module Spider
|
|
45
45
|
next if seen[seen_check]
|
46
46
|
seen[seen_check] = true
|
47
47
|
type = ass[:type].to_sym
|
48
|
+
|
49
|
+
ass = compile_asset(ass)
|
50
|
+
|
48
51
|
compress_config = case type
|
49
52
|
when :js
|
50
53
|
'javascript.compress'
|
@@ -62,16 +65,16 @@ module Spider
|
|
62
65
|
end
|
63
66
|
else
|
64
67
|
unless pub_dest
|
65
|
-
pub_dest =
|
68
|
+
pub_dest = self.class.compiled_folder_path
|
66
69
|
FileUtils.mkdir_p(pub_dest)
|
67
70
|
end
|
68
|
-
if comp = ass[:compressed_path]
|
71
|
+
if comp = ass[:compressed_path] # Already compressed assets
|
69
72
|
name = File.basename(comp)
|
70
|
-
if ass[:compressed_rel_path]
|
73
|
+
if ass[:compressed_rel_path] # Keeps the compressed files in a subdir
|
71
74
|
dir = File.dirname(ass[:compressed_rel_path])
|
72
|
-
if ass[:copy_dir]
|
75
|
+
if ass[:copy_dir] # Copies the source dir (which may contain resources used by the assets)
|
73
76
|
start = dir
|
74
|
-
if ass[:copy_dir].is_a?(Fixnum)
|
77
|
+
if ass[:copy_dir].is_a?(Fixnum) # How many levels to go up
|
75
78
|
ass[:copy_dir].downto(0) do |i|
|
76
79
|
start = File.dirname(start)
|
77
80
|
end
|
@@ -96,7 +99,7 @@ module Spider
|
|
96
99
|
end
|
97
100
|
ass[:src] = Spider::HomeController.pub_url+'/'+COMPILED_FOLDER+'/'+src
|
98
101
|
assets[type] << ass
|
99
|
-
else
|
102
|
+
else # needs compression
|
100
103
|
name = ass[:compress] || cname
|
101
104
|
unless compress_assets[type][name]
|
102
105
|
cpr = {:name => name, :assets => [], :cpr => true}
|
@@ -175,6 +178,10 @@ module Spider
|
|
175
178
|
end
|
176
179
|
|
177
180
|
COMPILED_FOLDER = '_c'
|
181
|
+
|
182
|
+
def self.compiled_folder_path
|
183
|
+
File.join(Spider::HomeController.pub_path, COMPILED_FOLDER)
|
184
|
+
end
|
178
185
|
|
179
186
|
def asset_gettext_messages_file(path)
|
180
187
|
dir = File.dirname(path)
|
@@ -182,10 +189,31 @@ module Spider
|
|
182
189
|
File.join(dir, "#{name}.i18n.json")
|
183
190
|
end
|
184
191
|
|
192
|
+
def compile_asset(ass)
|
193
|
+
return ass unless ass[:src]
|
194
|
+
if ass[:type] == :css
|
195
|
+
ext = File.extname(ass[:path])
|
196
|
+
if ['.scss', '.sass'].include?(ext)
|
197
|
+
dir = File.dirname(ass[:path])
|
198
|
+
base = File.basename(ass[:path], ext)
|
199
|
+
newname = "#{base}.css"
|
200
|
+
tmpdestdir = File.join(dir, 'stylesheets')
|
201
|
+
|
202
|
+
dest = File.join(tmpdestdir, newname)
|
203
|
+
require 'spiderfw/templates/resources/sass'
|
204
|
+
|
205
|
+
Spider::SassCompiler.compile(ass[:path], dest)
|
206
|
+
ass[:path] = dest
|
207
|
+
ass[:src] = File.join(File.dirname(ass[:src]), newname)
|
208
|
+
end
|
209
|
+
end
|
210
|
+
return ass
|
211
|
+
end
|
212
|
+
|
185
213
|
def compress_javascript(cpr)
|
186
214
|
require 'yui/compressor'
|
187
215
|
|
188
|
-
pub_dest =
|
216
|
+
pub_dest = self.class.compiled_folder_path
|
189
217
|
name = cpr[:name]
|
190
218
|
|
191
219
|
already_compressed = Dir.glob(pub_dest+'/'+name+'.*.js')
|
@@ -232,7 +260,7 @@ module Spider
|
|
232
260
|
def compress_css(cpr)
|
233
261
|
require 'yui/compressor'
|
234
262
|
|
235
|
-
pub_dest =
|
263
|
+
pub_dest = self.class.compiled_folder_path
|
236
264
|
name = cpr[:name]
|
237
265
|
|
238
266
|
already_compressed = Dir.glob(pub_dest+'/'+name+'.*.css')
|
@@ -340,6 +368,10 @@ module Spider
|
|
340
368
|
end
|
341
369
|
return compiled_name
|
342
370
|
end
|
371
|
+
|
372
|
+
def self.clear_compiled_folder!
|
373
|
+
FileUtils.rm_rf(Dir.glob(File.join(self.compiled_folder_path, '*')))
|
374
|
+
end
|
343
375
|
|
344
376
|
end
|
345
377
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'sass'
|
2
|
+
require 'sass/plugin'
|
3
|
+
|
4
|
+
Sass::Plugin.options[:cache_location] = File.join(Spider.paths[:tmp], 'sass-cache')
|
5
|
+
|
6
|
+
module Spider
|
7
|
+
|
8
|
+
module SassCompiler
|
9
|
+
|
10
|
+
def self.compile(src, dest)
|
11
|
+
engine = Sass::Engine.for_file(src, {})
|
12
|
+
output = engine.render
|
13
|
+
File.open(dest, 'w') do |f|
|
14
|
+
f.write "/* This file is autogenerated; do not edit directly (edit #{src} instead) */\n\n"
|
15
|
+
f.write output
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/lib/spiderfw/test.rb
CHANGED
data/lib/spiderfw/utils/gems.rb
CHANGED
@@ -3,7 +3,11 @@ module Spider
|
|
3
3
|
# TODO: remove when old RubyGems versions are not a problem anymore
|
4
4
|
def self.gem_available?(name, *requirements)
|
5
5
|
if Gem::Specification.respond_to?(:find_by_name)
|
6
|
-
|
6
|
+
begin
|
7
|
+
Gem::Specification.find_by_name(name, *requirements)
|
8
|
+
rescue Gem::LoadError
|
9
|
+
return false
|
10
|
+
end
|
7
11
|
else
|
8
12
|
Gem.available?(name, requirements.first)
|
9
13
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spiderfw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 37
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 17
|
10
|
+
version: 0.6.17
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ivan Pirlik
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-09-13 00:00:00 +02:00
|
19
19
|
default_executable: spider
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -899,6 +899,7 @@ files:
|
|
899
899
|
- apps/messenger/backends/email/smtp.rb
|
900
900
|
- apps/messenger/backends/email/test.rb
|
901
901
|
- apps/messenger/backends/sms/smstools.rb
|
902
|
+
- apps/messenger/backends/sms/test.rb
|
902
903
|
- apps/messenger/config/options.rb
|
903
904
|
- apps/messenger/config/test.config.yml
|
904
905
|
- apps/messenger/config/worker/queue.rb
|
@@ -1093,6 +1094,11 @@ files:
|
|
1093
1094
|
- lib/spiderfw/model/mappers/mappers.rb
|
1094
1095
|
- lib/spiderfw/model/mappers/proxy_mapper.rb
|
1095
1096
|
- lib/spiderfw/model/mappers/vfs/flat_file.rb
|
1097
|
+
- lib/spiderfw/model/migrations/drop_element.rb
|
1098
|
+
- lib/spiderfw/model/migrations/irreversible_migration.rb
|
1099
|
+
- lib/spiderfw/model/migrations/migration.rb
|
1100
|
+
- lib/spiderfw/model/migrations/replace.rb
|
1101
|
+
- lib/spiderfw/model/migrations.rb
|
1096
1102
|
- lib/spiderfw/model/mixins/converted.rb
|
1097
1103
|
- lib/spiderfw/model/mixins/list.rb
|
1098
1104
|
- lib/spiderfw/model/mixins/mixins.rb
|
@@ -1164,6 +1170,7 @@ files:
|
|
1164
1170
|
- lib/spiderfw/templates/blocks/yield.rb
|
1165
1171
|
- lib/spiderfw/templates/layout.rb
|
1166
1172
|
- lib/spiderfw/templates/resources/less.rb
|
1173
|
+
- lib/spiderfw/templates/resources/sass.rb
|
1167
1174
|
- lib/spiderfw/templates/template.rb
|
1168
1175
|
- lib/spiderfw/templates/template_blocks.rb
|
1169
1176
|
- lib/spiderfw/test/capybara.rb
|