symbiont-ruby 0.4.0 → 0.5.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: 3134075bcc91c1d8126473349c79d93d6d6ff02fb0e3d7344695622221539e22
4
- data.tar.gz: 0ba4de906696650d8d6ba51f6fa8ae4f4ee31389ca1b927467947630426548eb
3
+ metadata.gz: 4489ff0e80e1a0d40fd0035404c9472c2ea050c4ed49aa2927595fda63eff5df
4
+ data.tar.gz: 1990f1547ee49c472b120eee6db5712ba2f09bb874accefe992a745db6f7fab3
5
5
  SHA512:
6
- metadata.gz: 338430c8b9c662b09b81c4666babcd5c0e6b61cd958cb99a19964a506678f322b7234d6e872e3a2130dad3fe3ef41cddeac6b571f992ce42218d0593725c5fba
7
- data.tar.gz: 9d41afcb7af1619ea4fe65f131c4331deb89fdc88ab99ec49f9634311c30e9348d69cf0fc83808c2e7678bd41967352c18526fcffc0dfc1c3b1b623b8607b8d5
6
+ metadata.gz: a9f1954c4aba6f0217e41e591f11e24fde1c260b0facb60e6823e60731b883e5917c96cd7a3ef93de47e5aac799647ff8f35b4088f224042d294fc15df12bc63
7
+ data.tar.gz: fcef1a29a6185fbd6e6ad3f0756a30aa4ab4452ba423d9dac1e46f5d6a524538aac77c3b9d0d8f05bd8d1c360ad86d71c2756aec63f63f16c120e2a1d208651b
@@ -4,7 +4,7 @@ inherit_gem:
4
4
  - lib/rubocop.rspec.yml
5
5
 
6
6
  AllCops:
7
- TargetRubyVersion: 2.5.3
7
+ TargetRubyVersion: 2.6.2
8
8
  Include:
9
9
  - lib/**/*.rb
10
10
  - spec/**/*.rb
@@ -2,7 +2,8 @@ language: ruby
2
2
  rvm:
3
3
  - 2.3.8
4
4
  - 2.4.5
5
- - 2.5.3
5
+ - 2.5.5
6
+ - 2.6.2
6
7
  - ruby-head
7
8
  sudo: false
8
9
  before_install: gem install bundler
@@ -1,12 +1,21 @@
1
1
  # Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [0.5.0] 2018-03-28
5
+ ### Added
6
+ - Support for method dispatching for `BasicObject` instances (which does not support `#respond_to?` method);
7
+ - Support for method extrancting for `BasicObject` instances (which does not support `#method` method);
8
+ - Updated development dependencies;
9
+ - Support for `Ruby@2.6.2`, `Ruby@2.5.5`;
10
+
4
11
  ## [0.4.0] 2018-10-25
5
- ### Changed
6
- - End of Ruby@2.2;
12
+ ### Added
7
13
  - Support for Ruby@2.5.3, Ruby@2.4.5, Ruby@2.3.8;
8
14
  - Updated development dependencies;
9
15
 
16
+ ### Changed
17
+ - End of Ruby@2.2;
18
+
10
19
  ## [0.3.0] 2018-06-15
11
20
  ### Added
12
21
  - `Symbiont::Isolator` - proc object isolation layer for delayed invocations;
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2017 Rustam Ibragimov
3
+ Copyright (c) 2017-2019 Rustam Ibragimov
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
@@ -17,7 +17,7 @@ module Symbiont
17
17
  #
18
18
  # @param method_name [String,Symbol] Method that a context should respond to.
19
19
  # @raise NoMethodError
20
- # Is raised when no one of the contexts are able to respond to the required method.
20
+ # Is raised when no one of the contexts are able to respond to the required method.
21
21
  # @return [Objcet]
22
22
  #
23
23
  # @see Symbiont::Trigger#__actual_context__
@@ -26,8 +26,49 @@ module Symbiont
26
26
  # @since 0.1.0
27
27
  def __actual_context__(method_name)
28
28
  __directed_contexts__.find do |context|
29
- context.respond_to?(method_name, true)
29
+ begin
30
+ context.respond_to?(method_name, true)
31
+ rescue ::NoMethodError
32
+ # NOTE:
33
+ # this situation is caused when the context object does not respodond to
34
+ # #resond_to? method (BasicObject instances for example)
35
+
36
+ context_singleton = __extract_singleton_object__(context)
37
+
38
+ context_singleton.private_methods(true).include?(method_name) ||
39
+ context_singleton.methods(true).include?(method_name) ||
40
+ context_singleton.superclass.private_instance_methods(true).include?(method_name) ||
41
+ context_singleton.superclass.instance_methods(true).include?(method_name)
42
+ end
30
43
  end || super
31
44
  end
45
+
46
+ # Returns a corresponding public/private method object of the actual context.
47
+ #
48
+ # @param method_name [String,Symbol] Method name
49
+ # @return [Method]
50
+ #
51
+ # @see [Symbiont::Trigger#method]
52
+ #
53
+ # @api private
54
+ # @since 0.5.0
55
+ def method(method_name)
56
+ __context__ = __actual_context__(method_name)
57
+
58
+ # NOTE:
59
+ # block is used cuz #__actual_context__can raise
60
+ # ::NoMethodError (ContextNoMethodError) too (and we should raise it).
61
+ begin
62
+ __context__.method(method_name)
63
+ rescue ::NoMethodError
64
+ # NOTE:
65
+ # this situation is caused when the context object does not respond
66
+ # to #method method (BasicObject instances for example). We can extract
67
+ # method objects via it's singleton class.
68
+
69
+ __context_singleton__ = __extract_singleton_object__(__context__)
70
+ __context_singleton__.superclass.instance_method(method_name).bind(__context__)
71
+ end
72
+ end
32
73
  end
