tina4ruby 3.10.0 → 3.10.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: b43c80adf7c00f71f0c14d64b4660f612b0124008b6a4821f431bae1d25c88d8
4
- data.tar.gz: ca4230e2b17265849c05e5118c095f7359a7728036e299dc2813a56c53f85c47
3
+ metadata.gz: b49886a65ba68f1102f4c03b3054c6f0efd4cc576a1083e627981a8832986902
4
+ data.tar.gz: b5a5cf59633ba153be413a974bd32d6128d6e56e6f901e4a16afce9380f30e94
5
5
  SHA512:
6
- metadata.gz: 8200644fd078c8c4cb635610bef5392daddda3f86d1d7366973d16ffbd9457eb9e710db6cba8430384ff6b052b55dbbff0129c3ca31f878e067aab608e053ed0
7
- data.tar.gz: 900b1b9f2fa791c1ebfcd5f0e492d73ade490c7c48126d3b2b1ff71f5d6a41ae8991552d69ae2ae3b4bdbff884a6aebfd3f37d01b6fa2bb163d2779dea53a19d
6
+ metadata.gz: 85339a87b7bd1c5769cde431f56111d787d80091ba96872aba477b160084bdd18c416a469f1cd05677f0caec667a897e4908503914fc969fe536eb1f26e9a095
7
+ data.tar.gz: ae31dff4f46df762ca97ba74e26077b75885809e094848cbaf37cdc65fc9035e1fdf0543c7220d49707cf4d11f883ef38f60644ed1edf6d7d0efa8d54036aa50
data/lib/tina4/orm.rb CHANGED
@@ -2,6 +2,17 @@
2
2
  require "json"
3
3
 
4
4
  module Tina4
5
+ # Convert a snake_case name to camelCase.
6
+ def self.snake_to_camel(name)
7
+ parts = name.to_s.split("_")
8
+ parts[0] + parts[1..].map(&:capitalize).join
9
+ end
10
+
11
+ # Convert a camelCase name to snake_case.
12
+ def self.camel_to_snake(name)
13
+ name.to_s.gsub(/([A-Z])/) { "_#{$1.downcase}" }.sub(/^_/, "")
14
+ end
15
+
5
16
  class ORM
6
17
  include Tina4::FieldTypes
7
18
 
@@ -41,6 +52,15 @@ module Tina4
41
52
  @field_mapping = map
42
53
  end
43
54
 
55
+ # Auto-map flag (no-op in Ruby since snake_case is native)
56
+ def auto_map
57
+ @auto_map || false
58
+ end
59
+
60
+ def auto_map=(val)
61
+ @auto_map = val
62
+ end
63
+
44
64
  # Relationship definitions
45
65
  def relationship_definitions
46
66
  @relationship_definitions ||= {}
@@ -396,10 +396,24 @@ module Tina4
396
396
  end
397
397
 
398
398
  def resolve_variable(expr)
399
- parts = expr.split(".")
399
+ parts = split_dot_parts(expr)
400
400
  value = @context
401
401
  parts.each do |part|
402
- if part =~ /\A(\w+)\[(.+?)\]\z/
402
+ if part =~ /\A(\w+)\((.*)?\)\z/m
403
+ # Method call: e.g. t("key") or greet("hello", "world")
404
+ method_name = Regexp.last_match(1)
405
+ args_str = Regexp.last_match(2)
406
+ callable = access_value(value, method_name)
407
+ if callable.respond_to?(:call)
408
+ args = args_str && !args_str.strip.empty? ? parse_filter_args(args_str) : []
409
+ value = callable.call(*args)
410
+ elsif callable.respond_to?(method_name.to_sym)
411
+ args = args_str && !args_str.strip.empty? ? parse_filter_args(args_str) : []
412
+ value = callable.send(method_name.to_sym, *args)
413
+ else
414
+ return nil
415
+ end
416
+ elsif part =~ /\A(\w+)\[(.+?)\]\z/
403
417
  base = Regexp.last_match(1)
404
418
  index = Regexp.last_match(2)
405
419
  value = access_value(value, base)
@@ -417,6 +431,29 @@ module Tina4
417
431
  value
418
432
  end
419
433
 
434
+ # Split expression on dots, but not dots inside parentheses
435
+ def split_dot_parts(expr)
436
+ parts = []
437
+ current = +""
438
+ depth = 0
439
+ expr.each_char do |ch|
440
+ if ch == "("
441
+ depth += 1
442
+ current << ch
443
+ elsif ch == ")"
444
+ depth -= 1
445
+ current << ch
446
+ elsif ch == "." && depth == 0
447
+ parts << current
448
+ current = +""
449
+ else
450
+ current << ch
451
+ end
452
+ end
453
+ parts << current unless current.empty?
454
+ parts
455
+ end
456
+
420
457
  def access_value(obj, key)
421
458
  return nil if obj.nil?
422
459
  if obj.is_a?(Hash)
data/lib/tina4/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tina4
4
- VERSION = "3.10.0"
4
+ VERSION = "3.10.2"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tina4ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.10.0
4
+ version: 3.10.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tina4 Team