tacky 0.3.5 → 0.4.0

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: 40598eee1ed82e2e5006eecc35038a4bab02536fa749765e3d938ab79cb3d881
4
- data.tar.gz: f5502a63ac7ed1c7f9930973c97ac10054e61e75a3597d7be57c0df61c662739
3
+ metadata.gz: 5f9e870d165e0ece19499a198839f511b75099a011371bd352056b885b100fd1
4
+ data.tar.gz: 8d6410ebaf0654c87abaf09c7897c0d1f45e7cb62a0f0f9d6be6e300e4f08597
5
5
  SHA512:
6
- metadata.gz: dd4948163e7a0a876bd22eef5b16d82149eca20a78994c876966f669906c0806a0d03ac8d8aaaa5516bbf344b1b789e1da84a0227d2d2f85b290ac360ce858c9
7
- data.tar.gz: 0bd64a36d50f834ca9ca3ed7eb8bdea38897a23480a29b4d7aa7e56fc18f303d187ecdae2c7f51ba838c71b8af6eb8783ea31ed42486e6fec27b21be0062c6da
6
+ metadata.gz: 7dd984f23d799f5b889f7809c5b2e8ebbeee4c48a97a561e5cffea3943573ec6b87b38b73a5fcce66a2eec1b298a206544da35e7053132d42a8f18edaa543f0e
7
+ data.tar.gz: e31cc8fe917be002b9f0d3aa37e7c53888072ecd03f9680089e40f58b07194c2fa954c9aaa520304f4b29e19aec0f9a8a6aefddd907e384f894e27bfd2f49077
data/.0pdd.yml CHANGED
@@ -1,8 +1,5 @@
1
1
  errors:
2
2
  - yegor256@gmail.com
3
- # alerts:
4
- # github:
5
- # - yegor256
6
3
 
7
4
  tags:
8
5
  - pdd
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: pdd
3
+ on:
4
+ push:
5
+ pull_request:
6
+ jobs:
7
+ pdd:
8
+ runs-on: ubuntu-20.04
9
+ steps:
10
+ - uses: actions/checkout@v3
11
+ - uses: g4s8/pdd-action@master
@@ -0,0 +1,23 @@
1
+ ---
2
+ name: rake
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request:
8
+ branches:
9
+ - master
10
+ jobs:
11
+ test:
12
+ strategy:
13
+ matrix:
14
+ os: [ubuntu-20.04]
15
+ ruby: ['3.0']
16
+ runs-on: ${{ matrix.os }}
17
+ steps:
18
+ - uses: actions/checkout@v3
19
+ - uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: ${{ matrix.ruby }}
22
+ - run: bundle update
23
+ - run: bundle exec rake
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: xcop
3
+ on:
4
+ push:
5
+ pull_request:
6
+ jobs:
7
+ xcop:
8
+ runs-on: ubuntu-20.04
9
+ steps:
10
+ - uses: actions/checkout@v3
11
+ - uses: g4s8/xcop-action@master
data/.rubocop.yml CHANGED
@@ -1,10 +1,12 @@
1
1
  AllCops:
2
2
  DisplayCopNames: true
3
3
  TargetRubyVersion: 2.3
4
+ NewCops: enable
5
+ SuggestExtensions: false
4
6
 
5
7
  Layout/EndOfLine:
6
8
  EnforcedStyle: lf
7
- Style/MethodMissingSuper:
9
+ Lint/MissingSuper:
8
10
  Enabled: false
9
11
  Layout/EmptyLineAfterGuardClause:
10
12
  Enabled: false
@@ -24,5 +26,7 @@ Metrics/PerceivedComplexity:
24
26
  Max: 10
25
27
  Metrics/ParameterLists:
26
28
  Max: 10
27
- Layout/AlignParameters:
29
+ Layout/ParameterAlignment:
30
+ Enabled: false
31
+ Style/OptionalBooleanParameter:
28
32
  Enabled: false
data/.rultor.yml CHANGED
@@ -1,8 +1,10 @@
1
+ docker:
2
+ image: yegor256/rultor-image:1.20.0
1
3
  assets:
2
4
  rubygems.yml: yegor256/home#assets/rubygems.yml
3
5
  install: |-
