memfs 0.5.0 → 1.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d538c6d82cd4bab8b5771b26592034f441692420
4
- data.tar.gz: ef508f4172de7d3ab3c263dc147f70648178b0a7
3
+ metadata.gz: 3fb81cdc4d216ab47c2b1ffde22a27e9004e0fa2
4
+ data.tar.gz: 6736cda24f5ac40ed805dc60e1ee277e34b7014f
5
5
  SHA512:
6
- metadata.gz: 96938d69ddeac5089c3524d7981d32f318df8dac36d60d74c79936588e1f6be79a3c17975c2f853fb604395115248329a269b9b86c0fbd2c3671523637f8e630
7
- data.tar.gz: e7858942b018d861c17b6c15b680409f86e247b14242f38ffad7a7b89f5a17e8fa3fc1dfc1c09579e54fa706016f1169945ca28622c355c76556d480a1a4cf10
6
+ metadata.gz: 2b0832e3983bb55fa9993a376ed07cc3495109cbc627a1942d833068436c042ad29845b4722245f6ebf2046507d3c46ce1e8231c902323bbbe043d226a2713a9
7
+ data.tar.gz: 46bbea1467b7e6179c5ce60505d6de756acc7324eb68613d3e07e54781e4a4ef0fde50a21363569fe5052b77dcce580117aa33caccb9079b1c21d69b7ed48dee
data/.gitignore CHANGED
@@ -16,3 +16,4 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  lib/fileutils.rb
19
+ spec/examples.txt
@@ -0,0 +1,2 @@
1
+ ruby:
2
+ config_file: .ruby-style.yml
data/.rspec CHANGED
@@ -1,2 +1,2 @@
1
1
  --color
2
- --format=documentation
2
+ --require spec_helper
@@ -0,0 +1 @@
1
+ ./.ruby-style.yml
@@ -0,0 +1,335 @@
1
+ AllCops:
2
+ Exclude:
3
+ - Guardfile
4
+ - lib/fileutils.rb
5
+ - "*.gemspec"
6
+ - "db/schema.rb"
7
+ - "vendor/**/*"
8
+ UseCache: false
9
+
10
+ Metrics/LineLength:
11
+ Exclude:
12
+ - Rakefile
13
+ - "spec/**/*"
14
+ Style/BlockDelimiters:
15
+ Description: abc
16
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#single-line-blocks
17
+ Enabled: true
18
+ EnforcedStyle: braces_for_chaining
19
+ SupportedStyles:
20
+ - braces_for_chaining
21
+ - line_count_based
22
+ - semantic
23
+ ProceduralMethods:
24
+ - around
25
+ - before
26
+ - benchmark
27
+ - bm
28
+ - bmbm
29
+ - create
30
+ - each_with_object
31
+ - measure
32
+ - new
33
+ - realtime
34
+ - tap
35
+ - with_object
36
+ FunctionalMethods:
37
+ - let
38
+ - let!
39
+ - subject
40
+ - watch
41
+ IgnoredMethods:
42
+ - context
43
+ - describe
44
+ - it
45
+ - lambda
46
+ - proc
47
+ Style/CaseEquality:
48
+ Description: Avoid explicit use of the case equality operator(===).
49
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-case-equality
50
+ Enabled: false
51
+ Style/CollectionMethods:
52
+ Description: Preferred collection methods.
53
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#map-find-select-reduce-size
54
+ Enabled: true
55
+ PreferredMethods:
56
+ collect: map
57
+ collect!: map!
58
+ find: detect
59
+ find_all: select
60
+ reduce: inject
61
+ Style/DotPosition:
62
+ Description: Checks the position of the dot in multi-line method calls.
63
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#consistent-multi-line-chains
64
+ Enabled: true
65
+ EnforcedStyle: leading
66
+ SupportedStyles:
67
+ - leading
68
+ - trailing
69
+ Style/FileName:
70
+ Description: Use snake_case for source file names.
71
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#snake-case-files
72
+ Enabled: false
73
+ Exclude: []
74
+ Style/GuardClause:
75
+ Description: Check for conditionals that can be replaced with guard clauses
76
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-nested-conditionals
77
+ Enabled: true
78
+ MinBodyLength: 1
79
+ Style/IfUnlessModifier:
80
+ Description: Favor modifier if/unless usage when you have a single-line body.
81
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#if-as-a-modifier
82
+ Enabled: false
83
+ MaxLineLength: 80
84
+ Style/OptionHash:
85
+ Description: Don't use option hashes when you can use keyword arguments.
86
+ Enabled: false
87
+ Style/NumericLiteralPrefix:
88
+ Enabled: false
89
+ Style/PercentLiteralDelimiters:
90
+ Description: Use `%`-literal delimiters consistently
91
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#percent-literal-braces
92
+ Enabled: false
93
+ PreferredDelimiters:
94
+ "%": "()"
95
+ "%i": "[]"
96
+ "%q": "()"
97
+ "%Q": "()"
98
+ "%r": "{}"
99
+ "%s": "()"
100
+ "%w": "[]"
101
+ "%W": "[]"
102
+ "%x": "()"
103
+ Style/PredicateName:
104
+ Description: Check the names of predicate methods.
105
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#bool-methods-qmark
106
+ Enabled: true
107
+ NamePrefix:
108
+ - is_
109
+ - has_
110
+ - have_
111
+ NamePrefixBlacklist:
112
+ - is_
113
+ Exclude:
114
+ - spec/**/*
115
+ Style/RaiseArgs:
116
+ Description: Checks the arguments passed to raise/fail.
117
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#exception-class-messages
118
+ Enabled: false
119
+ EnforcedStyle: exploded
120
+ SupportedStyles:
121
+ - compact
122
+ - exploded
123
+ Style/RegexpLiteral:
124
+ Description: Checks if uses of regexps match the configured preference.
125
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#percent-r
126
+ Enabled: true
127
+ EnforcedStyle: mixed
128
+ SupportedStyles:
129
+ - mixed
130
+ - percent_r
131
+ - slashes
132
+ AllowInnerSlashes: false
133
+ Style/SignalException:
134
+ Description: Checks for proper usage of fail and raise.
135
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#fail-method
136
+ Enabled: false
137
+ EnforcedStyle: semantic
138
+ SupportedStyles:
139
+ - only_raise
140
+ - only_fail
141
+ - semantic
142
+ Style/SingleLineBlockParams:
143
+ Description: Enforces the names of some block params.
144
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#reduce-blocks
145
+ Enabled: false
146
+ Methods:
147
+ - reduce:
148
+ - a
149
+ - e
150
+ - inject:
151
+ - a
152
+ - e
153
+ Style/SingleLineMethods:
154
+ Description: Avoid single-line methods.
155
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-single-line-methods
156
+ Enabled: false
157
+ AllowIfMethodIsEmpty: true
158
+ Style/StringLiterals:
159
+ Description: Checks if uses of quotes match the configured preference.
160
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#consistent-string-literals
161
+ Enabled: true
162
+ EnforcedStyle: single_quotes
163
+ SupportedStyles:
164
+ - single_quotes
165
+ - double_quotes
166
+ Style/StringLiteralsInInterpolation:
167
+ Description: Checks if uses of quotes inside expressions in interpolated strings
168
+ match the configured preference.
169
+ Enabled: true
170
+ EnforcedStyle: single_quotes
171
+ SupportedStyles:
172
+ - single_quotes
173
+ - double_quotes
174
+ Style/TrailingCommaInLiteral:
175
+ Description: Checks for trailing comma in parameter lists and literals.
176
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas
177
+ Enabled: false
178
+ EnforcedStyleForMultiline: no_comma
179
+ SupportedStyles:
180
+ - comma
181
+ - no_comma
182
+ Style/TrailingCommaInArguments:
183
+ Description: Checks for trailing comma in parameter lists and literals.
184
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas
185
+ Enabled: false
186
+ EnforcedStyleForMultiline: no_comma
187
+ SupportedStyles:
188
+ - comma
189
+ - no_comma
190
+ Style/TrivialAccessors:
191
+ Description: Prefer attr_* methods to trivial readers/writers.
192
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#attr_family
193
+ Enabled: false
194
+ ExactNameMatch: true
195
+ AllowPredicates: false
196
+ AllowDSLWriters: false
197
+ IgnoreClassMethods: false
198
+ Whitelist:
199
+ - to_ary
200
+ - to_a
201
+ - to_c
202
+ - to_enum
203
+ - to_h
204
+ - to_hash
205
+ - to_i
206
+ - to_int
207
+ - to_io
208
+ - to_open
209
+ - to_path
210
+ - to_proc
211
+ - to_r
212
+ - to_regexp
213
+ - to_str
214
+ - to_s
215
+ - to_sym
216
+ Style/ZeroLengthPredicate:
217
+ Exclude:
218
+ - lib/memfs/file.rb
219
+ Metrics/AbcSize:
220
+ Description: A calculated magnitude based on number of assignments, branches, and
221
+ conditions.
222
+ Enabled: false
223
+ Max: 15
224
+ Metrics/ClassLength:
225
+ Description: Avoid classes longer than 100 lines of code.
226
+ Enabled: false
227
+ CountComments: false
228
+ Max: 100
229
+ Metrics/ModuleLength:
230
+ CountComments: false
231
+ Max: 100
232
+ Description: Avoid modules longer than 100 lines of code.
233
+ Enabled: false
234
+ Metrics/CyclomaticComplexity:
235
+ Description: A complexity metric that is strongly correlated to the number of test
236
+ cases needed to validate a method.
237
+ Enabled: false
238
+ Max: 6
239
+ Metrics/MethodLength:
240
+ Description: Avoid methods longer than 10 lines of code.
241
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#short-methods
242
+ Enabled: false
243
+ CountComments: false
244
+ Max: 10
245
+ Metrics/ParameterLists:
246
+ Description: Avoid parameter lists longer than three or four parameters.
247
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#too-many-params
248
+ Enabled: false
249
+ Max: 5
250
+ CountKeywordArgs: true
251
+ Metrics/PerceivedComplexity:
252
+ Description: A complexity metric geared towards measuring complexity for a human
253
+ reader.
254
+ Enabled: false
255
+ Max: 7
256
+ Lint/AssignmentInCondition:
257
+ Description: Don't use assignment in conditions.
258
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#safe-assignment-in-condition
259
+ Enabled: false
260
+ AllowSafeAssignment: true
261
+ Style/InlineComment:
262
+ Description: Avoid inline comments.
263
+ Enabled: false
264
+ Style/AccessorMethodName:
265
+ Description: Check the naming of accessor methods for get_/set_.
266
+ Enabled: false
267
+ Style/Alias:
268
+ Description: Use alias_method instead of alias.
269
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#alias-method
270
+ Enabled: false
271
+ Style/Documentation:
272
+ Description: Document classes and non-namespace modules.
273
+ Enabled: false
274
+ Style/DoubleNegation:
275
+ Description: Checks for uses of double negation (!!).
276
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-bang-bang
277
+ Enabled: false
278
+ Style/EachWithObject:
279
+ Description: Prefer `each_with_object` over `inject` or `reduce`.
280
+ Enabled: false
281
+ Style/EmptyLiteral:
282
+ Description: Prefer literals to Array.new/Hash.new/String.new.
283
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#literal-array-hash
284
+ Enabled: false
285
+ Style/ModuleFunction:
286
+ Description: Checks for usage of `extend self` in modules.
287
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#module-function
288
+ Enabled: false
289
+ Style/MultilineOperationIndentation:
290
+ Description: Checks indentation of binary operations that span more than
291
+ one line.
292
+ Enabled: false
293
+ EnforcedStyle: aligned
294
+ SupportedStyles:
295
+ - aligned
296
+ - indented
297
+ Style/OneLineConditional:
298
+ Description: Favor the ternary operator(?:) over if/then/else/end constructs.
299
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#ternary-operator
300
+ Enabled: false
301
+ Style/PerlBackrefs:
302
+ Description: Avoid Perl-style regex back references.
303
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-perl-regexp-last-matchers
304
+ Enabled: false
305
+ Style/Send:
306
+ Description: Prefer `Object#__send__` or `Object#public_send` to `send`, as `send`
307
+ may overlap with existing methods.
308
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#prefer-public-send
309
+ Enabled: false
310
+ Style/SpecialGlobalVars:
311
+ Description: Avoid Perl-style global variables.
312
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-cryptic-perlisms
313
+ Enabled: false
314
+ Style/VariableInterpolation:
315
+ Description: Don't interpolate global, instance and class variables directly in
316
+ strings.
317
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#curlies-interpolate
318
+ Enabled: false
319
+ Style/WhenThen:
320
+ Description: Use when x then ... for one-line cases.
321
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#one-line-cases
322
+ Enabled: false
323
+ Lint/EachWithObjectArgument:
324
+ Description: Check for immutable argument given to each_with_object.
325
+ Enabled: true
326
+ Lint/HandleExceptions:
327
+ Description: Don't suppress exception.
328
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#dont-hide-exceptions
329
+ Enabled: false
330
+ Lint/LiteralInCondition:
331
+ Description: Checks of literals used in conditions.
332
+ Enabled: false
333
+ Lint/LiteralInInterpolation:
334
+ Description: Checks for literals used in interpolation.
335
+ Enabled: false
@@ -1,6 +1,9 @@
1
+ # before_install:
2
+ # - gem update --system '2.4.5'
1
3
  language: ruby
