diff --git a/.github/workflows/test.yml b/.github/workflows/ci.yml similarity index 55% rename from .github/workflows/test.yml rename to .github/workflows/ci.yml index 55ce66d..15d752d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/ci.yml @@ -1,10 +1,10 @@ -name: Test +name: CI on: push: jobs: - rspec: + test: runs-on: ubuntu-latest strategy: @@ -23,3 +23,17 @@ jobs: bundler-cache: true - run: bundle exec rake test + + steep: + name: Type check (Steep) + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.4.4' + bundler-cache: true + + - run: bundle exec steep check diff --git a/Steepfile b/Steepfile new file mode 100644 index 0000000..db0fc84 --- /dev/null +++ b/Steepfile @@ -0,0 +1,5 @@ +target :lib do + signature "sig" + + check "lib" +end \ No newline at end of file diff --git a/lib/predicateable.rb b/lib/predicateable.rb index 0b846cd..f630f60 100644 --- a/lib/predicateable.rb +++ b/lib/predicateable.rb @@ -13,7 +13,8 @@ def predicate(name, values, prefix: false, strict: false) method = prefix ? "#{name}_#{value}?" : "#{value}?" define_method(method) do - actual = send(name) + # @type self: Object + actual = public_send(name) if strict actual == value diff --git a/predicateable.gemspec b/predicateable.gemspec index 6ee0b7a..b033aad 100644 --- a/predicateable.gemspec +++ b/predicateable.gemspec @@ -31,4 +31,6 @@ Gem::Specification.new do |spec| spec.add_development_dependency "rake", "~> 13.0" spec.add_development_dependency "minitest", "~> 5.22" + spec.add_development_dependency "rbs", "~> 3.9" + spec.add_development_dependency "steep", "~> 1.10" end diff --git a/sig/predicateable.rbs b/sig/predicateable.rbs index 7e62b0e..29a9d24 100644 --- a/sig/predicateable.rbs +++ b/sig/predicateable.rbs @@ -1,4 +1,12 @@ module Predicateable - VERSION: String - # See the writing guide of rbs: https://github.com/ruby/rbs#guides + def self.included: (Module base) -> void + + module ClassMethods : Module + def predicate: ( + Symbol | String name, + Array[Symbol | String] values, + ?prefix: bool, + ?strict: bool + ) -> Array[Symbol | String] + end end diff --git a/sig/predicateable/version.rbs b/sig/predicateable/version.rbs new file mode 100644 index 0000000..b9039f2 --- /dev/null +++ b/sig/predicateable/version.rbs @@ -0,0 +1,3 @@ +module Predicateable + VERSION: String +end