fled 0.0.2 → 0.0.3

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.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fled
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -19,13 +19,19 @@ executables:
19
19
  extensions: []
20
20
  extra_rdoc_files: []
21
21
  files:
22
- - lib/dtc/utils/dsldsl.rb
23
22
  - lib/dtc/utils/exec.rb
24
- - lib/dtc/utils/file_visitor.rb
25
23
  - lib/dtc/utils/interactive_edit.rb
24
+ - lib/dtc/utils/meta.rb
26
25
  - lib/dtc/utils/mini_select.rb
26
+ - lib/dtc/utils/text/html.rb
27
+ - lib/dtc/utils/text/line_writer.rb
28
+ - lib/dtc/utils/text.rb
29
+ - lib/dtc/utils/visitor/dsl.rb
30
+ - lib/dtc/utils/visitor/folder.rb
31
+ - lib/dtc/utils/visitor.rb
27
32
  - lib/dtc/utils.rb
28
33
  - lib/fled/file_listing.rb
34
+ - lib/fled/file_listing_builder.rb
29
35
  - lib/fled.rb
30
36
  - bin/fled
31
37
  - tests/helper.rb
@@ -1,259 +0,0 @@
1
- module DTC
2
- module Utils
3
- module DSLDSL
4
- class DSLVisitor
5
- # very approximate visitor =)
6
- def enter key, *args ; end
7
- def leave ; end
8
- def add key, *args ; end
9
- def visit_dsl &blk
10
- builder = self.class.delegate_klass.new(self)
11
- self.class.context_klass.new(builder).__instance_exec(&blk)
12
- builder.flush
13
- end
14
- protected
15
- def self.delegate_klass ; StaticTreeDSLDelegate ; end
16
- def self.context_klass ; StaticTreeDSLContextBlank ; end
17
- end
18
-
19
- class DSLArrayWriter < DSLVisitor
20
- attr_reader :stack
21
- def initialize
22
- @stack = [[]]
23
- end
24
- def enter sym, *args
25
- @stack.push [[sym, *args]]
26
- end
27
- def leave
28
- @stack.pop
29
- end
30
- def add sym, *args
31
- @stack.last << [sym, *args]
32
- end
33
- def each &blk
34
- return enum_for(:each) unless block_given?
35
- each_call_of @stack.first, &blk
36
- end
37
- protected
38
- def each_call_of parent, &block
39
- parent.each do |item|
40
- if item.first.is_a?(Symbol)
41
- yield item
42
- else
43
- each_call_of item, &block
44
- end
45
- end
46
- end
47
- end
48
-
49
- class DSLHashWriter < DSLVisitor
50
- def initialize target
51
- @stack = [target]
52
- end
53
- def enter key, *args
54
- container = add_container(key, *args)
55
- @stack.push(container) if container
56
- container
57
- end
58
- def leave
59
- @stack.pop
60
- end
61
- def add key, *args
62
- add_key key, args
63
- end
64
- def self.write_static_tree_dsl target = {}, &blk
65
- visitor = self.new(result = target)
66
- visitor.visit_dsl(&blk)
67
- result
68
- end
69
- def add_container key, *args
70
- container = {}
71
- container[:options] = args unless args.empty?
72
- add_key key, container
73
- end
74
- def add_key key, val
75
- container = @stack.last
76
- key = key.to_s
77
- raise RuntimeError, "Key #{key.inspect} already defined" if container[key]
78
- container[key] = val
79
- val
80
- end
81
- end
82
-
83
- class StaticTreeDSLDelegate
84
- def initialize visitor, prefix = nil
85
- @visitor = visitor
86
- @prefix = prefix
87
- @pending_prefix = nil
88
- @called = false
89
- end
90
- def prefix sym
91
- @called = true
92
- flush
93
- @pending_prefix = self.class.new(@visitor, with_prefix(sym))
94
- end
95
- def flush
96
- if @pending_prefix
97
- @pending_prefix.add_unless_called
98
- @pending_prefix = nil
99
- end
100
- end
101
- def add sym, *args
102
- @called = true
103
- @visitor.add(with_prefix(sym), *args)
104
- end
105
- def enter sym, *args
106
- flush
107
- @called = true
108
- @visitor.enter(with_prefix(sym), *args)
109
- end
110
- def leave
111
- flush
112
- @visitor.leave
113
- end
114
- protected
115
- def with_prefix sym
116
- @prefix ? (sym ? "#{@prefix}.#{sym}".to_sym : @prefix) : sym
117
- end
118
- def add_unless_called
119
- flush
120
- @visitor.add(@prefix) unless @called
121
- end
122
- end
123
-
124
- class StaticTreeDSLContextBlank
125
- alias_method :__instance_exec, :instance_exec
126
- alias_method :__class, :class
127
- instance_methods.each { |meth| undef_method(meth) unless meth =~ /\A__/ || meth == :object_id }
128
- def initialize delegate, unprefixed = delegate
129
- @delegate = delegate
130
- @unprefixed = unprefixed
131
- end
132
- def method_missing(meth, *args, &block)
133
- if block
134
- @delegate.enter meth, *args
135
- __class.new(@unprefixed, @unprefixed).__instance_exec(&block)
136
- @unprefixed.flush
137
- @delegate.leave
138
- else
139
- if args.empty?
140
- return __class.new(@delegate.prefix(meth), @unprefixed)
141
- else
142
- @delegate.add(meth, *args)
143
- end
144
- end
145
- self
146
- end
147
- end
148
-
149
- if __FILE__ == $0
150
-
151
- class DebugStaticTreeDSLDelegate < StaticTreeDSLDelegate
152
- def prefix sym
153
- p [:prefix, sym, @prefix]
154
- super
155
- end
156
- def flush
157
- p [:flush, @prefix] if @pending_prefix
158
- super
159
- end
160
- def add sym, *args
161
- p [:add, sym, @prefix]
162
- super
163
- end
164
- def enter sym, *args
165
- p [:enter, sym, @prefix]
166
- super
167
- end
168
- def leave
169
- p [:leave, @prefix]
170
- super
171
- end
172
- def add_unless_called
173
- p [:flush_self, @prefix] unless @called
174
- super
175
- end
176
- end
177
-
178
- class DebugDSLHashWriter < DSLHashWriter
179
- def enter sym, *args
180
- p [:wenter, sym]
181
- super
182
- end
183
- def leave
184
- p [:wleave]
185
- super
186
- end
187
- def add sym, *args
188
- p [:wadd, sym, args]
189
- super
190
- end
191
- def self.delegate_klass ; DebugStaticTreeDSLDelegate ; end
192
- end
193
-
194
- module Examples
195
- module Simple
196
- result = DSLHashWriter.write_static_tree_dsl do
197
- fichier "value"
198
- fichier2.txt "one", "two"
199
- end
200
- result # => {"fichier"=>["value"], "fichier2.txt"=>["one", "two"]}
201
-
202
- result = DSLHashWriter.write_static_tree_dsl do
203
- dossier {
204
- sous.dossier "valeur" do
205
- file.txt
206
- end
207
- }
208
- end
209
- result # => {"dossier"=>{"sous.dossier"=>{:options=>["valeur"], "file.txt"=>[]}}}
210
-
211
- result = DSLHashWriter.write_static_tree_dsl do
212
- %w[hdpi mdpi ldpi].each do |resolution|
213
- image.__send__(resolution.to_sym).png
214
- end
215
- end
216
- result # => {"image.ldpi.png"=>[], "image.hdpi.png"=>[], "image.mdpi.png"=>[]}
217
-
218
- result = DSLHashWriter.write_static_tree_dsl do
219
- user {
220
- name :string
221
- email :string
222
- address(:json) {
223
- line :string
224
- country
225
- }
226
- }
227
- end
228
- result # => {"user"=>{"address"=>{"country"=>[], "line"=>[:string], :options=>[:json]}, "name"=>[:string], "email"=>[:string]}}
229
-
230
- result = DSLHashWriter.write_static_tree_dsl do
231
- def base_file
232
- yes.this.is.base
233
- end
234
- base_file.txt
235
- base_file.png
236
- end
237
- result # => {"yes.this.is.base.png"=>[], "yes.this.is.base.txt"=>[]}
238
- end
239
- module CustomBuilder
240
- class EscapableStaticTreeDSLContextBlank < StaticTreeDSLContextBlank
241
- def method_missing(meth, *args, &block)
242
- meth = args.shift if meth == :raw
243
- super(meth, *args, &block)
244
- end
245
- end
246
- class EscapableDSLHashWriter < DSLHashWriter
247
- def self.context_klass ; EscapableStaticTreeDSLContextBlank ; end
248
- end
249
- result = EscapableDSLHashWriter.write_static_tree_dsl do
250
- 3.times { |i| raw(i).png }
251
- image.raw("%!") { file }
252
- end
253
- result # => {"0.png"=>[], "1.png"=>[], "image.%!"=>{"file"=>[]}, "2.png"=>[]}
254
- end
255
- end
256
- end
257
- end
258
- end
259
- end
@@ -1,79 +0,0 @@
1
- module DTC
2
- module Utils
3
- class FileVisitor
4
- def depth ; @folders.nil? ? 0 : @folders.count ; end
5
- def current_path *args ; File.join(@folders + args) ; end
6
- attr_accessor :next_visitor
7
- def enter_folder dir
8
- return false unless next_visitor ? next_visitor.enter_folder(dir) : true
9
- (@folders ||= []) << dir
10
- true
11
- end
12
- def visit_file name, full_path
13
- next_visitor.visit_file(name, full_path) if next_visitor
14
- end
15
- def leave_folder
16
- next_visitor.leave_folder if next_visitor
17
- @folders.pop
18
- end
19
- def self.browse path, visitor, max_depth = -1
20
- return unless File.readable?(path)
21
- dir = Dir.new(path)
22
- return unless visitor.enter_folder path
23
- dir.each do |f|
24
- full_path = File.join(path, f)
25
- next if f == "." || f == ".."
26
- if File.directory? full_path
27
- self.browse(full_path, visitor, max_depth - 1) unless max_depth == 0
28
- else
29
- visitor.visit_file f, full_path
30
- end
31
- end
32
- visitor.leave_folder
33
- end
34
- end
35
- class FilteringFileVisitor < FileVisitor
36
- def initialize listener, options = {}
37
- @excluded = compile_regexp(options[:excluded])
38
- @excluded_files = compile_regexp(options[:excluded_files])
39
- @excluded_directories = compile_regexp(options[:excluded_directories])
40
- @included = compile_regexp(options[:included])
41
- @included_files = compile_regexp(options[:included_files])
42
- @included_directories = compile_regexp(options[:included_directories])
43
- @recurse = options[:max_depth] || -1
44
- self.next_visitor = listener
45
- end
46
- def enter_folder dir
47
- return false unless include?(File.basename(dir), false)
48
- if (result = super) && !descend?(dir)
49
- leave_folder
50
- return false
51
- end
52
- result
53
- end
54
- def visit_file name, full_path
55
- return false unless include?(name, true)
56
- super
57
- end
58
- protected
59
- def compile_regexp(rx_list)
60
- return nil if rx_list.nil? || rx_list.reject { |e| e.length == 0 }.empty?
61
- Regexp.union(*rx_list.map { |e| /#{e}/i })
62
- end
63
- def descend?(name)
64
- @recurse == -1 || @recurse >= (depth - 1)
65
- end
66
- def include?(name, is_file)
67
- can_include = (@included.nil? || @included.match(name)) &&
68
- ((is_file && (@included_files.nil? || @included_files.match(name))) ||
69
- (!is_file && (@included_directories.nil? || @included_directories.match(name))))
70
- if can_include
71
- can_include = (@excluded.nil? || !@excluded.match(name)) &&
72
- ((is_file && (@excluded_files.nil? || !@excluded_files.match(name))) ||
73
- (!is_file && (@excluded_directories.nil? || !@excluded_directories.match(name))))
74
- end
75
- can_include
76
- end
77
- end
78
- end
79
- end