tty-file 0.5.0 → 0.6.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: 391c8a79917ab4059cf5e97f8ef9ab897f074e26
4
- data.tar.gz: 9763444093d08c160b29ecb8aae0a0af01b0395e
3
+ metadata.gz: 12c95f3b7bd457b553e6592d5a9c74cf3dff2d9a
4
+ data.tar.gz: adc293eda605ad68b5f45acff1d37c2849050922
5
5
  SHA512:
6
- metadata.gz: 8409f8c8fa4f5eb1ec0ac20f96bc6f807599b09ea654c0ddcf389fad464bc7a64d7a512afa377e935e3919a1eb078a3013335934a95b059c780ed2543bb77c6e
7
- data.tar.gz: 5915f45e25b27567db2bc970374adf9283a09e91bd6382f16aabed0c81ede0627e5c475d3edd22e2a287602ab28a3385602bae6e10056b50e526536ee714ce3d
6
+ metadata.gz: 3a86b5c70306a91576514af459e7fd3a458858732352cbe68683afa27786576abdc018c4388e4aa00105e85a23de1d0dcd84f02ea715377ef86e7bbee2ff2197
7
+ data.tar.gz: a484156abd85e985118467b7cfd087c9672882e763fe0a84867b2543d08c4aa2000fc7640d205ffd6c2201fd18d0a79bcc0f83bf128165668ae4d7d06ca52e5c
@@ -6,9 +6,10 @@ script: "bundle update && bundle exec rake ci"
6
6
  rvm:
7
7
  - 2.0.0
8
8
  - 2.1.10
9
- - 2.2.8
9
+ - 2.2.9
10
10
  - 2.3.6
11
- - 2.4.3
11
+ - 2.4.4
12
+ - 2.5.1
12
13
  - ruby-head
13
14
  - jruby-9.1.1.0
14
15
  env:
@@ -1,5 +1,18 @@
1
1
  # Change log
2
2
 
3
+ ## [v0.6.0] - 2018-05-21
4
+
5
+ ### Changed
6
+ * Change identical files conflict message from blue to cyan for readability
7
+ * Change replace_in_file to stop raising error and allow forcing file overwrite
8
+ * Change replace_in_file, inject_into_file, prepend_to_file, append_to_file to return true
9
+ when operation is performed successfully, false otherwise
10
+ * Update tty-prompt dependency
11
+ * Change download_file to preserve query parameters
12
+
13
+ ### Fixed
14
+ * Fix replace_in_file to preserve file original encoding
15
+
3
16
  ## [v0.5.0] - 2018-01-06
4
17
 
5
18
  ### Changed
@@ -51,6 +64,7 @@
51
64
 
52
65
  * Initial implementation and release
53
66
 
67
+ [v0.6.0]: https://github.com/piotrmurach/tty-file/compare/v0.5.0...v0.6.0
54
68
  [v0.5.0]: https://github.com/piotrmurach/tty-file/compare/v0.4.0...v0.5.0
55
69
  [v0.4.0]: https://github.com/piotrmurach/tty-file/compare/v0.3.0...v0.4.0
56
70
  [v0.3.0]: https://github.com/piotrmurach/tty-file/compare/v0.2.1...v0.3.0
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  group :test do
6
- gem 'simplecov', '~> 0.12.0'
7
- gem 'coveralls', '~> 0.8.17'
8
- gem 'webmock', '~> 2.3.0'
6
+ gem 'simplecov', '~> 0.14.1'
7
+ gem 'coveralls', '~> 0.8.21'
8
+ gem 'public_suffix', '~> 2.0'
9
9
  end
data/README.md CHANGED
@@ -19,7 +19,7 @@
19
19
 
20
20
  ## Motivation
21
21
 
22
- Though Ruby's `File` and `FileUtils` provide very robust apis for dealing with files, this library aims to provide level of abstraction that is much convenient with useful logging capabilities.
22
+ Though Ruby's `File` and `FileUtils` libraries provide very robust apis for dealing with files, this library aims to provide a level of abstraction that is much more convenient, with useful logging capabilities.
23
23
 
