obk 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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