ass_launcher 0.3.4 → 0.4.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.
- checksums.yaml +4 -4
- data/README.md +93 -0
- data/ass_launcher.gemspec +10 -9
- data/examples/binary_wrappers_example.rb +1 -0
- data/examples/enterprise_ole_example.rb +3 -3
- data/examples/example_helper.rb +1 -1
- data/examples/troubles/with_creteinfobase_example.rb +11 -0
- data/examples/troubles/with_running_1c_example.rb +1 -0
- data/lib/ass_launcher/api.rb +36 -0
- data/lib/ass_launcher/cmd.rb +56 -8
- data/lib/ass_launcher/cmd/makeib.rb +1 -0
- data/lib/ass_launcher/enterprise.rb +1 -1
- data/lib/ass_launcher/enterprise/binary_wrapper.rb +38 -11
- data/lib/ass_launcher/enterprise/cli_def/8.3.11.rb +23 -0
- data/lib/ass_launcher/enterprise/cli_def/8.3.4.rb +2 -1
- data/lib/ass_launcher/enterprise/ole/ole_binaries.rb +28 -4
- data/lib/ass_launcher/support/connection_string.rb +21 -3
- data/lib/ass_launcher/support/shell.rb +32 -5
- data/lib/ass_launcher/support/shell/process_holder.rb +2 -3
- data/lib/ass_launcher/version.rb +1 -1
- metadata +52 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5008022ad5d5fd04a83c36b1f3fbe8acd4287d3b
|
4
|
+
data.tar.gz: 8de98dc56afa600f640676b3bd25007e60365c3b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d913884ca7a19f1c69e6fc79139883a2c51ff9ca9bec2eb4b6c4ed8bc59b9186ad58721632d0185250f555dee795336decd9041c3cb020f657cbccf9f20a543e
|
7
|
+
data.tar.gz: 66e9ba2adafef61c6a8a1671196557c8ee92b800aef2c18562e2dd3ac01a27db446cc2219ef3922b6763b704c8326c0944d2e4bda33f9c8172563e49ef3d7e39
|
data/README.md
CHANGED
@@ -76,6 +76,99 @@ For more info about `ass-launcher` execute:
|
|
76
76
|
$ass-launcher --help
|
77
77
|
|
78
78
|
|
79
|
+
## x86_64 1C:Enterprise for Windows
|
80
|
+
|
81
|
+
From `v8.3.9` 1C provides x86_64 arch platform for Windows.
|
82
|
+
|
83
|
+
For choosing which arch of 1C binary you need
|
84
|
+
`AssLauncher::Enterprise::BinaryWrapper` has `arch` property and some helpers
|
85
|
+
in `AssLauncher::Api` like a `*_i386` and `*_x86_64`.
|
86
|
+
|
87
|
+
For inproc OLE server `v83.ComConnector` aka `comcntr.dll`, arch of 1C
|
88
|
+
binary selects automaticaly in depends of Ruby arch.
|
89
|
+
|
90
|
+
On default using of `x86_64` 1C OLE server is forbidden (see below trouble).
|
91
|
+
For forcing to use `x86_64` OLE server set config flag `use_x86_64_ole`:
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
AssLauncher.configure do |conf|
|
95
|
+
conf.use_x86_64_ole = true
|
96
|
+
end
|
97
|
+
```
|
98
|
+
|
99
|
+
### Trouble with x86_64 inproc OLE server `v83.ComConnector`
|
100
|
+
|
101
|
+
`x86_64` inproc OLE server or Ruby `win32ole` is unstable now
|
102
|
+
and Ruby usually crashed while handling connect error.
|
103
|
+
|
104
|
+
Еxample for `x86_64` Ruby and 1C OLE server:
|
105
|
+
|
106
|
+
```
|
107
|
+
$ruby -v
|
108
|
+
ruby 2.3.6p384 (2017-12-14 revision 9808) [x86_64-cygwin]
|
109
|
+
|
110
|
+
$pry
|
111
|
+
|
112
|
+
RbConfig::CONFIG['arch'] #=> "x86_64-cygwin"
|
113
|
+
|
114
|
+
require 'win32ole'
|
115
|
+
|
116
|
+
inproc = WIN32OLE.new('V83.COMConnector')
|
117
|
+
|
118
|
+
inproc.connect('invalid connection string')
|
119
|
+
|
120
|
+
....*** buffer overflow detected ***: terminated
|
121
|
+
Aborted (стек памяти сброшен на диск)
|
122
|
+
```
|
123
|
+
|
124
|
+
The same example for `i386` Ruby and 1C OLE server working fine:
|
125
|
+
|
126
|
+
```
|
127
|
+
$ruby -v
|
128
|
+
ruby 2.3.6p384 (2017-12-14 revision 9808) [i386-cygwin]
|
129
|
+
|
130
|
+
$pry
|
131
|
+
|
132
|
+
RbConfig::CONFIG['arch'] #=> "i386-cygwin"
|
133
|
+
|
134
|
+
require 'win32ole'
|
135
|
+
|
136
|
+
inproc = WIN32OLE.new('V83.COMConnector')
|
137
|
+
|
138
|
+
inproc.connect('invalid connection string')
|
139
|
+
|
140
|
+
WIN32OLERuntimeError: (in OLE method `connect': )
|
141
|
+
OLE error code:80004005 in V83.COMConnector.1
|
142
|
+
Неверные или отсутствующие параметры соединения с информационной базой
|
143
|
+
HRESULT error code:0x80020009
|
144
|
+
Exception occurred.
|
145
|
+
from (pry):3:in `method_missing'
|
146
|
+
```
|
147
|
+
|
148
|
+
|
149
|
+
### Trouble with x86_64 standalone OLE servers `v83c.Application` and `v83.Application`
|
150
|
+
|
151
|
+
On theory, architecture of standalone OLE server isn't important for using them
|
152
|
+
in various Ruby architectures.
|
153
|
+
|
154
|
+
But it only theory. While in the run [exaples](examples/) in the `i386` Ruby
|
155
|
+
with `x86_64` standalone 1C OLE observes the unexpected behavior of 1C OLE
|
156
|
+
servers like a errors while to connect to information base:
|
157
|
+
|
158
|
+
```
|
159
|
+
WIN32OLERuntimeError: (in OLE method `connect': )
|
160
|
+
OLE error code:0 in <Unknown>
|
161
|
+
<No Description>
|
162
|
+
HRESULT error code:0x80010108
|
163
|
+
The object invoked has disconnected from its clients.
|
164
|
+
/tmp/ass_launcher/lib/ass_launcher/enterprise/ole/win32ole.rb:87:in `method_missing'
|
165
|
+
/tmp/ass_launcher/lib/ass_launcher/enterprise/ole/win32ole.rb:87:in `call'
|
166
|
+
/tmp/ass_launcher/lib/ass_launcher/enterprise/ole/win32ole.rb:87:in `block in <class:WIN32OLE>'
|
167
|
+
/tmp/ass_launcher/lib/ass_launcher/enterprise/ole.rb:142:in `__try_open__'
|
168
|
+
/tmp/ass_launcher/lib/ass_launcher/enterprise/ole.rb:136:in `__open__'
|
169
|
+
/tmp/ass_launcher/examples/enterprise_ole_example.rb:131:in `block (4 levels) in <module:EnterpriseOle>'
|
170
|
+
```
|
171
|
+
|
79
172
|
## Usage
|
80
173
|
|
81
174
|
### Examples
|
data/ass_launcher.gemspec
CHANGED
@@ -23,18 +23,19 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.metadata = {'known_enterprise_versions' => AssLauncher::KNOWN_ENTERPRISE_VERSIONS.get.join(', ')}
|
25
25
|
|
26
|
-
spec.add_dependency "inifile"
|
27
|
-
spec.add_dependency "methadone"
|
26
|
+
spec.add_dependency "inifile", "~> 3.0"
|
27
|
+
spec.add_dependency "methadone", "~> 1.9"
|
28
28
|
spec.add_dependency "addressable", "= 2.4.0"
|
29
|
-
spec.add_dependency "clamp"
|
30
|
-
spec.add_dependency "colorize"
|
31
|
-
spec.add_dependency "
|
29
|
+
spec.add_dependency "clamp", "~> 1.2"
|
30
|
+
spec.add_dependency "colorize", "~> 0.8"
|
31
|
+
spec.add_dependency "io-console", "~> 0.4.6"
|
32
|
+
spec.add_dependency "command_line_reporter", '~> 3.0'
|
32
33
|
|
33
34
|
spec.add_development_dependency "bundler", "~> 1.10"
|
34
35
|
spec.add_development_dependency "rake", "~> 10.0"
|
35
|
-
spec.add_development_dependency "minitest"
|
36
|
-
spec.add_development_dependency "pry"
|
36
|
+
spec.add_development_dependency "minitest", "~> 5.11"
|
37
|
+
spec.add_development_dependency "pry", "~> 0.11"
|
37
38
|
spec.add_development_dependency "mocha", "= 1.1.0"
|
38
|
-
spec.add_development_dependency "simplecov"
|
39
|
-
spec.add_development_dependency "coderay"
|
39
|
+
spec.add_development_dependency "simplecov", "~> 0.15"
|
40
|
+
spec.add_development_dependency "coderay", "~> 1.1"
|
40
41
|
end
|
@@ -215,9 +215,9 @@ module Examples
|
|
215
215
|
|
216
216
|
ruby_obj = Object.new
|
217
217
|
|
218
|
-
skip
|
219
|
-
|
220
|
-
|
218
|
+
skip "It usually Segmentation fault in ruby:\n"\
|
219
|
+
" 2.0.0p645 (2015-04-13 revision 50299) [i386-cygwin]\n"\
|
220
|
+
" 2.3.6p384 (2017-12-14 revision 9808) [i386-cygwin]"
|
221
221
|
|
222
222
|
# Call OLE server
|
223
223
|
ole_server.add(1, ruby_obj)
|
data/examples/example_helper.rb
CHANGED
@@ -31,6 +31,7 @@ module Examples
|
|
31
31
|
File.exists?(conns.file).must_equal false
|
32
32
|
|
33
33
|
# But created infobase which we don't want
|
34
|
+
skip 'It fixed from 1C:Enterprise 8.3.10'
|
34
35
|
command.process_holder.result.success?.must_equal true
|
35
36
|
command.process_holder.result.assout =~\
|
36
37
|
/Creation of infobase \("File\s?=\s?"([^"]+)/i
|
@@ -91,6 +92,8 @@ module Examples
|
|
91
92
|
end
|
92
93
|
|
93
94
|
it "Fails if connection string double quoted" do
|
95
|
+
skip 'It fixed from 1C:Enterprise 8.3.10'
|
96
|
+
|
94
97
|
conns = "File=\"#{infobasedir}\""
|
95
98
|
|
96
99
|
# Path like C:\tempdir\infobase
|
@@ -151,6 +154,7 @@ module Examples
|
|
151
154
|
conns = "File=\'#{infobasedir}\'"
|
152
155
|
|
153
156
|
it 'Fails CREATEINFOBASE' do
|
157
|
+
skip 'It fixed from 1C:Enterprise 8.3.10'
|
154
158
|
skip 'Not actual in Linux' if PLATFORM::LINUX
|
155
159
|
|
156
160
|
command = CLIENTS::THICK.command :createinfobase,
|
@@ -188,6 +192,7 @@ module Examples
|
|
188
192
|
command.process_holder.result.assout.must_match(
|
189
193
|
/Creation of infobase \("File=\\;.+\) completed successfully/i)
|
190
194
|
else
|
195
|
+
skip 'It fixed from 1C:Enterprise 8.3.10'
|
191
196
|
# Next runs test: found infobase files in root the file system
|
192
197
|
command.process_holder.result.assout.must_match(
|
193
198
|
/The Infobase specified already exists/i)
|
@@ -227,6 +232,7 @@ module Examples
|
|
227
232
|
# Exit status and assout:
|
228
233
|
if command.process_holder.result.exitstatus == 0
|
229
234
|
# First run test: created new infobase in the current directory
|
235
|
+
skip 'It fixed from 1C:Enterprise 8.3.10'
|
230
236
|
command.process_holder.result.assout.must_match(
|
231
237
|
/Creation of infobase \("File='\.\.\\trouble_.+\) \S+ successfully/i)
|
232
238
|
else
|
@@ -245,6 +251,8 @@ module Examples
|
|
245
251
|
|
246
252
|
describe 'Using double quoted connection string' do
|
247
253
|
it "Fails if connection string double quoted" do
|
254
|
+
skip 'It fixed from 1C:Enterprise 8.3.10'
|
255
|
+
|
248
256
|
conns = "File=\"#{infobasedir}\""
|
249
257
|
Pathname.new(infobasedir).relative?.must_equal true
|
250
258
|
|
@@ -288,6 +296,8 @@ module Examples
|
|
288
296
|
|
289
297
|
describe 'Using single quoted connection' do
|
290
298
|
it 'Fails CREATEINFOBASE' do
|
299
|
+
skip 'It fixed from 1C:Enterprise 8.3.10'
|
300
|
+
|
291
301
|
extend AssLauncher::Api
|
292
302
|
|
293
303
|
File.exists?(root).must_equal true
|
@@ -325,6 +335,7 @@ module Examples
|
|
325
335
|
command.process_holder.result.assout.must_match(
|
326
336
|
/Creation of infobase \("File=\\;.+\) completed successfully/i)
|
327
337
|
else
|
338
|
+
skip 'It fixed from 1C:Enterprise 8.3.10'
|
328
339
|
# Next runs test: found infobase files in root of the file system
|
329
340
|
command.process_holder.result.assout.must_match(
|
330
341
|
/The Infobase specified already exists/i)
|
data/lib/ass_launcher/api.rb
CHANGED
@@ -14,6 +14,24 @@ module AssLauncher
|
|
14
14
|
AssLauncher::Enterprise.thick_clients(requiremet).sort
|
15
15
|
end
|
16
16
|
|
17
|
+
# Return sorted array of instaled x86_64 1C binary wrappers
|
18
|
+
# @param (see thicks)
|
19
|
+
# @return (see thicks)
|
20
|
+
def thicks_x86_64(requiremet = '>=0')
|
21
|
+
thicks(requiremet).select do |bw|
|
22
|
+
bw.x86_64?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Return sorted array of instaled i386 1C binary wrappers
|
27
|
+
# @param (see thicks)
|
28
|
+
# @return (see thicks)
|
29
|
+
def thicks_i386(requiremet = '>=0')
|
30
|
+
thicks(requiremet).select do |bw|
|
31
|
+
!bw.x86_64?
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
17
35
|
# Return sorted array of instaled 1C binary wrappers
|
18
36
|
# @example
|
19
37
|
# inclide AssLauncher::Api
|
@@ -26,6 +44,24 @@ module AssLauncher
|
|
26
44
|
AssLauncher::Enterprise.thin_clients(requiremet).sort
|
27
45
|
end
|
28
46
|
|
47
|
+
# Return sorted array of instaled x86_64 1C binary wrappers
|
48
|
+
# @param (see thins)
|
49
|
+
# @return (see thins)
|
50
|
+
def thins_x86_64(requiremet = '>=0')
|
51
|
+
thins(requiremet).select do |bw|
|
52
|
+
bw.x86_64?
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Return sorted array of instaled i386 1C binary wrappers
|
57
|
+
# @param (see thins)
|
58
|
+
# @return (see thins)
|
59
|
+
def thins_i386(requiremet = '>=0')
|
60
|
+
thins(requiremet).select do |bw|
|
61
|
+
!bw.x86_64?
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
29
65
|
# (see AssLauncher::Support::ConnectionString.new)
|
30
66
|
# @example
|
31
67
|
# include AssLauncher::Api
|
data/lib/ass_launcher/cmd.rb
CHANGED
@@ -148,6 +148,11 @@ module AssLauncher
|
|
148
148
|
include AssLauncher::Api
|
149
149
|
include ClientMode
|
150
150
|
|
151
|
+
def self.included(base)
|
152
|
+
fail "#{base} must include Option::Arch module before include"\
|
153
|
+
' BinaryWrapper' unless base.include? Option::Arch
|
154
|
+
end
|
155
|
+
|
151
156
|
def binary_wrapper
|
152
157
|
binary_get || (fail Clamp::ExecutionError
|
153
158
|
.new(not_inst_message, invocation_path, 1))
|
@@ -169,12 +174,26 @@ module AssLauncher
|
|
169
174
|
|
170
175
|
def binary_get
|
171
176
|
case client
|
172
|
-
when :thick then
|
173
|
-
when :thin then
|
177
|
+
when :thick then thicks_get(vrequrement).last
|
178
|
+
when :thin then thins_get(vrequrement).last
|
174
179
|
end
|
175
180
|
end
|
176
181
|
private :binary_get
|
177
182
|
|
183
|
+
def thicks_get(req)
|
184
|
+
thicks(req).select do |bw|
|
185
|
+
arch_any? || bw.arch == arch
|
186
|
+
end
|
187
|
+
end
|
188
|
+
private :thicks_get
|
189
|
+
|
190
|
+
def thins_get(req)
|
191
|
+
thins(req).select do |bw|
|
192
|
+
arch_any? || bw.arch == arch
|
193
|
+
end
|
194
|
+
end
|
195
|
+
private :thins_get
|
196
|
+
|
178
197
|
# rubocop:disable all
|
179
198
|
def dry_run(cmd)
|
180
199
|
r = "#{cmd.cmd.gsub(' ', '\\ ')} "
|
@@ -428,6 +447,33 @@ module AssLauncher
|
|
428
447
|
end
|
429
448
|
end
|
430
449
|
end
|
450
|
+
|
451
|
+
# Mixin
|
452
|
+
# Command option
|
453
|
+
module Arch
|
454
|
+
def expected_archs
|
455
|
+
[AssLauncher::Enterprise::BinaryWrapper::X86_64,
|
456
|
+
AssLauncher::Enterprise::BinaryWrapper::I386]
|
457
|
+
end
|
458
|
+
|
459
|
+
def self.included(base)
|
460
|
+
base.option '--arch', 'ARCH',
|
461
|
+
'specify x86_64 or i386 platform arch' do |s|
|
462
|
+
fail ArgumentError, "Invalid arch `#{s}'."\
|
463
|
+
" Valid values #{expected_archs.join('|')}" unless\
|
464
|
+
expected_archs.include? s
|
465
|
+
s
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
469
|
+
def x86_64?
|
470
|
+
arch.to_s == AssLauncher::Enterprise::BinaryWrapper::X86_64
|
471
|
+
end
|
472
|
+
|
473
|
+
def arch_any?
|
474
|
+
arch.nil?
|
475
|
+
end
|
476
|
+
end
|
431
477
|
end
|
432
478
|
|
433
479
|
# @api private
|
@@ -673,7 +719,7 @@ module AssLauncher
|
|
673
719
|
r = 'CLI PARAMETERS'
|
674
720
|
end
|
675
721
|
r << " AVAILABLE FOR: \"#{client}\" CLIENT V#{version}"
|
676
|
-
r << " IN \"#{mode}\"
|
722
|
+
r << " IN \"#{mode}\" RUNNING MODE" if client == :thick
|
677
723
|
r.upcase
|
678
724
|
end
|
679
725
|
# rubocop:enable Style/ConditionalAssignment
|
@@ -785,6 +831,7 @@ module AssLauncher
|
|
785
831
|
include Option::Password
|
786
832
|
include Option::Uc
|
787
833
|
include Option::Raw
|
834
|
+
include Option::Arch
|
788
835
|
include BinaryWrapper
|
789
836
|
include ParseIbPath
|
790
837
|
|
@@ -815,8 +862,6 @@ module AssLauncher
|
|
815
862
|
_N usr if usr
|
816
863
|
_P pass if pass
|
817
864
|
_UC uc_ if uc_
|
818
|
-
_AppAutoCheckVersion(:-) if Gem::Requirement.new('>= 8.3.8')
|
819
|
-
.satisfied_by? binary_wrapper.version
|
820
865
|
end
|
821
866
|
cmd
|
822
867
|
end
|
@@ -872,18 +917,21 @@ module AssLauncher
|
|
872
917
|
end
|
873
918
|
|
874
919
|
def list(clients)
|
875
|
-
" - v#{clients.map
|
920
|
+
" - v#{clients.map do |cl|
|
921
|
+
"#{cl.version} (#{cl.arch})"
|
922
|
+
end.join("\n - v")}"
|
876
923
|
end
|
877
924
|
|
878
925
|
# rubocop:disable Metrics/AbcSize
|
879
926
|
def execute
|
927
|
+
puts Colorize.red "Ruby arch: #{RbConfig::CONFIG['arch']}"
|
880
928
|
puts Colorize.yellow '1C:Enterprise installations was searching in:'
|
881
929
|
puts Colorize
|
882
930
|
.green " - #{AssLauncher::Enterprise.search_paths.join("\n - ")}"
|
883
931
|
puts Colorize.yellow 'Thick client installations:'
|
884
|
-
puts Colorize.green list(thicks)
|
932
|
+
puts Colorize.green list(thicks.reverse)
|
885
933
|
puts Colorize.yellow 'Thin client installations:'
|
886
|
-
puts Colorize.green list(thins)
|
934
|
+
puts Colorize.green list(thins.reverse)
|
887
935
|
end
|
888
936
|
# rubocop:enable Metrics/AbcSize
|
889
937
|
end
|
@@ -41,7 +41,7 @@ module AssLauncher
|
|
41
41
|
sp = []
|
42
42
|
sp << AssLauncher.config.search_path
|
43
43
|
if windows_or_cygwin?
|
44
|
-
sp += platform.env[/\Aprogram\s*files
|
44
|
+
sp += platform.env[/\Aprogram\s*(files.*|W6432)/i].uniq.map { |pf| "#{pf}/1c*" }
|
45
45
|
elsif linux?
|
46
46
|
sp += %w(/opt/1C /opt/1c)
|
47
47
|
end
|
@@ -17,6 +17,11 @@ module AssLauncher
|
|
17
17
|
class BinaryWrapper
|
18
18
|
include AssLauncher::Support::Platforms
|
19
19
|
attr_reader :path
|
20
|
+
V64_FILES = %w{version64.dat version64.txt}
|
21
|
+
# @api public
|
22
|
+
X86_64 = 'x86_64'
|
23
|
+
# @api public
|
24
|
+
I386 = 'i386'
|
20
25
|
|
21
26
|
def initialize(binpath)
|
22
27
|
@path = platform.path(binpath).realpath
|
@@ -42,11 +47,16 @@ module AssLauncher
|
|
42
47
|
end
|
43
48
|
|
44
49
|
# Define arch on 1C platform.
|
45
|
-
# @note Arch of platform actual for Linux. In windows return i386
|
46
50
|
# @api public
|
47
|
-
# @return [String]
|
51
|
+
# @return [String] {X86_64} or {I386}
|
48
52
|
def arch
|
49
|
-
@arch ||= extract_arch
|
53
|
+
@arch ||= extract_arch
|
54
|
+
end
|
55
|
+
|
56
|
+
# True if {#arch} == {X86_64}
|
57
|
+
# @api public
|
58
|
+
def x86_64?
|
59
|
+
arch == X86_64
|
50
60
|
end
|
51
61
|
|
52
62
|
# Extract version from path
|
@@ -57,27 +67,44 @@ module AssLauncher
|
|
57
67
|
# +/opt/1C/v8.3/i386/1cv8+
|
58
68
|
def extract_version(realpath)
|
59
69
|
return AssLauncher::Support::Linux.get_pkg_version(realpath) if\
|
60
|
-
|
70
|
+
linux?
|
61
71
|
extracted = realpath.to_s.split('/')[-3]
|
62
|
-
|
63
|
-
extracted = (Regexp.last_match(1).to_s.split('.')\
|
64
|
-
+ [0, 0, 0, 0])[0, 4].join('.')
|
65
|
-
Gem::Version.new(extracted)
|
72
|
+
Gem::Version.new v8(extracted)
|
66
73
|
end
|
67
74
|
private :extract_version
|
68
75
|
|
76
|
+
def v8(extracted)
|
77
|
+
return '8.1.0.0' if extracted =~ %r{1cv81}i
|
78
|
+
extracted =~ /(\d+\.\d+\.?\d*\.?\d*)/i
|
79
|
+
(Regexp.last_match(1).to_s.split('.') + [0, 0, 0, 0])[0, 4].join('.')
|
80
|
+
end
|
81
|
+
private :v8
|
82
|
+
|
69
83
|
# Extract arch from path
|
70
84
|
# @note (see #extract_version)
|
71
|
-
def extract_arch
|
85
|
+
def extract_arch
|
72
86
|
if linux?
|
73
|
-
extracted =
|
87
|
+
extracted = path.to_s.split('/')[-2]
|
74
88
|
else
|
75
|
-
extracted =
|
89
|
+
extracted = version64? ? X86_64 : I386
|
76
90
|
end
|
77
91
|
extracted
|
78
92
|
end
|
79
93
|
private :extract_arch
|
80
94
|
|
95
|
+
def version64?
|
96
|
+
V64_FILES.each do |f|
|
97
|
+
return true if version64_exist?(f)
|
98
|
+
end
|
99
|
+
false
|
100
|
+
end
|
101
|
+
private :version64?
|
102
|
+
|
103
|
+
def version64_exist?(file)
|
104
|
+
File.exist?(File.join(path.dirname, file))
|
105
|
+
end
|
106
|
+
private :version64_exist?
|
107
|
+
|
81
108
|
# Compare wrappers on version for sortable
|
82
109
|
# @param other [BinaryWrapper]
|
83
110
|
# @return [Bollean]
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module AssLauncher::Enterprise::CliDef
|
2
|
+
restrict '/TESTCLIENT'
|
3
|
+
|
4
|
+
group :debug do
|
5
|
+
mode :webclient, :enterprise do
|
6
|
+
flag '/TESTCLIENT',
|
7
|
+
'запуск в качестве объекта автоматизированного тестирования.'\
|
8
|
+
' Для идентификации конкретного экземпляра веб-клиента следует'\
|
9
|
+
' использовать параметр TestClientID' do
|
10
|
+
num '-TPort', 'Номер TCP порта. По умолчанию 1538'\
|
11
|
+
' Не используется в вэб-клиенте!'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
group :packge_mode do
|
17
|
+
mode :designer do
|
18
|
+
change '/CheckConfig' do
|
19
|
+
flag '-CheckUseSynchronousCalls', 'проверять синхронные вызовы'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -17,7 +17,8 @@ module AssLauncher::Enterprise::CliDef
|
|
17
17
|
mode :designer do
|
18
18
|
flag '/ConfigurationRepositoryCreate',
|
19
19
|
'создание хранилища конфигурации' do
|
20
|
-
flag '-AllowConfigurationChanges', ''
|
20
|
+
flag '-AllowConfigurationChanges', 'включет возможность изменения'\
|
21
|
+
' конфигурации находящейся на поддержке'
|
21
22
|
chose '-ChangesAllowedRule',
|
22
23
|
'устанавливает правило поддержки для объектов для которых'\
|
23
24
|
' изменения разрешены поставщиком',
|
@@ -2,7 +2,16 @@
|
|
2
2
|
require 'ass_launcher/enterprise/ole/win32ole'
|
3
3
|
#
|
4
4
|
module AssLauncher
|
5
|
-
|
5
|
+
class Configuration
|
6
|
+
# Forcing to use inproc x86_64 1C Ole server in x86_64 Ruby.
|
7
|
+
attr_writer :use_x86_64_ole
|
8
|
+
|
9
|
+
# Forcing to use inproc x86_64 1C Ole server in x86_64 Ruby.
|
10
|
+
def use_x86_64_ole?
|
11
|
+
@use_x86_64_ole ||= false
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
6
15
|
module Enterprise
|
7
16
|
#
|
8
17
|
module Ole
|
@@ -138,10 +147,19 @@ module AssLauncher
|
|
138
147
|
# (see AbstractAssOleBinary#initialize)
|
139
148
|
def initialize(requirement)
|
140
149
|
super requirement
|
141
|
-
fail
|
142
|
-
|
150
|
+
fail unstable if failure_unstable?
|
151
|
+
end
|
152
|
+
|
153
|
+
def failure_unstable?
|
154
|
+
ruby_x86_64? && !AssLauncher.config.use_x86_64_ole?
|
143
155
|
end
|
144
156
|
|
157
|
+
def unstable
|
158
|
+
"v8x.COMConnector is unstable in #{arch} Ruby.\n"\
|
159
|
+
"Set `AssLauncher.config.use_x86_64_ole' for bypass this failure."
|
160
|
+
end
|
161
|
+
private :unstable
|
162
|
+
|
145
163
|
def arch
|
146
164
|
RbConfig::CONFIG['arch']
|
147
165
|
end
|
@@ -150,6 +168,10 @@ module AssLauncher
|
|
150
168
|
X32_ARCHS.include? arch
|
151
169
|
end
|
152
170
|
|
171
|
+
def ruby_x86_64?
|
172
|
+
!x32_arch?
|
173
|
+
end
|
174
|
+
|
153
175
|
def binary
|
154
176
|
BINARY
|
155
177
|
end
|
@@ -169,7 +191,9 @@ module AssLauncher
|
|
169
191
|
private :clsids
|
170
192
|
|
171
193
|
def _binary_wrapper
|
172
|
-
Enterprise.thick_clients(requirement.to_s).
|
194
|
+
Enterprise.thick_clients(requirement.to_s).select do |bw|
|
195
|
+
bw.x86_64? == ruby_x86_64?
|
196
|
+
end.sort.last
|
173
197
|
end
|
174
198
|
private :_binary_wrapper
|
175
199
|
|
@@ -18,7 +18,7 @@ module AssLauncher
|
|
18
18
|
class Error < StandardError; end
|
19
19
|
class ParseError < StandardError; end
|
20
20
|
# Commonn connection string fields
|
21
|
-
COMMON_FIELDS = %w(Usr Pwd LicDstr prmod Locale Zn)
|
21
|
+
COMMON_FIELDS = %w(Usr Pwd LicDstr prmod Locale Zn Uc)
|
22
22
|
# Fields for server-infobase
|
23
23
|
SERVER_FIELDS = %w(Srvr Ref)
|
24
24
|
# Fields for file-infobase
|
@@ -31,10 +31,18 @@ module AssLauncher
|
|
31
31
|
# Fields for makes server-infobase
|
32
32
|
IB_MAKER_FIELDS = %w(DBMS DBSrvr DB
|
33
33
|
DBUID DBPwd SQLYOffs
|
34
|
-
CrSQLDB SchJobDn SUsr SPwd
|
34
|
+
CrSQLDB SchJobDn SUsr SPwd
|
35
|
+
DBFormat DBPageSize)
|
35
36
|
# Values for DBMS field
|
36
37
|
DBMS_VALUES = %w(MSSQLServer PostgreSQL IBMDB2 OracleDatabase)
|
37
38
|
|
39
|
+
# Values for DBPageSize
|
40
|
+
DB_PAGE_SIZE_VALUES = %w{4k , 8k, 16k, 32k, 64k}
|
41
|
+
|
42
|
+
# Values for DBFormat
|
43
|
+
DB_FORMAT_VALUES = %w{8.2.14 8.3.8}
|
44
|
+
|
45
|
+
|
38
46
|
# Analyzes connect string and build suitable class
|
39
47
|
# @param connstr (see parse)
|
40
48
|
# @return [Server | File | Http] instanse
|
@@ -268,7 +276,7 @@ module AssLauncher
|
|
268
276
|
# :createinfibase runmode
|
269
277
|
# @todo validte createinfibase params
|
270
278
|
def createinfobase_cmd
|
271
|
-
to_s
|
279
|
+
to_s(fields - %w{Usr Pwd})
|
272
280
|
end
|
273
281
|
|
274
282
|
# Build string suitable for Ole objects connecting.
|
@@ -282,6 +290,16 @@ module AssLauncher
|
|
282
290
|
[createinfobase_cmd.gsub(%r{=\s*"},"='").gsub(%r{"\s*;},"';")]
|
283
291
|
end
|
284
292
|
|
293
|
+
# (see DB_PAGE_SIZE_VALUES)
|
294
|
+
def dbpagesize=(value)
|
295
|
+
@dbpagesize = valid_value(value, DB_PAGE_SIZE_VALUES)
|
296
|
+
end
|
297
|
+
|
298
|
+
# (see DB_FORMAT_VALUES)
|
299
|
+
def dbformat=(value)
|
300
|
+
@dbformat = valid_value(value, DB_FORMAT_VALUES)
|
301
|
+
end
|
302
|
+
|
285
303
|
# (see DBMS_VALUES)
|
286
304
|
def dbms=(value)
|
287
305
|
@dbms = valid_value(value, DBMS_VALUES)
|
@@ -63,6 +63,7 @@ module AssLauncher
|
|
63
63
|
l
|
64
64
|
end
|
65
65
|
end
|
66
|
+
|
66
67
|
module Support
|
67
68
|
# Shell utils for run 1C:Enterprise binary
|
68
69
|
module Shell
|
@@ -102,8 +103,8 @@ module AssLauncher
|
|
102
103
|
private :process_holder=
|
103
104
|
private :ass_out_file
|
104
105
|
DEFAULT_OPTIONS = { silent_mode: true,
|
105
|
-
capture_assout: true
|
106
|
-
|
106
|
+
capture_assout: true,
|
107
|
+
disable_auto_check_version: true}.freeze
|
107
108
|
# @param cmd [String] path to 1C binary
|
108
109
|
# @param args [Array] arguments for 1C binary
|
109
110
|
# @option options [String] :assout_encoding encoding for assoutput file.
|
@@ -115,12 +116,13 @@ module AssLauncher
|
|
115
116
|
# Default true
|
116
117
|
# @raise [ArgumentError] when +capture_assout: true+ and +args+
|
117
118
|
# include +/OUT+ parameter
|
119
|
+
# @api private
|
118
120
|
def initialize(cmd, args = [], options = {})
|
119
121
|
@options = DEFAULT_OPTIONS.merge(options).freeze
|
120
122
|
@cmd = cmd
|
121
123
|
@args = args
|
122
124
|
validate_args
|
123
|
-
@args += _silent_mode
|
125
|
+
@args += (_silent_mode + _disable_auto_check_version)
|
124
126
|
@ass_out_file = _ass_out_file
|
125
127
|
end
|
126
128
|
|
@@ -159,6 +161,15 @@ module AssLauncher
|
|
159
161
|
ProcessHolder.run(self, options)
|
160
162
|
end
|
161
163
|
|
164
|
+
def _disable_auto_check_version
|
165
|
+
if options[:disable_auto_check_version]
|
166
|
+
['/AppAutoCheckVersion-', '']
|
167
|
+
else
|
168
|
+
[]
|
169
|
+
end
|
170
|
+
end
|
171
|
+
private :_disable_auto_check_version
|
172
|
+
|
162
173
|
def _silent_mode
|
163
174
|
if options[:silent_mode]
|
164
175
|
['/DisableStartupDialogs', '',
|
@@ -194,6 +205,9 @@ module AssLauncher
|
|
194
205
|
encode_out(err), ass_out_file.read)
|
195
206
|
end
|
196
207
|
|
208
|
+
# @todo It's stub returns +out+ directly
|
209
|
+
# but may be require encoding out
|
210
|
+
# encoding must executed in try block
|
197
211
|
def encode_out(out)
|
198
212
|
out
|
199
213
|
end
|
@@ -377,7 +391,13 @@ module AssLauncher
|
|
377
391
|
@file = Tempfile.new('ass_out')
|
378
392
|
@file.close
|
379
393
|
@path = platform.path(@file.path)
|
380
|
-
@encoding = encoding ||
|
394
|
+
@encoding = encoding || detect_ass_encoding
|
395
|
+
end
|
396
|
+
|
397
|
+
# @todo It's stub returns the CP1251 encoding
|
398
|
+
# but requires to detect 1C out encoding automatically
|
399
|
+
def detect_ass_encoding
|
400
|
+
Encoding::CP1251
|
381
401
|
end
|
382
402
|
|
383
403
|
def to_s
|
@@ -391,10 +411,17 @@ module AssLauncher
|
|
391
411
|
s.encode! Encoding::UTF_8, encoding unless linux?
|
392
412
|
ensure
|
393
413
|
@file.close
|
394
|
-
|
414
|
+
try_unlink
|
395
415
|
end
|
396
416
|
s.to_s
|
397
417
|
end
|
418
|
+
|
419
|
+
# File can be busy
|
420
|
+
def try_unlink
|
421
|
+
@file.unlink if @file
|
422
|
+
rescue Errno::EBUSY
|
423
|
+
# NOP
|
424
|
+
end
|
398
425
|
end
|
399
426
|
end
|
400
427
|
end
|
@@ -152,10 +152,9 @@ module AssLauncher
|
|
152
152
|
@result = command.exit_handling(exitstatus,\
|
153
153
|
stdout.read,\
|
154
154
|
stderr.read)
|
155
|
-
|
156
|
-
|
155
|
+
ensure
|
156
|
+
self.class.send(:unreg_process, self)
|
157
157
|
end
|
158
|
-
self.class.send(:unreg_process, self)
|
159
158
|
end
|
160
159
|
end
|
161
160
|
private :wait_process_in_thread
|
data/lib/ass_launcher/version.rb
CHANGED
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ass_launcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leonid Vlasov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inifile
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
19
|
+
version: '3.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
26
|
+
version: '3.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: methadone
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '1.9'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '1.9'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: addressable
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,42 +56,56 @@ dependencies:
|
|
56
56
|
name: clamp
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '1.2'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '1.2'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: colorize
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
75
|
+
version: '0.8'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
82
|
+
version: '0.8'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: io-console
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.4.6
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.4.6
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: command_line_reporter
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- - "
|
101
|
+
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
103
|
version: '3.0'
|
90
104
|
type: :runtime
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- - "
|
108
|
+
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '3.0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
@@ -126,30 +140,30 @@ dependencies:
|
|
126
140
|
name: minitest
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
|
-
- - "
|
143
|
+
- - "~>"
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
145
|
+
version: '5.11'
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
|
-
- - "
|
150
|
+
- - "~>"
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
152
|
+
version: '5.11'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: pry
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
|
-
- - "
|
157
|
+
- - "~>"
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
159
|
+
version: '0.11'
|
146
160
|
type: :development
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
|
-
- - "
|
164
|
+
- - "~>"
|
151
165
|
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
166
|
+
version: '0.11'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: mocha
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,30 +182,30 @@ dependencies:
|
|
168
182
|
name: simplecov
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
170
184
|
requirements:
|
171
|
-
- - "
|
185
|
+
- - "~>"
|
172
186
|
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
187
|
+
version: '0.15'
|
174
188
|
type: :development
|
175
189
|
prerelease: false
|
176
190
|
version_requirements: !ruby/object:Gem::Requirement
|
177
191
|
requirements:
|
178
|
-
- - "
|
192
|
+
- - "~>"
|
179
193
|
- !ruby/object:Gem::Version
|
180
|
-
version: '0'
|
194
|
+
version: '0.15'
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: coderay
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
184
198
|
requirements:
|
185
|
-
- - "
|
199
|
+
- - "~>"
|
186
200
|
- !ruby/object:Gem::Version
|
187
|
-
version: '
|
201
|
+
version: '1.1'
|
188
202
|
type: :development
|
189
203
|
prerelease: false
|
190
204
|
version_requirements: !ruby/object:Gem::Requirement
|
191
205
|
requirements:
|
192
|
-
- - "
|
206
|
+
- - "~>"
|
193
207
|
- !ruby/object:Gem::Version
|
194
|
-
version: '
|
208
|
+
version: '1.1'
|
195
209
|
description: Don't ask why this necessary. Believe this necessary!
|
196
210
|
email:
|
197
211
|
- leoniv.vlasov@gmail.com
|
@@ -253,6 +267,7 @@ files:
|
|
253
267
|
- lib/ass_launcher/enterprise/cli_def/8.2.17.rb
|
254
268
|
- lib/ass_launcher/enterprise/cli_def/8.2.18.rb
|
255
269
|
- lib/ass_launcher/enterprise/cli_def/8.3.10.rb
|
270
|
+
- lib/ass_launcher/enterprise/cli_def/8.3.11.rb
|
256
271
|
- lib/ass_launcher/enterprise/cli_def/8.3.3.rb
|
257
272
|
- lib/ass_launcher/enterprise/cli_def/8.3.4.rb
|
258
273
|
- lib/ass_launcher/enterprise/cli_def/8.3.5.rb
|
@@ -279,7 +294,7 @@ licenses:
|
|
279
294
|
- MIT
|
280
295
|
metadata:
|
281
296
|
known_enterprise_versions: 8.2.17, 8.2.18, 8.3.3, 8.3.4, 8.3.5, 8.3.6, 8.3.7, 8.3.8,
|
282
|
-
8.3.9, 8.3.10
|
297
|
+
8.3.9, 8.3.10, 8.3.11
|
283
298
|
post_install_message:
|
284
299
|
rdoc_options: []
|
285
300
|
require_paths:
|