lex-conditioner 0.3.2 → 0.3.4

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: 94d8e7e0baf6a35400f1b5a69552361508615090608b6d7977f7c1e31ab18a91
4
- data.tar.gz: 752e0c0b5ec72e910ede307337668c4d505fc4cbebcb72c91113c42c29326152
3
+ metadata.gz: e410713095495288bdfa16d6c28e16bf5c91b0237ac0fc2a66261cc19da54222
4
+ data.tar.gz: 549d7480678640d62d5db32b10c731c0b765fb2aab6a8fa254b583c256c7fda6
5
5
  SHA512:
6
- metadata.gz: dee8d4d758f4c13fed75d08d2043a254b2146b90aa54c0b07496b83290147fc60cd74209cc2f065f6a4ed197484f1cc4c98db3bf12890303a6179d48b5a9957f
7
- data.tar.gz: cbd042f36e2f33fbb10677d960cf5e96e09c728014e7673c6480c40ada1cddc8c49ddfe89741c282369490fe9f8612d9a86784bd64f5a2b356808a60f352fba8
6
+ metadata.gz: a03e3e36d2fe342689417bb51e36e59916aa326cc6bb74b0c5a23465905f9a307f61c7c893e31734d7aa89d40b9f7fc75827963766cfa93003a894ed16d5f0e6
7
+ data.tar.gz: ab4d6e1c2dbd451a154007a8ab1a2a7c8e01d7b66829146a6aa7c5864848ee0fa60dafd98c931cfde9d31ef941843f290927440ddbd3d1ae422593e1dcaa5b6d
@@ -10,8 +10,8 @@ jobs:
10
10
  ci:
11
11
  uses: LegionIO/.github/.github/workflows/ci.yml@main
12
12
 
13
- lint:
14
- uses: LegionIO/.github/.github/workflows/lint-patterns.yml@main
13
+ excluded-files:
14
+ uses: LegionIO/.github/.github/workflows/excluded-files.yml@main
15
15
 
16
16
  security:
17
17
  uses: LegionIO/.github/.github/workflows/security-scan.yml@main
@@ -27,8 +27,8 @@ jobs:
27
27
  uses: LegionIO/.github/.github/workflows/stale.yml@main
28
28
 
29
29
  release:
30
- needs: [ci, lint]
30
+ needs: [ci, excluded-files]
31
31
  if: github.event_name == 'push' && github.ref == 'refs/heads/main'
32
32
  uses: LegionIO/.github/.github/workflows/release.yml@main
33
33
  secrets:
34
- rubygems-api-key: ${{ secrets.RUBYGEMS_API_KEY }}
34
+ rubygems-api-key: ${{ secrets.RUBYGEMS_API_KEY }}
data/.rubocop.yml CHANGED
@@ -1,49 +1,2 @@
1
- AllCops:
2
- TargetRubyVersion: 3.4
3
- NewCops: enable
4
- SuggestExtensions: false
5
-
6
- Layout/LineLength:
7
- Max: 160
8
- Layout/SpaceAroundEqualsInParameterDefault:
9
- EnforcedStyle: space
10
- Layout/HashAlignment:
11
- EnforcedHashRocketStyle: table
12
- EnforcedColonStyle: table
13
-
14
- Metrics/MethodLength:
15
- Max: 50
16
- Metrics/ClassLength:
17
- Max: 1500
18
- Metrics/ModuleLength:
19
- Max: 1500
20
- Metrics/BlockLength:
21
- Max: 40
22
- Exclude:
23
- - 'spec/**/*'
24
- Metrics/AbcSize:
25
- Max: 60
26
- Metrics/CyclomaticComplexity:
27
- Max: 15
28
- Metrics/PerceivedComplexity:
29
- Max: 17
30
- Metrics/ParameterLists:
31
- Enabled: false
32
-
33
- Style/Documentation:
34
- Enabled: false
35
- Style/SymbolArray:
36
- Enabled: true
37
- Style/FrozenStringLiteralComment:
38
- Enabled: true
39
- EnforcedStyle: always
40
-
41
- Naming/FileName:
42
- Enabled: false
43
- Naming/PredicateMethod:
44
- Enabled: false
45
- Naming/PredicatePrefix:
46
- Enabled: false
47
-
48
- Gemspec/DevelopmentDependencies:
49
- Enabled: false
1
+ inherit_gem:
2
+ rubocop-legion: config/lex.yml
data/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.4] - 2026-03-30
4
+
5
+ ### Added
6
+ - Specs for DomainClassifier (12 examples), ConsentTiers (11 examples), and ConflictResolver (17 examples)
7
+
8
+ ### Fixed
9
+ - DomainClassifier now emits `conditioner.failed` status on invalid classifications
10
+ - ConflictResolver `valid:` field now reflects the actual resolution outcome
11
+ - Collapsed Lint/DuplicateBranch offense in ConflictResolver
12
+
13
+ ## [0.3.3] - 2026-03-30
14
+
15
+ ### Changed
16
+ - update to rubocop-legion 0.1.7, resolve all offenses
17
+
3
18
  ## [0.3.2] - 2026-03-27
4
19
 
5
20
  ### Changed
data/CLAUDE.md CHANGED
@@ -10,7 +10,7 @@ Legion Extension that applies conditional statements to tasks within relationshi
10
10
 
11
11
  **GitHub**: https://github.com/LegionIO/lex-conditioner
12
12
  **License**: MIT
13
- **Version**: 0.3.0
13
+ **Version**: 0.3.1
14
14
 
15
15
  ## Architecture
16
16
 
data/Gemfile CHANGED
@@ -9,6 +9,7 @@ group :test do
9
9
  gem 'rspec', '~> 3.13'
10
10
  gem 'rspec_junit_formatter'
11
11
  gem 'rubocop', '~> 1.75'
12
+ gem 'rubocop-legion', '~> 0.1', require: false
12
13
  gem 'rubocop-rspec'
13
14
  gem 'simplecov'
14
15
  end
@@ -6,8 +6,10 @@ module Legion
6
6
  module Extensions
7
7
  module Conditioner
8
8
  class Client
9
+ include Legion::JSON::Helper
10
+
9
11
  def evaluate(conditions:, values:)
10
- conditions_json = conditions.is_a?(String) ? conditions : Legion::JSON.dump(conditions)
12
+ conditions_json = conditions.is_a?(String) ? conditions : json_dump(conditions)
11
13
  condition = Condition.new(conditions: conditions_json, values: values)
12
14
  {
13
15
  valid: condition.valid?,
@@ -6,8 +6,10 @@ module Legion
6
6
  module Extensions
7
7
  module Conditioner
8
8
  class Condition
9
+ include Legion::JSON::Helper
10
+
9
11
  def initialize(args)
10
- @conditions = Legion::JSON.load(args[:conditions])
12
+ @conditions = json_load(args[:conditions])
11
13
  @values = to_dotted_hash(args[:values])
12
14
  end
13
15
 
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/conditioner/helpers/condition'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Conditioner
8
+ module Runners
9
+ module ConflictResolver
10
+ def resolve(conditions:, competing_conditions: nil, **payload)
11
+ primary = Legion::Extensions::Conditioner::Condition.new(conditions: conditions,
12
+ values: payload)
13
+
14
+ resolution = if competing_conditions.nil?
15
+ primary.valid? ? 'primary' : 'none'
16
+ elsif primary.valid?
17
+ 'primary'
18
+ else
19
+ secondary = Legion::Extensions::Conditioner::Condition.new(
20
+ conditions: competing_conditions,
21
+ values: payload
22
+ )
23
+
24
+ if secondary.valid?
25
+ 'secondary'
26
+ else
27
+ 'none'
28
+ end
29
+ end
30
+
31
+ status = resolution == 'none' ? 'conditioner.failed' : 'task.queued'
32
+ task_update(payload[:task_id], status, **payload) unless payload[:task_id].nil?
33
+
34
+ { success: true, valid: resolution != 'none', resolution: resolution }
35
+ rescue StandardError => e
36
+ log.log_exception(e, component_type: :runner)
37
+ task_update(payload[:task_id], 'conditioner.exception', **payload) unless payload[:task_id].nil?
38
+ end
39
+
40
+ include Legion::Extensions::Helpers::Lex
41
+ include Legion::Extensions::Helpers::Task
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/conditioner/helpers/condition'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Conditioner
8
+ module Runners
9
+ module ConsentTiers
10
+ TIERS = %w[tier1 tier2 tier3].freeze
11
+
12
+ def evaluate(conditions:, tier: nil, **payload)
13
+ conditioner = Legion::Extensions::Conditioner::Condition.new(conditions: conditions,
14
+ values: payload.merge(tier: tier))
15
+
16
+ granted_tier = if conditioner.valid? && TIERS.include?(tier.to_s)
17
+ tier.to_s
18
+ elsif conditioner.valid?
19
+ TIERS.first
20
+ end
21
+
22
+ status = conditioner.valid? ? 'task.queued' : 'conditioner.failed'
23
+
24
+ task_update(payload[:task_id], status, **payload) unless payload[:task_id].nil?
25
+
26
+ { success: true, valid: conditioner.valid?, tier: granted_tier }
27
+ rescue StandardError => e
28
+ log.log_exception(e, component_type: :runner)
29
+ task_update(payload[:task_id], 'conditioner.exception', **payload) unless payload[:task_id].nil?
30
+ end
31
+
32
+ include Legion::Extensions::Helpers::Lex
33
+ include Legion::Extensions::Helpers::Task
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/conditioner/helpers/condition'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Conditioner
8
+ module Runners
9
+ module DomainClassifier
10
+ def classify(conditions:, domain: nil, **payload)
11
+ conditioner = Legion::Extensions::Conditioner::Condition.new(conditions: conditions,
12
+ values: payload.merge(domain: domain))
13
+
14
+ classification = if domain
15
+ conditioner.valid? ? domain.to_s : 'unclassified'
16
+ else
17
+ conditioner.valid? ? 'default' : 'unclassified'
18
+ end
19
+
20
+ status = conditioner.valid? ? 'task.queued' : 'conditioner.failed'
21
+ task_update(payload[:task_id], status, **payload) unless payload[:task_id].nil?
22
+
23
+ { success: true, valid: conditioner.valid?, domain: classification }
24
+ rescue StandardError => e
25
+ log.log_exception(e, component_type: :runner)
26
+ task_update(payload[:task_id], 'conditioner.exception', **payload) unless payload[:task_id].nil?
27
+ end
28
+
29
+ include Legion::Extensions::Helpers::Lex
30
+ include Legion::Extensions::Helpers::Task
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -3,7 +3,7 @@
3
3
  module Legion
4
4
  module Extensions
5
5
  module Conditioner
6
- VERSION = '0.3.2'
6
+ VERSION = '0.3.4'
7
7
  end
8
8
  end
9
9
  end
@@ -6,7 +6,7 @@ require_relative 'conditioner/client'
6
6
  module Legion
7
7
  module Extensions
8
8
  module Conditioner
9
- extend Legion::Extensions::Core if Legion::Extensions.const_defined? :Core
9
+ extend Legion::Extensions::Core if Legion::Extensions.const_defined? :Core, false
10
10
  end
11
11
  end
12
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-conditioner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -137,6 +137,9 @@ files:
137
137
  - lib/legion/extensions/conditioner/helpers/comparator.rb
138
138
  - lib/legion/extensions/conditioner/helpers/condition.rb
139
139
  - lib/legion/extensions/conditioner/runners/conditioner.rb
140
+ - lib/legion/extensions/conditioner/runners/conflict_resolver.rb
141
+ - lib/legion/extensions/conditioner/runners/consent_tiers.rb
142
+ - lib/legion/extensions/conditioner/runners/domain_classifier.rb
140
143
  - lib/legion/extensions/conditioner/transport.rb
141
144
  - lib/legion/extensions/conditioner/transport/exchanges/task.rb
142
145
  - lib/legion/extensions/conditioner/transport/messages/conditioner.rb