Skip to content

Commit

Permalink
Merge pull request #30 from evilmartians/fix/ruby-3
Browse files Browse the repository at this point in the history
Add support Ruby 3+
  • Loading branch information
nepalez committed Jul 4, 2022
2 parents a3e3254 + f983dce commit 67c8e6c
Show file tree
Hide file tree
Showing 36 changed files with 122 additions and 94 deletions.
44 changes: 44 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: CI

on:
push:
branches:
- master
pull_request:
branches:
- "*"

jobs:
build:
name: Ruby ${{ matrix.ruby }}

strategy:
fail-fast: true
matrix:
ruby:
- "2.6.0"
- "3.0.0"
- "head"

runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v2

- name: Install dependent libraries
run: sudo apt-get install libpq-dev

- name: Install Ruby ${{ matrix.ruby }}
uses: ruby/[email protected]
with:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true # 'bundle install' and cache

- name: Check code style
run: bundle exec rubocop
continue-on-error: false

- name: Run tests
run: bundle exec rake --trace
continue-on-error: false
14 changes: 12 additions & 2 deletions .rubocop.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
---
AllCops:
DisplayCopNames: true
TargetRubyVersion: 2.3
TargetRubyVersion: 2.6

Lint/AmbiguousBlockAssociation:
Enabled: false

Lint/ConstantDefinitionInBlock:
Exclude:
- 'spec/**/*'

Naming/FileName:
Exclude:
- lib/evil-client.rb

Naming/UncommunicativeMethodParamName:
Naming/MethodParameterName:
MinNameLength: 2

Naming/VariableNumber:
Enabled: false

Metrics/BlockLength:
Enabled: false

Expand All @@ -28,6 +35,9 @@ Style/DateTime:
Style/FrozenStringLiteralComment:
Enabled: false

Style/HashSyntax:
Enabled: false

Style/ModuleFunction:
Enabled: false

Expand Down
18 changes: 0 additions & 18 deletions .travis.yml

This file was deleted.

3 changes: 0 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ Human-friendly DSL for writing HTTP(s) clients in Ruby
<img src="https://evilmartians.com/badges/sponsored-by-evil-martians.svg" alt="Sponsored by Evil Martians" width="236" height="54"></a>

[![Gem Version][gem-badger]][gem]
[![Build Status][travis-badger]][travis]
[![Inline docs][inch-badger]][inch]
[![Documentation Status][readthedocs-badger]][readthedocs]

Expand Down Expand Up @@ -114,7 +113,5 @@ The gem is available as open source under the terms of the [MIT License](http://
[inch-badger]: http://inch-ci.org/github/evilmartians/evil-client.svg
[inch]: https://inch-ci.org/github/evilmartians/evil-client
[swagger]: http://swagger.io
[travis-badger]: https://img.shields.io/travis/evilmartians/evil-client/master.svg?style=flat
[travis]: https://travis-ci.org/evilmartians/evil-client
[readthedocs-badger]: https://readthedocs.org/projects/evilclient/badge/?version=latest
[readthedocs]: http://evilclient.readthedocs.io/en/latest
18 changes: 9 additions & 9 deletions evil-client.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,17 @@ Gem::Specification.new do |gem|
gem.test_files = gem.files.grep(/^spec/)
gem.extra_rdoc_files = Dir["README.md", "LICENSE", "CHANGELOG.md"]

gem.required_ruby_version = "~> 2.3"
gem.required_ruby_version = ">= 2.6"

gem.add_runtime_dependency "dry-initializer", ">= 2.1", "< 4"
gem.add_runtime_dependency "mime-types", "~> 3.1"
gem.add_runtime_dependency "rack", "~> 2"
gem.add_runtime_dependency "dry-initializer", ">= 2.1"
gem.add_runtime_dependency "mime-types", ">= 3.1"
gem.add_runtime_dependency "rack", ">= 2"
gem.add_runtime_dependency "tram-policy", ">= 0.3.1", "< 3"

gem.add_development_dependency "rake", ">= 10"
gem.add_development_dependency "rspec", "~> 3.0"
gem.add_development_dependency "rspec-its", "~> 1.2"
gem.add_development_dependency "rubocop", "~> 0.52.0"
gem.add_development_dependency "timecop", "~> 0.9"
gem.add_development_dependency "webmock", "~> 2.1"
gem.add_development_dependency "rspec", ">= 3.0"
gem.add_development_dependency "rspec-its"
gem.add_development_dependency "rubocop"
gem.add_development_dependency "timecop"
gem.add_development_dependency "webmock"
end
6 changes: 3 additions & 3 deletions lib/evil/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ def respond_to_missing?(name, *)
schema.respond_to? name
end

def method_missing(*args, &block)
respond_to_missing?(*args) ? schema.send(*args, &block) : super
def method_missing(*args, **kwargs, &block)
respond_to_missing?(*args) ? schema.send(*args, **kwargs, &block) : super
end
end

Expand Down Expand Up @@ -152,7 +152,7 @@ def inspect
private

def initialize(**options)
@scope = Container::Scope.new self.class.send(:schema), options
@scope = Container::Scope.new self.class.send(:schema), **options
end
end
end
2 changes: 1 addition & 1 deletion lib/evil/client/builder/operation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def to_s
# @return [Evil::Client::Container::Operation]
#
def new(**options)
Container::Operation.new schema, parent.options.merge(options)
Container::Operation.new schema, **parent.options.merge(options)
end

# @!method call(options)
Expand Down
2 changes: 1 addition & 1 deletion lib/evil/client/builder/scope.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def to_s
# @return [Evil::Client::Container::Scope]
#
def new(**options)
Container::Scope.new schema, parent.options.merge(options)
Container::Scope.new schema, **parent.options.merge(options)
end
alias_method :call, :new
alias_method :[], :new
Expand Down
4 changes: 2 additions & 2 deletions lib/evil/client/chaining.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ def respond_to_missing?(name, *)
operations[name] || scopes[name]
end

def method_missing(name, *args, &block)
def method_missing(name, *args, **kwargs, &block)
return super unless respond_to_missing? name

(operations[name] || scopes[name]).call(*args)
(operations[name] || scopes[name]).call(*args, **kwargs)
end
end
end
6 changes: 2 additions & 4 deletions lib/evil/client/connection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,8 @@ def call(env)

private

def open_http_connection_for(req)
Net::HTTP.start req.host, req.port, use_ssl: req.ssl? do |http|
yield(http)
end
def open_http_connection_for(req, &block)
Net::HTTP.start req.host, req.port, use_ssl: req.ssl?, &block
end

def build_from(request)
Expand Down
2 changes: 1 addition & 1 deletion lib/evil/client/container.rb
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ def logger

def initialize(schema, logger = nil, **opts)
@schema = schema
@settings = schema.settings.new(logger, opts)
@settings = schema.settings.new(logger, **opts)
end
end
end
2 changes: 0 additions & 2 deletions lib/evil/client/container/operation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ class Container::Operation < Container
#
# @return [Array]
#
# rubocop: disable Metrics/AbcSize
def call
request = Resolver::Request.call(schema, settings)
middleware = Resolver::Middleware.call(schema, settings)
Expand All @@ -18,6 +17,5 @@ def call

Resolver::Response.call schema, settings, response
end
# rubocop: enable Metrics/AbcSize
end
end
7 changes: 3 additions & 4 deletions lib/evil/client/container/scope.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,9 @@ class Container::Scope < Container
# The collection of named sub-scope constructors
# @return [Hash<Symbol, Evil::Client::Container::Scope::Builder>]
def scopes
@scopes ||= \
schema.scopes.each_with_object({}) do |(key, sub_schema), obj|
obj[key] = Builder::Scope.new(sub_schema, settings)
end
@scopes ||= schema.scopes.transform_values do |sub_schema|
Builder::Scope.new(sub_schema, settings)
end
end

# The collection of named operations constructors
Expand Down
4 changes: 2 additions & 2 deletions lib/evil/client/dictionary.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ def all

# Iterates by dictionary items
# @return [Enumerator<Evil::Client::Dictionary>]
def each
block_given? ? all.each { |item| yield(item) } : all.to_enum
def each(&block)
block_given? ? all.each(&block) : all.to_enum
end

# Calls the item and raises when it is not in the dictionary
Expand Down
6 changes: 3 additions & 3 deletions lib/evil/client/formatter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def call(source, format, **opts)
return to_form(source) if format == :form
return to_text(source) if format == :text

to_multipart(source, opts)
to_multipart(source, **opts)
end

private
Expand All @@ -43,8 +43,8 @@ def to_form(source)
Form.call source
end

def to_multipart(source, opts)
Multipart.call [source], opts
def to_multipart(source, **opts)
Multipart.call [source], **opts
end
end
end
4 changes: 2 additions & 2 deletions lib/evil/client/formatter/form.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ def call(source)

def normalize(value, *keys)
case value
when Hash then
when Hash
value.flat_map { |key, val| normalize(val, *keys, key) }.join("&")
when Array then
when Array
value.flat_map { |val| normalize(val, *keys, nil) }.join("&")
else
finalize(value, *keys)
Expand Down
8 changes: 4 additions & 4 deletions lib/evil/client/model.rb
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,9 @@ def extend(other)
# @param [Hash] op Model options
# @return [Evil::Client::Model]
#
def new(op = {})
op = Hash(op).each_with_object({}) { |(k, v), obj| obj[k.to_sym] = v }
super(op).tap { |item| in_english { policy[item].validate! } }
def new(**op)
op = Hash(op).transform_keys(&:to_sym)
super(**op).tap { |item| in_english { policy[item].validate! } }
end
alias call new
alias [] call
Expand All @@ -116,7 +116,7 @@ def validate_model(other)

def extend_model(other)
other.dry_initializer.options.each do |definition|
option definition.source, definition.options
option definition.source, **definition.options
end

other.lets.each { |key, block| let(key, &block) }
Expand Down
4 changes: 2 additions & 2 deletions lib/evil/client/resolver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,11 @@ def __definition_error__(text)
end

def __symbolize_keys__(hash)
hash.each_with_object({}) { |(key, val), obj| obj[key.to_sym] = val }
hash.transform_keys(&:to_sym)
end

def __stringify_keys__(hash)
hash.each_with_object({}) { |(key, val), obj| obj[key.to_s] = val }
hash.transform_keys(&:to_s)
end

def respond_to_missing?(name, *)
Expand Down
2 changes: 1 addition & 1 deletion lib/evil/client/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def let(key, &block)
# @param (see Evil::Client::Model.validate)
# @return [self]
#
def validate(&block)
def validate(*_args, &block)
settings.validate(&block)
self
end
Expand Down
2 changes: 1 addition & 1 deletion lib/evil/client/schema/operation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ def middleware(value = nil, &block)
# @param [Proc] block
# @return [self]
#
def response(*codes, &block)
def response(*codes, **_kwargs, &block)
codes.flatten.map(&:to_i).each do |code|
definitions[:responses][code] = block || proc { |*response| response }
end
Expand Down
6 changes: 3 additions & 3 deletions lib/evil/client/schema/scope.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ def leaf?
#
# @return [Hash<Symbol, Class>]
#
def scopes
def scopes(*_args)
@__children__.reject { |_, child| child.leaf? }
end

# The collection of named operation schemas
#
# @return [Hash<[Symbol, nil], Class>]
#
def operations
def operations(*_args)
@__children__.select { |_, child| child.leaf? }
end

Expand All @@ -38,7 +38,7 @@ def operations
# @param [Proc] block The block containing definition for the subscope
# @return [self]
#
def scope(name, &block)
def scope(name, **_kwargs, &block)
key = NameError.check!(name)
TypeError.check! self, key, :scope
@__children__[key] ||= self.class.new(self, key)
Expand Down
6 changes: 3 additions & 3 deletions lib/evil/client/settings.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ def validate(&block)
# @param [Hash<#to_sym, Object>, nil] opts
# @return [Evil::Client::Settings]
#
def new(logger, op = {})
def new(logger, **op)
logger&.debug(self) { "initializing with options #{op}..." }
super(op).tap do |item|
super(**op).tap do |item|
item.logger = logger
logger&.debug(item) { "initialized" }
end
Expand Down Expand Up @@ -93,7 +93,7 @@ def datetime(value)
# @return [String]
#
def inspect
number = super.match(/\>\:([^ ]+) /)[1]
number = super.match(/>:([^ ]+) /)[1]
params = options.map { |k, v| "@#{k}=#{v}" }.join(", ")
number ? "#<#{self.class}:#{number} #{params}>" : super
end
Expand Down
Loading

0 comments on commit 67c8e6c

Please sign in to comment.