ez7gen 1.0.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 (90) hide show
  1. checksums.yaml +7 -0
  2. data/bin/ez7gen +6 -0
  3. data/lib/ez7gen.rb +23 -0
  4. data/lib/ez7gen/config/schema/2.4/2.4.HL7.xml +13904 -0
  5. data/lib/ez7gen/config/schema/2.4/VAZ2.4.HL7.xml +3085 -0
  6. data/lib/ez7gen/config/schema/2.4/added/coded-tables.xml +730 -0
  7. data/lib/ez7gen/config/schema/2.4/rules/2.4.HL7.yml +4 -0
  8. data/lib/ez7gen/config/schema/2.4/rules/VAZ2.4.HL7.yml +6 -0
  9. data/lib/ez7gen/config/schema/2.5/2.5.HL7.xml +10008 -0
  10. data/lib/ez7gen/config/schema/2.5/VAZ2.5.HL7.xml +7 -0
  11. data/lib/ez7gen/config/schema/2.5/added/coded-tables.xml +549 -0
  12. data/lib/ez7gen/config/schema/readme.txt +0 -0
  13. data/lib/ez7gen/config/templates/2.4/eiv table update-mfn_m01 20151201.xml +416 -0
  14. data/lib/ez7gen/config/templates/2.4/eiv table update-mfn_y01.xml +416 -0
  15. data/lib/ez7gen/config/templates/2.4/eiv-ec-MFN_X01_reg request 20160126.xml +659 -0
  16. data/lib/ez7gen/config/templates/2.4/examples/ADT_A60.txt +69 -0
  17. data/lib/ez7gen/config/templates/2.4/examples/eiv table update-mfn_m01 20151201.txt +21 -0
  18. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_dss_units-query_qbp_q13-qbp_q13.txt +26 -0
  19. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_ecs_procedures_query_qbp_q13-qbp_q13.txt +26 -0
  20. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_patient eligibility_response-rsp_k11-080714.txt +44 -0
  21. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_diagnosis_query_qbp_q11-qbp_q11.txt +21 -0
  22. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_diagnosis_response_rsp_k11-rsp_k11.txt +42 -0
  23. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_dss_units_response_rtb_k13-rtb_k13.txt +49 -0
  24. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_ecs_filer_request_dft_p03-dft_p03-080714.txt +31 -0
  25. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_ecs_filer_response_ack_p03-ack_p03.txt +21 -0
  26. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_esc_procedures_response_rtb_k13-rtb_k13.txt +40 -0
  27. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_patient_eclass_query_qbp_q11-qbp_q11.txt +21 -0
  28. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_patient_problems_query_qbp_q11-qbp_q11.txt +21 -0
  29. data/lib/ez7gen/config/templates/2.4/examples/mhvsm_standardhl7lib_patinet_problems_response_rsp_k11-rsp_k11.txt +33 -0
  30. data/lib/ez7gen/config/templates/2.4/examples/orur01rvbecv2.txt +31 -0
  31. data/lib/ez7gen/config/templates/2.4/examples/sqwm vitals-oru_ro1.txt +52 -0
  32. data/lib/ez7gen/config/templates/2.4/examples/vista sqwm-adt_a60.txt +40 -0
  33. data/lib/ez7gen/config/templates/2.4/mhvsm_dss_units_query_qbp_q13-qbp_q13.xml +312 -0
  34. data/lib/ez7gen/config/templates/2.4/mhvsm_ecs_procedures_query_qbp_q13-qbp_q13.xml +314 -0
  35. data/lib/ez7gen/config/templates/2.4/mhvsm_patient eligibility_response-rsp_k11-080714.xml +640 -0
  36. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_diagnosis_query_qbp_q11-qbp_q11.xml +284 -0
  37. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_diagnosis_response_rsp_k11-rsp_k11-rsp_k11.xml +563 -0
  38. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_dss_units_response_rtb_k13-rtb_k13-rtb_k13.xml +365 -0
  39. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_ecs_filer_request_dft_p03-dft_p03-080714.xml +2172 -0
  40. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_ecs_filer_response_ack_p03-ack_p03.xml +269 -0
  41. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_ecs_procedures_response_rtb_k13-rtb_k13-rtb_k13.xml +354 -0
  42. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_patient_eclass_query_qbp_q11-qbp_q11.xml +284 -0
  43. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_patient_problems_query_qbp_q11-qbp_q11.xml +282 -0
  44. data/lib/ez7gen/config/templates/2.4/mhvsm_standardhl7lib_patient_problems_response_rsp_k11-rsp_k11-rsp_k11.xml +565 -0
  45. data/lib/ez7gen/config/templates/2.4/orur01rvbecv2.xml +1529 -0
  46. data/lib/ez7gen/config/templates/2.4/sqwm vitals-oru_r01.xml +2975 -0
  47. data/lib/ez7gen/config/templates/2.4/vista sqwm-adt_a60.xml +1360 -0
  48. data/lib/ez7gen/message_factory.rb +142 -0
  49. data/lib/ez7gen/msg_error_handler.rb +33 -0
  50. data/lib/ez7gen/profile_parser.rb +321 -0
  51. data/lib/ez7gen/resources/properties-with-comments.yml +51 -0
  52. data/lib/ez7gen/resources/properties.yml +325 -0
  53. data/lib/ez7gen/service/2.4/dynamic_field_generator.rb +45 -0
  54. data/lib/ez7gen/service/2.4/field_generator.rb +1586 -0
  55. data/lib/ez7gen/service/2.5/field_generator.rb +75 -0
  56. data/lib/ez7gen/service/base_field_generator.rb +451 -0
  57. data/lib/ez7gen/service/segment_generator.rb +218 -0
  58. data/lib/ez7gen/service/segment_picker.rb +147 -0
  59. data/lib/ez7gen/service/template_generator.rb +213 -0
  60. data/lib/ez7gen/service/type_aware_field_generator.rb +1583 -0
  61. data/lib/ez7gen/service/utils.rb +75 -0
  62. data/lib/ez7gen/structure_parser.rb +331 -0
  63. data/lib/ez7gen/version.rb +38 -0
  64. data/test/Additional Tables with values_v1.1.txt +1653 -0
  65. data/test/added_shema_test.rb +143 -0
  66. data/test/app-tmp.rb +225 -0
  67. data/test/at.txt +1 -0
  68. data/test/backburner.zip +0 -0
  69. data/test/codes.txt +262 -0
  70. data/test/codes1.txt +1240 -0
  71. data/test/data_types_exploration_test.rb +213 -0
  72. data/test/dynamic_field_generated_test.rb +292 -0
  73. data/test/message_factory_24_custom_test.rb +648 -0
  74. data/test/message_factory_25_test.rb +50 -0
  75. data/test/message_factory_adm_test.rb +558 -0
  76. data/test/message_factory_gen_test.rb +63 -0
  77. data/test/message_factory_lab_test.rb +107 -0
  78. data/test/message_factory_pharm_test.rb +121 -0
  79. data/test/message_factory_template_24_test.rb +730 -0
  80. data/test/message_factory_test.rb +220 -0
  81. data/test/msg_error_handler_test.rb +59 -0
  82. data/test/profile_parser_test.rb +542 -0
  83. data/test/quick_run.rb +880 -0
  84. data/test/segment_generator_test.rb +656 -0
  85. data/test/segment_picker_test.rb +279 -0
  86. data/test/structrure_parser_test.rb +355 -0
  87. data/test/template_generator_test.rb +164 -0
  88. data/test/type_aware_field_generator_test.rb +582 -0
  89. data/test/utils_test.rb +97 -0
  90. metadata +215 -0
data/test/quick_run.rb ADDED
@@ -0,0 +1,880 @@
1
+ require 'yaml'
2
+ require_relative '../lib/ez7gen/service/utils'
3
+ require 'json'
4
+ include Utils
5
+ # require 'pathname'
6
+ require 'ruby-hl7'
7
+
8
+
9
+
10
+
11
+ ok="MSH|^~\&|EnsembleHL7|ISC|404|707|201607162200||ACK^A01|171|P|2.4|234
12
+ MSA|AA|171"
13
+ puts ok
14
+ # text.gsub!(/\r\n?/, "\n")
15
+ # raw_input = open( "my_hl7_msg.txt" ).readlines
16
+ lines = ok.split("\n")
17
+ msg = HL7::Message.new( lines)
18
+ puts "message type: %s" % msg[:MSH].message_type
19
+ # puts msg[:ERR]|'N/A'
20
+ puts msg[:MSA]
21
+
22
+ bad = "MSH|^~\&|EnsembleHL7|ISC|404|808|201607162206||ACK^A05|218|P|2.4|936
23
+ MSA|AE|218
24
+ ERR||||E|<Ens>ErrGeneral|||ERROR <Ens>ErrGeneral: Not forwarding message 9292 with message body Id=4610, Doc Identifier=218, SessionId=9292 because of validation failure: ERROR <Ens>ErrGeneral: Field size restriction exceeded in segment 8:DB1. Field 2, repetition 1 is larger than segment structure 2.4:DB1 permits it to be.\X0D\\X0A\+\X0D\\X0A\ERROR <Ens>ErrGeneral: Invalid value 'ABCDDEFRTYURYRURURUR' appears in segment 8:DB1, field 2, repetition 1, component 1, subcomponent 1, but does not appear in code table 2.4:334.\X0D\\X0A\+\X0D\\X0A\ERROR <Ens>ErrGeneral: Field size restriction exceeded in segment 11:DG1. Field 6, repetition 1 is larger than segment structure 2.4:DG1 permits it to be.\X0D\\X0A\+\X0D\\X0A\ERROR <Ens>ErrGeneral: Invalid value 'xxxxxxxxxx' appears in segment 11:DG1, field 6, repetition 1, component 1, subcomponent 1, but does not appear in code table 2.4:52.\X0D\\X0A\+\X0D\\X0A\ERROR <Ens>ErrGeneral: Field size restriction exceeded in segment 11:DG1. Field 18, repetition 1 is larger than segment structure 2.4:DG1 permits it to be.\X0D\\X0A\+\X0D\\X0A\ERROR <Ens>ErrGeneral: Invalid value 'ZZZZZZZ' appears in segment 11:DG1, field 18, repetition 1, component 1, subcomponent 1, but does not appear in code table 2.4:136.
25
+ "
26
+ bad.gsub!("X0D\\X0A", "\n").gsub!("\n+\n", "\n")
27
+ puts bad
28
+ puts '~~~~~~~~~~~~~~~~~~~~~'
29
+ exit
30
+ msg = HL7::Message.new( bad.split("\n") )
31
+ puts "message type: %s" % msg[:MSH].message_type
32
+ puts "message type: %s" % msg[:ERR]
33
+ puts '~~~~~~~~~~~~~'
34
+ # puts msg[:ERR] == nil
35
+ # puts msg[:ERR].error_code_and_location
36
+ # puts msg[:ERR].error_location
37
+ # puts msg[:ERR].hl7_error_code
38
+ puts msg[:ERR].severity
39
+ puts msg[:ERR].application_error_code
40
+ # puts msg[:ERR].application_error_parameter
41
+ # puts msg[:ERR].diagnostic_information
42
+ errors = msg[:ERR].user_message
43
+ # puts errors
44
+ # puts msg[:ERR].help_desk_contact_point
45
+ # lines = errors.split("ERROR <Ens>ErrGeneral:")
46
+ lines = errors.split("ERROR #{msg[:ERR].application_error_code}:")
47
+ puts lines
48
+
49
+
50
+ exit
51
+ d = 'MSH~MSA~[~ERR~]~[~{~NTE~}~]~QRD~[~QRF~]~[~[~PID~[~{~NTE~}~]~]~{~ORC~<~OBR~|~RQD~|~RQ1~|~RXO~|~ODS~|~ODT~>~[~{~NTE~}~]~[~{~CTI~}~]~}~]~[~DSC~]'
52
+
53
+ puts d.sub(/<(.*?)>/,['OBR','RXO'].sample())
54
+
55
+ a = 5
56
+ b = nil
57
+ a = b || a
58
+ puts a
59
+ b = 25
60
+ a = b || a
61
+ puts a
62
+ b = ''
63
+ a = b || a
64
+ puts a
65
+ exit
66
+
67
+ a = Array.new([1,2,3])
68
+
69
+ OPT =1
70
+ MLT =2
71
+ x = /\[~([^\[\]]*)~\]|\{~([^\[\]]*)~}/
72
+ opt = /\[~([^\[\]]*)~\]/
73
+ mult= /\{~([^\[\]]*)~}/
74
+
75
+ r = Regexp.union(opt, mult)
76
+ # r = /(\[~([^\[\]]*)\~])|(\{~([^\[\]]*)\~})/
77
+ # r = /(?<opt>\[~([^\[\]]*)~\])|(?<mult>\{~([^\[\]]*)~})/
78
+ # r = /(\[~([^\[\]]*)~\])|(\{~([^\[\]]*)~})/
79
+ # opt =/\[~([^\[\]]*)\~]/
80
+ # mult=//
81
+ # /\$(?<dollars>\d+)\.(?<cents>\d+)/.match("$3.67"
82
+ # a = ("[~{~IN1~7~8~}~]").split(r)
83
+ a = ("[~{~IN1~7~8~}~]").match(r)
84
+ p a
85
+ p a[OPT]
86
+ p a[MLT]
87
+ # p a.names
88
+ # p a['opt']
89
+ # p a['mult']
90
+ # p a['mult']
91
+ # a = ("{~IN1~7~8~}").match(r)
92
+ # p a.opt
93
+ # p a.mult
94
+ # a = ("IN1~7~8").match(r)
95
+ # p a.opt
96
+ # p a.mult
97
+
98
+ #first match is opt, second is mult
99
+ #
100
+ p (1..5).to_a.sample
101
+ # p [1,2,3,3,3,3,3,5,6,6,7,8].sample()
102
+
103
+ a = [1,2,3,3,3,3,3,5,6,6,7,9,2,1]
104
+ z = a.each_index.select{|i| a[i] >3}
105
+ p (a + [4,8,11] ).sort
106
+ # p a
107
+ exit
108
+ # class OrderedList < List
109
+ # end
110
+ # a = OArray.new([1,2])
111
+ # puts a.class
112
+ # puts a.instance_of?(OArray)
113
+ # puts a.instance_of?(Array)
114
+ # a.each{|it| puts it}
115
+ # bool = a.kind_of?(Array) # => true
116
+ # p bool
117
+ #
118
+ # a = OptionalGroup.new()
119
+ # puts a.class
120
+ # puts a.instance_of?(OptArray)
121
+ # puts a.instance_of?(Array)
122
+ # a.each{|it| puts it}
123
+ # bool = a.kind_of?(Array) # => true
124
+ # p bool
125
+
126
+ # b = a.reverse.class # => Array
127
+
128
+ # a = [1,2,3,4]
129
+ # b = OArray.new
130
+ # puts b.class
131
+ # a.concat([1,2,3,3,4])
132
+ p a[2..-2]
133
+ p "abcdef".slice(0,-1)
134
+ a = '{xyz}'
135
+ p "#{a[0]+a[-1]}"
136
+ p 'abc'[0..1]
137
+ p 'abcdef'[-2..-1]
138
+ exit
139
+
140
+ # a = '{~[~[~PID~[~PD1~]~]~[~PV1~[~PV2~]~]~[~10~]~11~]~}'
141
+ # e = a.scan(/(?=\[((?:[^\[\]]*|\[\g<1>\])*)\])/)
142
+ # p e
143
+ # exit
144
+
145
+ structure = 'MSH~[~{~NTE~}~]~[~PID~[~PD1~]~[~{~NTE~}~]~[~PV1~[~PV2~]~]~[~{~IN1~[~IN2~]~[~IN3~]~}~]~[~GT1~]~[~{~AL1~}~]~]~{~ORC~OBR~[~{~NTE~}~]~[~CTD~]~[~{~DG1~}~]~[~{~OBX~[~{~NTE~}~]~}~]~{~[~[~PID~[~PD1~]~]~[~PV1~[~PV2~]~]~[~{~AL1~}~]~{~[~ORC~]~OBR~[~{~NTE~}~]~[~CTD~]~{~OBX~[~{~NTE~}~]~}~}~]~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
146
+ ms = structure.scan(/(?=\{((?:[^{}]*|\{\g<1>\})*)\})/)
147
+ #m = puts o19.scan(/[^{}]*|[^\[\]]*/)
148
+ p ms
149
+
150
+ idx = 0
151
+ encodedSegments =[]
152
+ profile=[]
153
+ # while(m = structure[@@segment_patern])
154
+ groups = []
155
+ el_ids = []
156
+
157
+ brckts = "{}"
158
+
159
+ ms.each {|a|
160
+ p a
161
+ m = a.first()
162
+ brckt = brckts[0]
163
+ is_g = (m.include?(brckt))
164
+ m = brckts.clone.insert(1,m)
165
+
166
+ if(groups.empty?)
167
+ structure.sub!(m, idx.to_s)
168
+ else
169
+ if(groups.last().include?(m))
170
+ groups.last().sub!(m, idx.to_s)
171
+ if((groups.last().include?(brckt))) #done resolving a group
172
+ encodedSegments[el_ids.last()] = groups.last()
173
+ groups.pop()
174
+ el_ids.pop()
175
+ end
176
+ else
177
+ structure.sub!(m, idx.to_s)
178
+ end
179
+ end
180
+
181
+ if (is_g)
182
+ groups << m
183
+ el_ids << idx
184
+ end
185
+
186
+ encodedSegments << m
187
+ idx +=1
188
+ }
189
+ puts '_________1_____________'
190
+
191
+ ms = structure.scan(/(?=\[((?:[^\[\]]*|\[\g<1>\])*)\])/)
192
+ #m = puts o19.scan(/[^{}]*|[^\[\]]*/)
193
+ p ms
194
+ brckts = "[]"
195
+
196
+ ms.each {|a|
197
+ p a
198
+ m = a.first()
199
+ brckt = brckts[0]
200
+ is_g = (m.include?(brckt))
201
+ m = brckts.clone.insert(1,m)
202
+
203
+ if(groups.empty?)
204
+ structure.sub!(m, idx.to_s)
205
+ else
206
+ if(groups.last().include?(m))
207
+ groups.last().sub!(m, idx.to_s)
208
+ if((groups.last().include?(brckt))) #done resolving a group
209
+ encodedSegments[el_ids.last()] = groups.last()
210
+ groups.pop()
211
+ el_ids.pop()
212
+ end
213
+ else
214
+ structure.sub!(m, idx.to_s)
215
+ end
216
+ end
217
+
218
+ if (is_g)
219
+ groups << m
220
+ el_ids << idx
221
+ end
222
+
223
+ encodedSegments << m
224
+ idx +=1
225
+ }
226
+
227
+
228
+ # ms.each {|a|
229
+ # p a
230
+ #
231
+ # is_g = (a.scan('[').size > 1)?true:false
232
+ # m = '['<< a.first() << ']'
233
+ #
234
+ # if(groups.size == 0)
235
+ # structure.sub!(m, idx.to_s)
236
+ # # if (is_g) then groups << m end
237
+ # else
238
+ # if(groups.last().include?(m))
239
+ # groups.last().sub!(m, idx.to_s)
240
+ # if(!(groups.last().scan('[').size > 1)) #done resolving a group
241
+ # # if(is_group_resolved(groups.last(), '[')) #done resolving a group
242
+ # rslvd = groups.last()
243
+ # eid = el_ids.last()
244
+ # encodedSegments[eid] = rslvd
245
+ # groups.pop()
246
+ # el_ids.pop()
247
+ # end
248
+ # else
249
+ # structure.sub!(m, idx.to_s)
250
+ # end
251
+ # # if (is_g) then groups << m end
252
+ # end
253
+ #
254
+ # if (is_g)
255
+ # groups << m
256
+ # el_ids << idx
257
+ # end
258
+ #
259
+ # encodedSegments << m
260
+ # idx +=1
261
+ # }
262
+
263
+
264
+ puts '_________2_____________'
265
+
266
+ encodedSegments.each{|es|
267
+ puts es
268
+
269
+ is_g = (es.scan('[').size > 1)?true:false
270
+
271
+ if(is_g)
272
+ ms = es.scan(/(?=\[((?:[^\[\]]*|\[\g<1>\])*)\])/)
273
+
274
+ # # m = '['<< e.first() << ']'
275
+ # puts e
276
+ # puts '++'
277
+
278
+ ms.each {|a|
279
+ p a
280
+ is_g = (a.scan('[').size > 1)?true:false
281
+ m = '['<< a.first() << ']'
282
+
283
+ if(groups.size == 0)
284
+ es.sub!(m, idx.to_s)
285
+ # if (is_g) then groups << m end
286
+ else
287
+ if(groups.last().include?(m))
288
+ groups.last().sub!(m, idx.to_s)
289
+ if(!(groups.last().scan('[').size > 1)) #done resolving a group
290
+ #if(is_group_resolved(groups.last(), '[')) #done resolving a group
291
+ rslvd = groups.last()
292
+ eid = el_ids.last()
293
+ encodedSegments[eid] = rslvd
294
+ groups.pop()
295
+ el_ids.pop()
296
+ end
297
+ else
298
+ es.sub!(m, idx.to_s)
299
+ end
300
+ # if (is_g) then groups << m end
301
+ end
302
+
303
+ if (is_g)
304
+ groups << m
305
+ el_ids << idx
306
+ end
307
+
308
+ encodedSegments << m
309
+ idx +=1
310
+ }
311
+
312
+ end
313
+
314
+ }
315
+
316
+ puts groups
317
+ puts encodedSegments
318
+ puts structure
319
+
320
+ # def self.is_group_resolved(seg, group_token)
321
+ # (seg.scan(group_token).size > 1)?true:false
322
+ # end
323
+
324
+ exit
325
+
326
+
327
+ #ORM_O01 Order message
328
+ # MSH;NTE;PID;PD1;PV1;PV2;IN1;IN2;IN3;GT1;AL1;ORC;OBR;RQD;RQ1;RXO;ODS;ODT;CTD;DG1;OBX;FT1;CTI;BLG
329
+ #RDE_O11 Pharmacy/treatment encoded order message
330
+ # MSH;NTE;PID;PD1;PV1;PV2;IN1;IN2;IN3;GT1;AL1;ORC;RXO;RXR;RXC;OBX;CTI
331
+ #OMG_O19 General clinical order message
332
+ # MSH;NTE;PID;PD1;PV1;PV2;IN1;IN2;IN3;GT1;AL1;ORC;OBR;CTD;DG1;OBX;AL1;FT1;CTI;BLG
333
+ o19 = 'MSH~[~{~NTE~}~]~[~PID~[~PD1~]~[~{~NTE~}~]~[~PV1~[~PV2~]~]~[~{~IN1~[~IN2~]~[~IN3~]~}~]~[~GT1~]~[~{~AL1~}~]~]~{~ORC~OBR~[~{~NTE~}~]~[~CTD~]~[~{~DG1~}~]~[~{~OBX~[~{~NTE~}~]~}~]~{~[~[~PID~[~PD1~]~]~[~PV1~[~PV2~]~]~[~{~AL1~}~]~{~[~ORC~]~OBR~[~{~NTE~}~]~[~CTD~]~{~OBX~[~{~NTE~}~]~}~}~]~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
334
+ # mt = /(?=\{((?:[^{}]*|\{\g<1>\})*)\})/.match(o19)
335
+ # mt = o19.scan(/(?=\{((?:[^{}]*|\{\g<1>\})*)\})/)
336
+ # # [["~NTE~"], ["~NTE~"], ["~IN1~[~IN2~]~[~IN3~]~"], ["~AL1~"], ["~ORC~OBR~[~{~NTE~}~]~[~CTD~]~[~{~DG1~}~]~[~{~OBX~[~{~NTE~}~]~}~]~{~[~[~PID~[~PD1~]~]~[~PV1~[~PV2~]~]~[~{~AL1~}~]~{~[~ORC~]~OBR~[~{~NTE~}~]~[~CTD~]~{~OBX~[~{~NTE~}~]~}~}~]~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~"], ["~NTE~"], ["~DG1~"], ["~OBX~[~{~NTE~}~]~"], ["~NTE~"], ["~[~[~PID~[~PD1~]~]~[~PV1~[~PV2~]~]~[~{~AL1~}~]~{~[~ORC~]~OBR~[~{~NTE~}~]~[~CTD~]~{~OBX~[~{~NTE~}~]~}~}~]~"], ["~AL1~"], ["~[~ORC~]~OBR~[~{~NTE~}~]~[~CTD~]~{~OBX~[~{~NTE~}~]~}~"], ["~NTE~"], ["~OBX~[~{~NTE~}~]~"], ["~NTE~"], ["~FT1~"], ["~CTI~"]]
337
+ # puts mt
338
+ # /(\((?:([^\(\)]*)|(?:\g<2>\g<1>\g<2>)*)\))/
339
+ # m = /(\((?:([^\{\}]*)|(?:\g<2>\g<1>\g<2>)*)\))/.match(o19)
340
+ # p m
341
+ idx = 0
342
+ encodedSegments =[]
343
+ # m = o19.scan(/(?=\{((?:[^{}]*|\{\g<1>\})*)\})/)
344
+ # p m
345
+ # m = /(?=\{((?:[^{}]*|\{\g<1>\})*)\})/.match(o19)
346
+ # p m
347
+
348
+ # while(m = (structure.match(@@segment_patern).to_s))
349
+ abc = o19
350
+ xyz = ''
351
+ m = abc.scan(/(?=\{((?:[^{}]*|\{\g<1>\})*)\})/)
352
+ p m
353
+
354
+ # /(?=\{((?:[^{}]*|\{\g<1>\})*)\})/.match(abc){|it|
355
+ # p it
356
+ # }
357
+
358
+ p o19
359
+ p abc
360
+ puts m
361
+ p m[1]
362
+ m.each{|it|
363
+ # p m.begin
364
+ # p m.end
365
+ p m.first.begin
366
+ p m.first.end
367
+
368
+ mtch = it.first.to_s
369
+ o19.sub!(mtch,idx.to_s)
370
+ encodedSegments << mtch
371
+ idx +=1
372
+ }
373
+ abc = m.post_match
374
+
375
+ m = abc.match(/(?=\{((?:[^{}]*|\{\g<1>\})*)\})/)
376
+ p o19
377
+ p abc
378
+ p m
379
+ p m[1]
380
+ o19.sub!(m[1],idx.to_s)
381
+ encodedSegments << m
382
+ idx +=1
383
+ abc = m.post_match
384
+
385
+ m = abc.match(/(?=\{((?:[^{}]*|\{\g<1>\})*)\})/)
386
+ p o19
387
+ p abc
388
+ p m
389
+ p m[1]
390
+ o19.sub!(m[1],idx.to_s)
391
+ encodedSegments << m
392
+ idx +=1
393
+ abc = m.post_match
394
+
395
+ p '!!!!!!!!!!'
396
+ exit
397
+
398
+ puts '[~17~19~20~{~21~OBR~22~23~{~OBX~24~}~}~]'.scan(/[\[\]]/).size()
399
+ puts '[~17~19~20~{~21~OBR~22~23~{~OBX~24~}~}~]'.scan(/[\{\}]/).size()
400
+ puts '[~17~19~20~{~21~OBR~22~23~{~OBX~24~}~}~]'.scan(/[\{\}\[\]]/).size()
401
+
402
+ puts '[~17~19~20~{~21~OBR~22~23~{~OBX~24~}~}~]'.scan(/[\{\}\[\]]/).size().odd?
403
+
404
+ puts '{~ORC~OBR~11~12~13~15~{~25~}'.scan(/[\{\}\[\]]/).size
405
+ puts '{~ORC~OBR~11~12~13~15~{~25~}'.scan(/[\{\}\[\]]/).size.even?
406
+
407
+ m = '{~ORC~OBR~11~12~13~15~{~25~}'
408
+ puts 'MSH~0~10~{~ORC~OBR~11~12~13~15~{~25~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'.scan(/[\[\]]/).size
409
+
410
+
411
+ a25 ='[~17~19~20~{~21~OBR~22~23~{~OBX~24~}~}~]'
412
+ a= 'MSH~0~10~{~ORC~OBR~11~12~13~15~{~[~17~19~20~{~21~OBR~22~23~{~OBX~24~}~}~]~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
413
+
414
+ a26 = '{~ORC~OBR~11~12~13~15~{~25~}'
415
+ struct ='MSH~0~10~{~ORC~OBR~11~12~13~15~{~25~}~[~{~FT1~}~]~[~{~CTI~}~]~[~BLG~]~}'
416
+ b = struct.sub('25',a25)
417
+ puts a
418
+ puts b
419
+ puts a.eql?(b)
420
+
421
+ sq = /[\[\]]/
422
+ crl = /[\{\}]/
423
+ if( a26.scan(sq).size.odd?)
424
+ puts ((a26.scan(/\[/).size - a26.scan(/\]/).size) <0) ?']':'['
425
+ end
426
+
427
+ if( a26.scan(crl).size.odd?)
428
+ puts ((a26.scan(/\{/).size - a26.scan(/\}/).size) <0) ?'{':'}'
429
+ end
430
+
431
+ p '+++++++++++'
432
+ puts struct
433
+
434
+ mt = struct.scan(/(?=\{((?:[^{}]++|\{\g<1>\})++)\})/)
435
+ p mt
436
+ mt = struct.scan(/(?=\{((?:[^{}]*|\{\g<1>\})*)\})/)
437
+ p mt
438
+ mt = /(?=\{((?:[^{}]*|\{\g<1>\})*)\})/.match(struct)
439
+ p mt
440
+
441
+ # mt = /[^{}]*/.match(struct)
442
+ # p mt
443
+ # mt = /(?<={)\*(?=})/.match(struct) #nothing
444
+ # p mt
445
+ # mt = /\{([^\[\]]*)\}/.match(struct) #wrong
446
+ # p mt
447
+
448
+ p '~~~~~~~'
449
+ exit
450
+
451
+ mt = /\[([^\[\]]*)\]|\{([^\[\]]*)\}/.match(struct)
452
+ p mt
453
+ # mt = /(\((?:([^\(\)]*)|(?:(?2)(?1)(?2))*)\))/.match("(a)")
454
+ # http://stackoverflow.com/questions/19486686/recursive-nested-matching-pairs-of-curly-braces-in-ruby-regex
455
+ mt = /(\((?:([^\{\}]*)|(?:\g<1>({\g<1>\})({\g<2>\}))*)\))/.match(struct)
456
+ # (?=\{((?:[^{}]++|\{\g<1>\})++)\})
457
+ p mt
458
+ mt = /\{*\}/.match(struct)
459
+ p mt
460
+ # /(?=\{((?:[^{}]++|\{\g<1>\})++)\})/
461
+ # mt = /(\((?:([^\(\)]*)|(?:(\2)(\1)(\2))*)\))/.match("(a)")
462
+ mt = /(\((?:([^\(\)]*)|(?:(?<out>)(?<in>)(?<out>))*)\))/.match("((c))")
463
+ mt = /(\((?:([^\(\)]*)|(?:\g<2>\g<1>\2<1>)*)\))/.match("((c)a)")
464
+ mt = /(\((?:([^\(\)]*)|(?:\g<2> \g<1> \g<2>)*)\))/.match("(((c)a)v)")
465
+ p mt
466
+ str = "The {quick} brown fox {jumps {over {deep} the} {sfsdf} lazy} dog {sdfsdf {sdfsdf}"
467
+ mt = str.scan(/(?=\{((?:[^{}]++|\{\g<1>\})++)\})/)
468
+ p mt
469
+
470
+ p '============'
471
+
472
+ exit
473
+ idx = b.index(a25)+a25.size
474
+ puts b[idx,b.size]
475
+
476
+ var = 'stac'
477
+ puts /#{var}/.match('haystack')
478
+
479
+ puts /(?<=<b>)\w+(?=<\/b>)/.match("Fortune favours the <b>bold</b>")
480
+ puts /(?<={)\w+(?=})/.match("Fortune favours the {bold}")
481
+ # $~ is equivalent to ::last_match;
482
+ # $& contains the complete matched text;
483
+ # $` contains string before match;
484
+ # $' contains string after match;
485
+ # $1, $2 and so on contain text matching first, second, etc capture group;
486
+ # $+ contains last capture group.
487
+
488
+ m = /s(\w{2}).*(c)/.match('haystack') #=> #<MatchData "stac" 1:"ta" 2:"c">
489
+ puts $~ #=> #<MatchData "stac" 1:"ta" 2:"c">
490
+ puts Regexp.last_match #=> #<MatchData "stac" 1:"ta" 2:"c">
491
+
492
+ puts $& #=> "stac"
493
+ # # same as m[0]
494
+ puts $` #=> "hay"
495
+ # same as m.pre_match
496
+ puts $' #=> "k"
497
+ # # same as m.post_match
498
+ puts $1 #=> "ta"
499
+ # # same as m[1]
500
+ # $2 #=> "c"
501
+ # # same as m[2]
502
+ # $3 #=> nil
503
+ # # no third group in pattern
504
+ # $+ #=> "c"
505
+ # # same as m[-1]
506
+ puts $+
507
+ ex ='[([^\[\]]*)\]|\{([^\[\]]*)\}'
508
+ #(?<={)[[:alnum:]~]+(?=})
509
+ puts Regexp.escape('[]')
510
+ puts Regexp.union(/dogs/, /cats/i)
511
+ puts Regexp.union(/\[([^\[\]]*)\]/,/\{([^\[\]]*)\}/)
512
+ /^[a-z]*$/ === "HELLO" #=> false
513
+ /^[A-Z]*$/ === "HELLO" #=> true
514
+
515
+ /(?<lhs>\w+)\s*=\s*(?<rhs>\w+)/ =~ " x = y "
516
+ p lhs #=> "x"
517
+ p rhs #=> "y"
518
+ #metacharacthers (, ), [, ], {, }, ., ?, +, *
519
+ mt = /[cs](..) [cs]\1 in/.match("The cat sat in the hat")
520
+ p mt[1]
521
+ p mt[2]
522
+ p /[aeiou]\w{2}/.match("Caenorhabditis elegans")
523
+ p /([aeiou]\w){2}/.match("Caenorhabditis elegans")
524
+ mt= /I(n)ves(ti)ga\2ons/.match("Investigations")
525
+ p mt[1] + '....' + mt[2]
526
+ mt= /I(?:n)ves(ti)ga\1ons/.match("Investigations")
527
+ p mt[1] + '....' + mt[2].to_s
528
+ # Finds the outermost pair of parentheses. Compatible with any amount of nesting
529
+ #/(\((?:([^\(\)]*)|(?:(?2)(?1)(?2))*)\))/
530
+ # /(\((?:([^\(\)]*)|(?:\g<1>)*)\))/
531
+ # /(?=\{((?:[^{}]++|\{\g<1>\})++)\})/
532
+ # mt = /(\((?:([^\(\)]*)|(?:(\2)(\1)(\2))*)\))/.match("(a)")
533
+ mt = /(\((?:([^\(\)]*)|(?:(?<out>)(?<in>)(?<out>))*)\))/.match("((c))")
534
+ mt = /(\((?:([^\(\)]*)|(?:\g<1>)*)\))/.match("((c))")
535
+ p mt
536
+ p '----------------'
537
+ mt=/\A(?<paren>\(<paren>*\))*\z/ =~ "a()"
538
+ p mt
539
+ # result = a.scan(/(?=\{((?:[^{}]++|\{\g<1>\})++)\})/)
540
+ # p result
541
+
542
+ exit
543
+
544
+ # p = "\\Users\\romansova\\RubymineProjects\\ez7gen-staged\\ez7gen-web\\README.md"
545
+ # p = %w("\Users\romansova\RubymineProjects\ez7gen-staged\ez7gen-web\README.md")
546
+ # puts p.class
547
+ # puts p.gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR)
548
+ p = '\Users\romansova\RubymineProjects\ez7gen-staged\ez7gen-web\README.md'
549
+ p = 'c:\ez7Gen\ez7gen-web\config\resources'
550
+ puts p
551
+ a = p.gsub("\\", '/')
552
+ a = File.join(a, '/schmea/resources/')
553
+ # a = p.gsub(File::ALT_SEPARATOR || File::SEPARATOR, '/')
554
+ puts a
555
+ exit
556
+
557
+ p = "/Users/romansova/RubymineProjects/ez7gen-staged/ez7gen-web"
558
+ dir, base = File.split(p)
559
+ puts "dir: " + dir
560
+ puts "base:" + base
561
+ puts
562
+
563
+ # path = Pathname.new(p)
564
+ # puts path.realpath()
565
+
566
+ nm = Dir.glob("#{p}*").select {|f| File.directory? f}
567
+ puts nm
568
+ exit
569
+
570
+ time = Time.new
571
+ puts time
572
+ time = Time.new.strftime("%Y%m%d%H%M%S%L")
573
+ puts time
574
+ time = Time.new.strftime("%Y-%m-%d %H:%M:%S.%L")
575
+ puts time
576
+
577
+ # path = Dir.new("/Users/romansova/RubymineProjects/ez7gen-staged/ez7gen-web/config/schema")
578
+ # p = Dir.glob '/Users/romansova/RubymineProjects/ez7gen-staged/ez7gen-web/config/**'
579
+ # puts p
580
+ # d = Dir.glob('/Users/romansova/RubymineProjects/ez7gen-staged/ez7gen-web/config/schema/**').select {|f| File.directory? f}
581
+ # puts d
582
+ # path.each{|it| puts it }
583
+ # path.glob('*').select {|f| File.directory? f}
584
+ dir = '/Users/romansova/RubymineProjects/ez7gen-staged/ez7gen-web/config/schema/'
585
+ # pn = Pathname.new(dir).children.select { |c| c.directory? }
586
+ # pn = Pathname.new(dir).children.select { |c| c.directory? }
587
+ # names = Pathname.new(dir).children.inject([]) { |files, c| (c.directory? ? (files << c) : files) }
588
+ names = Dir.glob("#{dir}**").select {|f| File.directory? f}#.each{|it| it.sub!(dir,'')}
589
+ # names = Dir.glob(dir<<'/**').inject([]){|files,f| (f.directory? ? (files<<f) : files)}
590
+ puts names
591
+
592
+
593
+ exit
594
+
595
+
596
+ h = { "apple tree" => "plant", "ficus" => "plant",
597
+ "shrew" => "animal", "plesiosaur" => "animal" }
598
+ p h.keys.grep /p/
599
+ # => ["apple tree", "plesiosaur"]
600
+ p h.inject([]) { |res, kv| res << kv if kv[1] =~ /p/; res }
601
+ exit
602
+ # => [["ficus", "plant"], ["apple tree", "plant"]]
603
+ p "[~{~PR1~10~}~]".split(/[~\{\[\}\]]/)
604
+ p "[~{~PR1~10~}~]".split(%r|{.*}|)
605
+ # p a
606
+
607
+ begin
608
+ a/0
609
+ rescue => e
610
+ raise e
611
+ puts 'in rescue'
612
+ puts e
613
+ ensure
614
+ puts 'in ensure'
615
+ end
616
+
617
+ puts 'end'
618
+
619
+ puts '%.2f' % 515.0
620
+ file = File.open('../lib/ez7gen/resources/properties.yml')
621
+ yml = YAML::load(file)
622
+ puts yml['person.names.last'][0] # juixe-username
623
+ # yml['user'] # juixe-username
624
+ puts yml['bar']
625
+
626
+ puts yml['bar'].to_a.sample(1).to_h
627
+
628
+ pair = yml['codes.allergens'].to_a.sample(1).to_h
629
+ p pair.first
630
+
631
+ # @@MONEY_FORMAT_INDICATORS = ['Money', 'Balance', 'Charge', 'Adjustment', 'Income', 'Amount', 'Payment','Cost']
632
+ reg = /\bMoney\b|\bBalance\b|\bCharge|\bAdjustment\b|\bIncome\b|\bAmount\b|\bPayment\b|\bCost\b/
633
+
634
+ str = 'Total Charges'
635
+ # exp = /\bMoney\b|\bBalance\b/
636
+ case str
637
+ # when /\bMoney\b|\bBalance\b|\bCharge\b|\bAdjustment\b|\bIncome\b|\bAmount\b|\bPayment\b|\bCost\b/
638
+ when reg
639
+ puts 'when'
640
+ else
641
+ puts 'else'
642
+ end
643
+
644
+
645
+
646
+ puts 'base:MSH'.delete(':base')
647
+ if('[~{~ZMH~}~]'=~/\~Z/)
648
+ puts 'ok!'
649
+ end
650
+ # arr = [6,2, 5]
651
+ # p arr.find_index{|it| it>13}
652
+ #
653
+ # arr = ['1','a','3','4','b','5','6','c','7']
654
+ # p arr.delete_if{|it| it.is}
655
+ #
656
+ # p ['1','a','3','4','b','5','6','c','7'].index(arr)
657
+ # # p arr.delete_if{|it| it.is}
658
+
659
+ if("Hello"=~/^[A-Z][a-z]+$/)
660
+ puts 'ok'
661
+ end
662
+
663
+ exit
664
+ code =nil
665
+ code ||='bla'
666
+ puts code
667
+ exit
668
+ yml = YAML.load_file 'properties.yml'
669
+ puts yml['person.names.first'][0]
670
+ puts yml['address.streetNames']
671
+
672
+ #yml.each_pair { |key, value| puts "#{key} = #{value}" }
673
+
674
+ #puts yml['juixe']['user'] # juixe-username
675
+
676
+ exit
677
+ puts "Result is %.2f" % 1000
678
+ mfi = ['Balance', 'Charges', 'Adjustments', 'Income', 'Amount', 'Money']
679
+ puts mfi.include?('Balance')
680
+
681
+ h1 = { "a" => 100, "b" => 200, 'c' => "c" }
682
+ p h1.update({'a' => 11,'b'=>2 })
683
+ exit
684
+ line = "100,200,300"
685
+
686
+ # Split on the comma char.
687
+ values = line.split(",")
688
+ puts values
689
+
690
+ line = "[max_length:250, description:Organization Unit Type - ROL, ifrepeating:0, datatype:CE, required:O, piece:10, codetable:406]"
691
+ values = line.gsub(/(\[|\])/,'').gsub(':',',').split(',').map{|it| it.strip()}.each_slice(2).to_a.to_h
692
+
693
+
694
+ #values = line.gssplit(",")
695
+ puts values
696
+ puts '_______'
697
+
698
+
699
+ exit
700
+ val =[]
701
+ val << '200'
702
+ val<<'abc'<<'123'
703
+ p val
704
+ puts val.join('|')
705
+ exit
706
+
707
+ # file = File.open('properties.yml')
708
+ # yml = YAML::load(file)
709
+ # puts puts yml['juixe']['user'] # juixe-username
710
+ # yml['user'] # juixe-username
711
+ # exit
712
+
713
+ yml = YAML.load_file 'properties.yml'
714
+ puts yml['person.names.first'][0]
715
+ puts yml['address.streetNames']
716
+
717
+ #yml.each_pair { |key, value| puts "#{key} = #{value}" }
718
+
719
+ #puts yml['juixe']['user'] # juixe-username
720
+
721
+ #exit
722
+
723
+ map = {'required'=>'X'}
724
+ check = if(['X','W','B'].include?(map['required'])) then true end
725
+ puts check
726
+ puts "~~~~~~~~~~"
727
+
728
+ map = {'required'=>'A'}
729
+ check = if(['X','W','B'].include?(map['required'])) then true end
730
+ puts check
731
+ exit
732
+
733
+ code, description = 'bla', 'bla1'
734
+ puts code + " " + description
735
+ puts"1".to_i
736
+
737
+ codes =
738
+ 1.times do |i|
739
+ puts i
740
+ end
741
+ codes = []
742
+ codes << {'a'=>1, 'b'=>1, 'c'=>3}
743
+ codes << {'a'=>10, 'b'=>11, 'c'=>12}
744
+ codes << {'a'=>20, 'b'=>21, 'c'=>23}
745
+
746
+ puts codes
747
+ puts "------------"
748
+ codes.select! {|map| map['a'] > 5 }
749
+ puts codes
750
+
751
+ puts codes.include?('a')
752
+ puts codes.find('a')
753
+
754
+ range = 1..5
755
+ range.each {|it| puts it}
756
+
757
+ ends = '1...12'.split('...').map{|d| d}
758
+ range = ends[0]..ends[1]
759
+ range.each {|it| puts it}
760
+ #puts 'E1 ... E9'.strip(' ')
761
+ puts 'E1 ... E9'.delete(' ')
762
+
763
+ ends = 'E1 ... E9'.delete(' ').split('...').map{|it| it}
764
+ range = ends[0]..ends[1]
765
+ range.each {|it| puts it}
766
+
767
+ ends = '...'.delete(' ').split('...').map{|it| it}
768
+ puts ends.length
769
+
770
+ @random = Random.new
771
+ json = '{
772
+ "APPL_MD_PATH": "",
773
+ "APPL_PHYSICAL_PATH": "",
774
+ "AUTH_PASSWORD": "",
775
+ "AUTH_TYPE": "",
776
+ "AUTH_USER": "",
777
+ "CERT_COOKIE": "",
778
+ "CERT_FLAGS": "",
779
+ "CERT_ISSUER": "",
780
+ "CERT_KEYSIZE": "",
781
+ "CERT_SECRETKEYSIZE": "",
782
+ "CERT_SERIALNUMBER": "",
783
+ "CERT_SERVER_ISSUER": "",
784
+ "CERT_SERVER_SUBJECT": "",
785
+ "CERT_SUBJECT": "",
786
+ "CONTENT_LENGTH": "",
787
+ "CONTENT_TYPE": "",
788
+ "GATEWAY_INTERFACE": "",
789
+ "HTTPS": "",
790
+ "HTTPS_KEYSIZE": "",
791
+ "HTTPS_SECRETKEYSIZE": "",
792
+ "HTTPS_SERVER_ISSUER": "",
793
+ "HTTPS_SERVER_SUBJECT": "",
794
+ "INSTANCE_ID": "",
795
+ "INSTANCE_META_PATH": "",
796
+ "LOCAL_ADDR": "",
797
+ "LOGON_USER": "",
798
+ "PATH_INFO": "",
799
+ "PATH_TRANSLATED": "",
800
+ "QUERY_STRING": "",
801
+ "REMOTE_ADDR": "",
802
+ "REMOTE_HOST": "",
803
+ "REMOTE_USER": "",
804
+ "REQUEST_METHOD": "",
805
+ "SCRIPT_NAME": "",
806
+ "SERVER_NAME": "",
807
+ "SERVER_PORT": "",
808
+ "SERVER_PORT_SECURE": "",
809
+ "SERVER_PROTOCOL": "",
810
+ "SERVER_SOFTWARE": "",
811
+ "URL": "",
812
+ "HTTP_CONNECTION": "",
813
+ "HTTP_ACCEPT": "",
814
+ "HTTP_ACCEPT_LANGUAGE": "",
815
+ "HTTP_COOKIE": "",
816
+ "HTTP_HOST": "",
817
+ "HTTP_REFERER": "",
818
+ "HTTP_USER_AGENT": "",
819
+ "HTTP_DNT": "",
820
+ "HTTP_WL_PROXY_SSL": "",
821
+ "HTTP_SM_LOCATION": "",
822
+ "HTTP_SM_LOCATION_UNPARSED": "",
823
+ "HTTP_SERVER_PROTOCOL": "",
824
+ "HTTP_SM_TRANSACTIONID": "",
825
+ "HTTP_SERVER_PORT": "",
826
+ "HTTP_REQUEST_METHOD": "",
827
+ "HTTP_SM_SDOMAIN": "",
828
+ "HTTP_SM_REALM": "",
829
+ "HTTP_SM_REALMOID": "",
830
+ "HTTP_SM_AUTHTYPE": "",
831
+ "HTTP_SM_AUTHREASON": "",
832
+ "HTTP_SM_SESSIONDRIFT": "",
833
+ "HTTP_SM_UNIVERSALID": "",
834
+ "HTTP_SM_AUTHDIROID": "",
835
+ "HTTP_SM_AUTHDIRNAME": "",
836
+ "HTTP_SM_AUTHDIRSERVER": "",
837
+ "HTTP_SM_AUTHDIRNAMESPACE": "",
838
+ "HTTP_SM_USER": "",
839
+ "HTTP_SM_USERDN": "",
840
+ "HTTP_SM_SERVERSESSIONID": "",
841
+ "HTTP_SM_SERVERSESSIONSPEC": "",
842
+ "HTTP_SM_TIMETOEXPIRE": "",
843
+ "HTTP_SM_SERVERIDENTITYSPEC": "",
844
+ "HTTP_SESSIONSCOPE": "",
845
+ "HTTP_ADSAMACCOUNTNAME": "",
846
+ "HTTP_VAUID": "",
847
+ "HTTP_DODEDIPNID": "",
848
+ "HTTP_FIRSTNAME": "",
849
+ "HTTP_ADEMAIL": "",
850
+ "HTTP_ORGANIZATIONID": "",
851
+ "HTTP_ASSURLEVEL": "",
852
+ "HTTP_ORGANIZATION": "",
853
+ "HTTP_PROOFINGAUTH": "",
854
+ "HTTP_SSOI_LOGOUT": "",
855
+ "HTTP_ROLE": "",
856
+ "HTTP_VISTAID": "",
857
+ "HTTP_MVIICN": "",
858
+ "HTTP_ISSUEINSTANT": "",
859
+ "HTTP_VISTAIDRAW": "",
860
+ "HTTP_AUTHNTYPE": "",
861
+ "HTTP_ADUPN": "",
862
+ "HTTP_TRANSACTIONID": "",
863
+ "HTTP_LASTNAME": "",
864
+ "HTTP_ADDOMAIN": "",
865
+ "HTTP_SECID": ""
866
+ }'
867
+
868
+ 50.times{
869
+ parsed = JSON.parse(json)
870
+ a = []
871
+ parsed.each{|it|
872
+ # p @random.rand(100000000).to_s
873
+ a << {it[0] => @random.rand(100000000000000).to_s}
874
+ }
875
+ # p parsed
876
+ str = a.to_json
877
+ puts str
878
+ }
879
+
880
+ exit;