obk 0.3.0 → 0.3.1

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: d34fd03b0e47f11f25a670c4c9c854df9898d707e996bc7435410a89bcdcb583
4
- data.tar.gz: 1fef24bde0357f0f60bdc1831346519186e068babbfc222d6d06a7ba86652ee7
3
+ metadata.gz: 3588c2aaa0acb3233db4a2f44e7cd97debdfe7ea43395810ab967daa20f14bda
4
+ data.tar.gz: cb1a410f2f1e8ae32fdcb4454e7202971514ca39e3fee1a99a7ad90fc012f286
5
5
  SHA512:
6
- metadata.gz: d7a482d7277343072200ac507b7f60500e89fd49c370caa12267b7175ec0a24e1777307661a107768ce7b9e12343956891e220ea309a4d4a2454750a6c647302
7
- data.tar.gz: 72bd6de675fe5fe4bc387a88cff0081c408a9f027d1d4cc7d2f0d9ff2874ca586a7bde86eca100d70c3b0335f16902ef715ed05eccdb53d19ef38d60905284ab
6
+ metadata.gz: 8ce340dfaa95b7617bc4df8f329457610d6db9c6df4504177dc6a957d610d5bde9148fa0502a1f2a90adf10358b0820055abe4f22c5ad372ba4927f05edd7419
7
+ data.tar.gz: 2452a0fd858c897a627a650fb1c119a67a85f47f36ca7ae9adcbb503e6994634069c2a46c61547cb200aee5e66349f6c6c9eb042faaa868f604fc9f364904c7f
@@ -6,15 +6,16 @@ on:
6
6
  - master
7
7
  jobs:
8
8
  codecov:
9
- runs-on: ubuntu-20.04
9
+ runs-on: ubuntu-22.04
10
10
  steps:
11
- - uses: actions/checkout@v2
12
- - uses: actions/setup-ruby@v1
11
+ - uses: actions/checkout@v4
12
+ - uses: ruby/setup-ruby@v1
13
13
  with:
14
- ruby-version: 2.7
14
+ ruby-version: 3.3
15
15
  - run: bundle update
16
16
  - run: bundle exec rake
17
- - uses: codecov/codecov-action@v1
17
+ - uses: codecov/codecov-action@v4
18
18
  with:
19
+ token: ${{ secrets.CODECOV_TOKEN }}
19
20
  file: coverage/.resultset.json
20
21
  fail_ci_if_error: true
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: markdown-lint
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request:
8
+ branches:
9
+ - master
10
+ paths-ignore: [ 'paper/**', 'sandbox/**' ]
11
+ concurrency:
12
+ group: markdown-lint-${{ github.ref }}
13
+ cancel-in-progress: true
14
+ jobs:
15
+ markdown-lint:
16
+ runs-on: ubuntu-22.04
17
+ steps:
18
+ - uses: actions/checkout@b32f140b0c872d58512e0a66172253c302617b90
19
+ - uses: articulate/actions-markdownlint@v1
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: pdd
3
- "on":
3
+ on:
4
4
  push:
5
5
  branches:
6
6
  - master
@@ -9,7 +9,7 @@ name: pdd
9
9
  - master
10
10
  jobs:
11
11
  pdd:
12
- runs-on: ubuntu-20.04
12
+ runs-on: ubuntu-22.04
13
13
  steps:
14
- - uses: actions/checkout@v2
15
- - uses: g4s8/pdd-action@master
14
+ - uses: actions/checkout@v4
15
+ - uses: volodya-lombrozo/pdd-action@master
@@ -8,15 +8,15 @@ on:
8
8
  branches:
9
9
  - master
10
10
  jobs:
11
- test:
12
- name: test
11
+ rake:
12
+ name: rake
13
13
  strategy:
14
14
  matrix:
15
- os: [ubuntu-20.04]
16
- ruby: [2.6]
15
+ os: [ubuntu-22.04]
16
+ ruby: [2.7, 3.3]
17
17
  runs-on: ${{ matrix.os }}
18
18
  steps:
