nested_file 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ hello
@@ -0,0 +1,2 @@
1
+ <file {{NF_PARENT_DIR}}/a.txt>
2
+ </file>
@@ -0,0 +1,2 @@
1
+ <file a.txt>
2
+ </file>
@@ -0,0 +1 @@
1
+ hello
@@ -0,0 +1,66 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "PutDir" do
4
+ include_context "file stub"
5
+
6
+ it 'smoke' do
7
+ file_stub.add "/a/b/c/a.txt","hello"
8
+ dir = NestedFile::PutDir.new(parent_dir: "/a/b", mount_dir: "/z")
9
+ dir.contents("/").should == ['c']
10
+ dir.contents("/c").should == ['a.txt']
11
+ dir.read_file("/c/a.txt").should == 'hello'
12
+ end
13
+
14
+ it "nested read" do
15
+ file_stub.add "/a/b/a.txt","Hello"
16
+ file_stub.add "/a/b/b.txt","<file a.txt>\n</file>"
17
+
18
+ dir = NestedFile::PutDir.new(parent_dir: "/a/b", mount_dir: "/z")
19
+ dir.read_file("b.txt").should == "<file a.txt>\nHello\n</file>"
20
+ end
21
+
22
+ it "different relative dir" do
23
+ file_stub.add "/a/b/a.txt","Hello"
24
+ file_stub.add "/a/b/b.txt","<file a.txt>\n</file>"
25
+ file_stub.add "/c/d/a.txt","Goodbye"
26
+
27
+ dir = NestedFile::PutDir.new(parent_dir: "/a/b", mount_dir: "/z", relative_dir: "/c/d")
28
+ dir.read_file("b.txt").should == "<file a.txt>\nGoodbye\n</file>"
29
+ end
30
+
31
+ it "different relative dir - file group" do
32
+ file_stub.add "/a/b/a.txt","Junk"
33
+ file_stub.add "/a/b/multiple.txt","<files *.txt>\n</files>"
34
+ file_stub.add "/c/d/c.txt","Hello"
35
+ file_stub.add "/c/d/d.txt","Goodbye"
36
+
37
+ exp = <<EOF
38
+ <files *.txt>
39
+ <file c.txt>
40
+ Hello
41
+ </file>
42
+ <file d.txt>
43
+ Goodbye
44
+ </file>
45
+ </files>
46
+ EOF
47
+
48
+ dir = NestedFile::PutDir.new(parent_dir: "/a/b", mount_dir: "/z", relative_dir: "/c/d")
49
+ dir.read_file("multiple.txt").should == exp.strip
50
+ end
51
+
52
+ it "write subs - relative" do
53
+
54
+ # File.any_instance_of.stub(:write) do
55
+ # raise "file.write call"
56
+ # end
57
+
58
+ # raw_write(path,offset,sz,buf,file=nil)
59
+ dir = NestedFile::PutDir.new(parent_dir: "/a/b", mount_dir: "/z", relative_dir: "/c/d")
60
+ dir.raw_write "a.txt",0,nil,"<file b.txt>\nHello</file>"
61
+ Dir.entries("/a/b").should == ['a.txt']
62
+ end
63
+
64
+
65
+
66
+ end
@@ -0,0 +1,70 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'nested_file'
5
+
6
+ # Requires supporting files with custom matchers and macros, etc,
7
+ # in ./support/ and its subdirectories.
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+ config.fail_fast = true
12
+ end
13
+
14
+ class FileStub
15
+ fattr(:files) { {} }
16
+ def add(file,contents)
17
+ self.files[file] = contents
18
+ end
19
+ def exist?(file)
20
+ !!files[file]
21
+ end
22
+ def read(file)
23
+ files[file] || (raise "no file")
24
+ end
25
+ def entries(dir)
26
+ dir = dir[0..-2] if dir[-1..-1] == '/'
27
+ fs = files.keys.select { |x| File.dirname(x) == dir }.map { |x| File.basename(x) }
28
+
29
+ res = []
30
+ files.keys.each do |file|
31
+ if file =~ /^#{dir}\/(.+)\//
32
+ res << $1
33
+ end
34
+ end
35
+ fs + res
36
+ end
37
+ def glob(glob)
38
+ if glob == "/c/d/*.txt"
39
+ entries("/c/d").map { |x| "/c/d/#{x}" }
40
+ else
41
+ raise "can't glob"
42
+ end
43
+ end
44
+
45
+ def stub!
46
+ FileTest.stub(:exist?) { |file| exist?(file) }
47
+ File.stub(:read) { |file| read(file) }
48
+ Dir.stub(:entries) do |dir|
49
+ entries(dir)
50
+ end
51
+
52
+ Dir.stub(:[]) do |glob|
53
+ glob(glob)
54
+ end
55
+
56
+ File.stub(:create) do |filename,body|
57
+ add filename, body
58
+ end
59
+ end
60
+ end
61
+
62
+ shared_context "file stub" do
63
+ let(:file_stub) do
64
+ FileStub.new
65
+ end
66
+
67
+ before(:each) do
68
+ file_stub.stub!
69
+ end
70
+ end
data/tmp/.gitkeep ADDED
File without changes
@@ -0,0 +1,24 @@
1
+ require 'mharris_ext'
2
+
3
+ # res = ec("ps -ax")
4
+ # lines = res.split("\n").map { |line| line[25..-1] }
5
+ # puts lines.sort.join("\n")
6
+
7
+ # (1..23).each do |i|
8
+ # ec "umount ruby@osxfuse#{i}"
9
+ # end
10
+
11
+ # mount listed the 24 mounts
12
+ # lsvfs showed 24
13
+
14
+ # ec "umount ruby@osxfuse0"
15
+ # ec "umount ruby@osxfuse88"
16
+ # ec "umount ruby@osxfuse2"
17
+
18
+ mounts = ec("mount").split("\n").map { |x| x.split(" ").first }.select { |x| x =~ /osxfuse/ }
19
+ puts mounts.inspect
20
+ puts "Continue?"
21
+ STDIN.gets
22
+ mounts.each do |name|
23
+ ec "umount #{name}"
24
+ end
data/util/green.gif ADDED
Binary file
data/util/package.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "Attendance",
3
+ "version": "0.0.1",
4
+ "description": "Attendance App",
5
+ "main": "index.js",
6
+ "author": "mharris717",
7
+ "license": "ISC",
8
+ "devDependencies": {
9
+
10
+ },
11
+ "dependencies": {
12
+ "node-notifier": "^4.5.0"
13
+ }
14
+ }
data/util/red.png ADDED
Binary file
data/util/run_specs ADDED
@@ -0,0 +1 @@
1
+ bundle exec rspec -f d
data/util/watch.js ADDED
@@ -0,0 +1,60 @@
1
+ function watch() {
2
+ const fs = require("fs")
3
+
4
+ for (var dir of ['../lib','../spec']) {
5
+ fs.watch(dir, {recursive: true}, (event,filename) => {
6
+ console.log("Running tests after mod to ",filename)
7
+ testNotify()
8
+ })
9
+ }
10
+
11
+ testNotify()
12
+ }
13
+
14
+ var lastTitle = null
15
+ function notify(title,message) {
16
+ const notifier = require('node-notifier');
17
+ const path = require('path')
18
+
19
+ title = title || process.argv[3]
20
+ const icon = (title == 'Failure') ? "red.png" : "green.gif"
21
+ var sound = (title == 'Failure') ? 'Basso' : false
22
+ if (lastTitle == 'Failure' && title == 'Success') sound = 'Blow'
23
+ const dt = new Date()
24
+ const dtStr = `${dt.getHours()}:${dt.getMinutes()}:${dt.getSeconds()}`
25
+ const fullMessage = dtStr + ' ' + (message||'')
26
+ lastTitle = title
27
+
28
+ notifier.notify({
29
+ 'title': title,
30
+ 'message': fullMessage,
31
+ icon: path.join(__dirname,icon),
32
+ sound: sound
33
+ });
34
+ }
35
+
36
+ function testNotify() {
37
+ const spawn = require('child_process').spawn;
38
+ // var test = spawn("npm",['test'])
39
+ // var test = spawn('bundle',['exec','rspec','-f','d'], {
40
+ var test = spawn('./util/run_specs', {
41
+ cwd: "/code/orig/nested_file"
42
+ })
43
+
44
+ test.on('close', (err) => {
45
+ if (err == 0) notify('Success');
46
+ else notify('Failure')
47
+ })
48
+
49
+ // mirror output to terminal
50
+ test.stdout.on('data', (data) => {
51
+ const str = ''+data
52
+ if (str.trim() != '') console.log(str.trimRight())
53
+ })
54
+ test.stderr.on('data', (data) => {
55
+ const str = ''+data
56
+ if (str.trim() != '') console.log(str.trimRight())
57
+ })
58
+ }
59
+
60
+ watch()
@@ -0,0 +1,19 @@
1
+ require 'mharris_ext'
2
+
3
+ puts "You can also put forked code in a block pid: #{Process.pid}"
4
+ pid = fork do
5
+ puts "Hello from fork pid: #{Process.pid}"
6
+ File.create("fork.pid",Process.pid)
7
+ num = rand(10000000000)
8
+ ec "mkdir tmp/test#{num}"
9
+ cmd = "bundle exec ruby ./bin/nested_file /code/orig/nested_file/tmp/test_parent /code/orig/nested_file/tmp/test#{num}"
10
+ puts cmd
11
+ exec cmd
12
+ end
13
+ puts "The parent process just skips over it: #{Process.pid}"
14
+ # 20.times do |i|
15
+ # puts "Parent times #{i}"
16
+ # sleep 1
17
+ # end
18
+ Process.wait pid
19
+
data/vol/watch_cat.rb ADDED
@@ -0,0 +1,16 @@
1
+ def print_cat
2
+ %w(test_dir child).each do |pc|
3
+ %w(a.txt def.txt).each do |f|
4
+ f = "#{pc}/#{f}"
5
+ puts f.upcase
6
+ puts File.read(f)
7
+ puts "\n\n"
8
+ end
9
+ end
10
+ puts "\n\n-------------------\n\n"
11
+ end
12
+
13
+ loop do
14
+ print_cat
15
+ sleep 1
16
+ end
metadata ADDED
@@ -0,0 +1,250 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nested_file
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Mike Harris
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mharris_ext
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rfusefs
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.8.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.8.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: rdoc
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.12'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.12'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 1.0.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.0.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: jeweler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: guard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: guard-spork
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rb-fsevent
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.9'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.9'
153
+ - !ruby/object:Gem::Dependency
154
+ name: lre
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rr
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ description: nested_file
182
+ email: mharris717@gmail.com
183
+ executables:
184
+ - nested_file
185
+ extensions: []
186
+ extra_rdoc_files:
187
+ - LICENSE.txt
188
+ - README.rdoc
189
+ files:
190
+ - ".document"
191
+ - ".rspec"
192
+ - ".travis.yml"
193
+ - Gemfile
194
+ - Gemfile.lock
195
+ - Guardfile
196
+ - LICENSE.txt
197
+ - README.rdoc
198
+ - Rakefile
199
+ - VERSION
200
+ - bin/nested_file
201
+ - lib/nested_file.rb
202
+ - lib/nested_file/file_group.rb
203
+ - lib/nested_file/file_section.rb
204
+ - lib/nested_file/file_tag.rb
205
+ - lib/nested_file/put_dir.rb
206
+ - lib/nested_file/put_file.rb
207
+ - lib/nested_file/util.rb
208
+ - nested_file.gemspec
209
+ - spec/file_section_spec.rb
210
+ - spec/nested_file_spec.rb
211
+ - spec/parent_template/a.txt
212
+ - spec/parent_template/include_others.txt
213
+ - spec/parent_template/include_others_rel.txt
214
+ - spec/parent_template/sub2/x.txt
215
+ - spec/put_dir_spec.rb
216
+ - spec/spec_helper.rb
217
+ - tmp/.gitkeep
218
+ - unmount_all_fuse.rb
219
+ - util/green.gif
220
+ - util/package.json
221
+ - util/red.png
222
+ - util/run_specs
223
+ - util/watch.js
224
+ - vol/spawn_mount.rb
225
+ - vol/watch_cat.rb
226
+ homepage: http://github.com/mharris717/nested_file
227
+ licenses:
228
+ - MIT
229
+ metadata: {}
230
+ post_install_message:
231
+ rdoc_options: []
232
+ require_paths:
233
+ - lib
234
+ required_ruby_version: !ruby/object:Gem::Requirement
235
+ requirements:
236
+ - - ">="
237
+ - !ruby/object:Gem::Version
238
+ version: '0'
239
+ required_rubygems_version: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ requirements: []
245
+ rubyforge_project:
246
+ rubygems_version: 2.5.1
247
+ signing_key:
248
+ specification_version: 4
249
+ summary: nested_file
250
+ test_files: []