anachronic 0.42.6 → 0.43.3

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: a94b2596cc6701797823e11d54f2033cf761befcd3bc7b02a698971b76e15fac
4
- data.tar.gz: 14d03b753290f1aa7a8aba961e7bc26ad7e399413b7212897da1c2ea201844f4
3
+ metadata.gz: 1742cd2c69944236145c23ba37f3c9ee355dd02e05913066f6989dd49e95d191
4
+ data.tar.gz: 8f28901c9c5d7a8c35ac1a84fcac8d0fdb63af3bdd864e353560994e62d71a5c
5
5
  SHA512:
6
- metadata.gz: 692188099eb895cdb4e46511dbf67fe5faedd78973193aa1d56eb4157091ab45b52301dea34ffb39352ebe2732575b4af2985c9d17cd3e99378c4cee1d343093
7
- data.tar.gz: 16d009f6e1054d8e4757538f20fb42cf0f8387cd71392aad10cc83ee133f4c1f3482d2127a0d1df28a0b179b825939973d3b770e15054bd20c26c6a75579dbe7
6
+ metadata.gz: d088e4b8e592ac8ba3ffb621b4ecd4778fb0d0da77093201ab897ca82c9d8d6a415b5f868b4e0cb5bb7522a33bf5382a60c69f50c3c0326037dbf6d3732c4dc7
7
+ data.tar.gz: 40741088da5211fa6a19bb254b9238a0c52ce5e3a6f3e0b28b3b49d8d0bfedc3eee9bb3bb2e3e7722cfc0b17b30db5112dc48d57a33f519a9cb3a3efedb2b4c8
data/.gitignore CHANGED
@@ -6,6 +6,6 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
-
9
+ *.gem
10
10
  # rspec failure tracking
11
11
  .rspec_status
data/Gemfile CHANGED
@@ -4,3 +4,9 @@ gemspec
4
4
 
5
5
  gem 'rake', '~> 12.0'
6
6
  gem 'rspec', '~> 3.0'
7
+
8
+ group :test do
9
+ gem 'rails', '~> 6.1'
10
+ gem 'resque', '~> 2.0'
11
+ gem 'sidekiq', '~> 6.0'
12
+ end
@@ -1,34 +1,191 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- anachronic (0.42.6)
4
+ anachronic (0.43.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- diff-lcs (1.4.4)
9
+ actioncable (6.1.0)
10
+ actionpack (= 6.1.0)
11
+ activesupport (= 6.1.0)
12
+ nio4r (~> 2.0)
13
+ websocket-driver (>= 0.6.1)
14
+ actionmailbox (6.1.0)
15
+ actionpack (= 6.1.0)
16
+ activejob (= 6.1.0)
17
+ activerecord (= 6.1.0)
18
+ activestorage (= 6.1.0)
19
+ activesupport (= 6.1.0)
20
+ mail (>= 2.7.1)
21
+ actionmailer (6.1.0)
22
+ actionpack (= 6.1.0)
23
+ actionview (= 6.1.0)
24
+ activejob (= 6.1.0)
25
+ activesupport (= 6.1.0)
26
+ mail (~> 2.5, >= 2.5.4)
27
+ rails-dom-testing (~> 2.0)
28
+ actionpack (6.1.0)
29
+ actionview (= 6.1.0)
30
+ activesupport (= 6.1.0)
31
+ rack (~> 2.0, >= 2.0.9)
32
+ rack-test (>= 0.6.3)
33
+ rails-dom-testing (~> 2.0)
34
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
35
+ actiontext (6.1.0)
36
+ actionpack (= 6.1.0)
37
+ activerecord (= 6.1.0)
38
+ activestorage (= 6.1.0)
39
+ activesupport (= 6.1.0)
40
+ nokogiri (>= 1.8.5)
41
+ actionview (6.1.0)
42
+ activesupport (= 6.1.0)
43
+ builder (~> 3.1)
44
+ erubi (~> 1.4)
45
+ rails-dom-testing (~> 2.0)
46
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
47
+ activejob (6.1.0)
48
+ activesupport (= 6.1.0)
49
+ globalid (>= 0.3.6)
50
+ activemodel (6.1.0)
51
+ activesupport (= 6.1.0)
52
+ activerecord (6.1.0)
53
+ activemodel (= 6.1.0)
54
+ activesupport (= 6.1.0)
55
+ activestorage (6.1.0)
56
+ actionpack (= 6.1.0)
57
+ activejob (= 6.1.0)
58
+ activerecord (= 6.1.0)
59
+ activesupport (= 6.1.0)
60
+ marcel (~> 0.3.1)
61
+ mimemagic (~> 0.3.2)
62
+ activesupport (6.1.0)
63
+ concurrent-ruby (~> 1.0, >= 1.0.2)
64
+ i18n (>= 1.6, < 2)
65
+ minitest (>= 5.1)
66
+ tzinfo (~> 2.0)
67
+ zeitwerk (~> 2.3)
68
+ builder (3.2.4)
69
+ concurrent-ruby (1.1.7)
70
+ connection_pool (2.2.3)
71
+ crass (1.0.6)
72
+ diff-lcs (1.3)
73
+ erubi (1.10.0)
74
+ globalid (0.4.2)
75
+ activesupport (>= 4.2.0)
76
+ i18n (1.8.5)
77
+ concurrent-ruby (~> 1.0)
78
+ loofah (2.8.0)
79
+ crass (~> 1.0.2)
80
+ nokogiri (>= 1.5.9)
81
+ mail (2.7.1)
82
+ mini_mime (>= 0.1.1)
83
+ marcel (0.3.3)
84
+ mimemagic (~> 0.3.2)
85
+ method_source (1.0.0)
86
+ mimemagic (0.3.5)
87
+ mini_mime (1.0.2)
88
+ mini_portile2 (2.4.0)
89
+ minitest (5.14.2)
90
+ mono_logger (1.1.0)
91
+ multi_json (1.15.0)
92
+ mustermann (1.1.1)
93
+ ruby2_keywords (~> 0.0.1)
94
+ nio4r (2.5.4)
95
+ nokogiri (1.10.10)
96
+ mini_portile2 (~> 2.4.0)
97
+ rack (2.2.3)
98
+ rack-protection (2.1.0)
99
+ rack
100
+ rack-test (1.1.0)
101
+ rack (>= 1.0, < 3)
102
+ rails (6.1.0)
103
+ actioncable (= 6.1.0)
104
+ actionmailbox (= 6.1.0)
105
+ actionmailer (= 6.1.0)
106
+ actionpack (= 6.1.0)
107
+ actiontext (= 6.1.0)
108
+ actionview (= 6.1.0)
109
+ activejob (= 6.1.0)
110
+ activemodel (= 6.1.0)
111
+ activerecord (= 6.1.0)
112
+ activestorage (= 6.1.0)
113
+ activesupport (= 6.1.0)
114
+ bundler (>= 1.15.0)
115
+ railties (= 6.1.0)
116
+ sprockets-rails (>= 2.0.0)
117
+ rails-dom-testing (2.0.3)
118
+ activesupport (>= 4.2.0)
119
+ nokogiri (>= 1.6)
120
+ rails-html-sanitizer (1.3.0)
121
+ loofah (~> 2.3)
122
+ railties (6.1.0)
123
+ actionpack (= 6.1.0)
124
+ activesupport (= 6.1.0)
125
+ method_source
126
+ rake (>= 0.8.7)
127
+ thor (~> 1.0)
10
128
  rake (12.3.3)
11
- rspec (3.9.0)
12
- rspec-core (~> 3.9.0)
13
- rspec-expectations (~> 3.9.0)
14
- rspec-mocks (~> 3.9.0)
15
- rspec-core (3.9.2)
16
- rspec-support (~> 3.9.3)
17
- rspec-expectations (3.9.2)
129
+ redis (4.2.5)
130
+ redis-namespace (1.8.0)
131
+ redis (>= 3.0.4)
132
+ resque (2.0.0)
133
+ mono_logger (~> 1.0)
134
+ multi_json (~> 1.0)
135
+ redis-namespace (~> 1.6)
136
+ sinatra (>= 0.9.2)
137
+ vegas (~> 0.1.2)
138
+ rspec (3.8.0)
139
+ rspec-core (~> 3.8.0)
140
+ rspec-expectations (~> 3.8.0)
141
+ rspec-mocks (~> 3.8.0)
142
+ rspec-core (3.8.0)
143
+ rspec-support (~> 3.8.0)
144
+ rspec-expectations (3.8.3)
18
145
  diff-lcs (>= 1.2.0, < 2.0)
19
- rspec-support (~> 3.9.0)
20
- rspec-mocks (3.9.1)
146
+ rspec-support (~> 3.8.0)
147
+ rspec-mocks (3.8.0)
21
148
  diff-lcs (>= 1.2.0, < 2.0)
22
- rspec-support (~> 3.9.0)
23
- rspec-support (3.9.3)
149
+ rspec-support (~> 3.8.0)
150
+ rspec-support (3.8.0)
151
+ ruby2_keywords (0.0.2)
152
+ sidekiq (6.1.2)
153
+ connection_pool (>= 2.2.2)
154
+ rack (~> 2.0)
155
+ redis (>= 4.2.0)
156
+ sinatra (2.1.0)
157
+ mustermann (~> 1.0)
158
+ rack (~> 2.2)
159
+ rack-protection (= 2.1.0)
160
+ tilt (~> 2.0)
161
+ sprockets (4.0.2)
162
+ concurrent-ruby (~> 1.0)
163
+ rack (> 1, < 3)
164
+ sprockets-rails (3.2.2)
165
+ actionpack (>= 4.0)
166
+ activesupport (>= 4.0)
167
+ sprockets (>= 3.0.0)
168
+ thor (1.0.1)
169
+ tilt (2.0.10)
170
+ tzinfo (2.0.4)
171
+ concurrent-ruby (~> 1.0)
172
+ vegas (0.1.11)
173
+ rack (>= 1.0.0)
174
+ websocket-driver (0.7.3)
175
+ websocket-extensions (>= 0.1.0)
176
+ websocket-extensions (0.1.5)
177
+ zeitwerk (2.4.2)
24
178
 
25
179
  PLATFORMS
26
180
  ruby
27
181
 
28
182
  DEPENDENCIES
29
183
  anachronic!
184
+ rails (~> 6.1)
30
185
  rake (~> 12.0)
186
+ resque (~> 2.0)
31
187
  rspec (~> 3.0)
188
+ sidekiq (~> 6.0)
32
189
 
33
190
  BUNDLED WITH
34
191
  2.1.4
data/README.md CHANGED
@@ -50,9 +50,21 @@ Or install it yourself as:
50
50
 
51
51
  $ gem install anachronic
52
52
 
53
- ## 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
+ - Sidekiq
65
+ - ApplicationJob
66
+ - Resque
54
67
 
55
- TODO: Write usage instructions here
56
68
 
57
69
  ## Development
58
70
 
data/Rakefile CHANGED
@@ -1,7 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/gem_tasks'
4
- require 'rspec/core/rake_task'
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
5
3
 
6
4
  RSpec::Core::RakeTask.new(:spec)
7
5
 
@@ -1,17 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'anachronic/version'
4
- require 'anachronic/error'
5
4
  require 'anachronic/background_executor'
6
- require 'anachronic/executors/application_job'
5
+ require 'anachronic/error'
6
+ require 'anachronic/override'
7
+ require 'anachronic/configuration'
7
8
 
8
9
  module Anachronic
9
- def async(method_name)
10
- new_name = "anachronic__#{method_name}".to_sym
11
- alias_method new_name, method_name
12
-
13
- define_method(method_name) do |*args|
14
- BackgroundExecutor.call(self, new_name, *args)
15
- end
16
- end
10
+ include Override
11
+ include Configuration
17
12
  end
@@ -1,6 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'anachronic/error'
4
+ require 'anachronic/executors/sidekiq'
5
+ require 'anachronic/executors/application_job'
6
+ require 'anachronic/executors/resque'
7
+
3
8
  module Anachronic
9
+ # Class for deciding a background execution backend
4
10
  class BackgroundExecutor
5
11
  class << self
6
12
  def call(instance, method, *args)
@@ -12,14 +18,19 @@ module Anachronic
12
18
  private
13
19
 
14
20
  def executor
15
- return Executors::ApplicationJob if defined?(ApplicationJob)
16
- return Executors::ApplicationJob if defined?(Sidekiq)
21
+ @executor ||= begin
22
+ return Anachronic::Executors::Sidekiq if defined?('Sidekiq')
23
+ return Anachronic::Executors::ApplicationJob if defined?('ApplicationJob')
24
+ return Anachronic::Executors::Resque if defined?('Resque')
25
+ end
26
+ end
17
27
 
18
- Executors::Resque if defined?(Resque)
28
+ def default_or_defined?(name)
29
+ defined?(name.constantize) || config.default_executor.name == name
19
30
  end
20
31
 
21
32
  def no_executor
22
- raise Anachronic::Error, 'No background executor defined, async methods will be executed synchronously'
33
+ raise Error('No background executor found')
23
34
  end
24
35
  end
25
36
  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
@@ -2,16 +2,21 @@
2
2
 
3
3
  module Anachronic
4
4
  module Executors
5
+ # Default executor for ApplicationJob backend
5
6
  class ApplicationJob
6
- def self.call(instance, method, *args)
7
- default_executor.perform_later(instance, method, *args)
8
- end
7
+ class << self
8
+ def call(instance, method, *args)
9
+ executor.perform_later(instance, method, *args)
10
+ end
11
+
12
+ def executor
13
+ @executor ||= begin
14
+ return unless defined? Applicationjob
9
15
 
10
- def self.default_executor
11
- @default_executor ||= begin
12
- Class.new(ApplicationJob) do
13
- def perform_later(instance, method, *args)
14
- instance.public_send(method, *args)
16
+ Class.new(ApplicationJob) do
17
+ def perform_later(instance, method, *args)
18
+ instance.public_send(method, *args)
19
+ end
15
20
  end
16
21
  end
17
22
  end
@@ -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,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Anachronic
4
- VERSION = '0.42.6'
4
+ VERSION = '0.43.3'
5
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.6
4
+ version: 0.43.3
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:
@@ -32,8 +32,10 @@ files:
32
32
  - bin/setup
33
33
  - lib/anachronic.rb
34
34
  - lib/anachronic/background_executor.rb
35
+ - lib/anachronic/configuration.rb
35
36
  - lib/anachronic/error.rb
36
37
  - lib/anachronic/executors/application_job.rb
38
+ - lib/anachronic/override.rb
37
39
  - lib/anachronic/version.rb
38
40
  homepage: https://github.com/dvisockas/anachronic
39
41
  licenses:
@@ -58,8 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
60
  - !ruby/object:Gem::Version
59
61
  version: '0'
60
62
  requirements: []
61
- rubyforge_project:
62
- rubygems_version: 2.7.8
63
+ rubygems_version: 3.1.4
63
64
  signing_key:
64
65
  specification_version: 4
65
66
  summary: Moving your method execution to the world of asynchronity