filesorter 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 53e8615fa2825a2bf8b061ae95a79fb1201538f2
4
+ data.tar.gz: 0daba9ee77adedc3c9a321a511dcafb188ce5682
5
+ SHA512:
6
+ metadata.gz: d89d0230967d5411a1c35f5bc079c85f8ef2f88b0566b63b35a958ae60629fc68bf6a30b2a49bd793af5301e162db441d98e6c3464a9cbc1c47228f8c239448b
7
+ data.tar.gz: e521c6ad04c2fc95bb21d9f7d899ba070b845ddce4574fb8a83d7e67c9189c3adb3453fc27291a6c29c3b200aa740717ba039ab2c65bf2442deb83ddf161588a
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /coverage
11
+ /.byebug_history
data/.hound.yml ADDED
@@ -0,0 +1,7 @@
1
+ scss:
2
+ config_file: .scss-lint.yml
3
+ ruby:
4
+ config_file: .rubocop.yml
5
+ javascript:
6
+ config_file: .javascript-style.json
7
+ ignore_file: .javascript-ignore
data/.rubocop.yml ADDED
@@ -0,0 +1,234 @@
1
+ AllCops:
2
+ Exclude:
3
+ - "vendor/**/*"
4
+ - "db/schema.rb"
5
+ - "lib/filesorter.rb"
6
+ UseCache: false
7
+ Style/CollectionMethods:
8
+ Description: Preferred collection methods.
9
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#map-find-select-reduce-size
10
+ Enabled: true
11
+ PreferredMethods:
12
+ collect: map
13
+ collect!: map!
14
+ find: detect
15
+ find_all: select
16
+ reduce: inject
17
+ Style/DotPosition:
18
+ Description: Checks the position of the dot in multi-line method calls.
19
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#consistent-multi-line-chains
20
+ Enabled: true
21
+ EnforcedStyle: trailing
22
+ SupportedStyles:
23
+ - leading
24
+ - trailing
25
+ Style/FileName:
26
+ Description: Use snake_case for source file names.
27
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#snake-case-files
28
+ Enabled: false
29
+ Exclude: []
30
+ Style/GuardClause:
31
+ Description: Check for conditionals that can be replaced with guard clauses
32
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-nested-conditionals
33
+ Enabled: false
34
+ MinBodyLength: 1
35
+ Style/IfUnlessModifier:
36
+ Description: Favor modifier if/unless usage when you have a single-line body.
37
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#if-as-a-modifier
38
+ Enabled: false
39
+ MaxLineLength: 80
40
+ Style/OptionHash:
41
+ Description: Don't use option hashes when you can use keyword arguments.
42
+ Enabled: false
43
+ Style/PercentLiteralDelimiters:
44
+ Description: Use `%`-literal delimiters consistently
45
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#percent-literal-braces
46
+ Enabled: false
47
+ PreferredDelimiters:
48
+ "%": "()"
49
+ "%i": "()"
50
+ "%q": "()"
51
+ "%Q": "()"
52
+ "%r": "{}"
53
+ "%s": "()"
54
+ "%w": "()"
55
+ "%W": "()"
56
+ "%x": "()"
57
+ Style/PredicateName:
58
+ Description: Check the names of predicate methods.
59
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#bool-methods-qmark
60
+ Enabled: true
61
+ NamePrefix:
62
+ - is_
63
+ - has_
64
+ - have_
65
+ NamePrefixBlacklist:
66
+ - is_
67
+ Exclude:
68
+ - spec/**/*
69
+ Style/RaiseArgs:
70
+ Description: Checks the arguments passed to raise/fail.
71
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#exception-class-messages
72
+ Enabled: false
73
+ EnforcedStyle: exploded
74
+ SupportedStyles:
75
+ - compact
76
+ - exploded
77
+ Style/SignalException:
78
+ Description: Checks for proper usage of fail and raise.
79
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#fail-method
80
+ Enabled: false
81
+ EnforcedStyle: semantic
82
+ SupportedStyles:
83
+ - only_raise
84
+ - only_fail
85
+ - semantic
86
+ Style/SingleLineBlockParams:
87
+ Description: Enforces the names of some block params.
88
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#reduce-blocks
89
+ Enabled: false
90
+ Methods:
91
+ - reduce:
92
+ - a
93
+ - e
94
+ - inject:
95
+ - a
96
+ - e
97
+ Style/SingleLineMethods:
98
+ Description: Avoid single-line methods.
99
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-single-line-methods
100
+ Enabled: false
101
+ AllowIfMethodIsEmpty: true
102
+ Style/StringLiterals:
103
+ Description: Checks if uses of quotes match the configured preference.
104
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#consistent-string-literals
105
+ Enabled: true
106
+ EnforcedStyle: double_quotes
107
+ SupportedStyles:
108
+ - single_quotes
109
+ - double_quotes
110
+ Style/StringLiteralsInInterpolation:
111
+ Description: Checks if uses of quotes inside expressions in interpolated strings
112
+ match the configured preference.
113
+ Enabled: true
114
+ EnforcedStyle: single_quotes
115
+ SupportedStyles:
116
+ - single_quotes
117
+ - double_quotes
118
+ Style/TrailingCommaInArguments:
119
+ Description: Checks for trailing comma in parameter lists and literals.
120
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas
121
+ Enabled: false
122
+ EnforcedStyleForMultiline: no_comma
123
+ SupportedStyles:
124
+ - comma
125
+ - no_comma
126
+ Metrics/AbcSize:
127
+ Description: A calculated magnitude based on number of assignments, branches, and
128
+ conditions.
129
+ Enabled: false
130
+ Max: 15
131
+ Metrics/ClassLength:
132
+ Description: Avoid classes longer than 100 lines of code.
133
+ Enabled: false
134
+ CountComments: false
135
+ Max: 100
136
+ Metrics/ModuleLength:
137
+ CountComments: false
138
+ Max: 100
139
+ Description: Avoid modules longer than 100 lines of code.
140
+ Enabled: false
141
+ Metrics/CyclomaticComplexity:
142
+ Description: A complexity metric that is strongly correlated to the number of test
143
+ cases needed to validate a method.
144
+ Enabled: false
145
+ Max: 6
146
+ Metrics/MethodLength:
147
+ Description: Avoid methods longer than 10 lines of code.
148
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#short-methods
149
+ Enabled: false
150
+ CountComments: false
151
+ Max: 10
152
+ Metrics/ParameterLists:
153
+ Description: Avoid parameter lists longer than three or four parameters.
154
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#too-many-params
155
+ Enabled: false
156
+ Max: 5
157
+ CountKeywordArgs: true
158
+ Metrics/PerceivedComplexity:
159
+ Description: A complexity metric geared towards measuring complexity for a human
160
+ reader.
161
+ Enabled: false
162
+ Max: 7
163
+ Lint/AssignmentInCondition:
164
+ Description: Don't use assignment in conditions.
165
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#safe-assignment-in-condition
166
+ Enabled: false
167
+ AllowSafeAssignment: true
168
+ Style/InlineComment:
169
+ Description: Avoid inline comments.
170
+ Enabled: false
171
+ Style/AccessorMethodName:
172
+ Description: Check the naming of accessor methods for get_/set_.
173
+ Enabled: false
174
+ Style/Alias:
175
+ Description: Use alias_method instead of alias.
176
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#alias-method
177
+ Enabled: false
178
+ Style/Documentation:
179
+ Description: Document classes and non-namespace modules.
180
+ Enabled: false
181
+ Style/DoubleNegation:
182
+ Description: Checks for uses of double negation (!!).
183
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-bang-bang
184
+ Enabled: false
185
+ Style/EachWithObject:
186
+ Description: Prefer `each_with_object` over `inject` or `reduce`.
187
+ Enabled: false
188
+ Style/EmptyLiteral:
189
+ Description: Prefer literals to Array.new/Hash.new/String.new.
190
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#literal-array-hash
191
+ Enabled: false
192
+ Style/ModuleFunction:
193
+ Description: Checks for usage of `extend self` in modules.
194
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#module-function
195
+ Enabled: false
196
+ Style/OneLineConditional:
197
+ Description: Favor the ternary operator(?:) over if/then/else/end constructs.
198
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#ternary-operator
199
+ Enabled: false
200
+ Style/PerlBackrefs:
201
+ Description: Avoid Perl-style regex back references.
202
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-perl-regexp-last-matchers
203
+ Enabled: false
204
+ Style/Send:
205
+ Description: Prefer `Object#__send__` or `Object#public_send` to `send`, as `send`
206
+ may overlap with existing methods.
207
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#prefer-public-send
208
+ Enabled: false
209
+ Style/SpecialGlobalVars:
210
+ Description: Avoid Perl-style global variables.
211
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-cryptic-perlisms
212
+ Enabled: false
213
+ Style/VariableInterpolation:
214
+ Description: Don't interpolate global, instance and class variables directly in
215
+ strings.
216
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#curlies-interpolate
217
+ Enabled: false
218
+ Style/WhenThen:
219
+ Description: Use when x then ... for one-line cases.
220
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#one-line-cases
221
+ Enabled: false
222
+ Lint/EachWithObjectArgument:
223
+ Description: Check for immutable argument given to each_with_object.
224
+ Enabled: true
225
+ Lint/HandleExceptions:
226
+ Description: Don't suppress exception.
227
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#dont-hide-exceptions
228
+ Enabled: false
229
+ Lint/LiteralInCondition:
230
+ Description: Checks of literals used in conditions.
231
+ Enabled: false
232
+ Lint/LiteralInInterpolation:
233
+ Description: Checks for literals used in interpolation.
234
+ Enabled: false
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.1
4
+ before_install: gem install bundler -v 1.11.2
5
+ addons:
6
+ code_climate:
7
+ repo_token: 346b2722b0882ff8f5021f7e41c095dd1caa41a141f4dc9753e348508a482f3b
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in filesorter.gemspec
4
+ gemspec
5
+ gem "codeclimate-test-reporter", group: :test
6
+ group :development, :test do
7
+ gem "byebug"
8
+ gem "rubocop", require: false
9
+ gem "simplecov"
10
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 oosiname
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,58 @@
1
+ [![Code Climate](https://codeclimate.com/github/oosiname/filesorter/badges/gpa.svg)](https://codeclimate.com/github/oosiname/filesorter)
2
+ [![Build Status](https://travis-ci.org/oosiname/filesorter.svg?branch=master)](https://travis-ci.org/oosiname/filesorter)
3
+
4
+ # Filesorter
5
+
6
+ ##Introduction
7
+
8
+ Filesorter is a ruby application that helps you organize your media files by moving them from their current location to the appropriate media folder.
9
+
10
+ At the initial run, user sets up his path of preference for video, audio and picture files.
11
+
12
+ ## Installation
13
+
14
+ The User should have ruby set on his pc
15
+
16
+ The app is installed as a gem by running:
17
+
18
+ $ gem install filesorter
19
+
20
+ ## Usage
21
+
22
+ After installation
23
+
24
+ Navigate via commandline to the folder you wish to move your media files from and type `sort`.
25
+
26
+ Proceed to set up your default media paths like so
27
+
28
+ `/Users/USER/movies`
29
+
30
+ `/Users/USER/music`
31
+
32
+ `/Users/USER/pictures`
33
+
34
+ Note: Paths may vary according to your local machine and choice of path.
35
+
36
+ The files are then moved to the set folders according to their media type.
37
+
38
+ You do not need to set paths on subsequent calls of `sort` as the default paths will be saved in a .json file.
39
+
40
+ ## Changing Paths
41
+
42
+ ## Advanced
43
+
44
+ To edit your default paths, navigate to your home and locate `filesorter_settings.json` and edit..
45
+
46
+ ## Others
47
+
48
+ Go to your home directory and delete the `filesorter_settings.json` file, do not edit if you are not familiar with json file formats
49
+
50
+ ## Contributing
51
+
52
+ 1. Fork it ( https://github.com/oosiname/filtersort/fork )
53
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
54
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
55
+ 4. Push to the branch (`git push origin my-new-feature`)
56
+ 5. Create a new Pull Request
57
+
58
+ note: I might not be immediately available to respond to pull requests as I am mostly busy..
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task default: :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "filesorter"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/bin/sort ADDED
@@ -0,0 +1,3 @@
1
+ require 'filesorter'
2
+ files_to_sort = Filesorter::Main.new
3
+ files_to_sort.move
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "filesorter/version"
5
+
6
+ lib = File.expand_path("../lib", __FILE__)
7
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
8
+
9
+ Gem::Specification.new do |spec|
10
+ spec.name = "filesorter"
11
+ spec.version = Filesorter::VERSION
12
+ spec.authors = ["Olumuyiwa Osiname"]
13
+ spec.email = ["oluosiname@gmail.com"]
14
+ spec.summary = ["This installs filesorter on the pc."]
15
+ spec.description = ["Filesorter helps move media files to predefined paths"]
16
+ spec.homepage = "https://github.com/oosiname/filesorter"
17
+ spec.license = "MIT"
18
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
+ f.match(%r{^(test|spec|features)/})
20
+ end
21
+ spec.bindir = "bin"
22
+ spec.executables = ["sort"]
23
+ spec.require_paths = ["lib"]
24
+ spec.add_development_dependency "bundler"
25
+ spec.add_development_dependency "rake"
26
+ spec.add_development_dependency "rspec"
27
+ end
data/lib/filesorter.rb ADDED
@@ -0,0 +1,40 @@
1
+ require "filesorter/version"
2
+ require "filesorter/path"
3
+ module Filesorter
4
+ class Main
5
+ def settings
6
+ Path.new.set
7
+ end
8
+
9
+ def move
10
+ settings unless File.file?("#{Dir.home}/filesorter_settings.json")
11
+ count = 0
12
+ Dir.foreach(".") do |file|
13
+ if media?(file)
14
+ path = get_path(file)
15
+ count += 1 if system "mv \"#{file}\" #{path}"
16
+ end
17
+ end
18
+ puts "#{count} files moved"
19
+ end
20
+
21
+ def get_all_paths
22
+ Path.new.get
23
+ end
24
+
25
+ def get_path(file)
26
+ paths = get_all_paths
27
+ case File.extname(file)
28
+ when ".png", ".jpg", ".gif" then paths["picture"]
29
+ when ".flv", ".mp4", ".vob", ".avi" then paths["video"]
30
+ when ".mp3", ".wma", ".wav" then paths["music"]
31
+ end
32
+ end
33
+
34
+ def media?(file)
35
+ extensions = [".png", ".gif", ".jpg", ".flv", ".mp4", ".vob", ".avi",
36
+ ".mp3", ".wma", ".wav"]
37
+ extensions.include? File.extname(file)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,26 @@
1
+ module Filesorter
2
+ class Path
3
+ require "json"
4
+
5
+ def set
6
+ puts "Enter video path"
7
+ video_path = gets.chomp
8
+
9
+ puts "Enter music path"
10
+ music_path = gets.chomp
11
+
12
+ puts "Enter picture path"
13
+ picture_path = gets.chomp
14
+
15
+ home = Dir.home
16
+ system "echo '{\"video\":\"#{video_path}\",\"picture\":\"#{picture_path}\"
17
+ ,\"music\":\"#{music_path}\"}' > #{home}/filesorter_settings.json"
18
+ end
19
+
20
+ def get
21
+ settings = "#{Dir.home}/filesorter_settings.json"
22
+ json = File.read(settings)
23
+ JSON.parse(json)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module Filesorter
2
+ VERSION = "0.1.0".freeze
3
+ end
data/test.txt ADDED
File without changes
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: filesorter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Olumuyiwa Osiname
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: '["Filesorter helps move media files to predefined paths"]'
56
+ email:
57
+ - oluosiname@gmail.com
58
+ executables:
59
+ - sort
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".gitignore"
64
+ - ".hound.yml"
65
+ - ".rubocop.yml"
66
+ - ".travis.yml"
67
+ - Gemfile
68
+ - LICENSE.txt
69
+ - README.md
70
+ - Rakefile
71
+ - bin/console
72
+ - bin/setup
73
+ - bin/sort
74
+ - filesorter.gemspec
75
+ - lib/filesorter.rb
76
+ - lib/filesorter/path.rb
77
+ - lib/filesorter/version.rb
78
+ - test.txt
79
+ homepage: https://github.com/oosiname/filesorter
80
+ licenses:
81
+ - MIT
82
+ metadata: {}
83
+ post_install_message:
84
+ rdoc_options: []
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ requirements: []
98
+ rubyforge_project:
99
+ rubygems_version: 2.4.6
100
+ signing_key:
101
+ specification_version: 4
102
+ summary: '["This installs filesorter on the pc."]'
103
+ test_files: []