4
- export GEM_HOME=~/.ruby
5
- export GEM_PATH=$GEM_HOME:$GEM_PATH
6
+ sudo gem install openssl -- --with-openssl-dir=/usr/local/rvm/rubies/ruby-3.0.1/lib/ruby/3.0.0/openssl
7
+ pdd -f /dev/null
6
8
  sudo bundle install --no-color "--gemfile=$(pwd)/Gemfile"
7
9
  release:
8
10
  script: |-
@@ -18,7 +20,3 @@ merge:
18
20
  script: |-
19
21
  bundle install
20
22
  bundle exec rake
21
- deploy:
22
- script: |-
23
- echo 'Nothing to deploy'
24
- exit -1
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2020 Yegor Bugayenko
3
+ # Copyright (c) 2020-2023 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,10 @@
21
21
  # SOFTWARE.
22
22
 
23
23
  source 'https://rubygems.org'
24
- ruby '~>2.3'
25
24
  gemspec
25
+
26
+ gem 'minitest', '5.18.1', require: false
27
+ gem 'rake', '13.0.6', require: false
28
+ gem 'rdoc', '6.5.0', require: false
29
+ gem 'rubocop', '1.52.1', require: false
30
+ gem 'rubocop-rspec', '2.22.0', require: false
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2019 Yegor Bugayenko
3
+ Copyright (c) 2020-2023 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/README.md CHANGED
@@ -4,12 +4,10 @@
4
4
  [![DevOps By Rultor.com](http://www.rultor.com/b/yegor256/tacky)](http://www.rultor.com/p/yegor256/tacky)
5
5
  [![We recommend RubyMine](https://www.elegantobjects.org/rubymine.svg)](https://www.jetbrains.com/ruby/)
6
6
 
7
- [![Build Status](https://travis-ci.org/yegor256/tacky.svg)](https://travis-ci.org/yegor256/tacky)
8
- [![Build status](https://ci.appveyor.com/api/projects/status/e61qudqccs0fu8xt?svg=true)](https://ci.appveyor.com/project/yegor256/tacky)
7
+ [![rake](https://github.com/yegor256/tacky/actions/workflows/rake.yml/badge.svg)](https://github.com/yegor256/tacky/actions/workflows/rake.yml)
9
8
  [![Gem Version](https://badge.fury.io/rb/tacky.svg)](http://badge.fury.io/rb/tacky)
10
9
  [![Maintainability](https://api.codeclimate.com/v1/badges/224939b58aa606fdd56c/maintainability)](https://codeclimate.com/github/yegor256/tacky/maintainability)
11
10
  [![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://rubydoc.info/github/yegor256/tacky/master/frames)
12
-
13
11
  [![Hits-of-Code](https://hitsofcode.com/github/yegor256/tacky)](https://hitsofcode.com/view/github/yegor256/tacky)
14
12
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/yegor256/tacky/blob/master/LICENSE.txt)
15
13
 
@@ -26,17 +24,20 @@ require 'tacky'
26
24
  obj = Tacky.new(obj)
27
25
  ```
28
26
 
29
- That's it, all method calls will be cached.
27
+ That's it, all method calls will be cached. This means that only the first
28
+ call of any method will actually reach your object. All consecutive calls
29
+ will be intercepted by the `Tacky` decorator, which will return
30
+ previously calculated values. The decorator keeps all values in its internal
31
+ `Hash`.
30
32
 
31
- If you want all methods of everything your methods return be cached, you
33
+ If you want all methods of everything your methods return be cached too, you
32
34
  need to use "deep" caching (it's `true` by default):
33
35
 
34
-
35
36
  ```ruby
36
37
  obj = Tacky.new(obj, deep: true)
37
38
  ```
38
39
 
39
- `Tacky` is thread-safe.
40
+ Keep in mind that `Tacky` is thread-safe.
40
41
 
41
42
  ## How to contribute
42
43
 
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2020 Yegor Bugayenko
3
+ # Copyright (c) 2020-2023 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/tacky.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # (The MIT License)
4
4
  #
5
- # Copyright (c) 2020 Yegor Bugayenko
5
+ # Copyright (c) 2020-2023 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
@@ -29,7 +29,7 @@
29
29
  # {README}[https://github.com/yegor256/tacky/blob/master/README.md] file.
30
30
  #
31
31
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
32
- # Copyright:: Copyright (c) 2020 Yegor Bugayenko
32
+ # Copyright:: Copyright (c) 2020-2023 Yegor Bugayenko
33
33
  # License:: MIT
34
34
  class Tacky
35
35
  undef_method :send
@@ -56,9 +56,7 @@ class Tacky
56
56
  @cache[args] = @origin.__send__(*args) do |*a|
57
57
  yield(*a) if block_given?
58
58
  end
59
- if @deep && STOP.none? { |t| @cache[args].is_a?(t) }
60
- @cache[args] = Tacky.new(@cache[args], deep: @deep)
61
- end
59
+ @cache[args] = Tacky.new(@cache[args], deep: @deep) if @deep && STOP.none? { |t| @cache[args].is_a?(t) }
62
60
  end
63
61
  @cache[args]
64
62
  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
+ }
data/tacky.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # (The MIT License)
4
4
  #
5
- # Copyright (c) 2020 Yegor Bugayenko
5
+ # Copyright (c) 2020-2023 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
@@ -24,14 +24,10 @@
24
24
 
25
25
  require 'English'
26
26
  Gem::Specification.new do |s|
27
- s.specification_version = 2 if s.respond_to? :specification_version=
28
- if s.respond_to? :required_rubygems_version=
29
- s.required_rubygems_version = Gem::Requirement.new('>= 0')
30
- end
31
- s.rubygems_version = '2.3.3'
27
+ s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
32
28
  s.required_ruby_version = '>=2.3'
33
29
  s.name = 'tacky'
34
- s.version = '0.3.5'
30
+ s.version = '0.4.0'
35
31
  s.license = 'MIT'
36
32
  s.summary = 'Primitive Object Memoization for Ruby'
37
33
  s.description = 'Decorate your existing Ruby object with Tacky
@@ -40,12 +36,7 @@ and all its methods will be cached.'
40
36
  s.email = 'yegor256@gmail.com'
41
37
  s.homepage = 'http://github.com/yegor256/tacky'
42
38
  s.files = `git ls-files`.split($RS)
43
- s.test_files = s.files.grep(%r{^(test)/})
44
39
  s.rdoc_options = ['--charset=UTF-8']
45
40
  s.extra_rdoc_files = ['README.md']
46
- s.add_development_dependency 'minitest', '5.11.3'
47
- s.add_development_dependency 'rake', '12.3.1'
48
- s.add_development_dependency 'rdoc', '4.3.0'
49
- s.add_development_dependency 'rubocop', '0.62.0'
50
- s.add_development_dependency 'rubocop-rspec', '1.31.0'
41
+ s.metadata['rubygems_mfa_required'] = 'true'
51
42
  end
data/test/test_tacky.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # (The MIT License)
4
4
  #
5
- # Copyright (c) 2020 Yegor Bugayenko
5
+ # Copyright (c) 2020-2023 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 @@ require_relative '../lib/tacky'
27
27
 
28
28
  # Tacky test.
29
29
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
- # Copyright:: Copyright (c) 2020 Yegor Bugayenko
30
+ # Copyright:: Copyright (c) 2020-2023 Yegor Bugayenko
31
31
  # License:: MIT
32
32
  class TackyTest < Minitest::Test
33
33
  def test_wraps_simple_object
@@ -63,4 +63,44 @@ class TackyTest < Minitest::Test
63
63
  bar = Tacky.new(foo)
64
64
  assert(bar.value.is_a?(String))
65
65
  end
66
+
67
+ def test_wraps_void_returning_methods
68
+ foo = Class.new do
69
+ attr_reader :done
70
+
71
+ def initialize
72
+ @done = 0
73
+ end
74
+
75
+ def touch
76
+ @done += 1
77
+ nil
78
+ end
79
+ end.new
80
+ bar = Tacky.new(foo)
81
+ bar.touch
82
+ bar.touch
83
+ assert_equal(1, foo.done)
84
+ end
85
+
86
+ def test_diff_methods_by_params
87
+ foo = Object.new
88
+ def foo.value(val)
89
+ val
90
+ end
91
+ bar = Tacky.new(foo)
92
+ assert_equal(5, bar.value(5))
93
+ assert_equal(10, bar.value(10))
94
+ end
95
+
96
+ def test_diff_methods_by_hash_params
97
+ foo = Object.new
98
+ def foo.value(*)
99
+ rand(1000)
100
+ end
101
+ bar = Tacky.new(foo)
102
+ assert_equal(bar.value(val: 5), bar.value(val: 5))
103
+ assert_equal(bar.value(val: 10), bar.value(val: 10))
104
+ assert_equal(bar.value(val: true), bar.value(val: true))
105
+ end
66
106
  end
metadata CHANGED
@@ -1,85 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tacky
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-28 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.11.3
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '='
25
- - !ruby/object:Gem::Version
26
- version: 5.11.3
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '='
32
- - !ruby/object:Gem::Version
33
- version: 12.3.1
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '='
39
- - !ruby/object:Gem::Version
40
- version: 12.3.1
41
- - !ruby/object:Gem::Dependency
42
- name: rdoc
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - '='
46
- - !ruby/object:Gem::Version
47
- version: 4.3.0
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '='
53
- - !ruby/object:Gem::Version
54
- version: 4.3.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: 0.62.0
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - '='
67
- - !ruby/object:Gem::Version
68
- version: 0.62.0
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: 1.31.0
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '='
81
- - !ruby/object:Gem::Version
82
- version: 1.31.0
11
+ date: 2023-06-19 00:00:00.000000000 Z
12
+ dependencies: []
83
13
  description: |-
84
14
  Decorate your existing Ruby object with Tacky
85
15
  and all its methods will be cached.
@@ -90,24 +20,27 @@ extra_rdoc_files:
90
20
  - README.md
91
21
  files:
92
22
  - ".0pdd.yml"
23
+ - ".github/workflows/pdd.yml"
24
+ - ".github/workflows/rake.yml"
25
+ - ".github/workflows/xcop.yml"
93
26
  - ".gitignore"
94
27
  - ".pdd"
95
28
  - ".rubocop.yml"
96
29
  - ".rultor.yml"
97
- - ".travis.yml"
98
30
  - Gemfile
99
31
  - LICENSE.txt
100
32
  - README.md
101
33
  - Rakefile
102
- - appveyor.yml
103
34
  - lib/tacky.rb
104
35
  - logo.svg
36
+ - renovate.json
105
37
  - tacky.gemspec
106
38
  - test/test_tacky.rb
107
39
  homepage: http://github.com/yegor256/tacky
108
40
  licenses:
109
41
  - MIT
110
- metadata: {}
42
+ metadata:
43
+ rubygems_mfa_required: 'true'
111
44
  post_install_message:
112
45
  rdoc_options:
113
46
  - "--charset=UTF-8"
@@ -124,9 +57,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
57
  - !ruby/object:Gem::Version
125
58
  version: '0'
126
59
  requirements: []
127
- rubygems_version: 3.0.1
60
+ rubygems_version: 3.2.15
128
61
  signing_key:
129
- specification_version: 2
62
+ specification_version: 4
130
63
  summary: Primitive Object Memoization for Ruby
131
- test_files:
132
- - test/test_tacky.rb
64
+ test_files: []
data/.travis.yml DELETED
@@ -1,12 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.6.0
4
- branches:
5
- only:
6
- - master
7
- install:
8
- - bundle install
9
- script:
10
- - set -e
11
- - bundle exec rake
12
-
data/appveyor.yml DELETED
@@ -1,25 +0,0 @@
1
- version: '{build}'
2
- skip_tags: true
3
- clone_depth: 10
4
- branches:
5
- only:
6
- - master
7
- except:
8
- - gh-pages
9
- os: Windows Server 2012
10
- environment:
11
- matrix:
12
- - ruby_version: "25-x64"
13
- install:
14
- - ps: |
15
- $Env:PATH = "C:\Ruby${Env:ruby_version}\bin;${Env:PATH}"
16
- - bundle config --local path vendor/bundle
17
- - ruby -v
18
- - bundle -v
19
- build_script:
20
- - bundle update
21
- - bundle install
22
- test_script:
23
- - bundle exec rake --quiet
24
- cache:
25
- - vendor/bundle