19
- - uses: actions/checkout@v2
19
+ - uses: actions/checkout@v4
20
20
  - uses: ruby/setup-ruby@v1
21
21
  with:
22
22
  ruby-version: ${{ matrix.ruby }}
@@ -9,9 +9,9 @@ name: xcop
9
9
  - master
10
10
  jobs:
11
11
  xcop:
12
- runs-on: ubuntu-20.04
12
+ runs-on: ubuntu-22.04
13
13
  steps:
14
- - uses: actions/checkout@v2
14
+ - uses: actions/checkout@v4
15
15
  - uses: g4s8/xcop-action@master
16
16
  with:
17
17
  files: '**/*.xml'
data/.gitignore CHANGED
@@ -4,3 +4,4 @@ Gemfile.lock
4
4
  .DS_Store
5
5
  rdoc/
6
6
  .idea/
7
+ coverage/
data/.rubocop.yml CHANGED
@@ -18,3 +18,9 @@ Layout/ElseAlignment:
18
18
  Enabled: false
19
19
  Layout/IndentationWidth:
20
20
  Enabled: false
21
+ Metrics/AbcSize:
22
+ Max: 30
23
+ Metrics/PerceivedComplexity:
24
+ Max: 15
25
+ Metrics/CyclomaticComplexity:
26
+ Max: 15
data/.rultor.yml CHANGED
@@ -1,10 +1,10 @@
1
1
  docker:
2
- image: yegor256/rultor-image:1.9.1
2
+ image: yegor256/rultor-image:1.22.0
3
3
  assets:
4
4
  rubygems.yml: yegor256/home#assets/rubygems.yml
5
5
  install: |
6
6
  pdd -f /dev/null
7
- sudo bundle install --no-color "--gemfile=$(pwd)/Gemfile"
7
+ bundle install --no-color
8
8
  release:
9
9
  script: |-
10
10
  bundle exec rake clean test rubocop copyright
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2021-2022 Yegor Bugayenko
3
+ # Copyright (c) 2021-2024 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -21,5 +21,11 @@
21
21
  # SOFTWARE.
22
22
 
23
23
  source 'https://rubygems.org'
24
- ruby '~>2.3'
25
24
  gemspec
25
+
26
+ gem 'minitest', '5.22.2', require: false
27
+ gem 'rake', '13.1.0', require: false
28
+ gem 'rdoc', '6.6.2', require: false
29
+ gem 'rubocop', '1.61.0', require: false
30
+ gem 'rubocop-rspec', '2.27.1', require: false
31
+ gem 'simplecov', '0.22.0', require: false
data/README.md CHANGED
@@ -15,7 +15,7 @@
15
15
  First, install it:
16
16
 
17
17
  ```bash
18
- $ gem install obk
18
+ gem install obk
19
19
  ```
20
20
 
21
21
  Then, use it like this:
