rupkl 0.1.0 → 0.2.0

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/rupkl/node/amend_expression.rb +48 -0
  4. data/lib/rupkl/node/any.rb +99 -0
  5. data/lib/rupkl/node/base.rb +45 -0
  6. data/lib/rupkl/node/boolean.rb +12 -4
  7. data/lib/rupkl/node/context.rb +27 -0
  8. data/lib/rupkl/node/declared_type.rb +32 -0
  9. data/lib/rupkl/node/dynamic.rb +28 -59
  10. data/lib/rupkl/node/identifier.rb +16 -6
  11. data/lib/rupkl/node/listing.rb +61 -0
  12. data/lib/rupkl/node/mapping.rb +47 -0
  13. data/lib/rupkl/node/member_finder.rb +55 -0
  14. data/lib/rupkl/node/member_reference.rb +44 -21
  15. data/lib/rupkl/node/method_call.rb +64 -0
  16. data/lib/rupkl/node/method_definition.rb +143 -0
  17. data/lib/rupkl/node/node_common.rb +76 -0
  18. data/lib/rupkl/node/null.rb +27 -0
  19. data/lib/rupkl/node/number.rb +136 -6
  20. data/lib/rupkl/node/object.rb +369 -73
  21. data/lib/rupkl/node/operation.rb +97 -60
  22. data/lib/rupkl/node/pkl_module.rb +16 -28
  23. data/lib/rupkl/node/reference_resolver.rb +79 -0
  24. data/lib/rupkl/node/string.rb +388 -18
  25. data/lib/rupkl/node/struct_common.rb +119 -57
  26. data/lib/rupkl/node/this.rb +17 -0
  27. data/lib/rupkl/node/type_common.rb +34 -0
  28. data/lib/rupkl/node/value_common.rb +18 -9
  29. data/lib/rupkl/parser/expression.rb +158 -41
  30. data/lib/rupkl/parser/identifier.rb +2 -2
  31. data/lib/rupkl/parser/literal.rb +18 -12
  32. data/lib/rupkl/parser/method.rb +41 -0
  33. data/lib/rupkl/parser/misc.rb +4 -0
  34. data/lib/rupkl/parser/object.rb +57 -25
  35. data/lib/rupkl/parser/pkl_class.rb +28 -8
  36. data/lib/rupkl/parser/pkl_module.rb +5 -3
  37. data/lib/rupkl/parser/type.rb +28 -0
  38. data/lib/rupkl/parser.rb +8 -0
  39. data/lib/rupkl/pkl_object.rb +26 -6
  40. data/lib/rupkl/version.rb +1 -1
  41. data/lib/rupkl.rb +25 -4
  42. metadata +33 -3
  43. data/lib/rupkl/node/pkl_class.rb +0 -30
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuPkl
4
+ class Parser
5
+ define_parser do
6
+ rule(:declared_type) do
7
+ id.as(:type).as(:declared_type)
8
+ end
9
+
10
+ rule(:type) do
11
+ declared_type
12
+ end
13
+
14
+ rule(:type_annotation) do
15
+ str(':').ignore >> ws? >> type
16
+ end
17
+ end
18
+
19
+ define_transform do
20
+ rule(
21
+ declared_type:
22
+ { type: simple(:t) }
23
+ ) do
24
+ Node::DeclaredType.new(nil, Array(t), t.position)
25
+ end
26
+ end
27
+ end
28
+ end
data/lib/rupkl/parser.rb CHANGED
@@ -73,6 +73,14 @@ module RuPkl
73
73
  end
74
74
 
75
75
  class Transform < Parslet::Transform
76
+ class << self
77
+ private
78
+
79
+ def define_helper(name, &body)
80
+ private define_method(name, &body)
81
+ end
82
+ end
83
+
76
84
  def apply(obj, context = nil, filename: nil)
77
85
  @filename = filename if filename
78
86
  super(obj, context)
@@ -4,10 +4,12 @@ module RuPkl
4
4
  class PklObject
5
5
  include Enumerable
6
6
 
7
+ SELF = Object.new.freeze
8
+
7
9
  def initialize(properties, entries, elements)
8
- @properties = properties
9
- @entries = entries
10
- @elements = elements
10
+ @properties = replace_self_hash(properties)
11
+ @entries = replace_self_hash(entries)
12
+ @elements = replace_self_array(elements)
11
13
  define_property_accessors
12
14
  end
13
15
 
@@ -84,12 +86,30 @@ module RuPkl
84
86
  end
85
87
  end
86
88
 
89
+ def pretty_print_cycle(pp)
90
+ if element_only?
91
+ pp.text('[...]')
92
+ else
93
+ pp.text('{...}')
94
+ end
95
+ end
96
+
87
97
  private
88
98
 
89
- def define_property_accessors
90
- return unless @properties
99
+ def replace_self_hash(hash)
100
+ hash&.each do |(key, value)|
101
+ hash[key] = self if value.equal?(SELF)
102
+ end
103
+ end
104
+
105
+ def replace_self_array(array)
106
+ array&.each_with_index do |value, i|
107
+ array[i] = self if value.equal?(SELF)
108
+ end
109
+ end
91
110
 
92
- properties.each_key do |name|
111
+ def define_property_accessors
112
+ @properties&.each_key do |name|
93
113
  singleton_class.class_eval(<<~M, __FILE__, __LINE__ + 1)
94
114
  # def foo
95
115
  # properties[__method__]
data/lib/rupkl/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RuPkl
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
data/lib/rupkl.rb CHANGED
@@ -1,5 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'base64'
4
+ require 'digest/md5'
5
+ require 'digest/sha1'
6
+ require 'digest/sha2'
7
+ require 'singleton'
3
8
  require 'stringio'
4
9
  require 'parslet'
