virtfs-camcorderfs 0.0.1

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.
@@ -0,0 +1,38 @@
1
+ module VirtFS::CamcorderFS # rubocop:disable Style/ClassAndModuleChildren
2
+ #
3
+ # Directory class methods - called by VirtFS::Dir.
4
+ # Makes recordable call to corresponding CcDelegate method.
5
+ #
6
+ class FS
7
+ module DirClassMethods
8
+ def dir_delete(p)
9
+ ccd_call(__method__, apply_root(p))
10
+ end
11
+
12
+ def dir_chdir(p)
13
+ ccd_call(__method__, apply_root(p))
14
+ end
15
+
16
+ def dir_entries(p)
17
+ ccd_call(__method__, apply_root(p))
18
+ end
19
+
20
+ def dir_exist?(p)
21
+ ccd_call(__method__, apply_root(p))
22
+ end
23
+
24
+ def dir_foreach(p, &block)
25
+ return_enum(dir_entries(p), block)
26
+ end
27
+
28
+ def dir_mkdir(p, permissions)
29
+ ccd_call(__method__, apply_root(p), permissions)
30
+ end
31
+
32
+ def dir_new(fs_rel_path, hash_args, open_path, cwd)
33
+ instance_handle = ccd_call(__method__, apply_root(fs_rel_path), hash_args, open_path, cwd)
34
+ VirtFS::CamcorderFS::Dir.new(self, instance_handle, hash_args)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,20 @@
1
+ module VirtFS::CamcorderFS # rubocop:disable Style/ClassAndModuleChildren
2
+ #
3
+ # Directory instance methods - called by CamcorderFS::Dir instances - thick interface.
4
+ # Makes recordable call to corresponding CcDelegate method.
5
+ #
6
+ class FS
7
+ module DirInstanceMethods
8
+ #
9
+ # Dir instance methods - delegate to CcDelegate.
10
+ #
11
+ def dir_i_close(instance_handle)
12
+ ccd_call(__method__, instance_handle)
13
+ end
14
+
15
+ def dir_i_each(instance_handle, block, rv)
16
+ return_enum(ccd_call(__method__, instance_handle), block, rv)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,179 @@
1
+ module VirtFS::CamcorderFS # rubocop:disable Style/ClassAndModuleChildren
2
+ #
3
+ # File class methods - called by VirtFS::File.
4
+ # Makes recordable call to corresponding CcDelegate method.
5
+ #
6
+ class FS
7
+ module FileClassMethods
8
+ def file_atime(p)
9
+ ccd_call(__method__, apply_root(p))
10
+ end
11
+
12
+ def file_blockdev?(p)
13
+ ccd_call(__method__, apply_root(p))
14
+ end
15
+
16
+ def file_chardev?(p)
17
+ ccd_call(__method__, apply_root(p))
18
+ end
19
+
20
+ def file_chmod(permission, p)
21
+ ccd_call(__method__, permission, apply_root(p))
22
+ end
23
+
24
+ def file_chown(owner, group, p)
25
+ ccd_call(__method__, owner, group, apply_root(p))
26
+ end
27
+
28
+ def file_ctime(p)
29
+ ccd_call(__method__, apply_root(p))
30
+ end
31
+
32
+ def file_delete(p)
33
+ ccd_call(__method__, apply_root(p))
34
+ end
35
+
36
+ def file_directory?(p)
37
+ ccd_call(__method__, apply_root(p))
38
+ end
39
+
40
+ def file_executable?(p)
41
+ ccd_call(__method__, apply_root(p))
42
+ end
43
+
44
+ def file_executable_real?(p)
45
+ ccd_call(__method__, apply_root(p))
46
+ end
47
+
48
+ def file_exist?(p)
49
+ ccd_call(__method__, apply_root(p))
50
+ end
51
+
52
+ def file_file?(p)
53
+ ccd_call(__method__, apply_root(p))
54
+ end
55
+
56
+ def file_ftype(p)
57
+ ccd_call(__method__, apply_root(p))
58
+ end
59
+
60
+ def file_grpowned?(p)
61
+ ccd_call(__method__, apply_root(p))
62
+ end
63
+
64
+ def file_identical?(p1, p2)
65
+ ccd_call(__method__, apply_root(p1), apply_root(p2))
66
+ end
67
+
68
+ def file_lchmod(permission, p)
69
+ ccd_call(__method__, permission, apply_root(p))
70
+ end
71
+
72
+ def file_lchown(owner, group, p)
73
+ ccd_call(__method__, owner, group, apply_root(p))
74
+ end
75
+
76
+ def file_link(p1, p2)
77
+ ccd_call(__method__, apply_root(p1), apply_root(p2))
78
+ end
79
+
80
+ def file_lstat(p)
81
+ ccd_call(__method__, apply_root(p))
82
+ end
83
+
84
+ def file_mtime(p)
85
+ ccd_call(__method__, apply_root(p))
86
+ end
87
+
88
+ def file_owned?(p)
89
+ ccd_call(__method__, apply_root(p))
90
+ end
91
+
92
+ def file_pipe?(p)
93
+ ccd_call(__method__, apply_root(p))
94
+ end
95
+
96
+ def file_readable?(p)
97
+ ccd_call(__method__, apply_root(p))
98
+ end
99
+
100
+ def file_readable_real?(p)
101
+ ccd_call(__method__, apply_root(p))
102
+ end
103
+
104
+ def file_readlink(p)
105
+ ccd_call(__method__, apply_root(p))
106
+ end
107
+
108
+ def file_rename(p1, p2)
109
+ ccd_call(__method__, apply_root(p1), apply_root(p2))
110
+ end
111
+
112
+ def file_setgid?(p)
113
+ ccd_call(__method__, apply_root(p))
114
+ end
115
+
116
+ def file_setuid?(p)
117
+ ccd_call(__method__, apply_root(p))
118
+ end
119
+
120
+ def file_size(p)
121
+ ccd_call(__method__, apply_root(p))
122
+ end
123
+
124
+ def file_socket?(p)
125
+ ccd_call(__method__, apply_root(p))
126
+ end
127
+
128
+ def file_stat(p)
129
+ ccd_call(__method__, apply_root(p))
130
+ end
131
+
132
+ def file_sticky?(p)
133
+ ccd_call(__method__, apply_root(p))
134
+ end
135
+
136
+ def file_symlink(oname, p)
137
+ #
138
+ # We don't apply_root to oname, because it's either an
139
+ # absolute path in the global FS namespace, or a path
140
+ # relative to the location of the new link.
141
+ #
142
+ ccd_call(__method__, oname, apply_root(p))
143
+ end
144
+
145
+ def file_symlink?(p)
146
+ ccd_call(__method__, apply_root(p))
147
+ end
148
+
149
+ def file_truncate(p, len)
150
+ ccd_call(__method__, apply_root(p), len)
151
+ end
152
+
153
+ def file_utime(atime, mtime, p)
154
+ ccd_call(__method__, atime, mtime, apply_root(p))
155
+ end
156
+
157
+ def file_world_readable?(p)
158
+ ccd_call(__method__, apply_root(p))
159
+ end
160
+
161
+ def file_world_writable?(p)
162
+ ccd_call(__method__, apply_root(p))
163
+ end
164
+
165
+ def file_writable?(p)
166
+ ccd_call(__method__, apply_root(p))
167
+ end
168
+
169
+ def file_writable_real?(p)
170
+ ccd_call(__method__, apply_root(p))
171
+ end
172
+
173
+ def file_new(fs_rel_path, parsed_args, open_path, cwd)
174
+ instance_handle = ccd_call(__method__, apply_root(fs_rel_path), parsed_args, open_path, cwd)
175
+ VirtFS::CamcorderFS::File.new(self, instance_handle, parsed_args)
176
+ end
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,144 @@
1
+ module VirtFS::CamcorderFS # rubocop:disable Style/ClassAndModuleChildren
2
+ #
3
+ # File instance methods - called by CamcorderFS::File instances - thick interface.
4
+ # Makes recordable call to corresponding CcDelegate method.
5
+ #
6
+ class FS
7
+ module FileInstanceMethods
8
+ #
9
+ # File instance methods - delegate to CcDelegate.
10
+ #
11
+ def file_i_atime(instance_handle)
12
+ ccd_call(__method__, instance_handle)
13
+ end
14
+
15
+ def file_i_chmod(instance_handle, permission)
16
+ ccd_call(__method__, instance_handle, permission)
17
+ end
18
+
19
+ def file_i_chown(instance_handle, owner, group)
20
+ ccd_call(__method__, instance_handle, owner, group)
21
+ end
22
+
23
+ def file_i_ctime(instance_handle)
24
+ ccd_call(__method__, instance_handle)
25
+ end
26
+
27
+ def file_i_flock(instance_handle, locking_constant)
28
+ ccd_call(__method__, instance_handle, locking_constant)
29
+ end
30
+
31
+ def file_i_lstat(instance_handle)
32
+ ccd_call(__method__, instance_handle)
33
+ end
34
+
35
+ def file_i_mtime(instance_handle)
36
+ ccd_call(__method__, instance_handle)
37
+ end
38
+
39
+ def file_i_size(instance_handle)
40
+ ccd_call(__method__, instance_handle)
41
+ end
42
+
43
+ def file_i_truncate(instance_handle, to_size)
44
+ ccd_call(__method__, instance_handle, to_size)
45
+ end
46
+
47
+ #
48
+ # IO instance methods.
49
+ #
50
+ def file_i_close(instance_handle)
51
+ ccd_call(__method__, instance_handle)
52
+ end
53
+
54
+ def file_i_close_on_exec?(instance_handle)
55
+ ccd_call(__method__, instance_handle)
56
+ end
57
+
58
+ def file_i_close_on_exec=(instance_handle, bool_val)
59
+ ccd_call(__method__, instance_handle, bool_val)
60
+ end
61
+
62
+ def file_i_close_read(instance_handle)
63
+ ccd_call(__method__, instance_handle)
64
+ end
65
+
66
+ def file_i_close_write(instance_handle)
67
+ ccd_call(__method__, instance_handle)
68
+ end
69
+
70
+ def file_i_fcntl(instance_handle, cmd, arg)
71
+ ccd_call(__method__, instance_handle, cmd, arg)
72
+ end
73
+
74
+ def file_i_fdatasync(instance_handle)
75
+ ccd_call(__method__, instance_handle)
76
+ end
77
+
78
+ def file_i_fileno(instance_handle)
79
+ ccd_call(__method__, instance_handle)
80
+ end
81
+
82
+ def file_i_flush(instance_handle)
83
+ ccd_call(__method__, instance_handle)
84
+ end
85
+
86
+ def file_i_fsync(instance_handle)
87
+ ccd_call(__method__, instance_handle)
88
+ end
89
+
90
+ def file_i_ioctl(instance_handle, cms, arg)
91
+ ccd_call(__method__, instance_handle, cms, arg)
92
+ end
93
+
94
+ def file_i_isatty(instance_handle)
95
+ ccd_call(__method__, instance_handle)
96
+ end
97
+
98
+ def file_i_pid(instance_handle)
99
+ ccd_call(__method__, instance_handle)
100
+ end
101
+
102
+ def file_i_raw_read(instance_handle, start_byte, num_bytes)
103
+ rv = ccd_call(__method__, instance_handle, start_byte, num_bytes)
104
+ rv.force_encoding('ASCII-8BIT') # Needed when loaded from YAML.
105
+ end
106
+
107
+ def file_i_raw_write(instance_handle, start_byte, buf)
108
+ ccd_call(__method__, instance_handle, start_byte, buf)
109
+ end
110
+
111
+ def file_i_readpartial(instance_handle, limit, result)
112
+ ccd_call(__method__, instance_handle, limit, result)
113
+ end
114
+
115
+ def file_i_read_nonblock(instance_handle, limit, result)
116
+ ccd_call(__method__, instance_handle, limit, result)
117
+ end
118
+
119
+ def file_i_stat(instance_handle)
120
+ ccd_call(__method__, instance_handle)
121
+ end
122
+
123
+ def file_i_sync(instance_handle)
124
+ ccd_call(__method__, instance_handle)
125
+ end
126
+
127
+ def file_i_sync=(instance_handle, bool_val)
128
+ ccd_call(__method__, instance_handle, bool_val)
129
+ end
130
+
131
+ def file_i_to_i(instance_handle)
132
+ ccd_call(__method__, instance_handle)
133
+ end
134
+
135
+ def file_i_tty?(instance_handle)
136
+ ccd_call(__method__, instance_handle)
137
+ end
138
+
139
+ def file_i_write_nonblock(instance_handle, buf)
140
+ ccd_call(__method__, instance_handle, buf)
141
+ end
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,27 @@
1
+ #
2
+ # When recording calls to instance methods of File and Dir, a reference to
3
+ # the instance is passed to the method call being recorded. During the "record"
4
+ # phase, the target of the call is an instance of "real" File (or Dir).
5
+ #
6
+ # During VirtFS activation, The File constant is mapped to VirtFS::vFile,
7
+ # and a reference to the "real" File class is saved in the VfsRealFile constant.
8
+ #
9
+ # When instanitating an instance of the File class, we need to ensure we always
10
+ # use the "real" File class (as opposed to VirtFS::vFile). However, if we use
11
+ # the VfsRealFile constant to do this, it results in recording an ambiguous
12
+ # instance reference to the cassette. This is because:
13
+ #
14
+ # VfsRealFile.class.name == File (not VfsRealFile)
15
+ # File.class.name == File (when not activated)
16
+ # File.class.name == VirtFS::vFile (when activated)
17
+ #
18
+ # This results in failed cassette playback during activation because it won't
19
+ # be able to find a VirtFS::vFile entry in the cassette.
20
+ #
21
+ # Using a proper subclass of the "real" File class solves this problem, because:
22
+ # CcRealFile.class.name == CcRealFile
23
+ #
24
+ module VirtFS::CamcorderFS # rubocop:disable Style/ClassAndModuleChildren
25
+ class RealDir < VfsRealDir
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ #
2
+ # When recording calls to instance methods of File and Dir, a reference to
3
+ # the instance is passed to the method call being recorded. During the "record"
4
+ # phase, the target of the call is an instance of "real" File (or Dir).
5
+ #
6
+ # During VirtFS activation, The File constant is mapped to VirtFS::vFile,
7
+ # and a reference to the "real" File class is saved in the VfsRealFile constant.
8
+ #
9
+ # When instanitating an instance of the File class, we need to ensure we always
10
+ # use the "real" File class (as opposed to VirtFS::vFile). However, if we use
11
+ # the VfsRealFile constant to do this, it results in recording an ambiguous
12
+ # instance reference to the cassette. This is because:
13
+ #
14
+ # VfsRealFile.class.name == File (not VfsRealFile)
15
+ # File.class.name == File (when not activated)
16
+ # File.class.name == VirtFS::vFile (when activated)
17
+ #
18
+ # This results in failed cassette playback during activation because it won't
19
+ # be able to find a VirtFS::vFile entry in the cassette.
20
+ #
21
+ # Using a proper subclass of the "real" File class solves this problem, because:
22
+ # CcRealFile.class.name == CcRealFile
23
+ #
24
+ module VirtFS::CamcorderFS # rubocop:disable Style/ClassAndModuleChildren
25
+ class RealFile < VfsRealFile
26
+ end
27
+ end
@@ -0,0 +1,5 @@
1
+ module VirtFS
2
+ module CamcorderFS
3
+ VERSION = "0.0.1"
4
+ end
5
+ end