expressir 1.4.1-x86_64-linux-musl → 1.4.2-x86_64-linux-musl

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ef40390e8b4dab30bc836664c83755698cbe99490e7fb70bf2145efd240517a9
4
- data.tar.gz: 8dca4d394056a680e20391a63c339a14ae013509f1e44af988a3aa498d752ff6
3
+ metadata.gz: 76e188fd3aad6d28533c234f58d177b8d19e28d1d0bf15798f9a0b7208dff213
4
+ data.tar.gz: 14a3b1a21e1b98956ee8b6015883ac9e42d9b6462f4fe4fdf030030fabe75aa9
5
5
  SHA512:
6
- metadata.gz: fd64ed51cba5fbe241d99839fcfcada35a23ce69bfb79ec75657ed64daae8c0b03171a38414a8dbe43ac2941d578b1015e812b23f9364fc7a2216cc889c98e51
7
- data.tar.gz: 9ad87b3a5adc08155b7452102e89a03d3cad390991f50d9cde0cad90d7563fa8425146a5855cf04f5fd57179f9381fb058ac478b4c543344dffa4be1ac28e7f1
6
+ metadata.gz: aab0b9b08fc6f69e39023f395769cd8f642899d92fc9e8af2b9964372cd730cc514ac55c8264bdeb6dbe7f5c58083324e1a43f460818bda5ccc1235270159789
7
+ data.tar.gz: faf5ef20f05cbf7a751360f78635543028c04137214a0501780e7d593009c014de2f7a6889d7b8b01b5b18ab2f5ddbb41b5d4a304447b5afba22d755cc0ea346
data/README.adoc CHANGED
@@ -125,6 +125,36 @@ $ gem install expressir
125
125
  ----
126
126
 
127
127
 
128
+ == Usage
129
+
130
+ === Filtering out schemas
131
+
132
+ Use the `select_proc` argument of `to_hash`.
133
+
134
+ Example:
135
+
136
+ [source,ruby]
137
+ ----
138
+
139
+ schema_yaml = YAML.load_file('documents/iso-10303-41/schemas.yaml')
140
+ schema_paths = schema_yaml['schemas'].map {|x,y| y['path'].gsub("../../", "")}
141
+
142
+ repo = Expressir::Express::Parser.from_files(schema_paths)
143
+
144
+ filtered_schemas = ["action_schema", "date_time_schema"]
145
+ select_proc = Proc.new do |value|
146
+ if value.is_a?(Expressir::Model::Declarations::Schema)
147
+ filtered_schemas.include?(value.id)
148
+ else
149
+ true
150
+ end
151
+ end
152
+
153
+ repo_hash = repo.to_hash(select_proc: select_proc)
154
+ schemas = repo_hash['schemas']
155
+ schemas.map {|s| s["id"] }
156
+ ----
157
+
128
158
  == Contributing
129
159
 
130
160
  First, thank you for contributing! We love pull requests from everyone. By
@@ -148,7 +178,8 @@ Here are a few technical guidelines to follow:
148
178
 
149
179
  Expressir is distributed under the BSD 2-clause license.
150
180
 
151
- Expressir is built on code originally from the NIST Reeper project.
181
+ Expressir originally contained some code from the NIST Reeper project but
182
+ has been completely rewritten.
152
183
 
153
184
  The https://www.nist.gov/services-resources/software/reeper[NIST Reeper license]
154
185
  is reproduced below:
@@ -169,5 +200,4 @@ ____
169
200
 
170
201
  == Credits
171
202
 
172
- Expressir is created using the structure and examples provided by
173
- the NIST Reeper software on https://sourceforge.net/p/reeper/[Sourceforge].
203
+ Copyright Ribose Inc.
data/lib/expressir/cli.rb CHANGED
@@ -18,16 +18,23 @@ module Expressir
18
18
  acc << schema.id unless schema.version&.value
19
19
  acc
20
20
  end
21
- rescue StandardError => e
22
- # pp e
21
+ rescue StandardError
23
22
  nil
24
23
  end
24
+
25
+ def _print_validation_errors(type, array)
26
+ return if array.empty?
27
+
28
+ puts "#{'*' * 20} RESULTS: #{type.to_s.upcase.gsub('_', ' ')} #{'*' * 20}"
29
+ array.each do |msg|
30
+ puts msg
31
+ end
32
+ end
25
33
  end
26
34
 
27
35
  desc "validate *PATH", "validate EXPRESS schema located at PATH"
28
- def validate(*paths)
29
- no_version = []
30
- no_valid = []
36
+ def validate(*paths) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
37
+ no_version = no_valid = []
31
38
 
32
39
  paths.each do |path|
33
40
  x = Pathname.new(path).realpath.relative_path_from(Dir.pwd)
@@ -39,30 +46,17 @@ module Expressir
39
46
  next
40
47
  end
41
48
 