2
4
  rvm:
3
- - 1.9.3
4
5
  - 2.0.0
5
- - 2.1.2
6
- - 2.2.2
6
+ - 2.1.10
7
+ - 2.2.5
8
+ - 2.3.3
9
+ - 2.4.0
@@ -1,6 +1,17 @@
1
1
  # Changelog
2
2
 
3
- ## HEAD
3
+ ## 1.0.0
4
+
5
+ :warning: This version drops support for Ruby 1.9.
6
+
7
+ * ADD: Support for Ruby 2.4.0
8
+ * ADD: Support for _Pathname_ in `Dir.glob` (PR #21 by @craigw)
9
+ * ADD: `MemFs.halt` to switch back to the real file-system (PR #24 by @thsur)
10
+ * ADD: Basic support for `IO.write` (PR #20 by @rmm5t)
11
+ * FIX: Reset the file position when reopened (PR #23 by @jimpo)
12
+ * FIX: Ignore trailing slashes when searching an entry (issue #26)
13
+ * FIX: Making `File` inherit from `IO` to fix 3rd-party related issues
14
+ * FIX: Ensure `File.new` on a symlink raises if target is absent
4
15
 
5
16
  ## 0.5.0
6
17
 
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
1
  ![MemFs Logo](https://raw.github.com/simonc/memfs/master/memfs.png)
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/memfs.png)](http://badge.fury.io/rb/memfs)
4
- [![Build Status](https://secure.travis-ci.org/simonc/memfs.png?branch=master)](http://travis-ci.org/simonc/memfs)
5
- [![Code Climate](https://codeclimate.com/github/simonc/memfs.png)](https://codeclimate.com/github/simonc/memfs)
6
- [![Coverage Status](https://coveralls.io/repos/simonc/memfs/badge.png?branch=master)](https://coveralls.io/r/simonc/memfs?branch=master)
3
+ [![Gem Version](https://badge.fury.io/rb/memfs.svg)](https://badge.fury.io/rb/memfs)
4
+ [![Build Status](https://api.travis-ci.org/simonc/memfs.svg?branch=master)](http://travis-ci.org/simonc/memfs)
5
+ [![Code Climate](https://codeclimate.com/github/simonc/memfs/badges/gpa.svg)](https://codeclimate.com/github/simonc/memfs)
6
+ [![Coverage Status](https://coveralls.io/repos/github/simonc/memfs/badge.svg?branch=master)](https://coveralls.io/github/simonc/memfs?branch=master)
7
7
 
8
8
  MemFs is an in-memory filesystem that can be used for your tests.
9
9
 
@@ -161,13 +161,14 @@ end
161
161
 
162
162
  ## Requirements
163
163
 
164
- * Ruby 1.9.3 or newer
164
+ * Ruby 2.0 or newer
165
165
 
166
166
  ## Known issues
167
167
 
168
168
  * MemFs doesn't implement IO so methods like `FileUtils.copy_stream` and `IO.write` are still the originals.
169
169
  * Similarly, MemFs doesn't implement Kernel, so don't use a naked `open()` call. This uses the `Kernel` class via `method_missing`, which MemFs will not intercept.
170
170
  * Pipes and Sockets are not handled for now.
171
+ * ~`require "pp"` will raise a _superclass mismatch_ exception since MemFs::File does not inherit from IO. The best thing to do is to require pp _before_ MemFs.~
171
172
 
172
173
  ## TODO
173
174
 
@@ -22,6 +22,9 @@ module MemFs
22
22
  # Keeps track of the original Ruby File class.
23
23
  OriginalFile = ::File
24
24
 
25
+ # Keeps track of the original Ruby IO class.
26
+ OriginalIO = ::IO
27
+
25
28
  require 'memfs/file_system'
26
29
  require 'memfs/dir'
27
30
  require 'memfs/file'
@@ -70,16 +73,18 @@ module MemFs
70
73
  #
71
74
  # @see #deactivate!
72
75
  # @return nothing.
73
- def activate!
76
+ def activate!(clear: true)
74
77
  Object.class_eval do
75
78
  remove_const :Dir
76
79
  remove_const :File
80
+ remove_const :IO
77
81
 
78
82
  const_set :Dir, MemFs::Dir
83
+ const_set :IO, MemFs::IO
79
84
  const_set :File, MemFs::File
80
85
  end
81
86
 
82
- MemFs::FileSystem.instance.clear!
87
+ MemFs::FileSystem.instance.clear! if clear
83
88
  end
84
89
  module_function :activate!
85
90
 
@@ -93,13 +98,35 @@ module MemFs
93
98
  Object.class_eval do
94
99
  remove_const :Dir
95
100
  remove_const :File
101
+ remove_const :IO
96
102
 
97
103
  const_set :Dir, MemFs::OriginalDir
104
+ const_set :IO, MemFs::OriginalIO
98
105
  const_set :File, MemFs::OriginalFile
99
106
  end
100
107
  end
101
108
  module_function :deactivate!
102
109
 
110
+ # Switches back to the original file system, calls the given block (if any),
111
+ # and switches back afterwards.
112
+ #
113
+ # If a block is given, all file & dir operations (like reading dir contents or
114
+ # requiring files) will operate on the original fs.
115
+ #
116
+ # @example
117
+ # MemFs.halt do
118
+ # puts Dir.getwd
119
+ # end
120
+ # @return nothing
121
+ def halt
122
+ deactivate!
123
+
124
+ yield if block_given?
125
+ ensure
126
+ activate!(clear: false)
127
+ end
128
+ module_function :halt
129
+
103
130
  # Creates a file and all its parent directories.
104
131
  #
105
132
  # @param path: The path of the file to create.