gamerom 0.3.0 → 0.4.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
  SHA256:
3
- metadata.gz: 4f51e93d7f99ee967817de3ac803470be484e9223574971e39e594c23e457fed
4
- data.tar.gz: 0cfbfa5e0712c540e2e7e175b274e1d0f4501214f88c68b00833277561e2ae19
3
+ metadata.gz: eca8f221edcd2f3f8e311f084c3c4afbf93f642a7e0d4c4731d0af2f758271b7
4
+ data.tar.gz: 8fb301ca2d507dd9a1000496a7b41a65c5a853a1f29c047525d082eca2ddf548
5
5
  SHA512:
6
- metadata.gz: 835103d42c4c74a0593bfc7b8d2362dd8b95dc04ccfc1fc8d01bad508193ea6aeaac940479e5acc003db52310e5f7e5b9f70239ad5a452ae0a6ccef9dc85d060
7
- data.tar.gz: f1697e783df89bedb5437bcc54473d0fea2074f2b7a5794460ad8a8c5e08d78e449193a77eed645ea48a3f323608f3d81ea843863b0a34ea4a045462805e1471
6
+ metadata.gz: b438895a5ca17cb390bc7f7cc49de3f3b730d2eb2ba5ba0cecf0cc5f075b08f1fa5a2f4332c5407c74878d65bcb8e47d8e7a2bd8d2fd454d1f018c6890c53769
7
+ data.tar.gz: f838766967003016f1830c1ebc80d12540347c3f1e0ed4f7a74df0973afaf0df4a5a1a7c8079f6310949783a0755e5c38ec59568e7cfa1ffad4fe1ebaffe5e35
@@ -10,7 +10,7 @@ jobs:
10
10
  - name: Set up Ruby
11
11
  uses: ruby/setup-ruby@v1
12
12
  with:
13
- ruby-version: 3.0.0
13
+ ruby-version: 3.0.1
14
14
  - name: Run the default task
15
15
  run: |
16
16
  gem install bundler -v 2.2.3
data/.rubocop.yml CHANGED
@@ -1,10 +1,43 @@
1
+ AllCops:
2
+ NewCops: enable
3
+
1
4
  Style/StringLiterals:
2
5
  Enabled: true
3
- EnforcedStyle: double_quotes
6
+ EnforcedStyle: single_quotes
4
7
 
5
8
  Style/StringLiteralsInInterpolation:
6
9
  Enabled: true
7
10
  EnforcedStyle: double_quotes
8
11
 
12
+ Style/TrailingCommaInHashLiteral:
13
+ Enabled: false
14
+
9
15
  Layout/LineLength:
10
- Max: 120
16
+ Max: 150
17
+
18
+ Metrics/MethodLength:
19
+ Max: 500
20
+
21
+ Metrics/ClassLength:
22
+ Max: 500
23
+
24
+ Metrics/BlockLength:
25
+ Max: 100
26
+
27
+ Metrics/AbcSize:
28
+ Enabled: false
29
+
30
+ Metrics/CyclomaticComplexity:
31
+ Enabled: true
32
+ Exclude:
33
+ - 'lib/mechanizeprogress.rb'
34
+
35
+ Metrics/PerceivedComplexity:
36
+ Enabled: true
37
+ Exclude:
38
+ - 'lib/mechanizeprogress.rb'
39
+
40
+ Style/SoleNestedConditional:
41
+ Enabled: true
42
+ Exclude:
43
+ - 'lib/mechanizeprogress.rb'
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-3.0.0
1
+ ruby-3.0.1
data/CHANGELOG.md CHANGED
@@ -6,6 +6,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.4.0] - 2021-05-18
10
+ - Refactor code #2
11
+ - Fix all rubocop errors/warnings
12
+ - Run executable inside container as the same userID/groupID than host user
13
+ - Fix info when game not found
14
+ - Update to ruby version 3.0.1
15
+ - Add `--install` option to search command for installing all games from the search results #3
16
+
9
17
  ## [0.3.0] - 2021-05-14
10
18
  - Use progress bar on the update database commands
11
19
  - Add romnation repo
@@ -23,7 +31,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
23
31
  ## [0.1.0] - 2021-05-07
24
32
  - Initial release
25
33
 