42
- if ret.size
43
- ret.each do |schema_id|
44
- no_version << "Missing version string: schema `#{schema_id}` | #{x}"
45
- end
49
+ ret.each do |schema_id|
50
+ no_version << "Missing version string: schema `#{schema_id}` | #{x}"
46
51
  end
47
52
  end
48
53
 
49
- if !no_valid.empty?
50
- puts "#{"*" * 20} RESULTS: FAILED TO PARSE #{"*" * 20}"
51
- no_valid.each do |msg|
52
- puts msg
53
- end
54
- end
54
+ _print_validation_errors(:failed_to_parse, no_valid)
55
+ _print_validation_errors(:missing_version_string, no_version)
55
56
 
56
- if !no_version.empty?
57
- puts "#{"*" * 20} RESULTS: MISSING VERSION STRING #{"*" * 20}"
58
- no_version.each do |msg|
59
- puts msg
60
- end
61
- end
57
+ exit 1 unless [no_valid, no_version].all?(&:empty?)
62
58
 
63
- if no_valid.size || no_version.size
64
- exit 1
65
- end
59
+ puts "Validation passed for all EXPRESS schemas."
66
60
  end
67
61
 
68
62
  desc "version", "Expressir Version"
@@ -94,8 +94,13 @@ module Expressir
94
94
  # @param [String] root_path
95
95
  # @param [Express::Formatter] formatter
96
96
  # @param [Boolean] include_empty
97
+ # @param [Proc] select_proc
97
98
  # @return [Hash]
98
- def to_hash(root_path: nil, formatter: nil, include_empty: nil)
99
+ def to_hash(root_path: nil, formatter: nil, include_empty: nil, select_proc: nil)
100
+ # Filter out entries
101
+ has_filter = !select_proc.nil? && select_proc.is_a?(Proc)
102
+ return nil if has_filter && !select_proc.call(self)
103
+
99
104
  hash = {}
100
105
  hash[CLASS_KEY] = self.class.name
101
106
 
@@ -106,20 +111,32 @@ module Expressir
106
111
  # skip empty values
107
112
  next unless !empty or include_empty
108
113
 
109
- hash[variable.to_s] = case value
110
- when Array
111
- value.map do |value|
112
- if value.is_a? ModelElement
113
- value.to_hash(root_path: root_path, formatter: formatter, include_empty: include_empty)
114
- else
115
- value
116
- end
117
- end
118
- when ModelElement
119
- value.to_hash(root_path: root_path, formatter: formatter, include_empty: include_empty)
120
- else
121
- value
122
- end
114
+ value_hash = case value
115
+ when Array
116
+ value.map do |v|
117
+ if v.is_a? ModelElement
118
+ v.to_hash(
119
+ root_path: root_path,
120
+ formatter: formatter,
121
+ include_empty: include_empty,
122
+ select_proc: select_proc
123
+ )
124
+ else
125
+ v
126
+ end
127
+ end.compact
128
+ when ModelElement
129
+ value.to_hash(
130
+ root_path: root_path,
131
+ formatter: formatter,
132
+ include_empty: include_empty,
133
+ select_proc: select_proc
134
+ )
135
+ else
136
+ value
137
+ end
138
+
139
+ hash[variable.to_s] = value_hash unless value_hash.nil?
123
140
  end
124
141
 
125
142
  if self.is_a? Declarations::Schema and file
@@ -1,3 +1,3 @@
1
1
  module Expressir
2
- VERSION = "1.4.1".freeze
2
+ VERSION = "1.4.2".freeze
3
3
  end
@@ -23,6 +23,31 @@ RSpec.describe Expressir::Model::ModelElement do
23
23
  GC.verify_compaction_references
24
24
  GC.verify_internal_consistency
25
25
  end
26
+
27
+ it "exports objects filtered by select_proc (multiple.exp)" do |example|
28
+ print "\n[#{example.description}] "
29
+ exp_file = Expressir.root_path.join("spec", "syntax", "multiple.exp")
30
+
31
+ repo = Expressir::Express::Parser.from_file(exp_file)
32
+
33
+ filtered_schemas = ["multiple_schema2", "multiple_schema3"]
34
+ select_proc = Proc.new do |value|
35
+ if value.is_a?(Expressir::Model::Declarations::Schema)
36
+ filtered_schemas.include?(value.id)
37
+ else
38
+ true
39
+ end
40
+ end
41
+
42
+ result = repo.to_hash(select_proc: select_proc)
43
+
44
+ expect(result["schemas"].map { |s| s["id"] }.sort).to eq(filtered_schemas)
45
+
46
+ # Validate Object Space
47
+ GC.start
48
+ GC.verify_compaction_references
49
+ GC.verify_internal_consistency
50
+ end
26
51
  end
27
52
 
28
53
  describe ".from_hash" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expressir
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.4.2
5
5
  platform: x86_64-linux-musl
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-04-24 00:00:00.000000000 Z
11
+ date: 2024-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor