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 +4 -4
- data/.travis.yml +3 -2
- data/CHANGELOG.md +14 -0
- data/Gemfile +3 -3
- data/README.md +15 -15
- data/appveyor.yml +3 -2
- data/lib/tty/file.rb +19 -13
- data/lib/tty/file/create_file.rb +1 -1
- data/lib/tty/file/download_file.rb +1 -1
- data/lib/tty/file/version.rb +1 -1
- data/tty-file.gemspec +2 -1
- metadata +18 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 12c95f3b7bd457b553e6592d5a9c74cf3dff2d9a
         | 
| 4 | 
            +
              data.tar.gz: adc293eda605ad68b5f45acff1d37c2849050922
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 3a86b5c70306a91576514af459e7fd3a458858732352cbe68683afa27786576abdc018c4388e4aa00105e85a23de1d0dcd84f02ea715377ef86e7bbee2ff2197
         | 
| 7 | 
            +
              data.tar.gz: a484156abd85e985118467b7cfd087c9672882e763fe0a84867b2543d08c4aa2000fc7640d205ffd6c2201fd18d0a79bcc0f83bf128165668ae4d7d06ca52e5c
         | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -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
    
    
    
        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  | 
| 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 | 
| 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 | 
| 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  | 
| 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  | 
| 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  | 
| 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  | 
| 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'")
         | 
    
        data/appveyor.yml
    CHANGED
    
    | @@ -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: " | 
| 26 | 
            +
                - ruby_version: "25"
         | 
    
        data/lib/tty/file.rb
    CHANGED
    
    | @@ -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 | 
| 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 | 
            -
                   | 
| 554 | 
            -
             | 
| 555 | 
            -
             | 
| 556 | 
            -
             | 
| 557 | 
            -
             | 
| 558 | 
            -
                       | 
| 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 |  | 
    
        data/lib/tty/file/create_file.rb
    CHANGED
    
    
| @@ -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. | 
| 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|
         | 
    
        data/lib/tty/file/version.rb
    CHANGED
    
    
    
        data/tty-file.gemspec
    CHANGED
    
    | @@ -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. | 
| 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. | 
| 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- | 
| 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. | 
| 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. | 
| 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 | 
             
            - ''
         |