memfs 0.5.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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.