ass_ole-app_extension 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []