lex-swarm 0.2.1 → 0.2.2

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: '091179f34f2e912249d6519301ff828f60eefa69c61140fc969c0121a670ba6b'
4
- data.tar.gz: 395cac38c5ee3e2f3fdfaa7eebf716c092170cfed954f7eebbdb74b433c33a1e
3
+ metadata.gz: 44c1897aa216153d964378805ac63718afc2782bfeee0b9e69fb3c6b84e7c750
4
+ data.tar.gz: 225dacb3e327dd976379dc39760d77e72f28350b4c3881547be8cfd735716736
5
5
  SHA512:
6
- metadata.gz: 79edf29a31e230875e69c9ba40c804192949e132999b6996d611b377dbfdb53ca6f0495ec35aeb46d15698f41472d92096d488f814bd55758d7f3fa3084b93c4
7
- data.tar.gz: 3a852057224ed3ab333faef85c2d1d4077ad33569f83b54d50baf8f6554737c556707664265ae63ea97d05efcf6c43c59696e0706eb1944d88e1e93b82b38fa7
6
+ metadata.gz: 3e0331bfb72bc0f67669fd6a3b84a752387adc733e14c7eab07913d8a7438f51c3d727515246c2552faaef2c68b1faa8a035b4c99d50ae283548eba404e1bd27
7
+ data.tar.gz: '089cd79bcc1b9a1642fe55723373d012220619eea2455e808dd5b19983e5c291218c2367bac81f92c1e3a4a74514d07948932c751eb4e1164c68a7cd1f872ac9'
data/lex-swarm.gemspec CHANGED
@@ -25,5 +25,12 @@ Gem::Specification.new do |spec|
25
25
  Dir.glob('{lib,spec}/**/*') + %w[lex-swarm.gemspec Gemfile]
26
26
  end
27
27
  spec.require_paths = ['lib']
28
+ spec.add_dependency 'legion-cache', '>= 1.3.11'
29
+ spec.add_dependency 'legion-crypt', '>= 1.4.9'
30
+ spec.add_dependency 'legion-data', '>= 1.4.17'
31
+ spec.add_dependency 'legion-json', '>= 1.2.1'
32
+ spec.add_dependency 'legion-logging', '>= 1.3.2'
33
+ spec.add_dependency 'legion-settings', '>= 1.3.14'
34
+ spec.add_dependency 'legion-transport', '>= 1.3.9'
28
35
  spec.add_development_dependency 'legion-gaia', '>= 0.9.9'
29
36
  end
@@ -8,6 +8,9 @@ module Legion
8
8
  module Swarm
9
9
  module Actors
10
10
  class WorkspaceSync
11
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
12
+ Legion::Extensions::Helpers.const_defined?(:Lex)
13
+
11
14
  ROUTING_PREFIX = 'swarm.workspace'
12
15
 
13
16
  def publish_change(charter_id:, key:, operation:, value: nil, author: nil, version: nil, **) # rubocop:disable Metrics/ParameterLists
@@ -19,10 +22,10 @@ module Legion
19
22
  timestamp: Time.now.utc.to_s }
20
23
 
21
24
  Legion::Transport.publish(routing_key: routing_key, payload: payload)
22
- Legion::Logging.debug "[swarm-workspace-sync] published #{operation} #{key} to #{routing_key}"
25
+ log.debug "[swarm-workspace-sync] published #{operation} #{key} to #{routing_key}"
23
26
  { success: true, routing_key: routing_key }
24
27
  rescue StandardError => e
25
- Legion::Logging.warn "[swarm-workspace-sync] publish failed: #{e.message}"
28
+ log.warn "[swarm-workspace-sync] publish failed: #{e.message}"
26
29
  { success: true, skipped: :publish_error, message: e.message }
27
30
  end
28
31
 
@@ -12,7 +12,7 @@ module Legion
12
12
  charter = Helpers::Charter.new_charter(name: name, objective: objective,
13
13
  roles: roles, max_agents: max_agents, timeout: timeout)
14
14
  id = swarm_store.create(charter)
15
- Legion::Logging.info "[swarm] created: id=#{id[0..7]} name=#{name} max=#{max_agents} roles=#{roles.join(',')}"
15
+ log.info "[swarm] created: id=#{id[0..7]} name=#{name} max=#{max_agents} roles=#{roles.join(',')}"
16
16
  { charter_id: id, name: name, status: :forming }
17
17
  end
18
18
 
@@ -20,8 +20,8 @@ module Legion
20
20
  return { error: :invalid_role, valid: Helpers::Charter::ROLES } unless Helpers::Charter.valid_role?(role)
21
21
 
22
22
  result = swarm_store.join(charter_id, agent_id: agent_id, role: role)
23
- Legion::Logging.debug "[swarm] join: charter=#{charter_id[0..7]} agent=#{agent_id} role=#{role} result=#{result}"
24
- Legion::Logging.info "[swarm] agent joined: charter=#{charter_id[0..7]} agent=#{agent_id} role=#{role}" if result == :joined
23
+ log.debug "[swarm] join: charter=#{charter_id[0..7]} agent=#{agent_id} role=#{role} result=#{result}"
24
+ log.info "[swarm] agent joined: charter=#{charter_id[0..7]} agent=#{agent_id} role=#{role}" if result == :joined
25
25
  {
26
26
  joined: { joined: true, charter_id: charter_id },
27
27
  full: { error: :swarm_full },
@@ -32,8 +32,8 @@ module Legion
32
32
 
33
33
  def leave_swarm(charter_id:, agent_id:, **)
34
34
  result = swarm_store.leave(charter_id, agent_id: agent_id)
35
- Legion::Logging.debug "[swarm] leave: charter=#{charter_id[0..7]} agent=#{agent_id} result=#{result}"
36
- Legion::Logging.info "[swarm] agent left: charter=#{charter_id[0..7]} agent=#{agent_id}" if result == :left
35
+ log.debug "[swarm] leave: charter=#{charter_id[0..7]} agent=#{agent_id} result=#{result}"
36
+ log.info "[swarm] agent left: charter=#{charter_id[0..7]} agent=#{agent_id}" if result == :left
37
37
  {
38
38
  left: { left: true },
39
39
  not_found: { error: :not_found },
@@ -44,28 +44,28 @@ module Legion
44
44
  def complete_swarm(charter_id:, outcome:, **)
45
45
  result = swarm_store.complete(charter_id, outcome: outcome)
46
46
  if result
47
- Legion::Logging.info "[swarm] completed: charter=#{charter_id[0..7]} outcome=#{outcome}"
47
+ log.info "[swarm] completed: charter=#{charter_id[0..7]} outcome=#{outcome}"
48
48
  else
49
- Legion::Logging.debug "[swarm] complete failed: charter=#{charter_id[0..7]} not found"
49
+ log.debug "[swarm] complete failed: charter=#{charter_id[0..7]} not found"
50
50
  end
51
51
  result ? { completed: true, outcome: outcome } : { error: :not_found }
52
52
  end
53
53
 
54
54
  def get_swarm(charter_id:, **)
55
55
  charter = swarm_store.get(charter_id)
56
- Legion::Logging.debug "[swarm] get: charter=#{charter_id[0..7]} found=#{!charter.nil?}"
56
+ log.debug "[swarm] get: charter=#{charter_id[0..7]} found=#{!charter.nil?}"
57
57
  charter ? { found: true, charter: charter } : { found: false }
58
58
  end
59
59
 
60
60
  def active_swarms(**)
61
61
  charters = swarm_store.active_charters
62
- Legion::Logging.debug "[swarm] active: count=#{charters.size}"
62
+ log.debug "[swarm] active: count=#{charters.size}"
63
63
  { charters: charters, count: charters.size }
64
64
  end
65
65
 
66
66
  def swarm_status(**)
67
67
  total = swarm_store.count
68
- Legion::Logging.debug "[swarm] status: total=#{total}"
68
+ log.debug "[swarm] status: total=#{total}"
69
69
  { total: total }
70
70
  end
71
71
 
@@ -80,7 +80,7 @@ module Legion
80
80
  charter[:status] = :disbanded
81
81
  disbanded << charter[:charter_id]
82
82
  end
83
- Legion::Logging.debug "[swarm] stale check: checked=#{swarm_store.charters.size} disbanded=#{disbanded.size}"
83
+ log.debug "[swarm] stale check: checked=#{swarm_store.charters.size} disbanded=#{disbanded.size}"
84
84
  { checked: swarm_store.charters.size, disbanded: disbanded.size, disbanded_ids: disbanded }
85
85
  end
86
86
 
@@ -12,7 +12,7 @@ module Legion
12
12
 
13
13
  def workspace_put(charter_id:, key:, value:, author:, **)
14
14
  entry = workspace.put(charter_id, key: key, value: value, author: author)
15
- Legion::Logging.debug "[swarm-workspace] put: charter=#{charter_id[0..7]} key=#{key} v=#{entry[:version]}"
15
+ log.debug "[swarm-workspace] put: charter=#{charter_id[0..7]} key=#{key} v=#{entry[:version]}"
16
16
  { success: true, key: key, version: entry[:version], charter_id: charter_id }
17
17
  end
18
18
 
@@ -33,7 +33,7 @@ module Legion
33
33
  def workspace_delete(charter_id:, key:, **)
34
34
  removed = workspace.delete(charter_id, key: key)
35
35
  if removed
36
- Legion::Logging.debug "[swarm-workspace] delete: charter=#{charter_id[0..7]} key=#{key}"
36
+ log.debug "[swarm-workspace] delete: charter=#{charter_id[0..7]} key=#{key}"
37
37
  { success: true, key: key, charter_id: charter_id }
38
38
  else
39
39
  { success: false, reason: :not_found, key: key, charter_id: charter_id }
@@ -42,7 +42,7 @@ module Legion
42
42
 
43
43
  def workspace_clear(charter_id:, **)
44
44
  workspace.clear_charter(charter_id)
45
- Legion::Logging.debug "[swarm-workspace] clear: charter=#{charter_id[0..7]}"
45
+ log.debug "[swarm-workspace] clear: charter=#{charter_id[0..7]}"
46
46
  { success: true, charter_id: charter_id }
47
47
  end
48
48
 
@@ -3,7 +3,7 @@
3
3
  module Legion
4
4
  module Extensions
5
5
  module Swarm
6
- VERSION = '0.2.1'
6
+ VERSION = '0.2.2'
7
7
  end
8
8
  end
9
9
  end
@@ -7,11 +7,12 @@ RSpec.describe Legion::Extensions::Swarm::Actors::WorkspaceSync do
7
7
  subject(:actor) { described_class.allocate }
8
8
 
9
9
  describe '#publish_change' do
10
- it 'returns skipped when transport is not available' do
10
+ it 'returns skipped when transport publish fails' do
11
+ allow(Legion::Transport).to receive(:publish).and_raise(StandardError, 'not connected')
11
12
  result = actor.publish_change(charter_id: 'c1', key: 'k', value: 'v',
12
13
  author: 'a', version: 1, operation: :put)
13
14
  expect(result[:success]).to be true
14
- expect(result[:skipped]).to eq(:no_transport)
15
+ expect(result[:skipped]).to eq(:publish_error)
15
16
  end
16
17
  end
17
18
 
data/spec/spec_helper.rb CHANGED
@@ -1,13 +1,37 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'bundler/setup'
4
+ require 'legion/logging'
5
+ require 'legion/settings'
6
+ require 'legion/cache/helper'
7
+ require 'legion/crypt/helper'
8
+ require 'legion/data/helper'
9
+ require 'legion/json/helper'
10
+ require 'legion/transport/helper'
4
11
 
5
12
  module Legion
6
- module Logging
7
- def self.debug(_msg); end
8
- def self.info(_msg); end
9
- def self.warn(_msg); end
10
- def self.error(_msg); end
13
+ module Extensions
14
+ module Helpers
15
+ module Lex
16
+ include Legion::Logging::Helper
17
+ include Legion::Settings::Helper
18
+ include Legion::Cache::Helper
19
+ include Legion::Crypt::Helper
20
+ include Legion::Data::Helper
21
+ include Legion::JSON::Helper
22
+ include Legion::Transport::Helper
23
+ end
24
+ end
25
+
26
+ module Actors
27
+ class Every
28
+ include Helpers::Lex
29
+ end
30
+
31
+ class Once
32
+ include Helpers::Lex
33
+ end
34
+ end
11
35
  end
12
36
  end
13
37
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-swarm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -9,6 +9,104 @@ bindir: bin
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: legion-cache
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 1.3.11
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 1.3.11
26
+ - !ruby/object:Gem::Dependency
27
+ name: legion-crypt
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.4.9
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 1.4.9
40
+ - !ruby/object:Gem::Dependency
41
+ name: legion-data
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.4.17
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 1.4.17
54
+ - !ruby/object:Gem::Dependency
55
+ name: legion-json
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 1.2.1
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 1.2.1
68
+ - !ruby/object:Gem::Dependency
69
+ name: legion-logging
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 1.3.2
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 1.3.2
82
+ - !ruby/object:Gem::Dependency
83
+ name: legion-settings
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 1.3.14
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 1.3.14
96
+ - !ruby/object:Gem::Dependency
97
+ name: legion-transport
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.3.9
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 1.3.9
12
110
  - !ruby/object:Gem::Dependency
13
111
  name: legion-gaia
14
112
  requirement: !ruby/object:Gem::Requirement