@@ -39,9 +39,9 @@ Make sure you build is green before you contribute
39
39
  your pull request. You will need to have [Ruby](https://www.ruby-lang.org/en/) 2.3+ and
40
40
  [Bundler](https://bundler.io/) installed. Then:
41
41
 
42
- ```
43
- $ bundle update
44
- $ bundle exec rake
42
+ ```bash
43
+ bundle update
44
+ bundle exec rake
45
45
  ```
46
46
 
47
47
  If it's clean and you don't see any error messages, submit your pull request.
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2021-2022 Yegor Bugayenko
3
+ # Copyright (c) 2021-2024 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
data/lib/obk.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # (The MIT License)
4
4
  #
5
- # Copyright (c) 2021-2022 Yegor Bugayenko
5
+ # Copyright (c) 2021-2024 Yegor Bugayenko
6
6
  #
7
7
  # Permission is hereby granted, free of charge, to any person obtaining a copy
8
8
  # of this software and associated documentation files (the 'Software'), to deal
@@ -28,7 +28,7 @@
28
28
  # {README}[https://github.com/yegor256/obk/blob/master/README.md] file.
29
29
  #
30
30
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
31
- # Copyright:: Copyright (c) 2021-2022 Yegor Bugayenko
31
+ # Copyright:: Copyright (c) 2021-2024 Yegor Bugayenko
32
32
  # License:: MIT
33
33
  class Obk
34
34
  def initialize(origin, pause: 1000)
@@ -40,12 +40,21 @@ class Obk
40
40
  def method_missing(*args)
41
41
  left = @pause - (Time.now - @latest)
42
42
  sleep left if left.positive?
43
- result = if block_given?
44
- @origin.__send__(*args) do |*a|
45
- yield(*a)
43
+ mtd = args.shift
44
+ result = if @origin.respond_to?(mtd)
45
+ params = @origin.method(mtd).parameters
46
+ reqs = params.count { |p| p[0] == :req }
47
+ if params.any? { |p| p[0] == :key } && args.size > reqs
48
+ @origin.__send__(mtd, *args[0...-1], **args.last) do |*a|
49
+ yield(*a) if block_given?
50
+ end
51
+ else
52
+ @origin.__send__(mtd, *args) do |*a|
53
+ yield(*a) if block_given?
54
+ end
46
55
  end
47
56
  else
48
- @origin.__send__(*args)
57
+ super
49
58
  end
50
59
  @latest = Time.now
51
60
  result
data/obk.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # (The MIT License)
4
4
  #
5
- # Copyright (c) 2021-2022 Yegor Bugayenko
5
+ # Copyright (c) 2021-2024 Yegor Bugayenko
6
6
  #
7
7
  # Permission is hereby granted, free of charge, to any person obtaining a copy
8
8
  # of this software and associated documentation files (the 'Software'), to deal
@@ -27,7 +27,7 @@ Gem::Specification.new do |s|
27
27
  s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
28
28
  s.required_ruby_version = '>=2.3'
29
29
  s.name = 'obk'
30
- s.version = '0.3.0'
30
+ s.version = '0.3.1'
31
31
  s.license = 'MIT'
32
32
  s.summary = 'Ruby decorator to throttle object method calls'
33
33
  s.description = 'Ruby decorator to throttle object method calls'
@@ -37,10 +37,5 @@ Gem::Specification.new do |s|
37
37
  s.files = `git ls-files`.split($RS)
38
38
  s.rdoc_options = ['--charset=UTF-8']
39
39
  s.extra_rdoc_files = ['README.md']
40
- s.add_development_dependency 'minitest', '5.16.2'
41
- s.add_development_dependency 'rake', '13.0.6'
42
- s.add_development_dependency 'rdoc', '6.4.0'
43
- s.add_development_dependency 'rubocop', '1.34.1'
44
- s.add_development_dependency 'rubocop-rspec', '2.12.1'
45
40
  s.metadata['rubygems_mfa_required'] = 'true'
46
41
  end
data/renovate.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+ "extends": [
4
+ "config:base"
5
+ ]
6
+ }
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # (The MIT License)
4
+ #
5
+ # Copyright (c) 2021-2024 Yegor Bugayenko
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the 'Software'), to deal
9
+ # in the Software without restriction, including without limitation the rights
10
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ # copies of the Software, and to permit persons to whom the Software is
12
+ # furnished to do so, subject to the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be included in all
15
+ # copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ # SOFTWARE.
24
+
25
+ $stdout.sync = true
26
+
27
+ require 'simplecov'
28
+ SimpleCov.start
29
+
30
+ require 'minitest/autorun'
data/test/test_obk.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # (The MIT License)
4
4
  #
5
- # Copyright (c) 2021-2022 Yegor Bugayenko
5
+ # Copyright (c) 2021-2024 Yegor Bugayenko
6
6
  #
7
7
  # Permission is hereby granted, free of charge, to any person obtaining a copy
8
8
  # of this software and associated documentation files (the 'Software'), to deal
@@ -28,7 +28,7 @@ require_relative '../lib/obk'
28
28
 
29
29
  # Obk test.
30
30
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
31
- # Copyright:: Copyright (c) 2021-2022 Yegor Bugayenko
31
+ # Copyright:: Copyright (c) 2021-2024 Yegor Bugayenko
32
32
  # License:: MIT
33
33
  class ObkTest < Minitest::Test
34
34
  def test_simple
@@ -36,11 +36,32 @@ class ObkTest < Minitest::Test
36
36
  def obj.read(foo)
37
37
  foo
38
38
  end
39
- obj = Obk.new(obj, pause: 1000)
39
+ obj = Obk.new(obj, pause: 100)
40
40
  start = Time.now
41
41
  assert_equal(42, obj.read(42))
42
42
  assert_equal(42, obj.read(42))
43
43
  stop = Time.now
44
- assert(stop - start > 1)
44
+ assert(stop - start > 0.1)
45
+ end
46
+
47
+ def test_works_with_optional_arguments
48
+ obj = Object.new
49
+ def obj.foo(first, _second, ext1: 'a', ext2: 'b')
50
+ first + ext1 + ext2
51
+ end
52
+ synced = Obk.new(obj, pause: 10)
53
+ assert_equal('.xy', synced.foo('.', {}, ext1: 'x', ext2: 'y'))
54
+ assert_equal('fzb', synced.foo('f', {}, ext1: 'z'))
55
+ assert_equal('-ab', synced.foo('-', {}))
56
+ end
57
+
58
+ def test_works_with_default_value
59
+ obj = Object.new
60
+ def obj.foo(first, second = 42)
61
+ first + second
62
+ end
63
+ synced = Obk.new(obj, pause: 10)
64
+ assert_equal(15, synced.foo(7, 8))
65
+ assert_equal(43, synced.foo(1))
45
66
  end
46
67
  end
metadata CHANGED
@@ -1,85 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: obk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-10 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: minitest
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '='
18
- - !ruby/object:Gem::Version
19
- version: 5.16.2
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '='
25
- - !ruby/object:Gem::Version
26
- version: 5.16.2
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '='
32
- - !ruby/object:Gem::Version
33
- version: 13.0.6
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '='
39
- - !ruby/object:Gem::Version
40
- version: 13.0.6
41
- - !ruby/object:Gem::Dependency
42
- name: rdoc
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - '='
46
- - !ruby/object:Gem::Version
47
- version: 6.4.0
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '='
53
- - !ruby/object:Gem::Version
54
- version: 6.4.0
55
- - !ruby/object:Gem::Dependency
56
- name: rubocop
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - '='
60
- - !ruby/object:Gem::Version
61
- version: 1.34.1
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - '='
67
- - !ruby/object:Gem::Version
68
- version: 1.34.1
69
- - !ruby/object:Gem::Dependency
70
- name: rubocop-rspec
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '='
74
- - !ruby/object:Gem::Version
75
- version: 2.12.1
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '='
81
- - !ruby/object:Gem::Version
82
- version: 2.12.1
11
+ date: 2024-03-05 00:00:00.000000000 Z
12
+ dependencies: []
83
13
  description: Ruby decorator to throttle object method calls
84
14
  email: yegor256@gmail.com
85
15
  executables: []
@@ -89,6 +19,7 @@ extra_rdoc_files:
89
19
  files:
90
20
  - ".0pdd.yml"
91
21
  - ".github/workflows/codecov.yml"
22
+ - ".github/workflows/markdown-lint.yml"
92
23
  - ".github/workflows/pdd.yml"
93
24
  - ".github/workflows/rake.yml"
94
25
  - ".github/workflows/xcop.yml"
@@ -103,6 +34,8 @@ files:
103
34
  - lib/obk.rb
104
35
  - logo.svg
105
36
  - obk.gemspec
37
+ - renovate.json
38
+ - test/test__helper.rb
106
39
  - test/test_obk.rb
107
40
  homepage: http://github.com/yegor256/obk
108
41
  licenses:
@@ -125,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
58
  - !ruby/object:Gem::Version
126
59
  version: '0'
127
60
  requirements: []
128
- rubygems_version: 3.1.2
61
+ rubygems_version: 3.4.10
129
62
  signing_key:
130
63
  specification_version: 4
131
64
  summary: Ruby decorator to throttle object method calls