diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..c818195 --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,36 @@ +## +# Plugins +require: + - standard + +## +# Defaults: standard-rb +inherit_gem: + standard: config/base.yml + +## +# All cops +AllCops: + TargetRubyVersion: 3.2 + Include: + - lib/*.rb + - lib/**/*.rb + - test/*.rb + - test/**/*.rb + - share/bsdcontrol.rb/examples/*.rb + +## +# Enabled +Style/FrozenStringLiteralComment: + Enabled: true + +## +# Disabled +Layout/ArgumentAlignment: + Enabled: false +Layout/MultilineMethodCallIndentation: + Enabled: false +Layout/EmptyLineBetweenDefs: + Enabled: false +Style/TrivialAccessors: + Enabled: false diff --git a/Gemfile b/Gemfile index 3be9c3c..5f10ba8 100644 --- a/Gemfile +++ b/Gemfile @@ -1,2 +1,4 @@ -source "https://rubygems.org" +# frozen_string_literal: true + +source 'https://rubygems.org' gemspec diff --git a/Gemfile.lock b/Gemfile.lock index cdec2be..fe3df05 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -6,13 +6,55 @@ PATH GEM remote: https://rubygems.org/ specs: + ast (2.4.2) + json (2.7.2) + language_server-protocol (3.17.0.3) + lint_roller (1.1.0) + parallel (1.24.0) + parser (3.3.1.0) + ast (~> 2.4.1) + racc power_assert (2.0.3) + racc (1.7.3) + rainbow (3.1.1) rake (13.1.0) rake-compiler (1.2.7) rake + regexp_parser (2.9.1) + rexml (3.2.6) + rubocop (1.62.1) + json (~> 2.3) + language_server-protocol (>= 3.17.0) + parallel (~> 1.10) + parser (>= 3.3.0.2) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.31.1, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.31.3) + parser (>= 3.3.1.0) + rubocop-performance (1.20.2) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.30.0, < 2.0) + ruby-progressbar (1.13.0) + standard (1.35.1) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.62.0) + standard-custom (~> 1.0.0) + standard-performance (~> 1.3) + standard-custom (1.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.50) + standard-performance (1.3.1) + lint_roller (~> 1.1) + rubocop-performance (~> 1.20.2) test-cmd.rb (0.8.0) test-unit (3.6.2) power_assert + unicode-display_width (2.5.0) PLATFORMS amd64-freebsd-14 @@ -21,6 +63,7 @@ PLATFORMS DEPENDENCIES bsdcontrol.rb! rake-compiler (~> 1.2) + standard (~> 1.35) test-cmd.rb (~> 0.8) test-unit (~> 3.6) diff --git a/Rakefile.rb b/Rakefile.rb index 842d2ea..5a8494f 100644 --- a/Rakefile.rb +++ b/Rakefile.rb @@ -1,23 +1,25 @@ -require "bundler/setup" -require "rake/extensiontask" -Rake::ExtensionTask.new("bsdcontrol.rb") +# frozen_string_literal: true + +require 'bundler/setup' +require 'rake/extensiontask' +Rake::ExtensionTask.new('bsdcontrol.rb') task default: %w[clobber compile test] namespace :clang do - desc "Run clang-format" + desc 'Run clang-format' task :format do - sh "clang-format -style=file:.clang-format -i ext/bsdcontrol.rb/*.c" + sh 'clang-format -style=file:.clang-format -i ext/bsdcontrol.rb/*.c' end end namespace :test do - desc "Run unprivileged tests" + desc 'Run unprivileged tests' task :unprivileged do - sh "./bin/run-unprivileged-tests" + sh './bin/run-unprivileged-tests' end - desc "Run superuser tests" + desc 'Run superuser tests' task :superuser do - sh "./bin/run-superuser-tests" + sh './bin/run-superuser-tests' end end diff --git a/bsdcontrol.rb.gemspec b/bsdcontrol.rb.gemspec index 51afbe6..455d3f5 100644 --- a/bsdcontrol.rb.gemspec +++ b/bsdcontrol.rb.gemspec @@ -1,17 +1,21 @@ -require_relative "lib/bsd/control/version" +# frozen_string_literal: true + +require 'English' +require_relative 'lib/bsd/control/version' Gem::Specification.new do |gem| - gem.name = "bsdcontrol.rb" - gem.authors = ["0x1eef"] - gem.email = ["0x1eef@protonmail.com"] - gem.homepage = "https://git.hardenedbsd.org/0x1eef/bsdcontrol.rb#readme" + gem.name = 'bsdcontrol.rb' + gem.authors = ['0x1eef'] + gem.email = ['0x1eef@protonmail.com'] + gem.homepage = 'https://git.hardenedbsd.org/0x1eef/bsdcontrol.rb#readme' gem.version = BSD::Control::VERSION - gem.licenses = ["0BSD"] - gem.files = `git ls-files`.split($/) - gem.require_paths = ["lib"] + gem.licenses = ['0BSD'] + gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR) + gem.require_paths = ['lib'] gem.extensions = %w[ext/bsdcontrol.rb/extconf.rb] - gem.summary = "Ruby bindings for libhbsdcontrol" + gem.summary = 'Ruby bindings for libhbsdcontrol' gem.description = gem.summary - gem.add_development_dependency "rake-compiler", "~> 1.2" - gem.add_development_dependency "test-unit", "~> 3.6" - gem.add_development_dependency "test-cmd.rb", "~> 0.8" + gem.add_development_dependency 'rake-compiler', '~> 1.2' + gem.add_development_dependency 'standard', '~> 1.35' + gem.add_development_dependency 'test-cmd.rb', '~> 0.8' + gem.add_development_dependency 'test-unit', '~> 3.6' end diff --git a/lib/bsd/control.rb b/lib/bsd/control.rb index eb57d44..fa03b44 100644 --- a/lib/bsd/control.rb +++ b/lib/bsd/control.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module BSD::Control require_relative "control/context" require_relative "control/feature" @@ -40,6 +42,6 @@ module BSD::Control # Returns an instance of {BSD::Control::Feature BSD::Control::Feature}. def self.feature(name) feature = available_features.find { _1.name == name.to_s } - feature ? feature : raise(Error, "feature '#{name}' wasn't found") + feature || raise(Error, "feature '#{name}' wasn't found") end end diff --git a/lib/bsd/control/context.rb b/lib/bsd/control/context.rb index 982cbb4..008a3e6 100644 --- a/lib/bsd/control/context.rb +++ b/lib/bsd/control/context.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module BSD::Control ## # The {BSD::Control::Context BSD::Control::Context} class encapsulates diff --git a/lib/bsd/control/feature.rb b/lib/bsd/control/feature.rb index 39479cc..73f7287 100644 --- a/lib/bsd/control/feature.rb +++ b/lib/bsd/control/feature.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module BSD::Control class Feature < Struct.new(:name, :context) ## diff --git a/lib/bsd/control/version.rb b/lib/bsd/control/version.rb index 43b92ae..3b228c9 100644 --- a/lib/bsd/control/version.rb +++ b/lib/bsd/control/version.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module BSD module Control VERSION = "0.1.1" diff --git a/lib/bsdcontrol.rb b/lib/bsdcontrol.rb index f7cd984..09721dd 100644 --- a/lib/bsdcontrol.rb +++ b/lib/bsdcontrol.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module BSD require_relative "bsd/control" require_relative "bsdcontrol.rb.so" diff --git a/share/bsdcontrol.rb/examples/1_available_features.rb b/share/bsdcontrol.rb/examples/1_available_features.rb old mode 100644 new mode 100755 index 9bbc2d5..c3b690d --- a/share/bsdcontrol.rb/examples/1_available_features.rb +++ b/share/bsdcontrol.rb/examples/1_available_features.rb @@ -1,4 +1,6 @@ #!/usr/bin/env ruby +# frozen_string_literal: true + # Required privileges: user, superuser require "bsdcontrol" BSD::Control diff --git a/test/readme_examples_test.rb b/test/readme_examples_test.rb index 7720d46..06d1645 100644 --- a/test/readme_examples_test.rb +++ b/test/readme_examples_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require_relative "setup" class ReadmeExamplesTest < Test::Unit::TestCase @@ -5,14 +7,14 @@ class ReadmeExamplesTest < Test::Unit::TestCase require "test/cmd" def test_available_features - result = cmd(RbConfig.ruby, readme_example('1_available_features.rb')) + result = cmd(RbConfig.ruby, readme_example("1_available_features.rb")) assert_equal true, result.status.success? - result.each_line { assert_match %r|The [a-zA-Z0-9_]+ feature is available|, _1 } + result.each_line { assert_match %r{The [a-zA-Z0-9_]+ feature is available}, _1 } end private def readme_example(name) - File.join(Dir.getwd, 'share', 'bsdcontrol.rb', 'examples', name) + File.join(Dir.getwd, "share", "bsdcontrol.rb", "examples", name) end end diff --git a/test/setup.rb b/test/setup.rb index b5e7ae7..5235f26 100644 --- a/test/setup.rb +++ b/test/setup.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require "bundler/setup" require "test/unit" require "bsdcontrol" diff --git a/test/superuser/disable_feature_test.rb b/test/superuser/disable_feature_test.rb index 0942c8a..39a25d9 100644 --- a/test/superuser/disable_feature_test.rb +++ b/test/superuser/disable_feature_test.rb @@ -1,7 +1,9 @@ +# frozen_string_literal: true + require_relative "../setup" module BSD::Control class DisableFeatureTest < Test::Unit::TestCase - require 'fileutils' + require "fileutils" include FileUtils def test_disable_pageexec diff --git a/test/superuser/enable_feature_test.rb b/test/superuser/enable_feature_test.rb index 16a2618..e0317ef 100644 --- a/test/superuser/enable_feature_test.rb +++ b/test/superuser/enable_feature_test.rb @@ -1,7 +1,9 @@ +# frozen_string_literal: true + require_relative "../setup" module BSD::Control class EnableFeatureTest < Test::Unit::TestCase - require 'fileutils' + require "fileutils" include FileUtils def test_enable_pageexec diff --git a/test/superuser/feature_status_test.rb b/test/superuser/feature_status_test.rb index 11b870b..24b7ad6 100644 --- a/test/superuser/feature_status_test.rb +++ b/test/superuser/feature_status_test.rb @@ -1,7 +1,9 @@ +# frozen_string_literal: true + require_relative "../setup" module BSD::Control class FeatureStatusTest < Test::Unit::TestCase - require 'fileutils' + require "fileutils" include FileUtils def test_pageexec_sysdef_status @@ -21,7 +23,6 @@ module BSD::Control rm(file) end - def test_pageexec_disabled_status touch(file) BSD::Control.feature(:pageexec).disable!(file) diff --git a/test/superuser/sysdef_feature_test.rb b/test/superuser/sysdef_feature_test.rb index e3827ff..702c7fd 100644 --- a/test/superuser/sysdef_feature_test.rb +++ b/test/superuser/sysdef_feature_test.rb @@ -1,7 +1,9 @@ +# frozen_string_literal: true + require_relative "../setup" module BSD::Control class SysDefFeatureTest < Test::Unit::TestCase - require 'fileutils' + require "fileutils" include FileUtils def test_sysdef_pageexec diff --git a/test/unprivileged/available_features_test.rb b/test/unprivileged/available_features_test.rb index 23da739..efaea01 100644 --- a/test/unprivileged/available_features_test.rb +++ b/test/unprivileged/available_features_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require_relative "../setup" module BSD::Control class AvailableFeaturesTest < Test::Unit::TestCase diff --git a/test/unprivileged/disable_feature_test.rb b/test/unprivileged/disable_feature_test.rb index 71f04ec..f843e08 100644 --- a/test/unprivileged/disable_feature_test.rb +++ b/test/unprivileged/disable_feature_test.rb @@ -1,7 +1,9 @@ +# frozen_string_literal: true + require_relative "../setup" module BSD::Control class DisableFeatureTest < Test::Unit::TestCase - require 'fileutils' + require "fileutils" include FileUtils def test_disable_pageexec_nonexistent_file diff --git a/test/unprivileged/enable_feature_test.rb b/test/unprivileged/enable_feature_test.rb index e48ddb5..c2be5b9 100644 --- a/test/unprivileged/enable_feature_test.rb +++ b/test/unprivileged/enable_feature_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require_relative "../setup" module BSD::Control class EnableFeatureTest < Test::Unit::TestCase diff --git a/test/unprivileged/feature_test.rb b/test/unprivileged/feature_test.rb index 566171b..1fec4f9 100644 --- a/test/unprivileged/feature_test.rb +++ b/test/unprivileged/feature_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require_relative "../setup" module BSD::Control class FeatureTest < Test::Unit::TestCase diff --git a/test/unprivileged/sysdef_feature_test.rb b/test/unprivileged/sysdef_feature_test.rb index 734edc2..99c6018 100644 --- a/test/unprivileged/sysdef_feature_test.rb +++ b/test/unprivileged/sysdef_feature_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require_relative "../setup" module BSD::Control class SysDefTest < Test::Unit::TestCase