expressir 1.0.0 → 1.2.1

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 (149) hide show
  1. checksums.yaml +4 -4
  2. data/.cross_rubies +6 -18
  3. data/.github/workflows/rake.yml +50 -5
  4. data/.github/workflows/release.yml +11 -3
  5. data/.hound.yml +3 -0
  6. data/.rubocop.yml +6 -506
  7. data/.yardopts +11 -0
  8. data/Rakefile +3 -0
  9. data/expressir.gemspec +4 -1
  10. data/ext/express-parser/express_parser.cpp +4358 -2954
  11. data/ext/express-parser/extconf.rb +5 -3
  12. data/lib/expressir/express/cache.rb +16 -10
  13. data/lib/expressir/express/formatter.rb +231 -180
  14. data/lib/expressir/express/hyperlink_formatter.rb +15 -1
  15. data/lib/expressir/express/model_visitor.rb +1 -0
  16. data/lib/expressir/express/parser.rb +16 -10
  17. data/lib/expressir/express/resolve_references_model_visitor.rb +7 -5
  18. data/lib/expressir/express/schema_head_formatter.rb +16 -2
  19. data/lib/expressir/express/visitor.rb +280 -254
  20. data/lib/expressir/model/cache.rb +6 -2
  21. data/lib/expressir/model/data_type.rb +9 -0
  22. data/lib/expressir/model/data_types/aggregate.rb +31 -0
  23. data/lib/expressir/model/data_types/array.rb +31 -0
  24. data/lib/expressir/model/data_types/bag.rb +25 -0
  25. data/lib/expressir/model/data_types/binary.rb +22 -0
  26. data/lib/expressir/model/data_types/boolean.rb +10 -0
  27. data/lib/expressir/model/data_types/enumeration.rb +25 -0
  28. data/lib/expressir/model/data_types/enumeration_item.rb +26 -0
  29. data/lib/expressir/model/data_types/generic.rb +26 -0
  30. data/lib/expressir/model/data_types/generic_entity.rb +26 -0
  31. data/lib/expressir/model/data_types/integer.rb +10 -0
  32. data/lib/expressir/model/data_types/list.rb +28 -0
  33. data/lib/expressir/model/data_types/logical.rb +10 -0
  34. data/lib/expressir/model/data_types/number.rb +10 -0
  35. data/lib/expressir/model/data_types/real.rb +19 -0
  36. data/lib/expressir/model/data_types/select.rb +28 -0
  37. data/lib/expressir/model/data_types/set.rb +25 -0
  38. data/lib/expressir/model/data_types/string.rb +22 -0
  39. data/lib/expressir/model/declaration.rb +9 -0
  40. data/lib/expressir/model/declarations/attribute.rb +47 -0
  41. data/lib/expressir/model/declarations/constant.rb +34 -0
  42. data/lib/expressir/model/declarations/entity.rb +53 -0
  43. data/lib/expressir/model/declarations/function.rb +67 -0
  44. data/lib/expressir/model/declarations/interface.rb +28 -0
  45. data/lib/expressir/model/declarations/interface_item.rb +23 -0
  46. data/lib/expressir/model/declarations/interfaced_item.rb +37 -0
  47. data/lib/expressir/model/declarations/parameter.rb +34 -0
  48. data/lib/expressir/model/declarations/procedure.rb +64 -0
  49. data/lib/expressir/model/declarations/remark_item.rb +21 -0
  50. data/lib/expressir/model/declarations/rule.rb +71 -0
  51. data/lib/expressir/model/declarations/schema.rb +117 -0
  52. data/lib/expressir/model/declarations/schema_version.rb +22 -0
  53. data/lib/expressir/model/declarations/schema_version_item.rb +22 -0
  54. data/lib/expressir/model/declarations/subtype_constraint.rb +40 -0
  55. data/lib/expressir/model/declarations/type.rb +45 -0
  56. data/lib/expressir/model/declarations/unique_rule.rb +31 -0
  57. data/lib/expressir/model/declarations/variable.rb +34 -0
  58. data/lib/expressir/model/declarations/where_rule.rb +31 -0
  59. data/lib/expressir/model/expression.rb +9 -0
  60. data/lib/expressir/model/expressions/aggregate_initializer.rb +6 -2
  61. data/lib/expressir/model/expressions/aggregate_initializer_item.rb +22 -0
  62. data/lib/expressir/model/expressions/binary_expression.rb +16 -5
  63. data/lib/expressir/model/expressions/entity_constructor.rb +8 -3
  64. data/lib/expressir/model/expressions/function_call.rb +22 -0
  65. data/lib/expressir/model/expressions/interval.rb +17 -6
  66. data/lib/expressir/model/expressions/query_expression.rb +11 -7
  67. data/lib/expressir/model/expressions/unary_expression.rb +9 -3
  68. data/lib/expressir/model/identifier.rb +26 -4
  69. data/lib/expressir/model/literal.rb +9 -0
  70. data/lib/expressir/model/literals/binary.rb +6 -2
  71. data/lib/expressir/model/literals/integer.rb +6 -2
  72. data/lib/expressir/model/literals/logical.rb +6 -2
  73. data/lib/expressir/model/literals/real.rb +6 -2
  74. data/lib/expressir/model/literals/string.rb +8 -3
  75. data/lib/expressir/model/model_element.rb +63 -37
  76. data/lib/expressir/model/reference.rb +9 -0
  77. data/lib/expressir/model/references/attribute_reference.rb +22 -0
  78. data/lib/expressir/model/references/group_reference.rb +22 -0
  79. data/lib/expressir/model/references/index_reference.rb +27 -0
  80. data/lib/expressir/model/references/simple_reference.rb +24 -0
  81. data/lib/expressir/model/repository.rb +5 -1
  82. data/lib/expressir/model/statement.rb +9 -0
  83. data/lib/expressir/model/statements/alias.rb +11 -7
  84. data/lib/expressir/model/statements/assignment.rb +8 -3
  85. data/lib/expressir/model/statements/case.rb +10 -4
  86. data/lib/expressir/model/statements/case_action.rb +7 -2
  87. data/lib/expressir/model/statements/compound.rb +6 -2
  88. data/lib/expressir/model/statements/escape.rb +3 -1
  89. data/lib/expressir/model/statements/if.rb +10 -4
  90. data/lib/expressir/model/statements/null.rb +3 -1
  91. data/lib/expressir/model/statements/procedure_call.rb +22 -0
  92. data/lib/expressir/model/statements/repeat.rb +19 -11
  93. data/lib/expressir/model/statements/return.rb +6 -2
  94. data/lib/expressir/model/statements/skip.rb +3 -1
  95. data/lib/expressir/model/supertype_expression.rb +9 -0
  96. data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +29 -0
  97. data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +19 -0
  98. data/lib/expressir/model.rb +52 -45
  99. data/lib/expressir/version.rb +1 -1
  100. data/spec/expressir/model/model_element_spec.rb +131 -131
  101. data/spec/syntax/multiple.yaml +68 -68
  102. data/spec/syntax/remark.yaml +64 -64
  103. data/spec/syntax/single.yaml +5 -5
  104. data/spec/syntax/single_formatted.yaml +5 -5
  105. data/spec/syntax/syntax.yaml +1003 -1030
  106. metadata +101 -48
  107. data/lib/expressir/model/attribute.rb +0 -38
  108. data/lib/expressir/model/constant.rb +0 -28
  109. data/lib/expressir/model/entity.rb +0 -42
  110. data/lib/expressir/model/enumeration_item.rb +0 -22
  111. data/lib/expressir/model/expressions/aggregate_item.rb +0 -17
  112. data/lib/expressir/model/expressions/attribute_reference.rb +0 -17
  113. data/lib/expressir/model/expressions/call.rb +0 -17
  114. data/lib/expressir/model/expressions/group_reference.rb +0 -17
  115. data/lib/expressir/model/expressions/index_reference.rb +0 -19
  116. data/lib/expressir/model/expressions/simple_reference.rb +0 -19
  117. data/lib/expressir/model/function.rb +0 -57
  118. data/lib/expressir/model/interface.rb +0 -20
  119. data/lib/expressir/model/interface_item.rb +0 -15
  120. data/lib/expressir/model/interfaced_item.rb +0 -27
  121. data/lib/expressir/model/parameter.rb +0 -28
  122. data/lib/expressir/model/procedure.rb +0 -55
  123. data/lib/expressir/model/remark_item.rb +0 -15
  124. data/lib/expressir/model/rule.rb +0 -60
  125. data/lib/expressir/model/schema.rb +0 -100
  126. data/lib/expressir/model/schema_version.rb +0 -15
  127. data/lib/expressir/model/schema_version_item.rb +0 -15
  128. data/lib/expressir/model/statements/call.rb +0 -17
  129. data/lib/expressir/model/subtype_constraint.rb +0 -32
  130. data/lib/expressir/model/type.rb +0 -37
  131. data/lib/expressir/model/types/aggregate.rb +0 -28
  132. data/lib/expressir/model/types/array.rb +0 -23
  133. data/lib/expressir/model/types/bag.rb +0 -19
  134. data/lib/expressir/model/types/binary.rb +0 -17
  135. data/lib/expressir/model/types/boolean.rb +0 -8
  136. data/lib/expressir/model/types/enumeration.rb +0 -19
  137. data/lib/expressir/model/types/generic.rb +0 -24
  138. data/lib/expressir/model/types/generic_entity.rb +0 -24
  139. data/lib/expressir/model/types/integer.rb +0 -8
  140. data/lib/expressir/model/types/list.rb +0 -21
  141. data/lib/expressir/model/types/logical.rb +0 -8
  142. data/lib/expressir/model/types/number.rb +0 -8
  143. data/lib/expressir/model/types/real.rb +0 -15
  144. data/lib/expressir/model/types/select.rb +0 -21
  145. data/lib/expressir/model/types/set.rb +0 -19
  146. data/lib/expressir/model/types/string.rb +0 -17
  147. data/lib/expressir/model/unique_rule.rb +0 -26
  148. data/lib/expressir/model/variable.rb +0 -28
  149. data/lib/expressir/model/where_rule.rb +0 -26