26
- [Unreleased]: https://github.com/lucasmundim/gamerom/compare/v0.3.0...HEAD
34
+ [Unreleased]: https://github.com/lucasmundim/gamerom/compare/v0.4.0...HEAD
35
+ [0.4.0]: https://github.com/lucasmundim/gamerom/compare/v0.3.0...v0.4.0
27
36
  [0.3.0]: https://github.com/lucasmundim/gamerom/compare/v0.2.2...v0.3.0
28
37
  [0.2.2]: https://github.com/lucasmundim/gamerom/compare/v0.2.1...v0.2.2
29
38
  [0.2.1]: https://github.com/lucasmundim/gamerom/compare/v0.2.0...v0.2.1
data/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM ruby:3.0.0-alpine as build
1
+ FROM ruby:3.0.1-alpine as build
2
2
 
3
3
  RUN apk add --no-cache --virtual .build-deps \
4
4
  build-base \
@@ -7,10 +7,15 @@ RUN apk add --no-cache --virtual .build-deps \
7
7
  # throw errors if Gemfile has been modified since Gemfile.lock
8
8
  RUN bundle config --global frozen 1
9
9
 
10
+ RUN mkdir -p /bundle && chmod 777 /bundle
11
+
12
+ ENV GEM_HOME="/bundle"
13
+ ENV PATH $GEM_HOME/bin:$GEM_HOME/gems/bin:$PATH
14
+
10
15
  RUN mkdir -p /app
11
16
  WORKDIR /app
12
17
 
13
18
  COPY . .
14
19
  RUN bundle install
15
20
 
16
- ENTRYPOINT ["bundle", "exec", "./exe/gamerom"]
21
+ ENTRYPOINT ["/app/entrypoint.sh"]
data/Gemfile CHANGED
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- source "https://rubygems.org"
3
+ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in gamerom.gemspec
6
6
  gemspec
7
7
 
8
- gem "rake", "~> 13.0"
8
+ gem 'rake', '~> 13.0'
9
9
 
10
- gem "rspec", "~> 3.0"
10
+ gem 'rspec', '~> 3.0'
11
11
 
12
- gem "rubocop", "~> 0.80"
12
+ gem 'rubocop', '~> 0.80'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gamerom (0.3.0)
4
+ gamerom (0.4.0)
5
5
  mechanize (~> 2.8.0)
6
6
  mechanize-progressbar (~> 0.2.0)
7
7
  nokogiri (~> 1.11.3)
@@ -43,9 +43,9 @@ GEM
43
43
  net-http-persistent (4.0.1)
44
44
  connection_pool (~> 2.2)
45
45
  netrc (0.11.0)
46
- nokogiri (1.11.3-x86_64-darwin)
46
+ nokogiri (1.11.4-x86_64-darwin)
47
47
  racc (~> 1.4)
48
- nokogiri (1.11.3-x86_64-linux)
48
+ nokogiri (1.11.4-x86_64-linux)
49
49
  racc (~> 1.4)
50
50
  parallel (1.20.1)
51
51
  parser (3.0.1.0)
@@ -107,4 +107,4 @@ DEPENDENCIES
107
107
  rubocop (~> 0.80)
108
108
 
109
109
  BUNDLED WITH