5
10
  require 'facets/module/basename'
@@ -7,23 +12,39 @@ require 'facets/module/basename'
7
12
  require_relative 'rupkl/version'
8
13
  require_relative 'rupkl/exception'
9
14
  require_relative 'rupkl/pkl_object'
15
+ require_relative 'rupkl/node/context'
16
+ require_relative 'rupkl/node/node_common'
10
17
  require_relative 'rupkl/node/value_common'
18
+ require_relative 'rupkl/node/type_common'
19
+ require_relative 'rupkl/node/member_finder'
11
20
  require_relative 'rupkl/node/struct_common'
12
- require_relative 'rupkl/node/boolean'
13
- require_relative 'rupkl/node/number'
14
- require_relative 'rupkl/node/string'
21
+ require_relative 'rupkl/node/reference_resolver'
15
22
  require_relative 'rupkl/node/identifier'
23
+ require_relative 'rupkl/node/declared_type'
16
24
  require_relative 'rupkl/node/member_reference'
25
+ require_relative 'rupkl/node/method_definition'
26
+ require_relative 'rupkl/node/method_call'
27
+ require_relative 'rupkl/node/amend_expression'
17
28
  require_relative 'rupkl/node/operation'
29
+ require_relative 'rupkl/node/this'
30
+ require_relative 'rupkl/node/any'
31
+ require_relative 'rupkl/node/null'
32
+ require_relative 'rupkl/node/boolean'
33
+ require_relative 'rupkl/node/number'
34
+ require_relative 'rupkl/node/string'
18
35
  require_relative 'rupkl/node/object'
19
36
  require_relative 'rupkl/node/dynamic'
20
- require_relative 'rupkl/node/pkl_class'
37
+ require_relative 'rupkl/node/mapping'
38
+ require_relative 'rupkl/node/listing'
21
39
  require_relative 'rupkl/node/pkl_module'
40
+ require_relative 'rupkl/node/base'
22
41
  require_relative 'rupkl/parser'
23
42
  require_relative 'rupkl/parser/misc'
24
43
  require_relative 'rupkl/parser/literal'
25
44
  require_relative 'rupkl/parser/identifier'
45
+ require_relative 'rupkl/parser/type'
26
46
  require_relative 'rupkl/parser/expression'
47
+ require_relative 'rupkl/parser/method'
27
48
  require_relative 'rupkl/parser/object'
28
49
  require_relative 'rupkl/parser/pkl_class'
29
50
  require_relative 'rupkl/parser/pkl_module'
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rupkl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taichi Ishitani
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-03 00:00:00.000000000 Z
11
+ date: 2024-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: base64
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: facets
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -50,26 +64,42 @@ files:
50
64
  - README.md
51
65
  - lib/rupkl.rb
52
66
  - lib/rupkl/exception.rb
67
+ - lib/rupkl/node/amend_expression.rb
68
+ - lib/rupkl/node/any.rb
69
+ - lib/rupkl/node/base.rb
53
70
  - lib/rupkl/node/boolean.rb
71
+ - lib/rupkl/node/context.rb
72
+ - lib/rupkl/node/declared_type.rb
54
73
  - lib/rupkl/node/dynamic.rb
55
74
  - lib/rupkl/node/identifier.rb
75
+ - lib/rupkl/node/listing.rb
76
+ - lib/rupkl/node/mapping.rb
77
+ - lib/rupkl/node/member_finder.rb
56
78
  - lib/rupkl/node/member_reference.rb
79
+ - lib/rupkl/node/method_call.rb
80
+ - lib/rupkl/node/method_definition.rb
81
+ - lib/rupkl/node/node_common.rb
82
+ - lib/rupkl/node/null.rb
57
83
  - lib/rupkl/node/number.rb
58
84
  - lib/rupkl/node/object.rb
59
85
  - lib/rupkl/node/operation.rb
60
- - lib/rupkl/node/pkl_class.rb
61
86
  - lib/rupkl/node/pkl_module.rb
87
+ - lib/rupkl/node/reference_resolver.rb
62
88
  - lib/rupkl/node/string.rb
63
89
  - lib/rupkl/node/struct_common.rb
90
+ - lib/rupkl/node/this.rb
91
+ - lib/rupkl/node/type_common.rb
64
92
  - lib/rupkl/node/value_common.rb
65
93
  - lib/rupkl/parser.rb
66
94
  - lib/rupkl/parser/expression.rb
67
95
  - lib/rupkl/parser/identifier.rb
68
96
  - lib/rupkl/parser/literal.rb
97
+ - lib/rupkl/parser/method.rb
69
98
  - lib/rupkl/parser/misc.rb
70
99
  - lib/rupkl/parser/object.rb
71
100
  - lib/rupkl/parser/pkl_class.rb
72
101
  - lib/rupkl/parser/pkl_module.rb
102
+ - lib/rupkl/parser/type.rb
73
103
  - lib/rupkl/pkl_object.rb
74
104
  - lib/rupkl/version.rb
75
105
  homepage: https://github.com/taichi-ishitani/rupkl
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuPkl
4
- module Node
5
- class PklClassProperty
6
- include PropertyEvaluator
7
-
8
- def initialize(name, value, objects, position)
9
- @name = name
10
- @value = value
11
- @objects = objects
12
- @position = position
13
- end
14
-
15
- attr_reader :name
16
- attr_reader :value
17
- attr_reader :objects
18
- attr_reader :position
19
-
20
- def evaluate(scopes)
21
- v = evaluate_property(value, objects, scopes)
22
- self.class.new(name, v, nil, position)
23
- end
24
-
25
- def to_ruby(scopes)
26
- [name.id, property_to_ruby(value, objects, scopes)]
27
- end
28
- end
29
- end
30
- end