24
24
  ## Installation
25
25
 
@@ -65,7 +65,7 @@ TTY::File.replace_in_file('Gemfile', /gem 'rails'/, "gem 'hanami'")
65
65
 
66
66
  ## 2. Interface
67
67
 
68
- The following are methods available for creating and manipulating files.
68
+ The following methods are available for creating and manipulating files.
69
69
 
70
70
  If you wish to silence verbose output use `verbose: false`. Similarly if you wish to run action without actually triggering any action use `noop: true`.
71
71
 
@@ -79,14 +79,14 @@ TTY::File.binary?('image.png') # => true
79
79
 
80
80
  ### 2.2. checksum_file
81
81
 
82
- To generate checksum for a file, IO object or String use `checksum_file`. By default `MD5` algorithm is used which can be changed by passing second argument.
82
+ To generate a checksum for a file, IO object, or String, use `checksum_file`. By default the `MD5` algorithm is used, which can be changed by passing a second argument.
83
83
 
84
- Among supported message digest algorithms are:
84
+ Among the supported message digest algorithms are:
85
85
 
86
86
  * `sha`, `sha1`, `sha224`, `sha256`, `sha384`, `sha512`
87
87
  * `md2`, `md4`, `md5`
88
88
 
89
- For example, to create digest for string using `SHA1` do:
89
+ For example, to create a digest for a string using `SHA1` do:
90
90
 
91
91
  ```ruby
92
92
  TTY::File.checksum_file("Some content\nThe end", 'sha1')
@@ -95,19 +95,19 @@ TTY::File.checksum_file("Some content\nThe end", 'sha1')
95
95
 
96
96
  ### 2.3. chmod
97
97
 
98
- To change file modes use `chmod` like so:
98
+ To change file modes use `chmod`, like so:
99
99
 
100
100
  ```ruby
101
101
  TTY::File.chmod('filename.rb', 0777)
102
102
  ```
103
103
 
104
- There are number of constants available to represent common mode bits such as `TTY::File::U_R`, `TTY::File::O_X` and can be used as follows:
104
+ There are a number of constants available to represent common mode bits such as `TTY::File::U_R` and `TTY::File::O_X`, and they can be used as follows:
105
105
 
106
106
  ```ruby
107
107
  TTY::File.chmod('filename.rb', TTY::File::U_R | TTY::File::O_X)
108
108
  ```
109
109
 
110
- Apart from traditional octal number definition for file permissions, you can use more convenient permission notation accepted by Unix `chmod` command:
110
+ Apart from traditional octal number definition for file permissions, you can use the more convenient permission notation used by the Unix `chmod` command:
111
111
 
112
112
  ```ruby
113
113
  TTY::File.chmod('filename.rb', 'u=wrx,g+x')
@@ -117,7 +117,7 @@ The `u`, `g`, and `o` specify the user, group, and other parts of the mode bits.
117
117
 
118
118
  ### 2.4. copy_file
119
119
 
120
- Copies a file content from relative source to relative destination.
120
+ Copies a file's contents from a relative source to a relative destination.
121
121
 
122
122
  ```ruby
123
123
  TTY::File.copy_file 'Gemfile', 'Gemfile.bak'
@@ -131,7 +131,7 @@ TTY::File.copy_file('Gemfile', 'app/Gemfile') do |content|
131
131
  end
132
132
  ```
133
133
 
134
- If the source file is an `ERB` template then you can provide `:context` in which the file gets evaluted or if `TTY::File` gets included as a module then approprite object context will be used by default. To use `:context` do:
134
+ If the source file is an `ERB` template then you can provide a `:context` in which the file gets evaluated, or if `TTY::File` gets included as a module then appropriate object context will be used by default. To use `:context` do:
135
135
 