110
- 2.2.3
110
+ 2.2.15
data/Makefile CHANGED
@@ -1,4 +1,4 @@
1
- VERSION:=$(shell cat lib/gamerom/version.rb |grep VERSION|cut -d\" -f2)
1
+ VERSION:=$(shell cat lib/gamerom/version.rb |grep VERSION|cut -d\' -f2)
2
2
  IMAGE=lucasmundim/gamerom:${VERSION}
3
3
  DOCKER_OPTS=--rm -it -v ${HOME}/.gamerom:/root/.gamerom ${IMAGE}
4
4
  LOCAL_VOLUME_OPTS=-v ${CURDIR}:/app
data/README.md CHANGED
@@ -15,7 +15,7 @@ It currently supports the following repositories:
15
15
  Add this to your .bashrc, .bash_aliases, etc:
16
16
 
17
17
  ```
18
- alias gamerom='docker run --rm -it -v ~/.gamerom:/root/.gamerom docker.io/lucasmundim/gamerom:0.3.0'
18
+ alias gamerom="docker run -e UID=$(id -u) -e GROUP_ID=$(id -g) --rm -it -v ~/.gamerom:/home/runuser/.gamerom docker.io/lucasmundim/gamerom:0.4.0"
19
19
  ```
20
20
 
21
21
  Use it as:
@@ -585,7 +585,7 @@ Print program version
585
585
 
586
586
  ```
587
587
  $ gamerom version
588
- 0.3.0
588
+ 0.4.0
589
589
  ```
590
590
 
591
591
  ## Development
data/Rakefile CHANGED
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/gem_tasks"
4
- require "rspec/core/rake_task"
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
5
 
6
6
  RSpec::Core::RakeTask.new(:spec)
7
7
 
8
- require "rubocop/rake_task"
8
+ require 'rubocop/rake_task'
9
9
 
10
10
  RuboCop::RakeTask.new
11
11
 
data/bin/console CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require "bundler/setup"
5
- require "gamerom"
4
+ require 'bundler/setup'
5
+ require 'gamerom'
6
6
 
7
7
  # You can add fixtures and/or initialization code here to make experimenting
8
8
  # with your gem easier. You can also use a different console, if you like.
@@ -11,5 +11,5 @@ require "gamerom"
11
11
  # require "pry"
12
12
  # Pry.start
13
13
 
14
- require "irb"
14
+ require 'irb'
15
15
  IRB.start(__FILE__)
data/entrypoint.sh ADDED
@@ -0,0 +1,6 @@
1
+ #!/bin/sh
2
+ delgroup dialout
3
+ addgroup -g "$GROUP_ID" rungroup
4
+ adduser -u $UID -D -s /bin/sh -G rungroup runuser
5
+ command="cd /app && GEM_HOME="/bundle" PATH=$GEM_HOME/bin:$GEM_HOME/gems/bin:$PATH bundle exec ./exe/gamerom ${@}"
6
+ su - runuser -c "$command"
data/exe/gamerom CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "gamerom"
4
+ require 'gamerom'
4
5
 
5
6
  Gamerom::Cli.start(ARGV)
data/gamerom.gemspec CHANGED
@@ -1,40 +1,40 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "lib/gamerom/version"
3
+ require_relative 'lib/gamerom/version'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.name = "gamerom"
6
+ spec.name = 'gamerom'
7
7
  spec.version = Gamerom::VERSION
8
- spec.authors = ["Lucas Mundim"]
9
- spec.email = ["lucas.mundim@gmail.com"]
8
+ spec.authors = ['Lucas Mundim']
9
+ spec.email = ['lucas.mundim@gmail.com']
10
10
 
11
- spec.summary = "The Video Game ROM downloader"
12
- spec.description = "A command-line installer for game ROMs from many repositories."
13
- spec.homepage = "https://github.com/lucasmundim/gamerom"
14
- spec.license = "MIT"
15
- spec.required_ruby_version = Gem::Requirement.new(">= 3.0.0")
11
+ spec.summary = 'The Video Game ROM downloader'
12
+ spec.description = 'A command-line installer for game ROMs from many repositories.'
13
+ spec.homepage = 'https://github.com/lucasmundim/gamerom'
14
+ spec.license = 'MIT'
15
+ spec.required_ruby_version = Gem::Requirement.new('>= 3.0.1')
16
16
 
17
- spec.metadata["allowed_push_host"] = "https://rubygems.org"
17
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
18
18
 
19
- spec.metadata["homepage_uri"] = spec.homepage
20
- spec.metadata["source_code_uri"] = spec.homepage
21
- spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/CHANGELOG.md"
19
+ spec.metadata['homepage_uri'] = spec.homepage
20
+ spec.metadata['source_code_uri'] = spec.homepage
21
+ spec.metadata['changelog_uri'] = "#{spec.homepage}/blob/master/CHANGELOG.md"
22
22
 
23
23
  # Specify which files should be added to the gem when it is released.
24
24
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
25
25
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
26
26
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
27
27
  end
28
- spec.bindir = "exe"
28
+ spec.bindir = 'exe'
29
29
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
30
- spec.require_paths = ["lib"]
31
-
32
- spec.add_runtime_dependency "mechanize", "~> 2.8.0"
33
- spec.add_runtime_dependency "mechanize-progressbar", "~> 0.2.0"
34
- spec.add_runtime_dependency "nokogiri", "~> 1.11.3"
35
- spec.add_runtime_dependency "progressbar", "~> 0.9.0"
36
- spec.add_runtime_dependency "rest-client", "~> 2.1.0"
37
- spec.add_runtime_dependency "thor", "~> 1.1.0"
30
+ spec.require_paths = ['lib']
31
+
32
+ spec.add_runtime_dependency 'mechanize', '~> 2.8.0'
33
+ spec.add_runtime_dependency 'mechanize-progressbar', '~> 0.2.0'
34
+ spec.add_runtime_dependency 'nokogiri', '~> 1.11.3'
35
+ spec.add_runtime_dependency 'progressbar', '~> 0.9.0'
36
+ spec.add_runtime_dependency 'rest-client', '~> 2.1.0'
37
+ spec.add_runtime_dependency 'thor', '~> 1.1.0'
38
38
 
39
39
  # For more information and examples about making a new gem, checkout our
40
40
  # guide at: https://bundler.io/guides/creating_gem.html
data/lib/gamerom.rb CHANGED
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "gamerom/config"
4
- require_relative "gamerom/game"
5
- require_relative "gamerom/game_info"
6
- require_relative "gamerom/repo"
7
- require_relative "gamerom/cli"
8
- require_relative "gamerom/version"
3
+ require_relative 'gamerom/config'
4
+ require_relative 'gamerom/game'
5
+ require_relative 'gamerom/game_info'
6
+ require_relative 'gamerom/repo'
7
+ require_relative 'gamerom/cli'
8
+ require_relative 'gamerom/version'
9
9
 
10
10
  module Gamerom
11
11
  class Error < StandardError; end
data/lib/gamerom/cli.rb CHANGED
@@ -3,8 +3,9 @@
3
3
  require 'thor'
4
4
 
5
5
  module Gamerom
6
+ # Cli - Main cli commands
6
7
  class Cli < Thor
7
- class_option :verbose, :aliases => ['-v'], :type => :boolean, default: false, desc: "Show verbose backtrace"
8
+ class_option :verbose, aliases: ['-v'], type: :boolean, default: false, desc: 'Show verbose backtrace'
8
9
 
9
10
  def self.exit_on_failure?
10
11
  true
@@ -22,26 +23,27 @@ module Gamerom
22
23
  end
23
24
 
24
25
  desc 'info GAME_IDENTIFIER', 'Info for game GAME_IDENTIFIER (id/name)'
25
- option :repo, :aliases => ['-r'], type: :string, required: true, desc: "Which repo to use", enum: Gamerom::Repo.list.map(&:to_s)
26
- option :platform, :aliases => ['-p'], type: :string, required: true, desc: "Which platform to use"
26
+ option :repo, aliases: ['-r'], type: :string, required: true, desc: 'Which repo to use', enum: Gamerom::Repo.list.map(&:to_s)
27
+ option :platform, aliases: ['-p'], type: :string, required: true, desc: 'Which platform to use'
27
28
  def info(game_identifier)
28
29
  repo = Repo.new(options[:repo])
29
30
  validate_platform repo, options[:platform]
30
31
  puts "showing info for game #{game_identifier} on #{options[:platform]} platform on #{options[:repo]} repo..."
31
32
  game = repo.find(options[:platform], game_identifier)
32
- if game.nil?
33
+ if !game.nil?
34
+ puts game
35
+ puts game.filenames if game.installed?
36
+ else
33
37
  shell.say "Game #{game_identifier} not found", :red
34
38
  end
35
- puts game
36
- puts game.filenames if game.installed?
37
- rescue => e
39
+ rescue StandardError => e
38
40
  render_error e, options
39
41
  exit 1
40
42
  end
41
43
 
42
44
  desc 'install GAME_IDENTIFIER', 'Install game GAME_IDENTIFIER (id/name)'
43
- option :repo, :aliases => ['-r'], type: :string, required: true, desc: "Which repo to use", enum: Gamerom::Repo.list.map(&:to_s)
44
- option :platform, :aliases => ['-p'], type: :string, required: true, desc: "Which platform to use"
45
+ option :repo, aliases: ['-r'], type: :string, required: true, desc: 'Which repo to use', enum: Gamerom::Repo.list.map(&:to_s)
46
+ option :platform, aliases: ['-p'], type: :string, required: true, desc: 'Which platform to use'
45
47
  def install(game_identifier)
46
48
  repo = Repo.new(options[:repo])
47
49
  validate_platform repo, options[:platform]
@@ -52,20 +54,20 @@ module Gamerom
52
54
  end
53
55
  puts "installing game #{game.id} - #{game.name} - #{game.region} on #{options[:platform]} platform on #{options[:repo]} repo..."
54
56
  if game.installed?
55
- shell.say "Game already installed", :yellow
57
+ shell.say 'Game already installed', :yellow
56
58
  return
57
59
  end
58
60
  game.install
59
- shell.say "Game installed", :green
60
- rescue => e
61
+ shell.say 'Game installed', :green
62
+ rescue StandardError => e
61
63
  render_error e, options
62
64
  exit 1
63
65
  end
64
66
 
65
67
  desc 'install_all', 'Install all games'
66
- option :repo, :aliases => ['-r'], type: :string, required: true, desc: "Which repo to use", enum: Gamerom::Repo.list.map(&:to_s)
67
- option :platform, :aliases => ['-p'], type: :string, required: true, desc: "Which platform to use"
68
- option :region, :aliases => ['-g'], type: :string, required: false, desc: "Only from specified region"
68
+ option :repo, aliases: ['-r'], type: :string, required: true, desc: 'Which repo to use', enum: Gamerom::Repo.list.map(&:to_s)
69
+ option :platform, aliases: ['-p'], type: :string, required: true, desc: 'Which platform to use'
70
+ option :region, aliases: ['-g'], type: :string, required: false, desc: 'Only from specified region'
69
71
  def install_all
70
72
  repo = Repo.new(options[:repo])
71
73
  validate_platform repo, options[:platform]
@@ -73,40 +75,40 @@ module Gamerom
73
75
  games.each do |game|
74
76
  install(game.id) unless game.installed?
75
77
  end
76
- rescue => e
78
+ rescue StandardError => e
77
79
  render_error e, options
78
80
  exit 1
79
81
  end
80
82
 
81
83
  desc 'list', 'List available games'
82
- option :repo, :aliases => ['-r'], type: :string, required: true, desc: "Which repo to use", enum: Gamerom::Repo.list.map(&:to_s)
83
- option :platform, :aliases => ['-p'], type: :string, required: true, desc: "Which platform to use"
84
- option :region, :aliases => ['-g'], type: :string, required: false, desc: "Only from specified region"
84
+ option :repo, aliases: ['-r'], type: :string, required: true, desc: 'Which repo to use', enum: Gamerom::Repo.list.map(&:to_s)
85
+ option :platform, aliases: ['-p'], type: :string, required: true, desc: 'Which platform to use'
86
+ option :region, aliases: ['-g'], type: :string, required: false, desc: 'Only from specified region'
85
87
  def list
86
88
  repo = Repo.new(options[:repo])
87
89
  validate_platform repo, options[:platform]
88
90
  puts "listing available games for #{options[:platform]} platform on #{options[:repo]} repo..."
89
91
  games = repo.games options[:platform], region: options[:region]
90
92
  print_game_table(games)
91
- rescue => e
93
+ rescue StandardError => e
92
94
  render_error e, options
93
95
  exit 1
94
96
  end
95
97
 
96
98
  desc 'platforms', 'List available platforms'
97
- option :repo, :aliases => ['-r'], type: :string, required: true, desc: "Which repo to use", enum: Gamerom::Repo.list.map(&:to_s)
99
+ option :repo, aliases: ['-r'], type: :string, required: true, desc: 'Which repo to use', enum: Gamerom::Repo.list.map(&:to_s)
98
100
  def platforms
99
101
  puts "listing available platforms for #{options[:repo]} repo..."
100
102
  platforms = { platforms: Repo.new(options[:repo]).platforms }
101
103
  puts platforms.to_yaml
102
- rescue => e
104
+ rescue StandardError => e
103
105
  render_error e, options
104
106
  exit 1
105
107
  end
106
108
 
107
109
  desc 'recover', 'Try to recover state from already downloaded roms'
108
- option :repo, :aliases => ['-r'], type: :string, required: true, desc: "Which repo to use", enum: Gamerom::Repo.list.map(&:to_s)
109
- option :platform, :aliases => ['-p'], type: :string, required: true, desc: "Which platform to use"
110
+ option :repo, aliases: ['-r'], type: :string, required: true, desc: 'Which repo to use', enum: Gamerom::Repo.list.map(&:to_s)
111
+ option :platform, aliases: ['-p'], type: :string, required: true, desc: 'Which platform to use'
110
112
  def recover
111
113
  repo = Repo.new(options[:repo])
112
114
  validate_platform repo, options[:platform]
@@ -116,10 +118,9 @@ module Gamerom
116
118
  games.each do |game|
117
119
  filename = nil
118
120
  basename = "#{Gamerom::GAME_DIR}/#{repo.name}/#{options[:platform]}/#{game[:region]}/#{game[:name]}"
119
- ['zip', '7z', 'rar'].each do |ext|
120
- if File.exists? "#{basename}.#{ext}"
121
- filename = "#{basename}.#{ext}"
122
- end
121
+ %w[zip 7z rar].each do |ext|
122
+ fullname = "#{basename}.#{ext}"
123
+ filename = fullname if File.exist? fullname
123
124
  end
124
125
 
125
126
  if filename
@@ -129,100 +130,107 @@ module Gamerom
129
130
  games_not_found << game[:name]
130
131
  end
131
132
  end
132
- if games_not_found.count > 0
133
- puts "Games not found:"
133
+ if games_not_found.count.positive?
134
+ puts 'Games not found:'
134
135
  puts games_not_found
135
136
  end
136
- rescue => e
137
+ rescue StandardError => e
137
138
  puts e.message
138
139
  exit 1
139
140
  end
140
141
 
141
142
  desc 'regions', 'List available regions'
142
- option :repo, :aliases => ['-r'], type: :string, required: true, desc: "Which repo to use", enum: Gamerom::Repo.list.map(&:to_s)
143
- option :platform, :aliases => ['-p'], type: :string, required: true, desc: "Which platform to use"
143
+ option :repo, aliases: ['-r'], type: :string, required: true, desc: 'Which repo to use', enum: Gamerom::Repo.list.map(&:to_s)
144
+ option :platform, aliases: ['-p'], type: :string, required: true, desc: 'Which platform to use'
144
145
  def regions
145
146
  repo = Repo.new(options[:repo])
146
147
  validate_platform repo, options[:platform]
147
148
  puts "listing available regions for #{options[:platform]} platform on #{options[:repo]} repo..."
148
149
  puts repo.regions options[:platform]
149
- rescue => e
150
+ rescue StandardError => e
150
151
  render_error e, options
151
152
  exit 1
152
153
  end
153
154
 
154
155
  desc 'repo', 'List available repo'
155
156
  def repo
156
- puts "listing available repo..."
157
+ puts 'listing available repo...'
157
158
  puts Repo.list
158
- rescue => e
159
+ rescue StandardError => e
159
160
  render_error e, options
160
161
  exit 1
161
162
  end
162
163
 
163
164
  desc 'search KEYWORD', 'Search games by KEYWORD'
164
- option :repo, :aliases => ['-r'], type: :string, required: true, desc: "Which repo to use", enum: Gamerom::Repo.list.map(&:to_s)
165
- option :platform, :aliases => ['-p'], type: :string, required: true, desc: "Which platform to use"
166
- option :region, :aliases => ['-g'], type: :string, required: false, desc: "Only from specified region"
165
+ option :repo, aliases: ['-r'], type: :string, required: true, desc: 'Which repo to use', enum: Gamerom::Repo.list.map(&:to_s)
166
+ option :platform, aliases: ['-p'], type: :string, required: true, desc: 'Which platform to use'
167
+ option :region, aliases: ['-g'], type: :string, required: false, desc: 'Only from specified region'
168
+ option :install, aliases: ['-I'], type: :boolean, required: false, desc: 'Install search results'
167
169
  def search(keyword)
168
170
  repo = Repo.new(options[:repo])
169
171
  validate_platform repo, options[:platform]
170
172
  puts "searching available games for #{options[:platform]} platform on #{options[:repo]} repo..."
171
173
  games = repo.games options[:platform], region: options[:region], keyword: keyword
172
- print_game_table(games)
173
- rescue => e
174
+ if options[:install]
175
+ games.each do |game|
176
+ install(game.id) unless game.installed?
177
+ end
178
+ else
179
+ print_game_table(games)
180
+ end
181
+ rescue StandardError => e
174
182
  render_error e, options
175
183
  exit 1
176
184
  end
177
185
 
178
186
  desc 'stats', 'Show platform stats'
179
- option :repo, :aliases => ['-r'], type: :string, required: true, desc: "Which repo to use", enum: Gamerom::Repo.list.map(&:to_s)
180
- option :platform, :aliases => ['-p'], type: :string, required: true, desc: "Which platform to use"
187
+ option :repo, aliases: ['-r'], type: :string, required: true, desc: 'Which repo to use', enum: Gamerom::Repo.list.map(&:to_s)
188
+ option :platform, aliases: ['-p'], type: :string, required: true, desc: 'Which platform to use'
181
189
  def stats
182
190
  repo = Repo.new(options[:repo])
183
191
  validate_platform repo, options[:platform]
184
192
  puts "stats for #{options[:platform]} platform on #{options[:repo]} repo..."
185
193
  games = repo.games options[:platform]
186
194
  total = games.count
187
- installed = games.select { |game| game.installed? }.count
195
+ installed = games.select(&:installed?).count
188
196
  size = 0
189
- if File.exists? "#{Gamerom::GAME_DIR}/#{repo.name}/#{options[:platform]}"
197
+ if File.exist? "#{Gamerom::GAME_DIR}/#{repo.name}/#{options[:platform]}"
190
198
  size = `du -hs "#{Gamerom::GAME_DIR}/#{repo.name}/#{options[:platform]}/"|awk '{ print $1 }'`
191
199
  end
192
200
  puts " All: #{installed}/#{total} - size: #{size}"
193
201
  repo.regions(options[:platform]).each do |region|
194
202
  games = repo.games(options[:platform], region: region)
195
203
  total = games.count
196
- installed = games.select { |game| game.installed? }.count
204
+ installed = games.select(&:installed?).count
197
205
  size = 0
198
- if File.exists? "#{Gamerom::GAME_DIR}/#{repo.name}/#{options[:platform]}/#{region}"
206
+ if File.exist? "#{Gamerom::GAME_DIR}/#{repo.name}/#{options[:platform]}/#{region}"
199
207
  size = `du -hs "#{Gamerom::GAME_DIR}/#{repo.name}/#{options[:platform]}/#{region}/"|awk '{ print $1 }'`
200
208
  end
201
209
  puts " #{region}: #{installed}/#{total} - size: #{size}"
202
210
  end
203
211
  puts
204
- rescue => e
212
+ rescue StandardError => e
205
213
  render_error e, options
206
214
  exit 1
207
215
  end
208
216
 
209
217
  desc 'stats_all', 'Show stats for all platforms'
210
- option :repo, :aliases => ['-r'], type: :string, required: true, desc: "Which repo to use", enum: Gamerom::Repo.list.map(&:to_s)
218
+ option :repo, aliases: ['-r'], type: :string, required: true, desc: 'Which repo to use', enum: Gamerom::Repo.list.map(&:to_s)
211
219
  def stats_all
212
220
  repo = Repo.new(options[:repo])
213
- repo.platforms.keys.each do |platform|
221
+ repo.platforms.each_key do |platform|
214
222
  a = Gamerom::Cli.new
215
223
  a.options = { platform: platform, repo: options[:repo] }
216
224
  a.stats
217
225
  end
218
- rescue => e
226
+ rescue StandardError => e
219
227
  render_error e, options
220
228
  exit 1
221
229
  end
222
230
 
223
231
  desc 'uninstall GAME_IDENTIFIER', 'Uninstall game GAME_IDENTIFIER (id/name)'
224
- option :repo, :aliases => ['-r'], type: :string, required: true, desc: "Which repo to use", enum: Gamerom::Repo.list.map(&:to_s)
225
- option :platform, :aliases => ['-p'], type: :string, required: true, desc: "Which platform to use"
232
+ option :repo, aliases: ['-r'], type: :string, required: true, desc: 'Which repo to use', enum: Gamerom::Repo.list.map(&:to_s)
233
+ option :platform, aliases: ['-p'], type: :string, required: true, desc: 'Which platform to use'
226
234
  def uninstall(game_identifier)
227
235
  repo = Repo.new(options[:repo])
228
236
  validate_platform repo, options[:platform]
@@ -232,21 +240,21 @@ module Gamerom
232
240
  return
233
241
  end
234
242
  puts "uninstalling game #{game.id} - #{game.name} - #{game.region} on #{options[:platform]} platform..."
235
- if !game.installed?
236
- shell.say "Game is not installed", :yellow
243
+ unless game.installed?
244
+ shell.say 'Game is not installed', :yellow
237
245
  return
238
246
  end
239
247
  game.uninstall
240
- shell.say "Game uninstalled", :green
241
- rescue => e
248
+ shell.say 'Game uninstalled', :green
249
+ rescue StandardError => e
242
250
  render_error e, options
243
251
  exit 1
244
252
  end
245
253
 
246
254
  desc 'uninstall_all', 'Uninstall all games'
247
- option :repo, :aliases => ['-r'], type: :string, required: true, desc: "Which repo to use", enum: Gamerom::Repo.list.map(&:to_s)
248
- option :platform, :aliases => ['-p'], type: :string, required: true, desc: "Which platform to use"
249
- option :region, :aliases => ['-g'], type: :string, required: false, desc: "Only from specified region"
255
+ option :repo, aliases: ['-r'], type: :string, required: true, desc: 'Which repo to use', enum: Gamerom::Repo.list.map(&:to_s)
256
+ option :platform, aliases: ['-p'], type: :string, required: true, desc: 'Which platform to use'
257
+ option :region, aliases: ['-g'], type: :string, required: false, desc: 'Only from specified region'
250
258
  def uninstall_all
251
259
  repo = Repo.new(options[:repo])
252
260
  validate_platform repo, options[:platform]
@@ -254,36 +262,36 @@ module Gamerom
254
262
  games.each do |game|
255
263
  uninstall(game.id) if game.installed?
256
264
  end
257
- rescue => e
265
+ rescue StandardError => e
258
266
  render_error e, options
259
267
  exit 1
260
268
  end
261
269
 
262
270
  desc 'update_all_databases', 'Update all local databases'
263
- option :repo, :aliases => ['-r'], type: :string, required: true, desc: "Which repo to use", enum: Gamerom::Repo.list.map(&:to_s)
271
+ option :repo, aliases: ['-r'], type: :string, required: true, desc: 'Which repo to use', enum: Gamerom::Repo.list.map(&:to_s)
264
272
  def update_all_databases
265
273
  puts "updating all databases on #{options[:repo]} repo..."
266
274
  repo = Repo.new(options[:repo])
267
- repo.platforms.keys.each do |platform|
275
+ repo.platforms.each_key do |platform|
268
276
  repo = Repo.new(options[:repo])
269
277
  repo.update_database platform
270
278
  end
271
279
  shell.say 'All game databases updated', :green
272
- rescue => e
280
+ rescue StandardError => e
273
281
  render_error e, options
274
282
  exit 1
275
283
  end
276
284
 
277
285
  desc 'update_database', 'Update local database'
278
- option :repo, :aliases => ['-r'], type: :string, required: true, desc: "Which repo to use", enum: Gamerom::Repo.list.map(&:to_s)
279
- option :platform, :aliases => ['-p'], type: :string, required: true, desc: "Which platform to use"
286
+ option :repo, aliases: ['-r'], type: :string, required: true, desc: 'Which repo to use', enum: Gamerom::Repo.list.map(&:to_s)
287
+ option :platform, aliases: ['-p'], type: :string, required: true, desc: 'Which platform to use'
280
288
  def update_database
281
289
  repo = Repo.new(options[:repo])
282
290
  validate_platform repo, options[:platform]
283
291
  puts "updating #{options[:platform]} platform on #{options[:repo]} repo..."
284
292
  repo.update_database options[:platform]
285
293
  shell.say "Game database updated for platform #{options[:platform]} on #{options[:repo]} repo", :green
286
- rescue => e
294
+ rescue StandardError => e
287
295
  render_error e, options
288
296
  exit 1
289
297
  end
@@ -294,6 +302,7 @@ module Gamerom
294
302
  end
295
303
 
296
304
  private
305
+
297
306
  def print_game_table(games)
298
307
  results = []
299
308
 
@@ -303,21 +312,23 @@ module Gamerom
303
312
  game.name,
304
313
  game.region,
305
314
  game.installed? ? shell.set_color('installed', :green) : '-',
306
- game.respond_to?(:tags) ? game.tags.join(", ") : '-'
315
+ game.respond_to?(:tags) ? game.tags.join(', ') : '-'
307
316
  ]
308
317
  end
309
318
  results.sort_by! { |columns| columns[1] }
310
- results.unshift ['ID', 'NAME', 'REGION', 'INSTALLED', 'TAGS']
319
+ results.unshift %w[ID NAME REGION INSTALLED TAGS]
311
320
  shell.print_table(results)
312
321
  end
313
322
 
314
- def render_error exception, options
323
+ def render_error(exception, options)
315
324
  shell.say exception.message, :red
316
325
  shell.say exception.full_message.force_encoding('utf-8'), :red if options[:verbose]
317
326
  end
318
327
 
319
328
  def validate_platform(repo, platform)
320
- raise "Expected '--platform' to be one of #{repo.platforms.keys.join(', ')}; got #{platform}" if !repo.platforms.keys.include? options[:platform]
329
+ return if repo.platforms.keys.include? options[:platform]
330
+
331
+ raise "Expected '--platform' to be one of #{repo.platforms.keys.join(", ")}; got #{platform}"
321
332
  end
322
333
  end
323
334
  end