@@ -21,7 +21,7 @@ src_paths = [
21
21
  if cross_build
22
22
  rice_subdir = "rice-embed"
23
23
  rice_root = Gem.loaded_specs["rice"].full_gem_path
24
- rice_src = File.join(rice_root, "rice")
24
+ rice_src = File.join(rice_root, "include", "rice")
25
25
  rice_embed = File.join(__dir__, rice_subdir)
26
26
  unless File.exists?(rice_embed)
27
27
  FileUtils.mkdir_p(rice_embed)
@@ -30,7 +30,7 @@ if cross_build
30
30
  File.delete(*Dir.glob("#{rice_embed}/**/Makefile"))
31
31
  end
32
32
 
33
- src_paths.push("#{rice_subdir}/rice", "#{rice_subdir}/rice/detail")
33
+ src_paths.push("#{rice_subdir}/include")
34
34
 
35
35
  $INCFLAGS << " -I#{__dir__}/#{rice_subdir}"
36
36
 
@@ -39,6 +39,8 @@ if cross_build
39
39
  $CXXFLAGS << " -O3 -Wa,-mbig-obj"
40
40
  # workaround for LoadError: 127: The specified procedure could not be found.
41
41
  $DLDFLAGS << " -static -static-libgcc -static-libstdc++"
42
+ elsif RbConfig::CONFIG['target_os'] =~ /darwin/
43
+ $CXXFLAGS << " -mmacosx-version-min=10.14 -Wno-register"
42
44
  end
43
45
  else
44
46
  require 'mkmf-rice'
@@ -46,7 +48,7 @@ else
46
48
  dir_config(extension_name)
47
49
  end
48
50
 
49
- $CPPFLAGS << " -std=c++14 -DANTLR4CPP_STATIC -DHAVE_CXX11"
51
+ $CPPFLAGS << " -std=c++17 -DANTLR4CPP_STATIC -DHAVE_CXX11"
50
52
  $INCFLAGS << " -I#{__dir__}/#{antlr4_src}"
51
53
  $srcs = []
52
54
 
@@ -5,28 +5,34 @@ require 'expressir/model'
5
5
  module Expressir
6
6
  module Express
7
7
  class Cache
8
- def self.to_file(file, content, options = {})
9
- root_path = options[:root_path]
10
- test_overwrite_version = options[:test_overwrite_version] # don't use, only for tests
11
-
8
+ # Save Express model into a cache file
9
+ # @param file [String] cache file path
10
+ # @param content [Model::ModelElement] Express model
11
+ # @param root_path [String] Express repository root path, to be stripped from Express file paths to create a portable cache file
12
+ # @param test_overwrite_version [String] don't use, only for tests
13
+ # @return [nil]
14
+ def self.to_file(file, content, root_path: nil, test_overwrite_version: nil)
12
15
  version = test_overwrite_version || VERSION
13
16
 
14
- cache = Model::Cache.new({
17
+ cache = Model::Cache.new(
15
18
  version: version,
16
19
  content: content
17
- })
20
+ )
18
21
 
19
22
  hash = cache.to_hash(root_path: root_path)
20
23
  yaml = YAML.dump(hash)
21
24
  yaml_compressed = Zlib::Deflate.deflate(yaml)
22
25
 
23
26
  File.binwrite(file, yaml_compressed)
27
+ nil
24
28
  end
25
29
 
26
- def self.from_file(file, options = {})
27
- root_path = options[:root_path]
28
- test_overwrite_version = options[:test_overwrite_version] # don't use, only for tests
29
-
30
+ # Load Express model from a cache file
31
+ # @param file [String] cache file path
32
+ # @param root_path [String] Express repository root path, to be prepended to Express file paths if loading a portable cache file
33
+ # @param test_overwrite_version [String] don't use, only for tests
34
+ # @return [Model::ModelElement] Express model
35
+ def self.from_file(file, root_path: nil, test_overwrite_version: nil)
30
36
  version = test_overwrite_version || VERSION
31
37
 
32
38
  yaml_compressed = File.binread(file)