memery 0.5.0 → 0.6.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
- SHA1:
3
- metadata.gz: 7bea94e1b42ea3945a0d149eb6842d0c8cd5fb9b
4
- data.tar.gz: af0473e8921f36a362a37e5b4b610489b1106f75
2
+ SHA256:
3
+ metadata.gz: 2592e62955d94ec822ac01546d7914e4a1b1bac3cf767f133c0bb9d2740d797c
4
+ data.tar.gz: d55627dd3396a960fb16509986b7843b2507cdc522f04b1c16a1b78c2e367dc8
5
5
  SHA512:
6
- metadata.gz: d87994d56fcaa1b6cde160140b262f96e873ea4663e53e322f1de79661b8ca1c63b5cee5e52a3328245272e9b982d94ac447a01f54ce3dc0681904660ef78a69
7
- data.tar.gz: f227cea7e655a3568c046d01d31e56d11dc9dc176261bf906c2b4cdf97d65f9195eb21922ef31da69e6912d59d4cb2012f7d798c44650fec725c1a2c9a7787c5
6
+ metadata.gz: edbfaefbbfd51dcac0b99a690e065c291f66b20534e5252fa074ee8c7cc83f3256c5cae63abd63f2d1de8c6fb1ca1253e1969ac36c9098ec8fad518d60b39795
7
+ data.tar.gz: 50617bebf3b45b586a55d41267835dbbecba826bcb9be8c5a7392b6661a7019eaa1de95745a024c3e437796df7e94537b2affe6942597b5a855bcfa1d3c7c30c
@@ -3,4 +3,4 @@ inherit_gem:
3
3
 
4
4
  AllCops:
5
5
  DisplayCopNames: true
6
- TargetRubyVersion: 2.4
6
+ TargetRubyVersion: 2.5
@@ -1,5 +1,25 @@
1
- sudo: false
2
1
  language: ruby
2
+
3
+ sudo: false
4
+
3
5
  rvm:
4
- - 2.4.2
5
- before_install: gem install bundler -v 1.16.0
6
+ - 2.2
7
+ - 2.3
8
+ - 2.4
9
+ - 2.5
10
+ - ruby-head
11
+
12
+ before_install: gem install bundler
13
+
14
+ env: SUITE="rspec"
15
+
16
+ script: bundle exec $SUITE
17
+
18
+ matrix:
19
+ fast_finish: true
20
+ # Only run RuboCop on the latest Ruby
21
+ include:
22
+ - rvm: 2.5
23
+ env: SUITE="rubocop"
24
+ allow_failures:
25
+ - rvm: ruby-head
data/README.md CHANGED
@@ -1,6 +1,37 @@
1
- # Memery
1
+ # Memery   [![Gem Version](https://badge.fury.io/rb/memery.svg)](https://badge.fury.io/rb/memery) [![Build Status](https://travis-ci.org/tycooon/memery.svg?branch=master)](https://travis-ci.org/tycooon/memery) [![Coverage Status](https://coveralls.io/repos/github/tycooon/memery/badge.svg?branch=master)](https://coveralls.io/github/tycooon/memery?branch=master)
2
2
 
3
- Memery is a gem for memoization in Ruby.
3
+ Memery is a Ruby gem for memoization of method return values. The normal memoization in Ruby doesn't require any gems and looks like this:
4
+
5
+ ```ruby
6
+ def user
7
+ @user ||= User.find(some_id)
8
+ end
9
+ ```
10
+
11
+ However, this approach dosn't work if the calculated result can be `nil` or `false` or in case the method is using arguments. You will also require extra `begin`/`end` lines in case your method requires multiple lines:
12
+
13
+ ```ruby
14
+ def user
15
+ @user ||= begin
16
+ some_id = calculate_id
17
+ klass = calculate_klass
18
+ klass.find(some_id)
19
+ end
20
+ end
21
+ ```
22
+
23
+ For all these situations memoization gems (like this one) exist. The last example can be rewritten using memery like this:
24
+
25
+ ```ruby
26
+ memoize def user
27
+ some_id = calculate_id
28
+ klass = calculate_klass
29
+ klass.find(some_id)
30
+ end
31
+ ```
32
+
33
+ ## Installation
34
+ Juts add `gem "memery"` to your Gemfile.
4
35
 
5
36
  ## Usage
6
37
 
@@ -30,6 +61,26 @@ a.call { 1 } # => 42
30
61
  # Will print because passing a block disables memoization
31
62
  ```
32
63
 
64
+ For class methods:
65
+
66
+ ```ruby
67
+ class B
68
+ class << self
69
+ include Memery
70
+
71
+ memoize def call
72
+ puts "calculating"
73
+ 42
74
+ end
75
+ end
76
+ end
77
+
78
+ B.call # => 42
79
+ B.call # => 42
80
+ B.call # => 42
81
+ # Text will be printed only once.
82
+ ```
83
+
33
84
  ## Difference with other gems
34
85
  Memery is very similar to [Memoist](https://github.com/matthewrudy/memoist). The difference is that it doesn't override methods, instead it uses Ruby 2 `Module.prepend` feature. This approach is cleaner and it allows subclasses' methods to work properly: if you redefine a memoized method in a subclass, it's not memoized by default, but you can memoize it normally (without using awkward `identifier: ` argument) and it will just work:
35
86
 
@@ -86,5 +137,7 @@ a.users {}
86
137
  However, this solution is kind of hacky.
87
138
 
88
139
  ## License
89
-
90
140
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
141
+
142
+ ## Author
143
+ Created by Yuri Smirnov.
@@ -14,7 +14,7 @@ module Memery
14
14
  :private
15
15
  when klass.protected_method_defined?(method_name)
16
16
  :protected
17
- else
17
+ when klass.public_method_defined?(method_name)
18
18
  :public
19
19
  end
20
20
  end
@@ -36,6 +36,7 @@ module Memery
36
36
  def define_memoized_method!(method_name)
37
37
  mod_id = @_memery_module.object_id
38
38
  visibility = Memery.method_visibility(self, method_name)
39
+ raise ArgumentError, "Method #{method_name} is not defined on #{self}" unless visibility
39
40
 
40
41
  @_memery_module.module_eval do
41
42
  define_method(method_name) do |*args, &block|
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Memery
4
- VERSION = "0.5.0"
4
+ VERSION = "0.6.0"
5
5
  end
@@ -21,8 +21,10 @@ Gem::Specification.new do |spec|
21
21
  spec.require_paths = ["lib"]
22
22
 
23
23
  spec.add_development_dependency "bundler"
24
+ spec.add_development_dependency "coveralls"
24
25
  spec.add_development_dependency "pry"
25
26
  spec.add_development_dependency "rake"
26
27
  spec.add_development_dependency "rspec"
27
28
  spec.add_development_dependency "rubocop-config-umbrellio"
29
+ spec.add_development_dependency "simplecov"
28
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memery
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuri Smirnov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-16 00:00:00.000000000 Z
11
+ date: 2018-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: coveralls
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: pry
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +94,20 @@ dependencies:
80
94
  - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
83
111
  description: Memery is a gem for memoization.
84
112
  email:
85
113
  - tycooon@yandex.ru
@@ -95,8 +123,6 @@ files:
95
123
  - LICENSE.txt
96
124
  - README.md
97
125
  - Rakefile
98
- - bin/console
99
- - bin/setup
100
126
  - lib/memery.rb
101
127
  - lib/memery/version.rb
102
128
  - memery.gemspec
@@ -120,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
146
  version: '0'
121
147
  requirements: []
122
148
  rubyforge_project:
123
- rubygems_version: 2.6.14
149
+ rubygems_version: 2.7.6
124
150
  signing_key:
125
151
  specification_version: 4
126
152
  summary: A gem for memoization.
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require "bundler/setup"
5
- require "memery"
6
-
7
- # You can add fixtures and/or initialization code here to make experimenting
8
- # with your gem easier. You can also use a different console, if you like.
9
-
10
- # (If you use this, don't forget to add pry to your Gemfile!)
11
- # require "pry"
12
- # Pry.start
13
-
14
- require "irb"
15
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here