anachronic 0.42.2 → 0.43.0

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: 324d2c9426f10fa8877399b5de9f2c4e8a2786e68aea018ceda2577ed5c9e023
4
- data.tar.gz: f9a0e10c27f49c5a6f19dc07fad6194b4f45d5af676943f1bd57c77fb761f05e
3
+ metadata.gz: 258ec036a2fdc3a3ef100b6e77b9db95f09b640138297cdefe8eb8120cb18bc7
4
+ data.tar.gz: f71aa8121e0a373044026d82b3ea654c67f47816aaca3645a99df8cfcac6d941
5
5
  SHA512:
6
- metadata.gz: '0953f4299299681079a375c4b8cb0bc1ccf02f5cc38a0fbc7135043ea1af9dc7e88a694c51f07dd75d7af641a343c266a181eac4915e969ab88bae2143d63811'
7
- data.tar.gz: 82fa513525cd19a4ddbc934eeff5ee59f22db3fbbf4d2df24a07b8f4b539b5a2642732b0c39705195d003c375e11c007526ebc32c7175603192d0080448fa884
6
+ metadata.gz: 707d67121db58d16bfd44f504ebfd7d5ee234cab4824d1e42d71ede2cbe96649898c21404f8e21480e0d0a1a8f02a3415e214f2fffd03cde9b7ccd2ca1364e6f
7
+ data.tar.gz: 461deb146099ef7e3f97b9369be8f66229bd3503acc9fc6391257decc123f7d14c9626bd4bef291529ec33403bd6d278934166b427625f3d1d365003fe041c32
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- anachronic (0.42.2)
4
+ anachronic (0.43.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -24,6 +24,8 @@ HumanJob.perform_later(Human.new)
24
24
  ### You can now write:
25
25
  ```ruby
26
26
  class Human
27
+ extend Anachronic
28
+
27
29
  async def speak
28
30
  puts('Truth!')
29
31
  end
@@ -48,9 +50,21 @@ Or install it yourself as:
48
50
 
49
51
  $ gem install anachronic
50
52
 
51
- ## Usage
53
+ ## Configuration
54
+
55
+ To configure, run this or add to an initializers file (in case of Rails)
56
+
57
+ ```ruby
58
+ Anachronic.configure do |config|
59
+ config.default_executor = Sidekiq
60
+ end
61
+ ```
62
+
63
+ In case no `default_exeucutor` is configured, the gem will use the first one that is available (defined) from the list:
64
+ - ApplicationJob
65
+ - Sidekiq
66
+ - Resque
52
67
 
53
- TODO: Write usage instructions here
54
68
 
55
69
  ## Development
56
70
 
@@ -70,3 +84,6 @@ The gem is available as open source under the terms of the [MIT License](https:/
70
84
  ## Code of Conduct
71
85
 
72
86
  Everyone interacting in the Anachronic project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/dvisockas/anachronic/blob/master/CODE_OF_CONDUCT.md).
87
+
88
+ ## Inspired by
89
+ - [Memoist](https://github.com/matthewrudy/memoist)
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'anachronic/version'
4
+ require 'anachronic/background_executor'
5
+ require 'anachronic/error'
6
+ require 'anachronic/override'
7
+ require 'anachronic/configuration'
8
+
9
+ module Anachronic
10
+ include Override
11
+ include Configuration
12
+ end
@@ -3,6 +3,7 @@
3
3
  require_relative './error.rb'
4
4
 
5
5
  module Anachronic
6
+ # Class for deciding a background execution backend
6
7
  class BackgroundExecutor
7
8
  class << self
8
9
  def call(instance, method, *args)
@@ -15,14 +16,18 @@ module Anachronic
15
16
 
16
17
  def executor
17
18
  @executor ||= begin
18
- return Executors::ApplicationJob if defined?(ApplicationJob)
19
- return Executors::ApplicationJob if defined?(Sidekiq)
20
- return Executors::Resque if defined?(Resque)
19
+ return Executors::ApplicationJob if default_or_defined?(ApplicationJob)
20
+ return Executors::Sidekiq if default_or_defined?(Sidekiq)
21
+ return Executors::Resque if default_or_defined?(Resque)
21
22
  end
22
23
  end
23
24
 
25
+ def default_or_defined?(name)
26
+ defined?(name) || config.default_executor == name
27
+ end
28
+
24
29
  def no_executor
25
- raise Anachronic::Error('No background executor defined, async methods will be executed synchronously')
30
+ raise Anachronic::Error('No background executor found')
26
31
  end
27
32
  end
28
33
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ostruct'
4
+
5
+ module Anachronic
6
+ module Configuration
7
+ def self.configure
8
+ @config ||= OpenStruct.new
9
+ yield(@config) if block_given?
10
+ @config
11
+ end
12
+
13
+ def self.config
14
+ @config || configure
15
+ end
16
+ end
17
+ end
@@ -1,13 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Anachronic
4
- module Executors
5
- class ApplicationJob
6
- def self.call(instance, method, *args)
4
+ module Executors
5
+ # Default executor for ApplicationJob backend
6
+ class ApplicationJob
7
+ class << self
8
+ def call(instance, method, *args)
7
9
  default_executor.perform_later(instance, method, *args)
8
10
  end
9
11
 
10
- def self.default_executor
12
+ def default_executor
11
13
  @default_executor ||= begin
12
14
  Class.new(ApplicationJob) do
13
15
  def perform_later(instance, method, *args)
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Anachronic
4
+ # Takes over a method and renames original method for later use
5
+ module Override
6
+ def async(method_name)
7
+ new_name = "anachronic__#{method_name}".to_sym
8
+ alias_method new_name, method_name
9
+
10
+ undef_method method_name
11
+
12
+ define_method(method_name) do |*args|
13
+ BackgroundExecutor.call(self, new_name, *args)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Anachronic
2
- VERSION = '0.42.2'
4
+ VERSION = '0.43.0'
3
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anachronic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.42.2
4
+ version: 0.43.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danielius Visockas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-10 00:00:00.000000000 Z
11
+ date: 2020-12-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Removing boilerplate from async code
14
14
  email:
@@ -30,11 +30,12 @@ files:
30
30
  - anachronic.gemspec
31
31
  - bin/console
32
32
  - bin/setup
33
- - lib/.keep
34
- - lib/anachronic/anachronic.rb
33
+ - lib/anachronic.rb
35
34
  - lib/anachronic/background_executor.rb
35
+ - lib/anachronic/configuration.rb
36
36
  - lib/anachronic/error.rb
37
37
  - lib/anachronic/executors/application_job.rb
38
+ - lib/anachronic/override.rb
38
39
  - lib/anachronic/version.rb
39
40
  homepage: https://github.com/dvisockas/anachronic
40
41
  licenses:
@@ -59,8 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
60
  - !ruby/object:Gem::Version
60
61
  version: '0'
61
62
  requirements: []
62
- rubyforge_project:
63
- rubygems_version: 2.7.8
63
+ rubygems_version: 3.1.4
64
64
  signing_key:
65
65
  specification_version: 4
66
66
  summary: Moving your method execution to the world of asynchronity
data/lib/.keep DELETED
File without changes
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "anachronic/version"
4
- require "anachronic/background_executor"
5
- require "anachronic/error"
6
-
7
- module Anachronic
8
- def async(method_name)
9
- new_name = "anachronic__#{method_name}".to_sym
10
- alias_method new_name, method_name
11
-
12
- define_method(method_name) do |*args|
13
- BackgroundExecutor.call(self, new_name, *args)
14
- end
15
- end
16
- end