136
136
  ```ruby
137
137
  variables = OpenStruct.new
@@ -140,7 +140,7 @@ variables[:foo] = 'bar'
140
140
  TTY::File.copy_file('templates/application.html.erb', context: variables)
141
141
  ```
142
142
 
143
- You can also specifie template name surrounding any dynamic variables with `%` to be evaluted:
143
+ You can also specify the template name surrounding any dynamic variables with `%` to be evaluted:
144
144
 
145
145
  ```ruby
146
146
  variables = OpenStruct.new
@@ -325,7 +325,7 @@ TTY::File.download_file("https://gist.github.com/4701967", "doc/README.md", limi
325
325
 
326
326
  ### 2.10. inject_into_file
327
327
 
328
- Inject content into a file at a given location
328
+ Inject content into a file at a given location and return `true` when performed successfully, `false` otherwise.
329
329
 
330
330
  ```ruby
331
331
  TTY::File.inject_into_file 'filename.rb', "text to add", after: "Code below this line\n"
@@ -343,7 +343,7 @@ You can also use Regular Expressions in `:after` or `:before` to match file loca
343
343
 
344
344
  ### 2.11. replace_in_file
345
345
 
346
- Replace content of a file matching condition by calling `replace_in_file` or `gsub_file`
346
+ Replace content of a file matching condition by calling `replace_in_file` or `gsub_file`, which returns `true` when substitutions are performed successfully, `false` otherwise.
347
347
 
348
348
  ```ruby
349
349
  TTY::File.replace_in_file 'filename.rb', /matching condition/, 'replacement'
@@ -359,7 +359,7 @@ end
359
359
 
360
360
  ### 2.12. append_to_file
361
361
 
362
- Appends text to a file. You can provide the text as a second argument:
362
+ Appends text to a file and returns `true` when performed successfully, `false` otherwise. You can provide the text as a second argument:
363
363
 
364
364
  ```ruby
365
365
  TTY::File.append_to_file('Gemfile', "gem 'tty'")
@@ -375,7 +375,7 @@ end
375
375
 
376
376
  ### 2.13. prepend_to_file
377
377
 
378
- Prepends text to a file. You can provide the text as a second argument:
378
+ Prepends text to a file and returns `true` when performed successfully, `false` otherwise. You can provide the text as a second argument:
379
379
 
