voog-kit 0.3.9 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/kit +5 -4
- data/lib/voog/dtk/filemanager.rb +80 -64
- data/lib/voog/dtk/version.rb +1 -1
- data/lib/voog/dtk/watcher.rb +75 -0
- data/spec/models/dtk/filemanager_spec.rb +2 -2
- data/voog-kit.gemspec +2 -2
- metadata +8 -14
- data/lib/voog/dtk/guard.rb +0 -152
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c7ac235dd563c5bfebdf3a3c1153c9898da4810
|
4
|
+
data.tar.gz: e3d3d75ae208a8af22c2198fb8882656dc4b6051
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9787c777adc1df1fd0d42f396677195af1a2c8766a780735f8a13f7428cea44abc0635fc78d882cb8495fc934700b413123897a8ad058dd1332992fbe68f7a5b
|
7
|
+
data.tar.gz: 04e62394e467681c2013a9683f919ee2fc93e560360bff2a3b579c7105c22f99d194ddf0e214c51111b920415ef2986832f7232326e8c2817ca24bbbfea1deaa
|
data/bin/kit
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'guard'
|
4
3
|
require 'gli'
|
5
4
|
|
6
5
|
$LOAD_PATH << File.expand_path('../lib', File.dirname(__FILE__))
|
7
6
|
require 'json'
|
8
7
|
|
9
8
|
require 'voog/dtk'
|
10
|
-
require 'voog/dtk/
|
9
|
+
require 'voog/dtk/watcher'
|
11
10
|
require 'voog/dtk/filemanager'
|
12
11
|
require 'voog/dtk/notifier'
|
13
12
|
require 'voog_api'
|
@@ -234,8 +233,10 @@ command :watch do |c|
|
|
234
233
|
c.flag *api_token_args
|
235
234
|
c.flag *site_args
|
236
235
|
c.action do |global_options, options, args|
|
237
|
-
|
238
|
-
|
236
|
+
@notifier.info "Watching #{Dir.pwd}/ for changes..."
|
237
|
+
@notifier.newline
|
238
|
+
watcher = Voog::Dtk::Watcher.new(@filemanager, @debug)
|
239
|
+
watcher.run
|
239
240
|
end
|
240
241
|
end
|
241
242
|
|
data/lib/voog/dtk/filemanager.rb
CHANGED
@@ -4,6 +4,7 @@ require 'json'
|
|
4
4
|
require 'fileutils'
|
5
5
|
require 'git'
|
6
6
|
require 'mime/types'
|
7
|
+
require 'pathname'
|
7
8
|
|
8
9
|
module Voog::Dtk
|
9
10
|
class FileManager
|
@@ -11,6 +12,14 @@ module Voog::Dtk
|
|
11
12
|
|
12
13
|
BOILERPLATE_URL = 'git@github.com:Edicy/design-boilerplate.git'
|
13
14
|
|
15
|
+
ASSET_FOLDER_MAP = {
|
16
|
+
'image' => 'images',
|
17
|
+
'stylesheet' => 'stylesheets',
|
18
|
+
'javascript' => 'javascripts',
|
19
|
+
'font' => 'assets',
|
20
|
+
'unknown' => 'assets'
|
21
|
+
}
|
22
|
+
|
14
23
|
def initialize(client, opts = {})
|
15
24
|
@client = client
|
16
25
|
@silent = opts.fetch(:silent, false)
|
@@ -68,6 +77,18 @@ module Voog::Dtk
|
|
68
77
|
end
|
69
78
|
end
|
70
79
|
|
80
|
+
def relative_path_of(file)
|
81
|
+
if file.include? Dir.pwd
|
82
|
+
pwd = Pathname.new Dir.pwd
|
83
|
+
file_path = Pathname.new file
|
84
|
+
file_path.relative_path_from(pwd).to_s
|
85
|
+
else
|
86
|
+
file
|
87
|
+
end
|
88
|
+
rescue
|
89
|
+
file
|
90
|
+
end
|
91
|
+
|
71
92
|
def add_to_manifest(files = nil)
|
72
93
|
return if files.nil?
|
73
94
|
@manifest = read_manifest
|
@@ -134,7 +155,7 @@ module Voog::Dtk
|
|
134
155
|
def remove_from_manifest(files = nil)
|
135
156
|
return if files.nil?
|
136
157
|
@manifest = read_manifest
|
137
|
-
files = (files.is_a? String) ? [files] : files
|
158
|
+
files = (files.is_a? String) ? [relative_path_of(files)] : files.map{ |f| relative_path_of(f) }
|
138
159
|
files.uniq.each do |file|
|
139
160
|
match = /^(component|layout|image|javascript|asset|stylesheet)s\/(.*)/.match(file)
|
140
161
|
next if match.nil?
|
@@ -434,16 +455,8 @@ module Voog::Dtk
|
|
434
455
|
&& asset.respond_to?(:asset_type) \
|
435
456
|
&& (asset.respond_to?(:public_url) || asset.respond_to?(:data))
|
436
457
|
|
437
|
-
folder_names = {
|
438
|
-
'image' => 'images',
|
439
|
-
'stylesheet' => 'stylesheets',
|
440
|
-
'javascript' => 'javascripts',
|
441
|
-
'font' => 'assets',
|
442
|
-
'unknown' => 'assets'
|
443
|
-
}
|
444
|
-
|
445
458
|
if valid
|
446
|
-
folder =
|
459
|
+
folder = ASSET_FOLDER_MAP.fetch(asset.asset_type, 'assets')
|
447
460
|
|
448
461
|
Dir.mkdir(folder) unless Dir.exist?(folder)
|
449
462
|
Dir.chdir(folder)
|
@@ -652,7 +665,8 @@ module Voog::Dtk
|
|
652
665
|
def layout_asset_id_map(assets=nil)
|
653
666
|
assets ||= get_layout_assets
|
654
667
|
assets.inject(Hash.new) do |memo, a|
|
655
|
-
|
668
|
+
filename = "#{ASSET_FOLDER_MAP.fetch(a.asset_type, 'assets')}/#{a.filename}"
|
669
|
+
memo[filename] = a.id
|
656
670
|
memo
|
657
671
|
end
|
658
672
|
end
|
@@ -669,9 +683,9 @@ module Voog::Dtk
|
|
669
683
|
# Find if provided file is a directory instead
|
670
684
|
files.each_with_index do |file, index|
|
671
685
|
next if file.is_a? Array
|
672
|
-
if Dir.exist? file
|
673
|
-
subfiles = Dir.new(file).entries.reject{|e| e =~ /^(\.|\.\.)$/ } # Keep only normal subfiles
|
674
|
-
subfiles.map! { |subfile| subfile = "#{file[/[^\/]*/]}/#{subfile}" } # Prepend folder name
|
686
|
+
if Dir.exist? relative_path_of(file)
|
687
|
+
subfiles = Dir.new(relative_path_of(file)).entries.reject{|e| e =~ /^(\.|\.\.)$/ } # Keep only normal subfiles
|
688
|
+
subfiles.map! { |subfile| subfile = "#{relative_path_of(file)[/[^\/]*/]}/#{subfile}" } # Prepend folder name
|
675
689
|
files[index] = subfiles # Insert as Array so sub-subfolders won't get processed again
|
676
690
|
end
|
677
691
|
end
|
@@ -683,88 +697,89 @@ module Voog::Dtk
|
|
683
697
|
|
684
698
|
files.each_with_index do |file, index|
|
685
699
|
@notifier.newline if index > 0
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
700
|
+
relative_filename = relative_path_of(file)
|
701
|
+
if File.exist?(relative_filename)
|
702
|
+
if uploadable?(relative_filename)
|
703
|
+
if relative_filename =~ /^(layout|component)s\/[^\/]+\.tpl$/ # if layout/component
|
704
|
+
if local_layouts.include?(relative_filename)
|
705
|
+
if layouts.key?(relative_filename)
|
706
|
+
@notifier.info "Updating layout file #{relative_filename}..."
|
707
|
+
if update_layout(layouts[relative_filename], File.read(relative_filename, encoding: 'UTF-8'))
|
693
708
|
@notifier.success 'OK!'
|
694
709
|
else
|
695
|
-
@notifier.error "Cannot update layout file #{
|
710
|
+
@notifier.error "Cannot update layout file #{relative_filename}!"
|
696
711
|
end
|
697
712
|
else
|
698
|
-
@notifier.warning "Remote file #{
|
699
|
-
@notifier.info "\nTrying to create layout file #{
|
700
|
-
if create_remote_layout(
|
713
|
+
@notifier.warning "Remote file #{relative_filename} not found!"
|
714
|
+
@notifier.info "\nTrying to create layout file #{relative_filename}..."
|
715
|
+
if create_remote_layout(relative_filename)
|
701
716
|
@notifier.success 'OK!'
|
702
717
|
else
|
703
|
-
@notifier.error "Unable to create layout file #{
|
718
|
+
@notifier.error "Unable to create layout file #{relative_filename}!"
|
704
719
|
end
|
705
720
|
end
|
706
721
|
else
|
707
|
-
@notifier.warning "Layout file #{
|
722
|
+
@notifier.warning "Layout file #{relative_filename} not found in manifest! Skipping."
|
708
723
|
end
|
709
|
-
elsif
|
710
|
-
if local_assets.include?
|
711
|
-
if layout_assets.key?
|
712
|
-
if is_editable?(
|
713
|
-
@notifier.info "Updating layout asset file #{
|
714
|
-
if update_layout_asset(layout_assets[
|
724
|
+
elsif relative_filename =~ /^(asset|image|stylesheet|javascript)s\/[^\/]+\..+$/ # if other asset
|
725
|
+
if local_assets.include? relative_filename
|
726
|
+
if layout_assets.key? relative_filename
|
727
|
+
if is_editable?(relative_filename)
|
728
|
+
@notifier.info "Updating layout asset file #{relative_filename}..."
|
729
|
+
if update_layout_asset(layout_assets[relative_filename], File.read(relative_filename, encoding: 'UTF-8'))
|
715
730
|
@notifier.success 'OK!'
|
716
731
|
else
|
717
|
-
@notifier.error "Unable to update file #{
|
732
|
+
@notifier.error "Unable to update file #{relative_filename}!"
|
718
733
|
end
|
719
734
|
else
|
720
735
|
if @overwrite
|
721
|
-
@notifier.info "Re-uploading file #{
|
722
|
-
if delete_layout_asset(layout_assets[
|
736
|
+
@notifier.info "Re-uploading file #{relative_filename}..."
|
737
|
+
if delete_layout_asset(layout_assets[relative_filename]) && create_remote_file(relative_filename)
|
723
738
|
@notifier.success 'OK!'
|
724
739
|
else
|
725
|
-
@notifier.error "Unable to update file #{
|
740
|
+
@notifier.error "Unable to update file #{relative_filename}!"
|
726
741
|
end
|
727
742
|
else
|
728
|
-
@notifier.warning "Not allowed to update file #{
|
743
|
+
@notifier.warning "Not allowed to update file #{relative_filename}!"
|
729
744
|
end
|
730
745
|
end
|
731
746
|
else
|
732
|
-
@notifier.warning "Remote file #{
|
733
|
-
@notifier.info "\nTrying to create file #{
|
734
|
-
if create_remote_file(
|
747
|
+
@notifier.warning "Remote file #{relative_filename} not found!"
|
748
|
+
@notifier.info "\nTrying to create file #{relative_filename}..."
|
749
|
+
if create_remote_file(relative_filename)
|
735
750
|
@notifier.success 'OK!'
|
736
751
|
else
|
737
|
-
@notifier.error "Unable to create file #{
|
752
|
+
@notifier.error "Unable to create file #{relative_filename}!"
|
738
753
|
end
|
739
754
|
end
|
740
755
|
else
|
741
|
-
@notifier.warning "Asset file #{
|
756
|
+
@notifier.warning "Asset file #{relative_filename} not found in manifest! Skipping."
|
742
757
|
end
|
743
|
-
elsif Dir.exist?
|
744
|
-
@notifier.warning "Not allowed to push subfolder #{
|
758
|
+
elsif Dir.exist? relative_filename
|
759
|
+
@notifier.warning "Not allowed to push subfolder #{relative_filename}!"
|
745
760
|
else
|
746
|
-
@notifier.warning "Not allowed to push file #{
|
761
|
+
@notifier.warning "Not allowed to push file #{relative_filename}!"
|
747
762
|
end
|
748
763
|
else
|
749
|
-
@notifier.error "Cannot upload file #{
|
764
|
+
@notifier.error "Cannot upload file #{relative_filename}!"
|
750
765
|
end
|
751
766
|
else
|
752
|
-
@notifier.error "File #{
|
767
|
+
@notifier.error "File #{relative_filename} not found!"
|
753
768
|
end
|
754
769
|
end
|
755
770
|
@notifier.newline
|
756
771
|
end
|
757
772
|
|
758
773
|
def is_editable?(file)
|
759
|
-
folder = file.split('/').first
|
760
|
-
extension = file.split('/').last.split('.').last
|
774
|
+
folder = relative_path_of(file).split('/').first
|
775
|
+
extension = relative_path_of(file).split('/').last.split('.').last
|
761
776
|
|
762
777
|
(%w(stylesheets javascripts).include? folder) && (%w(js css).include? extension)
|
763
778
|
end
|
764
779
|
|
765
780
|
def content_type_for(file)
|
766
|
-
folder = file.split('/').first
|
767
|
-
if is_editable?(file)
|
781
|
+
folder = relative_path_of(file).split('/').first
|
782
|
+
if is_editable?(relative_path_of(file))
|
768
783
|
if folder == 'stylesheets'
|
769
784
|
'text/css'
|
770
785
|
elsif folder == 'javascripts'
|
@@ -772,7 +787,7 @@ module Voog::Dtk
|
|
772
787
|
end
|
773
788
|
else
|
774
789
|
if folder == 'images'
|
775
|
-
"image/#{file.split('/').last.split('.').last}"
|
790
|
+
"image/#{relative_path_of(file).split('/').last.split('.').last}"
|
776
791
|
elsif folder == 'assets'
|
777
792
|
'unknown/unknown'
|
778
793
|
end
|
@@ -841,7 +856,7 @@ module Voog::Dtk
|
|
841
856
|
end
|
842
857
|
|
843
858
|
def add_files(names)
|
844
|
-
new_files = add_to_manifest names
|
859
|
+
new_files = add_to_manifest names.map {|n| relative_path_of(n)}
|
845
860
|
upload_files new_files.map { |f| f.fetch('file') } unless new_files.empty?
|
846
861
|
end
|
847
862
|
|
@@ -858,14 +873,15 @@ module Voog::Dtk
|
|
858
873
|
end
|
859
874
|
|
860
875
|
def remove_remote_file(file)
|
861
|
-
|
876
|
+
relative_filename = relative_path_of(file)
|
877
|
+
folder, filename = relative_filename.split('/')
|
862
878
|
return unless (folder && filename)
|
863
879
|
|
864
880
|
asset_ids = layout_asset_id_map
|
865
881
|
layout_ids = layout_id_map
|
866
882
|
|
867
|
-
if is_asset?
|
868
|
-
id = asset_ids.fetch(
|
883
|
+
if is_asset? relative_filename
|
884
|
+
id = asset_ids.fetch(relative_filename, nil)
|
869
885
|
|
870
886
|
unless id.nil?
|
871
887
|
if delete_layout_asset(id)
|
@@ -874,31 +890,31 @@ module Voog::Dtk
|
|
874
890
|
@notifier.error "Failed to remove remote asset '#{filename}'!" unless @silent
|
875
891
|
end
|
876
892
|
end
|
877
|
-
elsif is_layout?
|
893
|
+
elsif is_layout? relative_filename
|
878
894
|
filename = filename.gsub('.tpl', '')
|
879
|
-
id = layout_ids.fetch(
|
895
|
+
id = layout_ids.fetch(relative_filename, nil)
|
880
896
|
|
881
897
|
unless id.nil?
|
882
898
|
if delete_layout(id)
|
883
899
|
@notifier.info "Removed remote layout '#{filename}'." unless @silent
|
884
900
|
else
|
885
|
-
@notifier.error "Failed to remove remote layout '#{
|
901
|
+
@notifier.error "Failed to remove remote layout '#{relative_filename}'!" unless @silent
|
886
902
|
end
|
887
903
|
end
|
888
904
|
else
|
889
|
-
@notifier.error "Invalid filename: '#{
|
905
|
+
@notifier.error "Invalid filename: '#{relative_filename}'"
|
890
906
|
end
|
891
907
|
@notifier.newline
|
892
908
|
end
|
893
909
|
|
894
910
|
def uploadable?(file)
|
895
911
|
if file.is_a? String
|
896
|
-
!(file =~
|
912
|
+
!(relative_path_of(file) =~ /(component|layout|image|asset|javascript|stylesheet)s\/(.+)/).nil?
|
897
913
|
else
|
898
914
|
begin
|
899
|
-
uploadable? file.try(:to_s)
|
915
|
+
uploadable? (relative_path_of(file).is_a? String) ? relative_path_of(file).try(:to_s) : relative_path_of(file)
|
900
916
|
rescue
|
901
|
-
raise "Cannot upload file '#{file}'!".red
|
917
|
+
raise "Cannot upload file '#{relative_path_of(file)}'!".red
|
902
918
|
end
|
903
919
|
end
|
904
920
|
end
|
data/lib/voog/dtk/version.rb
CHANGED
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'listen'
|
2
|
+
# module Guard
|
3
|
+
# class VoogKit < Plugin
|
4
|
+
# attr_accessor :options, :filemanager, :debug
|
5
|
+
|
6
|
+
# def initialize(options = {})
|
7
|
+
# @options = options
|
8
|
+
# super(options)
|
9
|
+
# end
|
10
|
+
|
11
|
+
# def run_on_additions(paths)
|
12
|
+
# @filemanager.add_files paths
|
13
|
+
# rescue => e
|
14
|
+
# @filemanager.notifier.newline
|
15
|
+
# Voog::Dtk.handle_exception e, @debug, @filemanager.notifier
|
16
|
+
# end
|
17
|
+
|
18
|
+
# def run_on_removals(paths)
|
19
|
+
# @filemanager.remove_files paths
|
20
|
+
# rescue => e
|
21
|
+
# @filemanager.notifier.newline
|
22
|
+
# Voog::Dtk.handle_exception e, @debug, @filemanager.notifier
|
23
|
+
# end
|
24
|
+
|
25
|
+
# def run_on_modifications(paths)
|
26
|
+
# @filemanager.upload_files paths
|
27
|
+
# @filemanager.notifier.newline
|
28
|
+
# rescue => e
|
29
|
+
# @filemanager.notifier.newline
|
30
|
+
# Voog::Dtk.handle_exception e, @debug, @filemanager.notifier
|
31
|
+
# end
|
32
|
+
# end
|
33
|
+
# end
|
34
|
+
|
35
|
+
module Voog::Dtk
|
36
|
+
class Watcher
|
37
|
+
def initialize(filemanager, debug=false)
|
38
|
+
paths = ['layouts/', 'components/', 'assets/', 'javascripts/', 'stylesheets/', 'images/']
|
39
|
+
|
40
|
+
@filemanager = filemanager
|
41
|
+
@debug = debug
|
42
|
+
@listener = Listen.to(*paths) do |modified, added, removed|
|
43
|
+
handle_added added unless added.empty?
|
44
|
+
handle_removed removed unless removed.empty?
|
45
|
+
handle_modified modified unless modified.empty?
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def handle_added(added)
|
50
|
+
@filemanager.add_files added
|
51
|
+
rescue => e
|
52
|
+
@filemanager.notifier.newline
|
53
|
+
Voog::Dtk.handle_exception e, @debug, @filemanager.notifier
|
54
|
+
end
|
55
|
+
|
56
|
+
def handle_removed(removed)
|
57
|
+
@filemanager.remove_files removed
|
58
|
+
rescue => e
|
59
|
+
@filemanager.notifier.newline
|
60
|
+
Voog::Dtk.handle_exception e, @debug, @filemanager.notifier
|
61
|
+
end
|
62
|
+
|
63
|
+
def handle_modified(modified)
|
64
|
+
@filemanager.upload_files modified
|
65
|
+
rescue => e
|
66
|
+
@filemanager.notifier.newline
|
67
|
+
Voog::Dtk.handle_exception e, @debug, @filemanager.notifier
|
68
|
+
end
|
69
|
+
|
70
|
+
def run
|
71
|
+
@listener.start
|
72
|
+
sleep
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -194,8 +194,8 @@ describe Voog::Dtk::FileManager do
|
|
194
194
|
end
|
195
195
|
end
|
196
196
|
|
197
|
-
context 'with existing data'
|
198
|
-
it 'doesn\'t add a duplicate file' do
|
197
|
+
context 'with existing data'do
|
198
|
+
it 'doesn\'t add a duplicate file', focus: true do
|
199
199
|
testfiles = ['components/test_layout.tpl', 'layouts/testfile.tpl']
|
200
200
|
@filemanager.add_to_manifest testfiles
|
201
201
|
@manifest = @filemanager.read_manifest
|
data/voog-kit.gemspec
CHANGED
@@ -27,8 +27,8 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_development_dependency 'guard-rspec'
|
28
28
|
|
29
29
|
spec.add_runtime_dependency 'gli', '2.10.0'
|
30
|
-
spec.add_runtime_dependency 'pry'
|
31
|
-
spec.add_runtime_dependency '
|
30
|
+
spec.add_runtime_dependency 'pry'
|
31
|
+
spec.add_runtime_dependency 'listen', '~> 3.0'
|
32
32
|
spec.add_runtime_dependency 'git'
|
33
33
|
spec.add_runtime_dependency 'parseconfig'
|
34
34
|
spec.add_runtime_dependency 'voog_api', '~> 0.0.7'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: voog-kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mikk Pristavka
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-12-
|
12
|
+
date: 2015-12-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -87,32 +87,26 @@ dependencies:
|
|
87
87
|
requirements:
|
88
88
|
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: 0
|
90
|
+
version: '0'
|
91
91
|
type: :runtime
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version: 0
|
97
|
+
version: '0'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
|
-
name:
|
99
|
+
name: listen
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- - "
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: 2.3.0
|
105
|
-
- - "<"
|
102
|
+
- - "~>"
|
106
103
|
- !ruby/object:Gem::Version
|
107
104
|
version: '3.0'
|
108
105
|
type: :runtime
|
109
106
|
prerelease: false
|
110
107
|
version_requirements: !ruby/object:Gem::Requirement
|
111
108
|
requirements:
|
112
|
-
- - "
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
version: 2.3.0
|
115
|
-
- - "<"
|
109
|
+
- - "~>"
|
116
110
|
- !ruby/object:Gem::Version
|
117
111
|
version: '3.0'
|
118
112
|
- !ruby/object:Gem::Dependency
|
@@ -224,9 +218,9 @@ files:
|
|
224
218
|
- bin/kit
|
225
219
|
- lib/voog/dtk.rb
|
226
220
|
- lib/voog/dtk/filemanager.rb
|
227
|
-
- lib/voog/dtk/guard.rb
|
228
221
|
- lib/voog/dtk/notifier.rb
|
229
222
|
- lib/voog/dtk/version.rb
|
223
|
+
- lib/voog/dtk/watcher.rb
|
230
224
|
- spec/fixtures/.DS_Store
|
231
225
|
- spec/fixtures/.voog
|
232
226
|
- spec/fixtures/.voog2
|
data/lib/voog/dtk/guard.rb
DELETED
@@ -1,152 +0,0 @@
|
|
1
|
-
require 'guard'
|
2
|
-
require 'guard/guard'
|
3
|
-
require 'guard/plugin'
|
4
|
-
|
5
|
-
module Guard
|
6
|
-
class Shell < Guard
|
7
|
-
VERSION = '0.5.2'
|
8
|
-
|
9
|
-
# Calls #run_all if the :all_on_start option is present.
|
10
|
-
def start
|
11
|
-
run_all if options[:all_on_start]
|
12
|
-
end
|
13
|
-
|
14
|
-
# Call #run_on_change for all files which match this guard.
|
15
|
-
def run_all
|
16
|
-
run_on_modifications(Watcher.match_files(self, Dir.glob('{,**/}*{,.*}').uniq))
|
17
|
-
end
|
18
|
-
|
19
|
-
# Print the result of the command(s), if there are results to be printed.
|
20
|
-
def run_on_modifications(res)
|
21
|
-
puts res if res
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
module Voog::Dtk
|
27
|
-
class ::Guard::Watchman < ::Guard::Plugin
|
28
|
-
attr_accessor :options, :filemanager, :debug
|
29
|
-
|
30
|
-
# Initializes a Guard plugin.
|
31
|
-
# Don't do any work here, especially as Guard plugins get initialized even if they are not in an active group!
|
32
|
-
#
|
33
|
-
# @param [Hash] options the custom Guard plugin options
|
34
|
-
# @option options [Array<Guard::Watcher>] watchers the Guard plugin file watchers
|
35
|
-
# @option options [Symbol] group the group this Guard plugin belongs to
|
36
|
-
# @option options [Boolean] any_return allow any object to be returned from a watcher
|
37
|
-
#
|
38
|
-
def initialize(options = {})
|
39
|
-
super
|
40
|
-
@options = options
|
41
|
-
end
|
42
|
-
|
43
|
-
# Called once when Guard starts. Please override initialize method to init stuff.
|
44
|
-
#
|
45
|
-
# @raise [:task_has_failed] when start has failed
|
46
|
-
# @return [Object] the task result
|
47
|
-
#
|
48
|
-
def start
|
49
|
-
::Guard::UI.info 'Guard::Voog is running'
|
50
|
-
# run_all
|
51
|
-
end
|
52
|
-
|
53
|
-
def debug=(debug)
|
54
|
-
::Guard::UI.info 'Debug mode is enabed' if debug
|
55
|
-
@debug = debug
|
56
|
-
end
|
57
|
-
|
58
|
-
# Called when `stop|quit|exit|s|q|e + enter` is pressed (when Guard quits).
|
59
|
-
#
|
60
|
-
# @raise [:task_has_failed] when stop has failed
|
61
|
-
# @return [Object] the task result
|
62
|
-
#
|
63
|
-
def stop
|
64
|
-
::Guard::UI.info 'Guard::Voog stopped'
|
65
|
-
end
|
66
|
-
|
67
|
-
# Called when `reload|r|z + enter` is pressed.
|
68
|
-
# This method should be mainly used for "reload" (really!) actions like reloading passenger/spork/bundler/...
|
69
|
-
#
|
70
|
-
# @raise [:task_has_failed] when reload has failed
|
71
|
-
# @return [Object] the task result
|
72
|
-
#
|
73
|
-
# def reload
|
74
|
-
# end
|
75
|
-
|
76
|
-
# Called when just `enter` is pressed
|
77
|
-
# This method should be principally used for long action like running all specs/tests/...
|
78
|
-
#
|
79
|
-
# @raise [:task_has_failed] when run_all has failed
|
80
|
-
# @return [Object] the task result
|
81
|
-
#
|
82
|
-
# def run_all
|
83
|
-
# end
|
84
|
-
|
85
|
-
# Default behaviour on file(s) changes that the Guard plugin watches.
|
86
|
-
# @param [Array<String>] paths the changes files or paths
|
87
|
-
# @raise [:task_has_failed] when run_on_change has failed
|
88
|
-
# @return [Object] the task result
|
89
|
-
#
|
90
|
-
# def run_on_changes(paths)
|
91
|
-
# end
|
92
|
-
|
93
|
-
# Called on file(s) additions that the Guard plugin watches.
|
94
|
-
#
|
95
|
-
# @param [Array<String>] paths the changes files or paths
|
96
|
-
# @raise [:task_has_failed] when run_on_additions has failed
|
97
|
-
# @return [Object] the task result
|
98
|
-
#
|
99
|
-
def run_on_additions(paths)
|
100
|
-
@filemanager.add_files paths
|
101
|
-
rescue => e
|
102
|
-
@filemanager.notifier.newline
|
103
|
-
Voog::Dtk.handle_exception e, @debug, @filemanager.notifier
|
104
|
-
end
|
105
|
-
|
106
|
-
# Called on file(s) removals that the Guard plugin watches.
|
107
|
-
#
|
108
|
-
# @param [Array<String>] paths the changes files or paths
|
109
|
-
# @raise [:task_has_failed] when run_on_removals has failed
|
110
|
-
# @return [Object] the task result
|
111
|
-
#
|
112
|
-
def run_on_removals(paths)
|
113
|
-
@filemanager.remove_files paths
|
114
|
-
rescue => e
|
115
|
-
@filemanager.notifier.newline
|
116
|
-
Voog::Dtk.handle_exception e, @debug, @filemanager.notifier
|
117
|
-
end
|
118
|
-
|
119
|
-
# Called on file(s) modifications that the Guard plugin watches.
|
120
|
-
#
|
121
|
-
# @param [Array<String>] paths the changes files or paths
|
122
|
-
# @raise [:task_has_failed] when run_on_modifications has failed
|
123
|
-
# @return [Object] the task result
|
124
|
-
#
|
125
|
-
def run_on_modifications(paths)
|
126
|
-
@filemanager.upload_files paths
|
127
|
-
@filemanager.notifier.newline
|
128
|
-
rescue => e
|
129
|
-
@filemanager.notifier.newline
|
130
|
-
Voog::Dtk.handle_exception e, @debug, @filemanager.notifier
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
class Guuard
|
135
|
-
def initialize(filemanager, debug=false)
|
136
|
-
@filemanager = filemanager
|
137
|
-
@debug = debug
|
138
|
-
end
|
139
|
-
|
140
|
-
def run
|
141
|
-
guardfile = <<-EOF
|
142
|
-
guard 'watchman' do
|
143
|
-
watch(%r{^(layout|component|image|asset|javascript|stylesheet)s/.*})
|
144
|
-
end
|
145
|
-
EOF
|
146
|
-
|
147
|
-
::Guard.start(guardfile_contents: guardfile)
|
148
|
-
::Guard.guards('watchman').first.filemanager = @filemanager
|
149
|
-
::Guard.guards('watchman').first.debug = @debug
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|