tty-file 0.5.0 → 0.6.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: 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
  - ''