380
380
  ```ruby
381
381
  TTY::File.prepend_to_file('Gemfile', "gem 'tty'")
@@ -9,7 +9,6 @@ test_script:
9
9
  - bundle exec rake ci
10
10
  environment:
11
11
  matrix:
12
- - ruby_version: "193"
13
12
  - ruby_version: "200"
14
13
  - ruby_version: "200-x64"
15
14
  - ruby_version: "21"
@@ -20,6 +19,8 @@ environment:
20
19
  - ruby_version: "23-x64"
21
20
  - ruby_version: "24"
22
21
  - ruby_version: "24-x64"
22
+ - ruby_version: "25"
23
+ - ruby_version: "25-x64"
23
24
  matrix:
24
25
  allow_failures:
25
- - ruby_version: "193"
26
+ - ruby_version: "25"
@@ -500,6 +500,7 @@ module TTY
500
500
  #
501
501
  # @api public
502
502
  def inject_into_file(relative_path, *args, **options, &block)
503
+ check_path(relative_path)
503
504
  replacement = block_given? ? block[] : args.join
504
505
 
505
506
  flag, match = if options.key?(:after)
@@ -515,17 +516,18 @@ module TTY
515
516
  replacement + '\0'
516
517
  end
517
518
 
518
- replace_in_file(relative_path, /#{match}/, content, options.merge(verbose: false))
519
-
520
519
  log_status(:inject, relative_path, options.fetch(:verbose, true),
521
520
  options.fetch(:color, :green))
521
+ replace_in_file(relative_path, /#{match}/, content,
522
+ options.merge(verbose: false))
522
523
  end
523
524
  module_function :inject_into_file
524
525
 
525
526
  alias insert_into_file inject_into_file
526
527
  module_function :insert_into_file
527
528
 
528
- # Replace content of a file matching string
529
+ # Replace content of a file matching string, returning false
530
+ # when no substitutions were performed, true otherwise.
529
531
  #
530
532
  # @options [Hash[String]] options
531
533
  # @option options [Symbol] :force
@@ -541,26 +543,30 @@ module TTY
541
543
  # match = "gem 'hanami'"
542
544
  # end
543
545
  #
546
+ # @return [Boolean]
547
+ # true when replaced content, false otherwise
548
+ #
544
549
  # @api public
545
550
  def replace_in_file(relative_path, *args, **options, &block)
546
551
  check_path(relative_path)
547
- contents = IO.read(relative_path)
552
+ contents = IO.read(relative_path)
548
553
  replacement = (block ? block[] : args[1..-1].join).gsub('\0', '')
554
+ match = Regexp.escape(replacement)
555
+ status = nil
549
556
 
550
557
  log_status(:replace, relative_path, options.fetch(:verbose, true),
551
558
  options.fetch(:color, :green))
559
+ return false if options[:noop]
552
560
 
553
- return if options[:noop]
554
-
555
- if options[:force] || !contents.include?(replacement)
556
- if !contents.gsub!(*args, &block)
557
- find = args[0]
558
- raise "#{find.inspect} not found in #{relative_path}"
559
- end
560
- ::File.open(relative_path, 'wb') do |file|
561
- file.write(contents)
561
+ if !(contents =~ /^#{match}(\r?\n)*/m) || options[:force]
562
+ status = contents.gsub!(*args, &block)
563
+ if !status.nil?
564
+ ::File.open(relative_path, 'wb') do |file|
565
+ file.write(contents)
566
+ end
562
567
  end
563
568
  end
569
+ !status.nil?
564
570
  end
565
571
  module_function :replace_in_file
566
572
 
@@ -56,7 +56,7 @@ module TTY
56
56
  def detect_collision
57
57
  if exist?
58
58
  if identical?
59
- notify(:identical, :blue)
59
+ notify(:identical, :cyan)
60
60
  elsif options[:force]
61
61
  notify(:force, :yellow)
62
62
  yield unless options[:noop]
@@ -36,7 +36,7 @@ module TTY
36
36
 
37
37
  Net::HTTP.start(uri.host, uri.port,
38
38
  use_ssl: uri.scheme == 'https') do |http|
39
- http.request_get(uri.path) do |response|
39
+ http.request_get(uri.request_uri) do |response|
40
40
  case response
41
41
  when Net::HTTPSuccess
42
42
  response.read_body do |seg|
@@ -2,6 +2,6 @@
2
2
 
3
3
  module TTY
4
4
  module File
5
- VERSION = '0.5.0'.freeze
5
+ VERSION = '0.6.0'.freeze
6
6
  end # File
7
7
  end # TTY
@@ -22,10 +22,11 @@ Gem::Specification.new do |spec|
22
22
  spec.required_ruby_version = '>= 2.0.0'
23
23
 
24
24
  spec.add_dependency 'pastel', '~> 0.7.2'
25
- spec.add_dependency 'tty-prompt', '~> 0.14.0'
25
+ spec.add_dependency 'tty-prompt', '~> 0.16.1'
26
26
  spec.add_dependency 'diff-lcs', '~> 1.3.0'
27
27
 
28
28
  spec.add_development_dependency 'bundler', '~> 1.5'
29
29
  spec.add_development_dependency 'rake', '~> 10.0'
30
30
  spec.add_development_dependency 'rspec', '~> 3.0'
31
+ spec.add_development_dependency 'webmock', '~> 3.4.0'
31
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tty-file
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Murach
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-06 00:00:00.000000000 Z
11
+ date: 2018-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pastel
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.14.0
33
+ version: 0.16.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.14.0
40
+ version: 0.16.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: diff-lcs
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 3.4.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 3.4.0
97
111
  description: File manipulation utility methods.
98
112
  email:
99
113
  - ''