rar 0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 142dbffb47cce75ea7de10b407a2a103486330eb
4
+ data.tar.gz: 5c66d66bcae8e0bb1a2a3bf6c0ee98953cf21899
5
+ SHA512:
6
+ metadata.gz: a096bd80b400449335222afcd3b4624a26201512de8e0c100885358938100c3cf64f3135e30fbc34864c6b6c8b26c2e0563b4df8c7f18707b4d2b6a4be1587c1
7
+ data.tar.gz: 08dbe55dfc63e46c61d02953833e47b454ae74486fe5a742ab7b3d1b21d0944a3df299ccfa53fe636d5fd08770de411424d60c912bbfdc8e2eff75fb149817db
@@ -0,0 +1,5 @@
1
+ --output-dir documentation/
2
+ --readme README.md
3
+ --title RAR
4
+ --protected
5
+ library/**/*.rb
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright (c) 2014, Mikkel Kroman <mk@uplink.io>
2
+
3
+ Permission to use, copy, modify, and/or distribute this software for any
4
+ purpose with or without fee is hereby granted, provided that the above
5
+ copyright notice and this permission notice appear in all copies.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -0,0 +1,54 @@
1
+ # RAR
2
+
3
+ RAR is a Ruby wrapper for the command-line application `rar`, also known as
4
+ WinRAR for Windows. A free evaluation copy can be obtained from [RarLab](http://rarlab.com).
5
+
6
+ ## Installation
7
+
8
+ `gem install rar`
9
+
10
+ And you're all set. Extra dependencies will automatically be installed.
11
+
12
+ ## Usage
13
+
14
+ ### Creating an archive
15
+
16
+ Creating an archive and adding arbitrary files to it is simple!
17
+
18
+ require 'rar'
19
+
20
+ archive = RAR::Archive.new 'archive.rar'
21
+
22
+ archive.add_file 'some-file.txt'
23
+ archive.add_file 'some-other-file.jpg'
24
+
25
+ archive.create!
26
+
27
+ ### Adding command-line options
28
+
29
+ RAR provides a mapping of verbosely named options for ease of use.
30
+
31
+ archive = RAR::Archive.new 'archive.rar', volume_size: 15_000_000
32
+
33
+ archive.add_file 'some-file.txt'
34
+ archive.add_file 'some-large-file.bin'
35
+
36
+ archive.create!
37
+
38
+ This example splits the archive into multiple volumes with a size of 15MB.
39
+
40
+ To see more options, take a look at the documentation.
41
+
42
+ ## Contributing
43
+
44
+ 1. Fork it!
45
+ 2. Create your feature branch: `git checkout -b my-new-feature`
46
+ 3. Commit your changes: `git commit -am 'Add some feature'`
47
+ 4. Push to the branch: `git push origin my-new-feature`
48
+ 5. Submit a pull request
49
+
50
+ ## History
51
+
52
+ __v0.1__
53
+
54
+ + Initial release.
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+
3
+ require 'open3'
4
+ require 'shellwords'
5
+
6
+ require 'rar/version'
7
+ require 'rar/archive'
8
+ require 'rar/command_line_options'
9
+
10
+ # RAR is a Ruby wrapper for the command-line application rar, also known as
11
+ # WinRAR for Windows. A free evaluation copy can be obtained from RarLab.
12
+ #
13
+ #
14
+ module RAR
15
+ # A list of messages of what the process exit code might indicate.
16
+ ExitCodeMessages = {
17
+ 0 => 'Successful operation.',
18
+ 1 => 'Non fatal error(s) occurred.',
19
+ 2 => 'A fatal error occurred.',
20
+ 3 => 'Invalid checksum. Data is damaged.',
21
+ 4 => 'Attempt to modify an archive locked by \'k\' command.',
22
+ 5 => 'Write error.',
23
+ 6 => 'File open error.',
24
+ 7 => 'Wrong command line option.',
25
+ 8 => 'Not enough memory.',
26
+ 9 => 'File creation error.',
27
+ 10 => 'No files matching the specified mask and options were found.',
28
+ 11 => 'Wrong password.',
29
+ 255 => 'User stopped the process.'
30
+ }
31
+
32
+ # The standard error for unexpected exit codes.
33
+ CommandLineError = Class.new StandardError
34
+
35
+ # Set the path to the executable `rar` file.
36
+ #
37
+ # @return [String] the new path to the executable.
38
+ def self.executable= executable
39
+ @executable = executable
40
+ end
41
+
42
+ # @return [String] the path to the executable `rar` file.
43
+ def self.executable
44
+ @executable || 'rar'
45
+ end
46
+ end
@@ -0,0 +1,78 @@
1
+ # encoding: utf-8
2
+
3
+ module RAR
4
+ # The Archive class.
5
+ #
6
+ # It is the main entry-point to creating a new archive.
7
+ class Archive
8
+ # @return [Array] the list of files.
9
+ attr_accessor :files
10
+
11
+ # @return [Hash] the list of options.
12
+ attr_accessor :options
13
+
14
+ # Create a new archive.
15
+ #
16
+ # @param [String] filename The archive's file name.
17
+ # @param [CommandLineOptions, optional] options The options to pass to the
18
+ # command line.
19
+ #
20
+ # @option options [String] :extra A string of command line options that will
21
+ # be passed directly to the command line.
22
+ # @option options [Boolean] :force Assume Yes on all queries.
23
+ # @option options [Boolean] :old_format Use the old style volume naming
24
+ # scheme.
25
+ # @option options [Fixnum, String] :volume_size The volume size in case of
26
+ # multiple volumes.
27
+ # @option options [Fixnum] :compression Set compression level.
28
+ # (0-store...3-default...5-maximal)
29
+ # @option options [Boolean] :exclude_path Exclude paths from names.
30
+ def initialize filename, options = {}
31
+ @files = []
32
+ @options = CommandLineOptions.new.merge options
33
+ @filename = filename
34
+ end
35
+
36
+ # Add a file to the list of files.
37
+ #
38
+ # @return [Array] the list of files.
39
+ # @raise ERRNO::ENOENT if the file doesn't exist.
40
+ def add_file path
41
+ if File.exist? path
42
+ @files << path
43
+ else
44
+ raise Errno::ENOENT, "File '#{path}' doesn't exist"
45
+ end
46
+ end
47
+
48
+ # Create the final archive.
49
+ #
50
+ # @raise CommandLineError if the exit code indicates an error.
51
+ # @return true if the command executes without a hitch.
52
+ def create!
53
+ `#{command_line}`
54
+
55
+ if $? > 1
56
+ if message = ExitCodeMessage[$?]
57
+ raise CommandLineError, message
58
+ else
59
+ raise CommandLineError, "Unknown exit code: #{$?}"
60
+ end
61
+ else
62
+ true
63
+ end
64
+ end
65
+
66
+ private
67
+
68
+ # @return [String] the concatenated list of command-line switches.
69
+ def command_line_options
70
+ Shellwords.join @options.to_a
71
+ end
72
+
73
+ # @return [String] the concatenated command-line with all the switches.
74
+ def command_line
75
+ %{#{RAR.executable} a #{command_line_options} #{Shellwords.escape @filename} #{Shellwords.join @files}}
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+
3
+ module RAR
4
+ # CommandLineOptions is a convenience class to making adding new command-line
5
+ # switches trivial.
6
+ class CommandLineOptions < Hash
7
+ # The mappings that convert an option to an actual command line switch.
8
+ OptionsMap = {
9
+ extra: ->(extra) { extra },
10
+ force: ->(force) { '-y' if force },
11
+ old_format: ->(old_format) { '-vn' if old_format },
12
+ volume_size: ->(volume_size) { "-v#{volume_size}" },
13
+ compression: ->(compression = 0) { "-m#{compression}" },
14
+ exclude_path: ->(exclude_path) { 'ep' },
15
+ }
16
+
17
+ # @return [Array] the list of command line options.
18
+ def to_a
19
+ map do |key, value|
20
+ if block = OptionsMap[key]
21
+ block.call value
22
+ end
23
+ end.compact
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ module RAR
4
+ # The library version constant.
5
+ Version = "0.1"
6
+
7
+ # Returns the current library version number.
8
+ #
9
+ # @return [String] the current library version number.
10
+ def self.version
11
+ Version
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rar
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Mikkel Kroman
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 3.0.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 3.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: guard
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.6'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.6'
47
+ - !ruby/object:Gem::Dependency
48
+ name: guard-rspec
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '4.2'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '4.2'
61
+ description: |2
62
+ RAR is a Ruby wrapper for the command-line application rar, also known as WinRAR for Windows.
63
+ email: mk@uplink.io
64
+ executables: []
65
+ extensions: []
66
+ extra_rdoc_files: []
67
+ files:
68
+ - ".yardopts"
69
+ - LICENSE
70
+ - README.md
71
+ - library/rar.rb
72
+ - library/rar/archive.rb
73
+ - library/rar/command_line_options.rb
74
+ - library/rar/version.rb
75
+ homepage: https://github.com/mkroman/rar
76
+ licenses:
77
+ - MIT
78
+ metadata: {}
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - library
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubyforge_project:
95
+ rubygems_version: 2.2.2
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: RAR is a Ruby wrapper for the command-line application rar, also known as
99
+ WinRAR for Windows.
100
+ test_files: []
101
+ has_rdoc: