shiny_json_logic 0.2.6 → 0.2.7

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/AGENTS.md +131 -0
  3. data/CHANGELOG.md +6 -0
  4. data/Gemfile.lock +1 -1
  5. data/README.md +39 -3
  6. data/badges/compat.json +2 -2
  7. data/lib/core_ext/array.rb +5 -0
  8. data/lib/shiny_json_logic/engine.rb +1 -13
  9. data/lib/shiny_json_logic/numericals/numerify.rb +9 -9
  10. data/lib/shiny_json_logic/numericals/with_error_handling.rb +15 -10
  11. data/lib/shiny_json_logic/operations/addition.rb +15 -5
  12. data/lib/shiny_json_logic/operations/all.rb +1 -1
  13. data/lib/shiny_json_logic/operations/and.rb +6 -1
  14. data/lib/shiny_json_logic/operations/base.rb +27 -0
  15. data/lib/shiny_json_logic/operations/coalesce.rb +5 -1
  16. data/lib/shiny_json_logic/operations/concatenation.rb +6 -3
  17. data/lib/shiny_json_logic/operations/different.rb +48 -4
  18. data/lib/shiny_json_logic/operations/division.rb +24 -11
  19. data/lib/shiny_json_logic/operations/double_not.rb +1 -1
  20. data/lib/shiny_json_logic/operations/equal.rb +44 -1
  21. data/lib/shiny_json_logic/operations/exists.rb +2 -2
  22. data/lib/shiny_json_logic/operations/filter.rb +2 -0
  23. data/lib/shiny_json_logic/operations/greater.rb +45 -1
  24. data/lib/shiny_json_logic/operations/greater_equal.rb +45 -1
  25. data/lib/shiny_json_logic/operations/inclusion.rb +3 -1
  26. data/lib/shiny_json_logic/operations/iterable/base.rb +25 -16
  27. data/lib/shiny_json_logic/operations/map.rb +10 -0
  28. data/lib/shiny_json_logic/operations/max.rb +7 -1
  29. data/lib/shiny_json_logic/operations/merge.rb +3 -1
  30. data/lib/shiny_json_logic/operations/min.rb +7 -1
  31. data/lib/shiny_json_logic/operations/missing.rb +8 -2
  32. data/lib/shiny_json_logic/operations/missing_some.rb +6 -4
  33. data/lib/shiny_json_logic/operations/modulo.rb +22 -3
  34. data/lib/shiny_json_logic/operations/none.rb +1 -1
  35. data/lib/shiny_json_logic/operations/not.rb +2 -1
  36. data/lib/shiny_json_logic/operations/or.rb +6 -1
  37. data/lib/shiny_json_logic/operations/product.rb +29 -2
  38. data/lib/shiny_json_logic/operations/smaller.rb +45 -1
  39. data/lib/shiny_json_logic/operations/smaller_equal.rb +45 -1
  40. data/lib/shiny_json_logic/operations/strict_different.rb +22 -4
  41. data/lib/shiny_json_logic/operations/strict_equal.rb +15 -3
  42. data/lib/shiny_json_logic/operations/substring.rb +3 -2
  43. data/lib/shiny_json_logic/operations/subtraction.rb +21 -3
  44. data/lib/shiny_json_logic/operations/throw.rb +1 -1
  45. data/lib/shiny_json_logic/operations/val.rb +4 -2
  46. data/lib/shiny_json_logic/operations/var.rb +3 -2
  47. data/lib/shiny_json_logic/operator_solver.rb +1 -1
  48. data/lib/shiny_json_logic/version.rb +1 -1
  49. data/lib/shiny_json_logic.rb +3 -0
  50. data/results/ruby.json +1 -1
  51. data/shiny_json_logic.gemspec +5 -5
  52. metadata +7 -5
@@ -6,9 +6,11 @@ module ShinyJsonLogic
6
6
  protected
7
7
 
8
8
  def run
9
- return nil if rules.empty?
9
+ return nil if rules.nil? || (rules.is_a?(Array) && rules.empty?)
10
10
 
11
- data.dig(*rules)
11
+ items = Array.wrap_nil(rules)
12
+ keys = items.map { |rule| evaluate(rule) }
13
+ data.dig(*keys)
12
14
  end
13
15
  end
14
16
  end
@@ -7,8 +7,9 @@ module ShinyJsonLogic
7
7
  protected
8
8
 
9
9
  def run
10
- key = rules.is_a?(Array) ? rules[0] : rules
11
- default = rules.is_a?(Array) ? rules[1] : nil
10
+ items = Array.wrap_nil(rules)
11
+ key = evaluate(items[0])
12
+ default = items[1] ? evaluate(items[1]) : nil
12
13
 
13
14
  return data if key.nil?
14
15
 
@@ -55,7 +55,7 @@ module ShinyJsonLogic
55
55
  "if" => Operations::If,
56
56
  "?:" => Operations::If,
57
57
  "filter" => Operations::Filter,
58
- "map" => Operations::Iterable::Base,
58
+ "map" => Operations::Map,
59
59
  "reduce" => Operations::Reduce,
60
60
  "all" => Operations::All,
61
61
  "none" => Operations::None,
@@ -1,3 +1,3 @@
1
1
  module ShinyJsonLogic
2
- VERSION = "0.2.6"
2
+ VERSION = "0.2.7"
3
3
  end
@@ -11,3 +11,6 @@ module ShinyJsonLogic
11
11
  end
12
12
  end
13
13
  end
14
+
15
+ JsonLogic = ShinyJsonLogic
16
+ JSONLogic = ShinyJsonLogic
data/results/ruby.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "totals": {
3
3
  "shiny_json_logic": {
4
- "passed": 948,
4
+ "passed": 1041,
5
5
  "total": 1126
6
6
  }
7
7
  }
@@ -14,16 +14,16 @@ Gem::Specification.new do |spec|
14
14
  ShinyJsonLogic is a pure-Ruby, zero-runtime-dependency implementation of the JSON Logic (JSONLogic) specification. Ruby 2.7+ compatible, actively maintained, test-driven, and designed for strict spec alignment and predictable behavior. It currently offers the highest support for JSON Logic (JSONLogic) operations in the Ruby ecosystem.
15
15
  }
16
16
 
17
- spec.homepage = "https://github.com/luismoyano/shiny-json-logic-ruby"
18
- spec.license = "MIT"
17
+ spec.homepage = "https://jsonlogicruby.com"
18
+ spec.license = "MIT"
19
19
 
20
20
  spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
21
21
 
22
22
  spec.metadata = {
23
23
  "homepage_uri" => spec.homepage,
24
- "source_code_uri" => spec.homepage,
25
- "documentation_uri" => "#{spec.homepage}#readme",
26
- "changelog_uri" => "#{spec.homepage}/blob/master/CHANGELOG.md",
24
+ "source_code_uri" => "https://github.com/luismoyano/shiny-json-logic-ruby",
25
+ "documentation_uri" => "https://github.com/luismoyano/shiny-json-logic-ruby#readme#readme",
26
+ "changelog_uri" => "https://github.com/luismoyano/shiny-json-logic-ruby/blob/master/CHANGELOG.md",
27
27
  "rubygems_mfa_required" => "true"
28
28
  }
29
29
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shiny_json_logic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luis Moyano
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-02-01 00:00:00.000000000 Z
11
+ date: 2026-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -114,6 +114,7 @@ files:
114
114
  - ".idea/vcs.xml"
115
115
  - ".rspec"
116
116
  - ".travis.yml"
117
+ - AGENTS.md
117
118
  - CHANGELOG.md
118
119
  - CONTRIBUTING.md
119
120
  - Gemfile
@@ -150,6 +151,7 @@ files:
150
151
  - lib/shiny_json_logic/operations/if.rb
151
152
  - lib/shiny_json_logic/operations/inclusion.rb
152
153
  - lib/shiny_json_logic/operations/iterable/base.rb
154
+ - lib/shiny_json_logic/operations/map.rb
153
155
  - lib/shiny_json_logic/operations/max.rb
154
156
  - lib/shiny_json_logic/operations/merge.rb
155
157
  - lib/shiny_json_logic/operations/min.rb
@@ -178,13 +180,13 @@ files:
178
180
  - lib/shiny_json_logic/version.rb
179
181
  - results/ruby.json
180
182
  - shiny_json_logic.gemspec
181
- homepage: https://github.com/luismoyano/shiny-json-logic-ruby
183
+ homepage: https://jsonlogicruby.com
182
184
  licenses:
183
185
  - MIT
184
186
  metadata:
185
- homepage_uri: https://github.com/luismoyano/shiny-json-logic-ruby
187
+ homepage_uri: https://jsonlogicruby.com
186
188
  source_code_uri: https://github.com/luismoyano/shiny-json-logic-ruby
187
- documentation_uri: https://github.com/luismoyano/shiny-json-logic-ruby#readme
189
+ documentation_uri: https://github.com/luismoyano/shiny-json-logic-ruby#readme#readme
188
190
  changelog_uri: https://github.com/luismoyano/shiny-json-logic-ruby/blob/master/CHANGELOG.md
189
191
  rubygems_mfa_required: 'true'
190
192
  post_install_message: