lex-agentic-attention 0.1.0 → 0.1.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.
Files changed (23) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/README.md +51 -3
  4. data/lex-agentic-attention.gemspec +8 -0
  5. data/lib/legion/extensions/agentic/attention/blindspot/helpers/blindspot_engine.rb +2 -0
  6. data/lib/legion/extensions/agentic/attention/blindspot/version.rb +1 -1
  7. data/lib/legion/extensions/agentic/attention/feature_binding/helpers/binding_field.rb +1 -0
  8. data/lib/legion/extensions/agentic/attention/feature_binding/version.rb +1 -1
  9. data/lib/legion/extensions/agentic/attention/relevance_theory/helpers/relevance_engine.rb +3 -0
  10. data/lib/legion/extensions/agentic/attention/relevance_theory/version.rb +1 -1
  11. data/lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb +2 -0
  12. data/lib/legion/extensions/agentic/attention/sensory_gating/version.rb +1 -1
  13. data/lib/legion/extensions/agentic/attention/switching/helpers/switching_engine.rb +2 -0
  14. data/lib/legion/extensions/agentic/attention/switching/version.rb +1 -1
  15. data/lib/legion/extensions/agentic/attention/version.rb +1 -1
  16. data/spec/legion/extensions/agentic/attention/blindspot/helpers/blindspot_engine_spec.rb +15 -0
  17. data/spec/legion/extensions/agentic/attention/feature_binding/helpers/binding_field_spec.rb +14 -0
  18. data/spec/legion/extensions/agentic/attention/relevance_theory/helpers/relevance_engine_spec.rb +28 -0
  19. data/spec/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine_spec.rb +16 -1
  20. data/spec/legion/extensions/agentic/attention/switching/attention_switching_spec.rb +1 -1
  21. data/spec/legion/extensions/agentic/attention/switching/helpers/switching_engine_spec.rb +13 -0
  22. data/spec/spec_helper.rb +21 -23
  23. metadata +99 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 11316e7a48a460b4bfb317d22f335cf149e138d329df2f1ffbb91c6439915463
4
- data.tar.gz: 94a927cd12dde2ec8212462a6c504839096cb5a074945c8f89b65ebde28bf06e
3
+ metadata.gz: d961ce2f76f01fb190459016fec54b3591baa067656b471692ba7fefebe82b94
4
+ data.tar.gz: 6b398c695fdba1e1ed2c1b482221303b6aed674d2ce9a209370425beb7e4e946
5
5
  SHA512:
6
- metadata.gz: 177772a3cf51ff7e3d799445014bf601ac106070a26a5130a12110164133cc82baa38651108eae9ea9c0cdbaec0ba2984e38ff197af6e5c3f6bba669e54ee833
7
- data.tar.gz: 80ec4fb94b4ff8129ca765ff4e90a22429cd65155f00849a7845e8e8f23159e23ed3286039db62620f9584517637e74caee81e392a42005f4c22213a6ccd1627
6
+ metadata.gz: 13fdb20e46f9135e4ce4516aba7bf1abba147c987385868251a08c0efd375a01b652d170b78bf51543d38f1a518fea67c89b44c2a666f9084966ed9ca8d3f218
7
+ data.tar.gz: 5ddebb2fe449afe7ff30e46dcc9e1590bf1bc326c4659ed37d45b4d45604817a9ec8576543318b6a62ae363578f181f73a9abd6e93897c882154c3636e34e1da
data/CHANGELOG.md CHANGED
@@ -2,6 +2,27 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.1.3] - 2026-03-22
6
+
7
+ ### Changed
8
+ - Add 7 runtime sub-gem dependencies to gemspec (legion-cache, legion-crypt, legion-data, legion-json, legion-logging, legion-settings, legion-transport)
9
+ - Replace spec_helper stubs with real sub-gem helper requires and real Helpers::Lex module
10
+
11
+ ## [0.1.2] - 2026-03-18
12
+
13
+ ### Changed
14
+ - Enforce TASK_SET_TYPES validation in SwitchingEngine#register_task (returns nil for invalid task_type)
15
+ - Enforce INPUT_TYPES validation in RelevanceEngine#submit_input (returns nil for invalid input_type)
16
+ - Enforce EFFECT_TYPES validation in RelevanceEngine#submit_input (returns nil for invalid effect_type)
17
+ - ATTENTION_MODES and TARGET_STATES in Regulation skipped: internally computed by state machine, not external input params
18
+
19
+ ## [0.1.1] - 2026-03-18
20
+
21
+ ### Changed
22
+ - Enforce FEATURE_DIMENSIONS validation in BindingField#register_feature (returns nil for invalid dimension)
23
+ - Enforce MODALITY_TYPES validation in GatingEngine#create_filter (returns nil for invalid modality)
24
+ - Enforce DISCOVERY_METHODS validation in BlindspotEngine#register_blindspot (returns nil for invalid discovered_by)
25
+
5
26
  ## [0.1.0] - 2026-03-18
6
27
 
7
28
  ### Added
data/README.md CHANGED
@@ -1,13 +1,61 @@
1
1
  # lex-agentic-attention
2
2
 
3
- LEX agentic attention domain: focus, salience, cognitive control
3
+ Domain consolidation gem for attention, perception, and signal processing. Bundles 24 source extensions into one loadable unit under `Legion::Extensions::Agentic::Attention`.
4
4
 
5
- ## Sub-modules
5
+ ## Overview
6
6
 
7
- *(populated as extensions are consolidated)*
7
+ **Gem**: `lex-agentic-attention`
8
+ **Version**: 0.1.2
9
+ **Namespace**: `Legion::Extensions::Agentic::Attention`
10
+
11
+ ## Sub-Modules
12
+
13
+ | Sub-Module | Source Gem | Purpose |
14
+ |---|---|---|
15
+ | `Attention::Focus` | `lex-attention` | Selective attention filter — Miller's Law (7±2), habituation, goal-directed amplification |
16
+ | `Attention::Economy` | `lex-attention-economy` | Attention as scarce resource — allocation budgets, ROI tracking |
17
+ | `Attention::Regulation` | `lex-attention-regulation` | Top-down and bottom-up attention regulation |
18
+ | `Attention::Schema` | `lex-attention-schema` | Self-model of the attention system itself |
19
+ | `Attention::Spotlight` | `lex-attention-spotlight` | Spotlight metaphor — illumination radius, dimmer control |
20
+ | `Attention::Switching` | `lex-attention-switching` | Voluntary/involuntary attention shifts, switch cost tracking |
21
+ | `Attention::Blink` | `lex-attentional-blink` | Rapid succession signal suppression — temporal attention limits |
22
+ | `Attention::Telescope` | `lex-cognitive-telescope` | Long-range attentional focus |
23
+ | `Attention::Lens` | `lex-cognitive-lens` | Attentional focus shaping |
24
+ | `Attention::Prism` | `lex-cognitive-prism` | Multi-spectrum signal decomposition |
25
+ | `Attention::Lighthouse` | `lex-cognitive-lighthouse` | Beacon-based attentional guidance |
26
+ | `Attention::Blindspot` | `lex-cognitive-blindspot` | Attentional blind spots and gaps |
27
+ | `Attention::Kaleidoscope` | `lex-cognitive-kaleidoscope` | Multi-faceted attentional patterns |
28
+ | `Attention::Synesthesia` | `lex-cognitive-synesthesia` | Cross-modal attentional blending |
29
+ | `Attention::Arousal` | `lex-arousal` | Yerkes-Dodson inverted-U — optimal performance at moderate arousal |
30
+ | `Attention::Salience` | `lex-salience` | Weighted integration from eight cognitive sources |
31
+ | `Attention::SensoryGating` | `lex-sensory-gating` | Pre-attentive filtering of redundant stimuli (P50 model) |
32
+ | `Attention::SignalDetection` | `lex-signal-detection` | SDT modeling — sensitivity (d'), response bias (beta) |
33
+ | `Attention::Subliminal` | `lex-subliminal` | Below-threshold signal processing |
34
+ | `Attention::LatentInhibition` | `lex-latent-inhibition` | Learned irrelevance — reduced processing of previously irrelevant stimuli |
35
+ | `Attention::Surprise` | `lex-surprise` | Surprise signal computation from violated expectations |
36
+ | `Attention::RelevanceTheory` | `lex-relevance-theory` | Cognitive effort vs. contextual effect optimization |
37
+ | `Attention::Priming` | `lex-priming` | Prior exposure boosts related processing |
38
+ | `Attention::FeatureBinding` | `lex-feature-binding` | Binding separately-processed features into unified percepts |
39
+
40
+ ## Actors
41
+
42
+ - `Attention::FeatureBinding::Actors::Decay` — interval actor, decays bound feature groups
43
+ - `Attention::Schema::Actors::Decay` — interval actor, decays attention schema entries
8
44
 
9
45
  ## Installation
10
46
 
11
47
  ```ruby
12
48
  gem 'lex-agentic-attention'
13
49
  ```
50
+
51
+ ## Development
52
+
53
+ ```bash
54
+ bundle install
55
+ bundle exec rspec # 2288 examples, 0 failures
56
+ bundle exec rubocop # 0 offenses
57
+ ```
58
+
59
+ ## License
60
+
61
+ MIT
@@ -24,6 +24,14 @@ Gem::Specification.new do |spec|
24
24
  end
25
25
  spec.require_paths = ['lib']
26
26
 
27
+ spec.add_dependency 'legion-cache', '>= 1.3.11'
28
+ spec.add_dependency 'legion-crypt', '>= 1.4.9'
29
+ spec.add_dependency 'legion-data', '>= 1.4.17'
30
+ spec.add_dependency 'legion-json', '>= 1.2.1'
31
+ spec.add_dependency 'legion-logging', '>= 1.3.2'
32
+ spec.add_dependency 'legion-settings', '>= 1.3.14'
33
+ spec.add_dependency 'legion-transport', '>= 1.3.9'
34
+
27
35
  spec.add_development_dependency 'rspec', '~> 3.13'
28
36
  spec.add_development_dependency 'rubocop', '~> 1.60'
29
37
  spec.add_development_dependency 'rubocop-rspec', '~> 2.26'
@@ -18,6 +18,8 @@ module Legion
18
18
  end
19
19
 
20
20
  def register_blindspot(domain:, discovered_by:, description:, severity: DEFAULT_SEVERITY)
21
+ return nil unless DISCOVERY_METHODS.include?(discovered_by.to_sym)
22
+
21
23
  prune_blindspots_if_needed
22
24
  blindspot = Blindspot.new(domain: domain, discovered_by: discovered_by,
23
25
  description: description, severity: severity)
@@ -5,7 +5,7 @@ module Legion
5
5
  module Agentic
6
6
  module Attention
7
7
  module Blindspot
8
- VERSION = '0.1.0'
8
+ VERSION = '0.1.1'
9
9
  end
10
10
  end
11
11
  end
@@ -20,6 +20,7 @@ module Legion
20
20
 
21
21
  def register_feature(id:, dimension:, value:, source: :perception, salience: 0.5)
22
22
  return @features[id] if @features.key?(id)
23
+ return nil unless FEATURE_DIMENSIONS.include?(dimension.to_sym)
23
24
  return nil if @features.size >= MAX_FEATURES
24
25
 
25
26
  @features[id] = Feature.new(id: id, dimension: dimension, value: value, source: source, salience: salience)
@@ -5,7 +5,7 @@ module Legion
5
5
  module Agentic
6
6
  module Attention
7
7
  module FeatureBinding
8
- VERSION = '0.1.0'
8
+ VERSION = '0.1.1'
9
9
  end
10
10
  end
11
11
  end
@@ -19,6 +19,9 @@ module Legion
19
19
  def submit_input(content:, input_type:, context:, cognitive_effect: DEFAULT_EFFECT,
20
20
  processing_effort: DEFAULT_EFFORT, effect_type: :new_implication,
21
21
  source_id: nil)
22
+ return nil unless INPUT_TYPES.include?(input_type.to_sym)
23
+ return nil unless EFFECT_TYPES.include?(effect_type.to_sym)
24
+
22
25
  evict_oldest if @inputs.size >= MAX_INPUTS
23
26
 
24
27
  input = CognitiveInput.new(
@@ -5,7 +5,7 @@ module Legion
5
5
  module Agentic
6
6
  module Attention
7
7
  module RelevanceTheory
8
- VERSION = '0.1.0'
8
+ VERSION = '0.1.1'
9
9
  end
10
10
  end
11
11
  end
@@ -14,6 +14,8 @@ module Legion
14
14
  end
15
15
 
16
16
  def create_filter(modality:, gate_threshold: DEFAULT_GATE_THRESHOLD)
17
+ return nil unless MODALITY_TYPES.include?(modality.to_sym)
18
+
17
19
  prune_if_needed
18
20
  filter = SensoryFilter.new(modality: modality, gate_threshold: gate_threshold)
19
21
  @filters[filter.id] = filter
@@ -5,7 +5,7 @@ module Legion
5
5
  module Agentic
6
6
  module Attention
7
7
  module SensoryGating
8
- VERSION = '0.1.0'
8
+ VERSION = '0.1.1'
9
9
  end
10
10
  end
11
11
  end
@@ -16,6 +16,8 @@ module Legion
16
16
  end
17
17
 
18
18
  def register_task(name:, task_type: :analytical, complexity: 0.5)
19
+ return nil unless TASK_SET_TYPES.include?(task_type.to_sym)
20
+
19
21
  prune_tasks_if_needed
20
22
  task = TaskSet.new(name: name, task_type: task_type, complexity: complexity)
21
23
  @task_sets[task.id] = task
@@ -5,7 +5,7 @@ module Legion
5
5
  module Agentic
6
6
  module Attention
7
7
  module Switching
8
- VERSION = '0.1.0'
8
+ VERSION = '0.1.1'
9
9
  end
10
10
  end
11
11
  end
@@ -4,7 +4,7 @@ module Legion
4
4
  module Extensions
5
5
  module Agentic
6
6
  module Attention
7
- VERSION = '0.1.0'
7
+ VERSION = '0.1.3'
8
8
  end
9
9
  end
10
10
  end
@@ -18,6 +18,21 @@ RSpec.describe Legion::Extensions::Agentic::Attention::Blindspot::Helpers::Blind
18
18
  end
19
19
 
20
20
  describe '#register_blindspot' do
21
+ it 'rejects invalid discovered_by' do
22
+ result = engine.register_blindspot(
23
+ domain: :reasoning, discovered_by: :nonexistent, description: 'test'
24
+ )
25
+ expect(result).to be_nil
26
+ end
27
+
28
+ it 'accepts all valid DISCOVERY_METHODS' do
29
+ constants = Legion::Extensions::Agentic::Attention::Blindspot::Helpers::Constants
30
+ constants::DISCOVERY_METHODS.each_with_index do |method, i|
31
+ b = engine.register_blindspot(domain: :"d#{i}", discovered_by: method, description: "test #{i}")
32
+ expect(b).not_to be_nil
33
+ end
34
+ end
35
+
21
36
  it 'returns a Blindspot object' do
22
37
  expect(blindspot).to be_a(Legion::Extensions::Agentic::Attention::Blindspot::Helpers::Blindspot)
23
38
  end
@@ -24,6 +24,20 @@ RSpec.describe Legion::Extensions::Agentic::Attention::FeatureBinding::Helpers::
24
24
  expect(field.feature_count).to eq(1)
25
25
  end
26
26
 
27
+ it 'rejects invalid dimension' do
28
+ result = field.register_feature(id: 'f:bad', dimension: :nonexistent, value: :x)
29
+ expect(result).to be_nil
30
+ expect(field.feature_count).to eq(0)
31
+ end
32
+
33
+ it 'accepts all valid FEATURE_DIMENSIONS' do
34
+ constants::FEATURE_DIMENSIONS.each_with_index do |dim, i|
35
+ f = field.register_feature(id: "f:#{i}", dimension: dim, value: i)
36
+ expect(f).not_to be_nil
37
+ end
38
+ expect(field.feature_count).to eq(constants::FEATURE_DIMENSIONS.size)
39
+ end
40
+
27
41
  it 'enforces MAX_FEATURES limit' do
28
42
  constants::MAX_FEATURES.times do |i|
29
43
  field.register_feature(id: "f:#{i}", dimension: :color, value: i)
@@ -16,6 +16,34 @@ RSpec.describe Legion::Extensions::Agentic::Attention::RelevanceTheory::Helpers:
16
16
  engine.submit_input(content: 'x', input_type: :assertion, context: :c)
17
17
  expect(engine.history.last[:event]).to eq(:submitted)
18
18
  end
19
+
20
+ it 'rejects invalid input_type' do
21
+ result = engine.submit_input(content: 'test', input_type: :nonexistent_type, context: :general)
22
+ expect(result).to be_nil
23
+ end
24
+
25
+ it 'accepts all INPUT_TYPES' do
26
+ constants = Legion::Extensions::Agentic::Attention::RelevanceTheory::Helpers::Constants::INPUT_TYPES
27
+ constants.each do |val|
28
+ result = engine.submit_input(content: 'test', input_type: val, context: :general)
29
+ expect(result).not_to be_nil, "Expected #{val.inspect} to be accepted"
30
+ end
31
+ end
32
+
33
+ it 'rejects invalid effect_type' do
34
+ result = engine.submit_input(content: 'test', input_type: :assertion, context: :general,
35
+ effect_type: :nonexistent_effect)
36
+ expect(result).to be_nil
37
+ end
38
+
39
+ it 'accepts all EFFECT_TYPES' do
40
+ constants = Legion::Extensions::Agentic::Attention::RelevanceTheory::Helpers::Constants::EFFECT_TYPES
41
+ constants.each do |val|
42
+ result = engine.submit_input(content: 'test', input_type: :assertion, context: :general,
43
+ effect_type: val)
44
+ expect(result).not_to be_nil, "Expected #{val.inspect} to be accepted"
45
+ end
46
+ end
19
47
  end
20
48
 
21
49
  describe '#assess_relevance' do
@@ -14,6 +14,20 @@ RSpec.describe Legion::Extensions::Agentic::Attention::SensoryGating::Helpers::G
14
14
  filter
15
15
  expect(engine.to_h[:total_filters]).to eq(1)
16
16
  end
17
+
18
+ it 'rejects invalid modality' do
19
+ result = engine.create_filter(modality: :nonexistent)
20
+ expect(result).to be_nil
21
+ end
22
+
23
+ it 'accepts all valid MODALITY_TYPES' do
24
+ constants = Legion::Extensions::Agentic::Attention::SensoryGating::Helpers::Constants
25
+ constants::MODALITY_TYPES.each do |mod|
26
+ f = engine.create_filter(modality: mod)
27
+ expect(f).not_to be_nil
28
+ end
29
+ expect(engine.to_h[:total_filters]).to eq(constants::MODALITY_TYPES.size)
30
+ end
17
31
  end
18
32
 
19
33
  describe '#process_stimulus' do
@@ -105,7 +119,8 @@ RSpec.describe Legion::Extensions::Agentic::Attention::SensoryGating::Helpers::G
105
119
  it 'prunes oldest filter when limit reached' do
106
120
  stub_const('Legion::Extensions::Agentic::Attention::SensoryGating::Helpers::Constants::MAX_FILTERS', 3)
107
121
  eng = described_class.new
108
- 4.times { |i| eng.create_filter(modality: :"mod#{i}") }
122
+ modalities = %i[visual auditory textual semantic]
123
+ modalities.each { |m| eng.create_filter(modality: m) }
109
124
  expect(eng.to_h[:total_filters]).to eq(3)
110
125
  end
111
126
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  RSpec.describe Legion::Extensions::Agentic::Attention::Switching do
4
4
  it 'has a version number' do
5
- expect(Legion::Extensions::Agentic::Attention::Switching::VERSION).to eq('0.1.0')
5
+ expect(Legion::Extensions::Agentic::Attention::Switching::VERSION).to eq('0.1.1')
6
6
  end
7
7
  end
@@ -12,6 +12,19 @@ RSpec.describe Legion::Extensions::Agentic::Attention::Switching::Helpers::Switc
12
12
  task = engine.register_task(name: 'test')
13
13
  expect(task).to be_a(Legion::Extensions::Agentic::Attention::Switching::Helpers::TaskSet)
14
14
  end
15
+
16
+ it 'rejects invalid task_type' do
17
+ result = engine.register_task(name: 'bad', task_type: :nonexistent_type)
18
+ expect(result).to be_nil
19
+ end
20
+
21
+ it 'accepts all TASK_SET_TYPES' do
22
+ constants = Legion::Extensions::Agentic::Attention::Switching::Helpers::Constants::TASK_SET_TYPES
23
+ constants.each do |val|
24
+ result = engine.register_task(name: val.to_s, task_type: val)
25
+ expect(result).not_to be_nil, "Expected #{val.inspect} to be accepted"
26
+ end
27
+ end
15
28
  end
16
29
 
17
30
  describe '#activate_task' do
data/spec/spec_helper.rb CHANGED
@@ -1,41 +1,39 @@
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
11
- def self.fatal(_msg); end
12
- end
13
-
14
13
  module Extensions
15
- module Core
16
- def self.extended(_base); end
17
- end
18
-
19
14
  module Helpers
20
15
  module Lex
21
- def self.included(_base); end
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
22
23
  end
23
24
  end
24
- end
25
- end
26
25
 
27
- # rubocop:disable Lint/EmptyClass, Style/OneClassPerFile
28
- module Legion
29
- module Extensions
30
26
  module Actors
31
- class Every; end
32
- class Once; end
27
+ class Every
28
+ include Helpers::Lex
29
+ end
30
+
31
+ class Once
32
+ include Helpers::Lex
33
+ end
33
34
  end
34
35
  end
35
36
  end
36
- $LOADED_FEATURES << 'legion/extensions/actors/every'
37
- $LOADED_FEATURES << 'legion/extensions/actors/once'
38
- # rubocop:enable Lint/EmptyClass, Style/OneClassPerFile
39
37
 
40
38
  require 'legion/extensions/agentic/attention'
41
39
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-agentic-attention
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.3
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: rspec
14
112
  requirement: !ruby/object:Gem::Requirement