ass_ole-app_extension 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a1c6a67a9d81d1db124abd3a94a7ba7fe3be75d7
4
+ data.tar.gz: 4ad1a7211c3b2227f937313eef21d5742bb7c09c
5
+ SHA512:
6
+ metadata.gz: 2696afbc698d7bac05ecab348efd03fd78fa7d2943c9ec734e1a87ae28f1455faab5bde2ba80196aa9da17b34615009d044bfc8a7d47e5bb50cc4ef1626eded4
7
+ data.tar.gz: b1f536ad667c4a6ee220f7d8ec50086e40ccf564c12416b63cfd4ef2498e159a5ae0b828cbf14611b85aa529d8d7c81f93dfc8f37c32e01f7e43c305c2e90883
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
@@ -0,0 +1 @@
1
+ SimpleCov.start if ENV['SIMPLECOV']
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.4
5
+ before_install: gem install bundler -v 1.15.4
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in ass_ole-app_extension.gemspec
6
+ gemspec
@@ -0,0 +1,109 @@
1
+ # AssOle::AppExtension
2
+
3
+ Gem for working with 1C:Enterprise `ConfigurationExtension`. Provides features
4
+ for hot plug a `ConfigurationExtension` to 1C:Enterprise application
5
+ instance (aka infobase) and some more.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'ass_ole-app_extension'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install ass_ole-app_extension
22
+
23
+ ## Usage
24
+
25
+ 1. Describe your extension
26
+
27
+ ```ruby
28
+ require 'ass_ole/app_extension'
29
+
30
+ class FooExtension < AssOle::AppExtension::Abstract::Extension
31
+
32
+ VERSION = '1.1.1'.freeze
33
+
34
+ def path
35
+ File.expand_path '../foo_extension.cfe', __FILE__
36
+ end
37
+
38
+ # Override abstract method
39
+ # must returns WIN32OLE object(1C extension BinaryData)'
40
+ def data
41
+ newObject('BinaryData', real_win_path(path))
42
+ end
43
+
44
+ # Override abstract method
45
+ # must returns `Gem::Requirement` 1C platform version requirement
46
+ def platform_require
47
+ Gem::Requirement.new '~> 8.3.10'
48
+ end
49
+
50
+ # Override abstract method
51
+ # must returns `Hash` :1c_app_name => (Gem::Requirement|String '~> 1.2.4')
52
+ # or nil for independent extension
53
+ def app_requirements
54
+ {Accounting: '~> 3.0.56',
55
+ AccountingCorp: '~> 3.0.56'}
56
+ end
57
+
58
+ # Override abstract method
59
+ # must returns extension name
60
+ def name
61
+ 'FooExtension'
62
+ end
63
+
64
+ # Override abstract method
65
+ # must returns extension version
66
+ def name
67
+ VERSION
68
+ end
69
+ end
70
+ ```
71
+
72
+ 2. Plug extension
73
+
74
+ ```ruby
75
+ require 'ass_maintainer/info_base'
76
+
77
+ # Describe 1C application instance
78
+ ib = AssMaintainer::InfoBase.new('app_name', 'File="path"')
79
+
80
+ extension = AssOle::AppExtension.plug(ib, FooExtension, 'safe profile name')
81
+
82
+ extension.plugged? # => true
83
+ ```
84
+
85
+ 3. Or explore infobase extensions with `AssOle::AppExtension::Spy`
86
+
87
+ ```ruby
88
+ require 'ass_maintainer/info_base'
89
+
90
+ # Describe 1C application instance
91
+ ib = AssMaintainer::InfoBase.new('app_name', 'File="path"')
92
+
93
+ # Get all extensions and check all is plugged
94
+ AssOle::AppExtension::Spy.explore(ib).each do |spy|
95
+ logger.error "#{spy.name} isn't plugged because:\n - "\
96
+ "#{spy.apply_errors.map(&:Description).join(' - ')}"\
97
+ unless spy.plugged?
98
+ end
99
+ ```
100
+
101
+ ## Development
102
+
103
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
104
+
105
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
106
+
107
+ ## Contributing
108
+
109
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/ass_ole-app_extension.
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/*_test.rb"]
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "ass_ole/app_extension/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "ass_ole-app_extension"
8
+ spec.version = AssOle::AppExtension::VERSION
9
+ spec.authors = ["Leonid Vlasov"]
10
+ spec.email = ["leoniv.vlasov@gmail.com"]
11
+
12
+ spec.summary = %q{Helper for working with 1C:Enterprise ConfigurationExtension}
13
+ spec.description = %q{Features for hot plug a ConfigurationExtension to 1C:Enterprise application instance (aka infobase) and some more}
14
+ spec.homepage = "https://github.com/leoniv/ass_ole-app_extension"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match(%r{^(test|spec|features)/})
18
+ end
19
+ spec.bindir = "exe"
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_dependency 'ass_ole'
24
+ spec.add_dependency 'ass_ole-snippets-shared', '~> 0.5'
25
+ spec.add_dependency "ass_maintainer-info_base"
26
+
27
+ spec.add_development_dependency "bundler", "~> 1.15"
28
+ spec.add_development_dependency "rake", "~> 10.0"
29
+ spec.add_development_dependency "minitest", "~> 5.0"
30
+ spec.add_development_dependency "pry"
31
+ spec.add_development_dependency "simplecov"
32
+ spec.add_development_dependency "mocha"
33
+ end
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "ass_ole/app_extension"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ require "pry"
10
+ Pry.start
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,495 @@
1
+ require "ass_ole/app_extension/version"
2
+
3
+ module AssOle
4
+ require 'ass_ole/snippets/shared'
5
+ # Provides features for hot plug a +ConfigurationExtension+ to 1C:Enterprise
6
+ # application instance (aka infobase) and some more.
7
+ # @example (see Abstract::Extension)
8
+ # @example (see Spy)
9
+ # @example Plug extension
10
+ # require 'ass_maintainer/info_base'
11
+ #
12
+ # # Describe 1C application instance
13
+ # ib = AssMaintainer::InfoBase.new('app_name', 'File="path"')
14
+ #
15
+ # extension = AssOle::AppExtension.plug(ib, FooExtension, 'safe profile name')
16
+ #
17
+ # extension.plugged? # => true
18
+ module AppExtension
19
+ require 'ass_ole'
20
+
21
+ class ApplyError < StandardError; end
22
+ class IncompatibleError < StandardError; end
23
+
24
+ # Namespace for abstract things
25
+ module Abstract
26
+ # @note Docs for
27
+ # mixin
28
+ # {http://www.rubydoc.info/gems/ass_ole-snippets-shared/AssOle/Snippets/Shared/AppCompatibility AssOle::Snippets::Shared::AppCompatibility}
29
+ #
30
+ # Class parent for all extensions. Define your own class and
31
+ # override methods from {Abstract::Extension::AbstractMethods}
32
+ # @example Define own extension class
33
+ # class FooExtension < AssOle::AppExtension::Abstract::Extension
34
+ #
35
+ # VERSION = '1.1.1'.freeze
36
+ #
37
+ # def path
38
+ # File.expand_path '../foo_extension.cfe', __FILE__
39
+ # end
40
+ #
41
+ # # Override abstract method
42
+ # # must returns WIN32OLE object(1C extension BinaryData)'
43
+ # def data
44
+ # newObject('BinaryData', real_win_path(path))
45
+ # end
46
+ #
47
+ # # Override abstract method
48
+ # # must returns `Gem::Requirement` 1C platform version requirement
49
+ # def platform_require
50
+ # Gem::Requirement.new '~> 8.3.10'
51
+ # end
52
+ #
53
+ # # Override abstract method
54
+ # # must returns `Hash` :1c_app_name => (Gem::Requirement|String '~> 1.2.4')
55
+ # # or nil for independent extension
56
+ # def app_requirements
57
+ # {Accounting: '~> 3.0.56',
58
+ # AccountingCorp: '~> 3.0.56'}
59
+ # end
60
+ #
61
+ # # Override abstract method
62
+ # # must returns extension name
63
+ # def name
64
+ # 'FooExtension'
65
+ # end
66
+ #
67
+ # # Override abstract method
68
+ # # must returns extension version
69
+ # def name
70
+ # VERSION
71
+ # end
72
+ # end
73
+ # @abstract
74
+ class Extension
75
+ include AssOle::Snippets::Shared::AppCompatibility
76
+
77
+ # @abstract
78
+ module AbstractMethods
79
+ # Define extension binary data.
80
+ # @example
81
+ # def path
82
+ # File.expand_path '../extension.cfe', __FILE__
83
+ # end
84
+ #
85
+ # def data
86
+ # newObject('BinaryData', real_win_path(path))
87
+ # end
88
+ # @abstract
89
+ # @return [WIN32OLE] object(1C extension BinaryData)
90
+ def data
91
+ fail NotImplementedError,
92
+ 'Abstract method must returns WIN32OLE object(1C extension BinaryData)'
93
+ end
94
+
95
+ # Define platform version requirement
96
+ # @example
97
+ # def platform_require
98
+ # Gem::Requirement.new '~> 8.3.8'
99
+ # end
100
+ # @abstract
101
+ # @return [Gem::Requirement]
102
+ def platform_require
103
+ fail NotImplementedError,
104
+ 'Abstract method must returns `Gem::Requirement`'
105
+ end
106
+
107
+ # Define infobase configuration requirement
108
+ # @example
109
+ # def app_requirements
110
+ # {Accounting: '~> 3.0.56', AccountingCorp: '~> 3.0.56'}
111
+ # end
112
+ # @abstract
113
+ # @return [Hash{:1c_app_name => Gem::Requirement,String} nil]
114
+ # +nil+ for independent extension
115
+ def app_requirements
116
+ fail NotImplementedError,
117
+ "Abstract method must returns `Hash`"\
118
+ " :1c_app_name => (`Gem::Requirement`|String '~> 1.2.4')"\
119
+ " or nil for independent extension"
120
+ end
121
+
122
+ # Define extension name. Must match with extension metadata name!
123
+ # @abstract
124
+ # @return [String] extension name
125
+ def name
126
+ fail NotImplementedError,
127
+ 'Abstract method must returns extension name'
128
+ end
129
+
130
+ # Define extension version. Must match with extension metadata version!
131
+ # @abstract
132
+ # @return [String] extension version
133
+ def version
134
+ fail NotImplementedError,
135
+ 'Abstract method must returns extension version'
136
+ end
137
+ end
138
+
139
+ include AbstractMethods
140
+
141
+ # see +ole_runtime+ of {#initialize}
142
+ attr_reader :ole_runtime
143
+
144
+ # see +safe_mode+ of {#initialize}
145
+ attr_reader :safe_mode
146
+
147
+ # @param ole_runtime [AssOle::Runtimes::App] 1C ole runtime
148
+ # @param safe_mode [true false nil String] define of safe mode for
149
+ # an extension. For more info see 1C docomentation for +SafeMode+
150
+ # property of +ConfigurationExtension+ object
151
+ def initialize(ole_runtime, safe_mode = nil)
152
+ @ole_runtime = ole_runtime
153
+ @safe_mode = safe_mode
154
+ end
155
+
156
+ # Plug extension. Do nothing if extension already plugged!
157
+ # @return [self]
158
+ # @raise (see can_apply?)
159
+ # @raise (see #verify!)
160
+ def plug
161
+ return self if plugged?
162
+ verify!
163
+ can_apply? && unsafe_mode_set.Write(data)
164
+ self
165
+ end
166
+ alias_method :write, :plug
167
+
168
+ # Force plug without check {#plugged?}, {#verify!} and {#can_apply?}
169
+ # @return [self]
170
+ def plug!
171
+ unsafe_mode_set.Write(data)
172
+ self
173
+ end
174
+ alias_method :write!, :plug!
175
+
176
+ # Unplug extension. Do nothing unless extension plugged.
177
+ # @return [self]
178
+ def unplug!
179
+ return self unless exist?
180
+ ole.Delete
181
+ self
182
+ end
183
+ alias_method :delete!, :unplug!
184
+
185
+ def unsafe_mode_get
186
+ r = newObject('UnsafeOperationProtectionDescription')
187
+ r.UnsafeOperationWarnings = false
188
+ r
189
+ end
190
+ private :unsafe_mode_get
191
+
192
+ def unsafe_mode_set
193
+ if ole.ole_respond_to? :UnsafeActionProtection
194
+ ole.UnsafeActionProtection = unsafe_mode_get
195
+ end
196
+
197
+ if ole.ole_respond_to? :SafeMode
198
+ ole.SafeMode = safe_mode unless safe_mode.nil?
199
+ end
200
+ ole
201
+ end
202
+ private :unsafe_mode_set
203
+
204
+ # Critical +ConfigurationExtensionApplicationIssueInformation+.
205
+ # If you have such problems, extension will not be connected.
206
+ # @return [Array<WIN32OLE>]
207
+ # +ConfigurationExtensionApplicationIssueInformation+
208
+ def apply_errors
209
+ apply_errors_get(data)
210
+ end
211
+
212
+ # Not critical +ConfigurationExtensionApplicationIssueInformation+.
213
+ # If you have such problems, extension will be connected.
214
+ # @return (see #apply_errors)
215
+ def apply_warnings
216
+ apply_problems_get(data).select do |problem|
217
+ (sTring(problem.Severity) =~ %r{(Критичная|Critical)}).nil?
218
+ end
219
+ end
220
+
221
+ def apply_problems_get(ext_data)
222
+ r = []
223
+ ole.CheckCanApply(ext_data, false).each do |problem|
224
+ r << problem
225
+ end
226
+ r
227
+ end
228
+ private :apply_problems_get
229
+
230
+ def apply_errors_get(ext_data)
231
+ apply_problems_get(ext_data).select do |problem|
232
+ sTring(problem.Severity) =~ %r{(Критичная|Critical)}
233
+ end
234
+ end
235
+ private :apply_problems_get
236
+
237
+ # Checks the possibility plugging extension
238
+ # @raise [ApplyError] if {#apply_errors} isn't empty
239
+ def can_apply?
240
+ errors = apply_errors
241
+ fail ApplyError, "Extension can't be applied:\n"\
242
+ " - #{errors.map(&:Description).join("\n - ")} " if\
243
+ errors.size > 0
244
+ true
245
+ end
246
+
247
+ # Return +true+ if extension stored in infobase
248
+ def exist?
249
+ !find_exists.nil?
250
+ end
251
+
252
+ # Return +true+ if extension {#exist?} and stored data can be applyed
253
+ # without errors
254
+ def plugged?
255
+ exist? && apply_errors_get(ole.GetData).size == 0
256
+ end
257
+
258
+ def find_exists
259
+ r = all_extensions.select {|ext| ext.Name =~ /^#{name}$/i}
260
+ fail "Too many #{r.size} extension `#{name}` found" if r.size > 1
261
+ r[0]
262
+ end
263
+ private :find_exists
264
+
265
+ def manager
266
+ configurationExtensions
267
+ end
268
+ private :manager
269
+
270
+ # Array of all application extensions.
271
+ # @return [Array<WIN32OLE>] +ConfigurationExtension+
272
+ def all_extensions
273
+ r = []
274
+ manager.Get.each do |ext|
275
+ r << ext
276
+ end
277
+ r
278
+ end
279
+
280
+ def ole_get
281
+ return find_exists if exist?
282
+ manager.Create
283
+ end
284
+ private :ole_get
285
+
286
+ # Extension ole object.
287
+ # @return [WIN32OLE] +ConfigurationExtension+
288
+ def ole
289
+ @ole ||= ole_get
290
+ end
291
+
292
+ # @return 1C ole connector
293
+ def ole_connector
294
+ ole_runtime.ole_connector
295
+ end
296
+
297
+ # @raise [IncompatibleError] if extension is incompatible
298
+ def verify!
299
+ verify_version_compatibility!
300
+ verify_application!
301
+ end
302
+
303
+ # @return [String] application configuration name +metaData.Name+
304
+ def app_name
305
+ metaData.Name
306
+ end
307
+
308
+ # @return [Gem::Version]
309
+ # application configuration version +metaData.Version+
310
+ def app_version
311
+ Gem::Version.new(metaData.Version)
312
+ end
313
+
314
+ # @api private
315
+ def verify_version_compatibility!
316
+ fail IncompatibleError, "Require application compatibility "\
317
+ "`#{platform_require}`. Got application compatibility version"\
318
+ " `#{app_compatibility_version}`" unless\
319
+ platform_require.satisfied_by? app_compatibility_version
320
+ end
321
+
322
+ # @api private
323
+ def verify_application!
324
+ return unless app_requirements
325
+
326
+ req = app_requirements[app_name.to_sym]
327
+
328
+ fail IncompatibleError, "Unsupported application `#{app_name}`."\
329
+ " Supported:\n - #{app_requirements.keys.join("\n - ")}" unless req
330
+
331
+ fail IncompatibleError, 'Unsupported application version'\
332
+ " `#{app_version}`. Require version #{req}" unless\
333
+ Gem::Requirement.new(req).satisfied_by? app_version
334
+ end
335
+
336
+ # Save actual stored extension data to file
337
+ # @param dir [String] directory where file will be writed
338
+ # @return [String] file name
339
+ def save_stored_data(dir)
340
+ return unless exist?
341
+ file = File.join(dir, "#{name}.#{Gem::Version.new(ole.Version)}.cfe")
342
+ ole.GetData.Write(real_win_path(file))
343
+ file
344
+ end
345
+ end
346
+ end
347
+
348
+ # Class for explore exists infobase extensions.
349
+ # @example Explore infobase extensions
350
+ # require 'ass_maintainer/info_base'
351
+ #
352
+ # # Describe 1C application instance
353
+ # ib = AssMaintainer::InfoBase.new('app_name', 'File="path"')
354
+ #
355
+ # # Get all extensions and check all is plugged
356
+ # AssOle::AppExtension::Spy.explore(ib).each do |spy|
357
+ # logger.error "#{spy.name} isn't plugged because:\n - "\
358
+ # "#{spy.apply_errors.map(&:Description).join(' - ')}"\
359
+ # unless spy.plugged?
360
+ # end
361
+ class Spy < Abstract::Extension
362
+ # @param ole_runtime (see Abstract::Extension#initialize)
363
+ # @param ole [WIN32OLE] +ConfigurationExtension+ object
364
+ # @api private
365
+ def initialize(ole_runtime, ole)
366
+ @ole_runtime = ole_runtime
367
+ @ole = ole
368
+ end
369
+
370
+ def ole_get
371
+ @ole
372
+ end
373
+ private :ole_get
374
+
375
+ # (see Abstract::Extension#ole)
376
+ def ole
377
+ @ole
378
+ end
379
+
380
+ # Do nothing.
381
+ # @return [self]
382
+ def plug!
383
+ self
384
+ end
385
+
386
+ # Do nothing
387
+ # @return [self]
388
+ def unplug!
389
+ self
390
+ end
391
+
392
+ # Do nothing
393
+ # @return [self]
394
+ def verify!
395
+ self
396
+ end
397
+
398
+ # Return {#ole} +Name+ property
399
+ # @return [String]
400
+ def name
401
+ ole.Name
402
+ end
403
+
404
+ # Return {#ole} +GetData+
405
+ # @return [WIN32OLE] stored +BinaryData+
406
+ def data
407
+ ole.GetData
408
+ end
409
+
410
+ # @return ['~> 0'] permanent
411
+ def platform_require
412
+ Gem::Requirement.new '~> 0'
413
+ end
414
+
415
+ # @return [nil] permanent
416
+ def app_requirements
417
+ nil
418
+ end
419
+
420
+ # Do nothing.
421
+ # @return {#ole}
422
+ def unsafe_mode_set
423
+ ole
424
+ end
425
+ private :unsafe_mode_set
426
+
427
+ # Returns all extensions stored in +info_base+
428
+ # @return [Array<Spy>]
429
+ def self.explore(info_base)
430
+ spy = Plug.new(info_base).new_ext(Spy, nil)
431
+ spy.all_extensions.map do |ole|
432
+ Spy.new(spy.ole_runtime, ole)
433
+ end
434
+ end
435
+ end
436
+
437
+ # @api private
438
+ module Plug
439
+ attr_reader :info_base
440
+
441
+ # @api private
442
+ # @param info_base [AssMaintainer::InfoBase] instance
443
+ def initialize(info_base)
444
+ @info_base = info_base
445
+ ole_runtime_get.run info_base
446
+ end
447
+
448
+ # Make new +ext_klass+ plugged instance
449
+ # @api private
450
+ # @param safe_mode (see #new_ext)
451
+ # @param ext_klass (see #new_ext)
452
+ # @return (see Abstract::Extension#plug)
453
+ def exec(ext_klass, safe_mode)
454
+ new_ext(ext_klass, safe_mode).plug
455
+ end
456
+
457
+ # Make new +ext_klass+ instance
458
+ # @api private
459
+ # @param safe_mode
460
+ # (see AssOle::AppExtension::Abstract::Extension#initialize)
461
+ # @param ext_klass [Class] childe of
462
+ # {AssOle::AppExtension::Abstract::Extension}
463
+ # @return [ext_klass] instance
464
+ def new_ext(ext_klass, safe_mode)
465
+ ext_klass.new(self, safe_mode)
466
+ end
467
+
468
+ # @api private
469
+ def self.external_runtime_get
470
+ Module.new do
471
+ is_ole_runtime :external
472
+ end
473
+ end
474
+
475
+ # @param info_base (see Plug#initialize)
476
+ def self.new(info_base)
477
+ inst = Class.new do
478
+ like_ole_runtime Plug.external_runtime_get
479
+ include Plug
480
+ end.new(info_base)
481
+ yield inst if block_given?
482
+ inst
483
+ end
484
+ end
485
+
486
+ # Plug extension to +info_base+
487
+ # @param info_base (see Plug#initialize)
488
+ # @param ext_klass (see Plug#exec)
489
+ # @param safe_mode (see Plug#exec)
490
+ # @return (see Plug#exec)
491
+ def self.plug(info_base, ext_klass, safe_mode = true)
492
+ Plug.new(info_base).exec(ext_klass, safe_mode)
493
+ end
494
+ end
495
+ end
@@ -0,0 +1,5 @@
1
+ module AssOle
2
+ module AppExtension
3
+ VERSION = "0.1.1"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ass_ole-app_extension
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Leonid Vlasov
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-12-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ass_ole
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'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ass_ole-snippets-shared
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: ass_maintainer-info_base
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.15'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.15'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '5.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '5.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: mocha
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: Features for hot plug a ConfigurationExtension to 1C:Enterprise application
140
+ instance (aka infobase) and some more
141
+ email:
142
+ - leoniv.vlasov@gmail.com
143
+ executables: []
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - ".gitignore"
148
+ - ".simplecov"
149
+ - ".travis.yml"
150
+ - Gemfile
151
+ - README.md
152
+ - Rakefile
153
+ - ass_ole-app_extension.gemspec
154
+ - bin/console
155
+ - bin/setup
156
+ - lib/ass_ole/app_extension.rb
157
+ - lib/ass_ole/app_extension/version.rb
158
+ homepage: https://github.com/leoniv/ass_ole-app_extension
159
+ licenses: []
160
+ metadata: {}
161
+ post_install_message:
162
+ rdoc_options: []
163
+ require_paths:
164
+ - lib
165
+ required_ruby_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ required_rubygems_version: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ requirements: []
176
+ rubyforge_project:
177
+ rubygems_version: 2.6.13
178
+ signing_key:
179
+ specification_version: 4
180
+ summary: Helper for working with 1C:Enterprise ConfigurationExtension
181
+ test_files: []