33
74
  end
@@ -26,8 +26,47 @@ module Symbiont
26
26
  # @since 0.1.0
27
27
  def __actual_context__(method_name)
28
28
  __directed_contexts__.find do |context|
29
- context.respond_to?(method_name, false)
29
+ begin
30
+ context.respond_to?(method_name, false)
31
+ rescue ::NoMethodError
32
+ # NOTE:
33
+ # this situation is caused when the context object does not respodond to
34
+ # #resond_to? method (BasicObject instances for example)
35
+
36
+ context_singleton = __extract_singleton_object__(context)
37
+
38
+ context_singleton.public_methods(false).include?(method_name) ||
39
+ context_singleton.superclass.public_instance_methods(false).include?(method_name)
40
+ end
30
41
  end || super
31
42
  end
43
+
44
+ # Returns a corresponding public method object of the actual context.
45
+ #
46
+ # @param method_name [String,Symbol] Method name
47
+ # @return [Method]
48
+ #
49
+ # @see [Symbiont::Trigger#method]
50
+ #
51
+ # @api private
52
+ # @since 0.5.0
53
+ def method(method_name)
54
+ __context__ = __actual_context__(method_name)
55
+
56
+ # NOTE:
57
+ # block is used cuz #__actual_context__can raise
58
+ # ::NoMethodError (ContextNoMethodError) too (and we should raise it)
59
+ begin
60
+ __context__.method(method_name)
61
+ rescue ::NoMethodError
62
+ # NOTE:
63
+ # this situation is caused when the context object does not respond
64
+ # to #method method (BasicObject instances for example). We can extract
65
+ # method objects via it's singleton class.
66
+
67
+ __context_singleton__ = __extract_singleton_object__(__context__)
68
+ __context_singleton__.superclass.public_instance_method(method_name).bind(__context__)
69
+ end
70
+ end
32
71
  end
33
72
  end
@@ -233,7 +233,7 @@ class Symbiont::Trigger < BasicObject
233
233
  # @api private
234
234
  # @since 0.1.0
235
235
  def method_missing(method_name, *arguments, &block)
236
- __actual_context__(method_name).send(method_name, *arguments, &block)
236
+ __actual_context__(method_name).__send__(method_name, *arguments, &block)
237
237
  end
238
238
 
239
239
  # Checks that the actual context is able to respond to a required method.
@@ -255,7 +255,7 @@ class Symbiont::Trigger < BasicObject
255
255
  end
256
256
  # :nocov:
257
257
 
258
- # Returns a corresponding metehod object of the actual context.
258
+ # Should return a corresponding method object of the actual context.
259
259
  #
260
260
  # @param method_name [String,Symbol] Method name
261
261
  # @raise ContextNoMethodError
@@ -266,9 +266,22 @@ class Symbiont::Trigger < BasicObject
266
266
  # @see #respond_to_missing?
267
267
  # @see #__actual_context__
268
268
  #
269
+ # @see [Symbiont::PrivateTrigget#method]
270
+ # @see [Symbiont::PublicTrigger#method]
271
+ #
269
272
  # @api private
270
273
  # @since 0.1.0
271
- def method(method_name)
272
- __actual_context__(method_name).method(method_name)
274
+ def method(method_name); end # :nocov:
275
+
276
+ # Returns an internal singleton object of the passed object.
277
+ #
278
+ # @param object [Any] Extractable object
279
+ # @return [Class] Singleton class of the passed object
280
+ #
281
+ # @api private
282
+ # @sionce 0.5.0
283
+ def __extract_singleton_object__(object)
284
+ # NOTE: `<<` approach is used cuz BasicObject does not support #singleton_class method.
285
+ class << object; self; end
273
286
  end
274
287
  end
@@ -5,5 +5,5 @@ module Symbiont
5
5
  #
6
6
  # @api public
7
7
  # @since 0.1.0
8
- VERSION = '0.4.0'
8
+ VERSION = '0.5.0'
9
9
  end
@@ -6,7 +6,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
6
  require 'symbiont/version'
7
7
 
8
8
  Gem::Specification.new do |spec|
9
- spec.required_ruby_version = '>= 2.3.7'
9
+ spec.required_ruby_version = '>= 2.3.8'
10
10
 
11
11
  spec.name = 'symbiont-ruby'
12
12
  spec.version = Symbiont::VERSION
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency 'rspec', '~> 3.8'
33
33
  spec.add_development_dependency 'simplecov', '~> 0.16'
34
34
  spec.add_development_dependency 'coveralls', '~> 0.8'
35
- spec.add_development_dependency 'armitage-rubocop', '~> 0.10'
35
+ spec.add_development_dependency 'armitage-rubocop', '~> 0.24'
36
36
 
37
37
  spec.add_development_dependency 'pry'
38
38
  spec.add_development_dependency 'rake'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: symbiont-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rustam Ibragimov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-24 00:00:00.000000000 Z
11
+ date: 2019-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.10'
61
+ version: '0.24'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.10'
68
+ version: '0.24'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pry
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -199,15 +199,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
199
199
  requirements:
200
200
  - - ">="
201
201
  - !ruby/object:Gem::Version
202
- version: 2.3.7
202
+ version: 2.3.8
203
203
  required_rubygems_version: !ruby/object:Gem::Requirement
204
204
  requirements:
205
205
  - - ">="
206
206
  - !ruby/object:Gem::Version
207
207
  version: '0'
208
208
  requirements: []
209
- rubyforge_project:
210
- rubygems_version: 2.7.6
209
+ rubygems_version: 3.0.2
211
210
  signing_key:
212
211
  specification_version: 4
213
212
  summary: Evaluate proc-objects in many contexts simultaneously