ass_maintainer-info_base 0.1.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 +7 -0
- data/.gitignore +9 -0
- data/.simplecov +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +85 -0
- data/Rakefile +10 -0
- data/ass_maintainer-info_base.gemspec +31 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/examples/describe_infobase.rb +52 -0
- data/exe/ass_maintainer-info_base +3 -0
- data/lib/ass_maintainer/info_base.rb +339 -0
- data/lib/ass_maintainer/info_base/cfg.rb +81 -0
- data/lib/ass_maintainer/info_base/config.rb +28 -0
- data/lib/ass_maintainer/info_base/default_maker.rb +16 -0
- data/lib/ass_maintainer/info_base/file_ib.rb +76 -0
- data/lib/ass_maintainer/info_base/interfaces.rb +78 -0
- data/lib/ass_maintainer/info_base/server_ib.rb +98 -0
- data/lib/ass_maintainer/info_base/server_ib/helpers.rb +50 -0
- data/lib/ass_maintainer/info_base/version.rb +6 -0
- metadata +166 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 662be0fd5b4c3cdcb6a262d14467d36a5edbd8f4
|
4
|
+
data.tar.gz: bcfed5068d14bab47917ebd22ca351d586de79b1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b6527c21fd7322dd9613b65145f62304b7b6bfcad13d38a4bc5e0758fda6da0cc6e54bcd1c87595fb3a3b522449fff3e211602afc58d008386ca777dcf904e5b
|
7
|
+
data.tar.gz: 5e55ee0aa79f601fc393a9e9440645671af14f9fd1f1a7ac55661f9a003ae79b35a1d92c5ee3e548938ec4042420fcf29b1007afdd231d6e2c6c677fa961abeb
|
data/.gitignore
ADDED
data/.simplecov
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
SimpleCov.start if ENV['SIMPLECOV']
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 Leonid Vlasov
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
# AssMaintainer::InfoBase
|
2
|
+
|
3
|
+
|
4
|
+
Gem provides features for manipulate with 1C:Enterprise applications as easy
|
5
|
+
as possible.
|
6
|
+
|
7
|
+
Main thing of this gem `class AssMaintainer::InfoBase` provides
|
8
|
+
some methods for manipulate with information base;
|
9
|
+
|
10
|
+
## Realase note
|
11
|
+
|
12
|
+
### v.0.1.0
|
13
|
+
|
14
|
+
- Not support infobases deployed on 1C:Enterprise server
|
15
|
+
- Not support configuration extensions
|
16
|
+
|
17
|
+
## Installation
|
18
|
+
|
19
|
+
Add this line to your application's Gemfile:
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
gem 'ass_maintainer-info_base'
|
23
|
+
```
|
24
|
+
|
25
|
+
And then execute:
|
26
|
+
|
27
|
+
$ bundle
|
28
|
+
|
29
|
+
Or install it yourself as:
|
30
|
+
|
31
|
+
$ gem install ass_maintainer-info_base
|
32
|
+
|
33
|
+
## Usage
|
34
|
+
|
35
|
+
Small example:
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
reqiure 'ass_maintainer/info_base'
|
39
|
+
|
40
|
+
# As infobase admin you should make backups of infobase
|
41
|
+
|
42
|
+
# Describe connection string
|
43
|
+
connection_string = 'File="infobase_path";'
|
44
|
+
|
45
|
+
# Get InfoBase instance
|
46
|
+
ib = AssMaintainer::InfoBase.new('infobase_name', connection_string, read_only)
|
47
|
+
|
48
|
+
# Dump data
|
49
|
+
ib.dump(dump_path)
|
50
|
+
|
51
|
+
|
52
|
+
# As 1C application developer you should make dump of infobase configuration
|
53
|
+
|
54
|
+
# Dump configuration
|
55
|
+
ib.cfg.dump(cf_dump_path)
|
56
|
+
|
57
|
+
# ... etc
|
58
|
+
|
59
|
+
```
|
60
|
+
|
61
|
+
For more examples see [examples](./test/ass_maintainer/examples_test.rb)
|
62
|
+
|
63
|
+
## Test
|
64
|
+
|
65
|
+
For running tests require installs 1C:Enterprise platform version defined in constant
|
66
|
+
`PLATFORM_REQUIRE` from
|
67
|
+
[test_helper.rb](./test/test_helper.rb)
|
68
|
+
|
69
|
+
$export SIMPLECOV=YES && rake test
|
70
|
+
|
71
|
+
## Development
|
72
|
+
|
73
|
+
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. Run `bundle exec ass_maintainer-info_base` to use the gem in this directory, ignoring other installed copies of this gem.
|
74
|
+
|
75
|
+
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).
|
76
|
+
|
77
|
+
## Contributing
|
78
|
+
|
79
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/leoniv/ass_maintainer-info_base.
|
80
|
+
|
81
|
+
|
82
|
+
## License
|
83
|
+
|
84
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
85
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'ass_maintainer/info_base/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "ass_maintainer-info_base"
|
8
|
+
spec.version = AssMaintainer::InfoBase::VERSION
|
9
|
+
spec.authors = ["Leonid Vlasov"]
|
10
|
+
spec.email = ["leoniv.vlasov@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Manipulate with 1C:Enterprise application instances}
|
13
|
+
spec.description = %q{Classes and utils for manipulate with 1C:Enterprise application instances also known as "InfoBase" or "Information Base"}
|
14
|
+
spec.homepage = "https://github.com/leoniv/ass_maintainer-info_base"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.bindir = "exe"
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_development_dependency "ass_launcher", "~> 0.2.0"
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.10"
|
25
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
26
|
+
spec.add_development_dependency "minitest"
|
27
|
+
spec.add_development_dependency "pry"
|
28
|
+
spec.add_development_dependency "simplecov"
|
29
|
+
spec.add_development_dependency "mocha"
|
30
|
+
|
31
|
+
end
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "ass_maintainer/info_base"
|
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
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
require "pry"
|
11
|
+
Pry.start
|
12
|
+
|
13
|
+
# require "irb"
|
14
|
+
# IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'ass_tests/info_bases'
|
2
|
+
|
3
|
+
AssTests::InfoBases.describe do
|
4
|
+
file :empty_ib do
|
5
|
+
# DescribeOptions
|
6
|
+
template nil # Путь к шаблону ИБ
|
7
|
+
fixtures nil # Объект реализующий интрфейс AssTests::FixturesInterface для
|
8
|
+
# заполнения ИБ
|
9
|
+
maker nil # Объект реализующий интерфейс AssTests::IbMakerInterface создающий
|
10
|
+
# ИБ
|
11
|
+
destroyer nil # Объект реализующий интерфейс AssTests::IbDistroyerInterface
|
12
|
+
# уничтожающий ИБ
|
13
|
+
platform_require ENV['ASS_PLATFORM']
|
14
|
+
before_make ->(ib) { puts "Before make #{ib.name}"}
|
15
|
+
after_make ->(ib) { puts "After make #{ib.name}"}
|
16
|
+
before_rm ->(ib) { puts "Before rm #{ib.name}"}
|
17
|
+
after_rm ->(ib) { puts "After rm #{ib.name}"}
|
18
|
+
# CommonDescriber
|
19
|
+
locale nil
|
20
|
+
user 'name'
|
21
|
+
password 'password'
|
22
|
+
# FileIb
|
23
|
+
directory File.expand_path('../../tmp', __FILE__)
|
24
|
+
end
|
25
|
+
|
26
|
+
server :empty_server_ib do
|
27
|
+
# DescribeOptions
|
28
|
+
template nil
|
29
|
+
fixtures nil
|
30
|
+
maker nil
|
31
|
+
destroyer nil
|
32
|
+
platform_require '~> 8.3.8'
|
33
|
+
before_make nil
|
34
|
+
after_make nil
|
35
|
+
before_rm nil
|
36
|
+
after_rm nil
|
37
|
+
# CommonDescriber
|
38
|
+
locale nil
|
39
|
+
user 'name'
|
40
|
+
password 'password'
|
41
|
+
# ServerIb
|
42
|
+
agent ENV['ASS_SERVER_AGENT'] # --host 'host:port' --user 'admin' --password 'password'
|
43
|
+
claster ENV['ASS_CLASTER'] # --host 'host:port' --user 'admin' --password 'password'
|
44
|
+
# db ['EMPTY_DATA_BASE'] # --host 'host:port' --dbms 'MSSQLServer' --db-name 'db_name' --user 'admin' --password 'password' --create-db
|
45
|
+
db "--host 'host:port' --dbms 'MSSQLServer' --db-name 'db_name' --user 'admin' --password 'password' --create-db"
|
46
|
+
schjobdn # Запрет заданий см строка соединения
|
47
|
+
end
|
48
|
+
|
49
|
+
external :acc30, ENV['ACC30_IB_CONNECTION_STRING'] do
|
50
|
+
platform_require '>= 8.3'
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,339 @@
|
|
1
|
+
require 'ass_maintainer/info_base/version'
|
2
|
+
require 'ass_launcher'
|
3
|
+
|
4
|
+
module AssMaintainer
|
5
|
+
# rubocop:disable Metrics/ClassLength
|
6
|
+
|
7
|
+
# Class for manipulate with 1C:Enterprise application instance aka
|
8
|
+
# +information base+ or +infobase+
|
9
|
+
#
|
10
|
+
# Instances of this class have dinamicly generated interfaece
|
11
|
+
#
|
12
|
+
# 1C:Enterprise application may be deployed as file (aka file infobase) or
|
13
|
+
# on a 1C:Enterprise server (aka server infobase). In the {#initialize}
|
14
|
+
# instance of this class will be extended suitable module:
|
15
|
+
# - server infobase instance will be extend module {ServerIb}
|
16
|
+
# - file infobase instance will be exten module {FileIb}
|
17
|
+
#
|
18
|
+
# Both instance type inherits methods from {Interfaces::InfoBaseWrapper}
|
19
|
+
#
|
20
|
+
# All instances get methods wrappers for access to {#options} see
|
21
|
+
# {.build_options_wrapper}
|
22
|
+
class InfoBase
|
23
|
+
extend AssLauncher::Api
|
24
|
+
require 'ass_maintainer/info_base/config'
|
25
|
+
require 'ass_maintainer/info_base/interfaces'
|
26
|
+
require 'ass_maintainer/info_base/file_ib'
|
27
|
+
require 'ass_maintainer/info_base/server_ib'
|
28
|
+
require 'ass_maintainer/info_base/cfg'
|
29
|
+
require 'ass_maintainer/info_base/default_maker'
|
30
|
+
|
31
|
+
# :nodoc:
|
32
|
+
class MethodDenied < StandardError
|
33
|
+
def initialize(m)
|
34
|
+
super "Infobase is read only. Method #{m} denied!"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Deafult port for connect to 1C:Enterprise serever agent
|
39
|
+
DEFAULT_SAGENT_PORT = '1540'
|
40
|
+
|
41
|
+
# Hooks before and after make and remove infobase. Hooks may be passed as
|
42
|
+
# options or seted later see {#add_hook}
|
43
|
+
HOOKS = {
|
44
|
+
before_make: ->(ib) {},
|
45
|
+
after_make: ->(ib) {},
|
46
|
+
before_rm: ->(ib) {},
|
47
|
+
after_rm: ->(ib) {}
|
48
|
+
}
|
49
|
+
|
50
|
+
# On default for make and remove infobase uses {DefaultMaker} and
|
51
|
+
# {FileIb::FileBaseDestroyer} or {ServerIb::ServerBaseDestroyer}
|
52
|
+
# but we can pass custom maker and destroyer as {#options}.
|
53
|
+
# Maker and destroyer must implements {Interfaces::IbMaker} and
|
54
|
+
# {Interfaces::IbDestroyer}
|
55
|
+
WORKERS = {
|
56
|
+
maker: nil,
|
57
|
+
destroyer: nil
|
58
|
+
}
|
59
|
+
|
60
|
+
# - +:latform_require+ Required 1C:Enterprise version
|
61
|
+
# - +:agent_host+ Host name of 1C:Enterprise server agent
|
62
|
+
# - +:agent_port+ TCP port of 1C:Enterprise server agent on
|
63
|
+
# default {DEFAULT_SAGENT_PORT}
|
64
|
+
# - +:agent_usr+ Admin for 1C:Enterprise server agent
|
65
|
+
# - +:agent_pwd+ Admin password for 1C:Enterprise server agent
|
66
|
+
# - +:laster_usr+ Admin for 1C:Enterprise claster.
|
67
|
+
# See {ServerIb#claster_usr}
|
68
|
+
# - +:laster_pwd+ Pasword Admin for 1C:Enterprise claster.
|
69
|
+
# See {ServerIb#claster_pwd}
|
70
|
+
# - +:nlock_code+ Code for connect to locked infobase aka "/UC" parameter
|
71
|
+
ARGUMENTS = {
|
72
|
+
platform_require: nil,
|
73
|
+
sagent_host: nil,
|
74
|
+
sagent_port: nil,
|
75
|
+
sagent_usr: nil,
|
76
|
+
sagent_pwd: nil,
|
77
|
+
claster_usr: nil,
|
78
|
+
claster_pwd: nil,
|
79
|
+
unlock_code: nil
|
80
|
+
}
|
81
|
+
|
82
|
+
OPTIONS = (ARGUMENTS.merge HOOKS).merge WORKERS
|
83
|
+
|
84
|
+
# Dinamicaly builds of options wrappers
|
85
|
+
def self.build_options_wrapper
|
86
|
+
OPTIONS.each_key do |key|
|
87
|
+
next if WORKERS.keys.include? key
|
88
|
+
define_method key do
|
89
|
+
options[key]
|
90
|
+
end
|
91
|
+
|
92
|
+
next if HOOKS.keys.include? key
|
93
|
+
define_method "#{key}=".to_sym do |arg|
|
94
|
+
options[key] = arg
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
build_options_wrapper
|
100
|
+
|
101
|
+
# see {#initialize} +name+
|
102
|
+
attr_reader :name
|
103
|
+
# see {#initialize} +connection_string+
|
104
|
+
attr_reader :connection_string
|
105
|
+
# see {#initialize} +options+
|
106
|
+
attr_reader :options
|
107
|
+
# InfoBase is read only
|
108
|
+
# destructive methods will be fail with {MethodDenied} error
|
109
|
+
attr_reader :read_only
|
110
|
+
alias_method :read_only?, :read_only
|
111
|
+
|
112
|
+
# @param name [String] name of infobase
|
113
|
+
# @param connection_string [String AssLauncher::Support::ConnectionString]
|
114
|
+
# @param read_only [true false] infobse is read only or not
|
115
|
+
# @param options [Hash] see {OPTIONS}
|
116
|
+
def initialize(name, connection_string, read_only = true, **options)
|
117
|
+
@name = name
|
118
|
+
@connection_string = self.class.cs(connection_string.to_s)
|
119
|
+
@read_only = read_only
|
120
|
+
@options = OPTIONS.merge(options)
|
121
|
+
case self.connection_string.is
|
122
|
+
when :file then extend FileIb
|
123
|
+
when :server then extend ServerIb
|
124
|
+
else fail ArgumentError
|
125
|
+
end
|
126
|
+
yield self if block_given?
|
127
|
+
end
|
128
|
+
|
129
|
+
# Add hook. In all hook whill be passed +self+
|
130
|
+
# @raise [ArgumentError] if invalid hook name or not block given
|
131
|
+
# @param hook [Symbol] hook name
|
132
|
+
def add_hook(hook, &block)
|
133
|
+
fail ArgumentError, "Invalid hook `#{hook}'" unless\
|
134
|
+
HOOKS.keys.include? hook
|
135
|
+
fail ArgumentError, 'Block require' unless block_given?
|
136
|
+
options[hook] = block
|
137
|
+
end
|
138
|
+
|
139
|
+
# Requrement 1C version
|
140
|
+
# @return [String]
|
141
|
+
def platform_require
|
142
|
+
options[:platform_require] || self.class.config.platform_require
|
143
|
+
end
|
144
|
+
|
145
|
+
# Rebuild infobse first call {#rm!} second call {#make}
|
146
|
+
# @raise (see #rm!)
|
147
|
+
def rebuild!(sure = :no)
|
148
|
+
rm! sure
|
149
|
+
make
|
150
|
+
end
|
151
|
+
|
152
|
+
# (see #make_infobase!)
|
153
|
+
def make
|
154
|
+
make_infobase! unless exists?
|
155
|
+
self
|
156
|
+
end
|
157
|
+
|
158
|
+
# Make new empty infobase
|
159
|
+
# wrpped in +before_make+ and +after_make+ hooks
|
160
|
+
# @raise [MethodDenied] if infobase {#read_only?}
|
161
|
+
def make_infobase!
|
162
|
+
fail MethodDenied, :make_infobase! if read_only?
|
163
|
+
before_make.call(self)
|
164
|
+
maker.execute(self)
|
165
|
+
after_make.call(self)
|
166
|
+
self
|
167
|
+
end
|
168
|
+
private :make_infobase!
|
169
|
+
|
170
|
+
# (see #rm_infobase!)
|
171
|
+
def rm!(sure = :no)
|
172
|
+
fail 'If you are sure pass :yes value' unless sure == :yes
|
173
|
+
return unless exists?
|
174
|
+
rm_infobase!
|
175
|
+
nil
|
176
|
+
end
|
177
|
+
|
178
|
+
# Remove infobase
|
179
|
+
# wrpped in +before_rm+ and +after_rm+ hooks
|
180
|
+
# @raise [MethodDenied] if infobase {#read_only?}
|
181
|
+
def rm_infobase!
|
182
|
+
fail MethodDenied, :rm_infobase! if read_only?
|
183
|
+
before_rm.call(self)
|
184
|
+
destroyer.execute(self)
|
185
|
+
after_rm.call(self)
|
186
|
+
end
|
187
|
+
private :rm_infobase!
|
188
|
+
|
189
|
+
# Returns type of infobase
|
190
|
+
# @return [Symbol] +:file+ or +:server+
|
191
|
+
def is
|
192
|
+
connection_string.is
|
193
|
+
end
|
194
|
+
|
195
|
+
# Check type of infobase
|
196
|
+
# @param type [Symbol] +:file+ or +:server+
|
197
|
+
def is?(type)
|
198
|
+
connection_string.is?(type)
|
199
|
+
end
|
200
|
+
|
201
|
+
# Set user name
|
202
|
+
def usr=(user_name)
|
203
|
+
connection_string.usr = user_name
|
204
|
+
end
|
205
|
+
|
206
|
+
# User name
|
207
|
+
# @return [String]
|
208
|
+
def usr
|
209
|
+
connection_string.usr
|
210
|
+
end
|
211
|
+
|
212
|
+
# Set locale
|
213
|
+
# @param l [String] locale code +en+, +ru+ etc
|
214
|
+
def locale=(l)
|
215
|
+
connection_string.locale = l
|
216
|
+
end
|
217
|
+
|
218
|
+
# Get locale
|
219
|
+
# @return [String]
|
220
|
+
def locale
|
221
|
+
connection_string.locale
|
222
|
+
end
|
223
|
+
|
224
|
+
# Set user password
|
225
|
+
def pwd=(password)
|
226
|
+
connection_string.pwd = password
|
227
|
+
end
|
228
|
+
|
229
|
+
# User password
|
230
|
+
# @return [String]
|
231
|
+
def pwd
|
232
|
+
connection_string.pwd
|
233
|
+
end
|
234
|
+
|
235
|
+
# @return [AssLauncher::Enterprise::BinaryWrapper::ThickClient]
|
236
|
+
def thick
|
237
|
+
self.class.thicks(platform_require).last ||
|
238
|
+
fail("Platform 1C #{platform_require} not found")
|
239
|
+
end
|
240
|
+
|
241
|
+
# @return [AssLauncher::Enterprise::BinaryWrapper::ThinClient]
|
242
|
+
def thin
|
243
|
+
self.class.thins(platform_require).last ||
|
244
|
+
fail("Platform 1C #{platform_require} not found")
|
245
|
+
end
|
246
|
+
|
247
|
+
# Get ole connector specified in +type+ parameter
|
248
|
+
# @param type [Symbol] see +AssLauncher::Api#ole+
|
249
|
+
def ole(type)
|
250
|
+
self.class.ole(type, ole_requirement)
|
251
|
+
end
|
252
|
+
|
253
|
+
def ole_requirement
|
254
|
+
"= #{thick.version}"
|
255
|
+
end
|
256
|
+
private :ole_requirement
|
257
|
+
|
258
|
+
def fail_if_not_exists
|
259
|
+
fail 'Infobase not exists' unless exists?
|
260
|
+
end
|
261
|
+
private :fail_if_not_exists
|
262
|
+
|
263
|
+
# Build command for run designer
|
264
|
+
# block will be passed to arguments builder
|
265
|
+
# @return [AssLauncher::Support::Shell::Command]
|
266
|
+
def designer(&block)
|
267
|
+
command(:thick, :designer, &block)
|
268
|
+
end
|
269
|
+
|
270
|
+
# Build command for run enterprise
|
271
|
+
# block will be passed to arguments builder
|
272
|
+
# @param client [Symbol] +:thin+ or +thick+ client
|
273
|
+
# @return [AssLauncher::Support::Shell::Command]
|
274
|
+
def enterprise(client, &block)
|
275
|
+
command(client, :enterprise, &block)
|
276
|
+
end
|
277
|
+
|
278
|
+
def command(client, mode, &block)
|
279
|
+
fail_if_not_exists
|
280
|
+
case client
|
281
|
+
when :thin then
|
282
|
+
thin.command(connection_string.to_args + common_args, &block)
|
283
|
+
when :thick then
|
284
|
+
thick.command(mode, connection_string.to_args + common_args,
|
285
|
+
&block)
|
286
|
+
else
|
287
|
+
fail ArgumentError, "Invalid client #{client}"
|
288
|
+
end
|
289
|
+
end
|
290
|
+
private :command
|
291
|
+
|
292
|
+
# Common arguments for all commands
|
293
|
+
def common_args
|
294
|
+
r = []
|
295
|
+
r += ['/L', locale] if locale
|
296
|
+
r += ['/UC', unlock_code] if unlock_code
|
297
|
+
r
|
298
|
+
end
|
299
|
+
|
300
|
+
# Dump infobase to +.dt+ file
|
301
|
+
def dump(path)
|
302
|
+
designer do
|
303
|
+
dumpIB path
|
304
|
+
end.run.wait.result.verify!
|
305
|
+
path
|
306
|
+
end
|
307
|
+
|
308
|
+
# Restore infobase from +.dt+ file
|
309
|
+
# @raise [MethodDenied] if {#read_only?}
|
310
|
+
def restore!(path)
|
311
|
+
fail MethodDenied, :restore! if read_only?
|
312
|
+
designer do
|
313
|
+
restoreIB path
|
314
|
+
end.run.wait.result.verify!
|
315
|
+
path
|
316
|
+
end
|
317
|
+
|
318
|
+
# Returns instance for manipuate with
|
319
|
+
# InfoBase database. If infobase not
|
320
|
+
# exists returns nil
|
321
|
+
# @return [Dbase nil]
|
322
|
+
def db_cfg
|
323
|
+
@db_cfg ||= DbCfg.new(self) if exists?
|
324
|
+
end
|
325
|
+
|
326
|
+
# Returns instance for manipuate with
|
327
|
+
# databse configuration. If infobase not
|
328
|
+
# exists returns nil
|
329
|
+
# @return [Cfg nil]
|
330
|
+
def cfg
|
331
|
+
@cfg ||= Cfg.new(self) if exists?
|
332
|
+
end
|
333
|
+
|
334
|
+
extend Forwardable
|
335
|
+
def_delegators :infobase_wrapper,
|
336
|
+
*Interfaces::InfoBaseWrapper.instance_methods
|
337
|
+
end
|
338
|
+
# rubocop:enable Metrics/ClassLength
|
339
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module AssMaintainer
|
2
|
+
class InfoBase
|
3
|
+
# @abstract
|
4
|
+
class AbstractCfg
|
5
|
+
attr_reader :infobase
|
6
|
+
# @param infobase [InfoBase]
|
7
|
+
def initialize(infobase)
|
8
|
+
@infobase = infobase
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# Object for manipuate whith infobase configuration
|
13
|
+
class Cfg < AbstractCfg
|
14
|
+
# Dump configuration to +XML+ files
|
15
|
+
# @param path [String]
|
16
|
+
# @return [String] path
|
17
|
+
def dump_xml(path)
|
18
|
+
infobase.designer do
|
19
|
+
dumpConfigToFiles path
|
20
|
+
end.run.wait.result.verify!
|
21
|
+
path
|
22
|
+
end
|
23
|
+
|
24
|
+
# Dump configuration to +.cf+ file
|
25
|
+
# @param path [String]
|
26
|
+
# @return [String] path
|
27
|
+
def dump(path)
|
28
|
+
infobase.designer do
|
29
|
+
dumpCfg path
|
30
|
+
end.run.wait.result.verify!
|
31
|
+
path
|
32
|
+
end
|
33
|
+
|
34
|
+
# Load configuration from +XML+ files
|
35
|
+
# @param path [String]
|
36
|
+
# @return [String] path
|
37
|
+
def load_xml(path)
|
38
|
+
fail MethodDenied, :load_xml if infobase.read_only?
|
39
|
+
infobase.designer do
|
40
|
+
loadConfigFromFiles path
|
41
|
+
end.run.wait.result.verify!
|
42
|
+
path
|
43
|
+
end
|
44
|
+
|
45
|
+
# Load configuration from +.cf+ file
|
46
|
+
# @param path [String]
|
47
|
+
# @return [String] path
|
48
|
+
def load(path)
|
49
|
+
fail MethodDenied, :load_cf if infobase.read_only?
|
50
|
+
infobase.designer do
|
51
|
+
loadCfg path
|
52
|
+
end.run.wait.result.verify!
|
53
|
+
path
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Object for manipuate whith database configuration
|
58
|
+
class DbCfg < AbstractCfg
|
59
|
+
# Update database configuration from infobase
|
60
|
+
# configuration
|
61
|
+
def update
|
62
|
+
fail MethodDenied, :update if infobase.read_only?
|
63
|
+
infobase.designer do
|
64
|
+
updateDBCfg do
|
65
|
+
warningsAsErrors
|
66
|
+
end
|
67
|
+
end.run.wait.result.verify!
|
68
|
+
end
|
69
|
+
|
70
|
+
# Dump configuration to +.cf+ file
|
71
|
+
# @param path [String]
|
72
|
+
# @return [String] path
|
73
|
+
def dump(path)
|
74
|
+
infobase.designer do
|
75
|
+
dumpDBCfg path
|
76
|
+
end.run.wait.result.verify!
|
77
|
+
path
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module AssMaintainer
|
2
|
+
#
|
3
|
+
class InfoBase
|
4
|
+
ASS_PLATFORM_REQUIRE = ENV['ASS_PLATFORM_REQUIRE'] || '> 0'
|
5
|
+
|
6
|
+
# Settings for {InfoBase}
|
7
|
+
class Config
|
8
|
+
# Set reqirement for version of 1C:Enterprise
|
9
|
+
attr_writer :platform_require
|
10
|
+
# Reqirement for version of 1C:Enterprise
|
11
|
+
# @return [String]
|
12
|
+
def platform_require
|
13
|
+
@platform_require ||= ASS_PLATFORM_REQUIRE
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Make settings
|
18
|
+
def self.configure
|
19
|
+
yield config
|
20
|
+
end
|
21
|
+
|
22
|
+
# Get settings
|
23
|
+
# @return [Config]
|
24
|
+
def self.config
|
25
|
+
@config ||= Config.new
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module AssMaintainer
|
2
|
+
class InfoBase
|
3
|
+
# Default infobase maker
|
4
|
+
class DefaultMaker
|
5
|
+
include Interfaces::IbMaker
|
6
|
+
# :hodoc:
|
7
|
+
def entry_point
|
8
|
+
infobase.thick
|
9
|
+
.command(:createinfobase,
|
10
|
+
infobase.connection_string.createinfobase_args +
|
11
|
+
infobase.common_args)
|
12
|
+
.run.wait.result.verify!
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module AssMaintainer
|
2
|
+
class InfoBase
|
3
|
+
# Mixins for file deployed infobase
|
4
|
+
module FileIb
|
5
|
+
# Default destroyer for file infobase
|
6
|
+
class FileBaseDestroyer
|
7
|
+
include Interfaces::IbDestroyer
|
8
|
+
def entry_point
|
9
|
+
FileUtils.rm_r infobase.connection_string.path.to_s
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# True if infobase exists
|
14
|
+
def exists?
|
15
|
+
File.file?("#{connection_string.path}/1Cv8.1CD")
|
16
|
+
end
|
17
|
+
|
18
|
+
def maker
|
19
|
+
options[:maker] || InfoBase::DefaultMaker.new
|
20
|
+
end
|
21
|
+
private :maker
|
22
|
+
|
23
|
+
def destroyer
|
24
|
+
options[:destroyer] || FileBaseDestroyer.new
|
25
|
+
end
|
26
|
+
private :destroyer
|
27
|
+
|
28
|
+
# Connection string fore createinfobase
|
29
|
+
def make_connection_string
|
30
|
+
connection_string
|
31
|
+
end
|
32
|
+
|
33
|
+
# Dummy infobase wrupper
|
34
|
+
# @return [InfoBaseWrapper]
|
35
|
+
def infobase_wrapper
|
36
|
+
@infobase_wrapper = InfoBaseWrapper.new(self)
|
37
|
+
end
|
38
|
+
|
39
|
+
# (see Interfaces::InfoBaseWrapper)
|
40
|
+
class InfoBaseWrapper
|
41
|
+
include Interfaces::InfoBaseWrapper
|
42
|
+
attr_accessor :infobase
|
43
|
+
def initialize(infobase)
|
44
|
+
self.infobase = infobase
|
45
|
+
end
|
46
|
+
|
47
|
+
# (see Interfaces::InfoBaseWrapper#sessions)
|
48
|
+
def sessions
|
49
|
+
[]
|
50
|
+
end
|
51
|
+
|
52
|
+
# (see Interfaces::InfoBaseWrapper#lock)
|
53
|
+
def lock
|
54
|
+
end
|
55
|
+
|
56
|
+
# (see Interfaces::InfoBaseWrapper#unlock)
|
57
|
+
def unlock
|
58
|
+
end
|
59
|
+
|
60
|
+
# (see Interfaces::InfoBaseWrapper#unlock!)
|
61
|
+
def unlock!
|
62
|
+
end
|
63
|
+
|
64
|
+
# (see Interfaces::InfoBaseWrapper#locked?)
|
65
|
+
def locked?
|
66
|
+
false
|
67
|
+
end
|
68
|
+
|
69
|
+
# (see Interfaces::InfoBaseWrapper#locked_we?)
|
70
|
+
def locked_we?
|
71
|
+
false
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module AssMaintainer
|
2
|
+
class InfoBase
|
3
|
+
# Define absract Interfaces
|
4
|
+
# for worker classes
|
5
|
+
module Interfaces
|
6
|
+
# Interface for class which make new InfoBase
|
7
|
+
# Class must implement +#entry_point+ methodmodule Fixtures
|
8
|
+
module IbMaker
|
9
|
+
attr_reader :infobase
|
10
|
+
def execute(infobase)
|
11
|
+
@infobase = infobase
|
12
|
+
entry_point
|
13
|
+
end
|
14
|
+
|
15
|
+
def entry_point
|
16
|
+
fail NotImplementedError
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Interface for class which destroy InfoBase
|
21
|
+
# Class must implement +#entry_point+ methodmodule Fixtures
|
22
|
+
module IbDestroyer
|
23
|
+
attr_reader :infobase
|
24
|
+
def execute(infobase)
|
25
|
+
@infobase = infobase
|
26
|
+
entry_point
|
27
|
+
end
|
28
|
+
|
29
|
+
def entry_point
|
30
|
+
fail NotImplementedError
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Interface for {FileIb::InfoBaseWrapper} and
|
35
|
+
# {ServerIb::InfoBaseWrapper} classes
|
36
|
+
module InfoBaseWrapper
|
37
|
+
# Returns array of infobase sessions
|
38
|
+
# For file infobase returns empty array
|
39
|
+
# @return [Array <Session>]
|
40
|
+
def sessions
|
41
|
+
fail NotImplementedError
|
42
|
+
end
|
43
|
+
|
44
|
+
# Lock infobase. It work for server infobase only.
|
45
|
+
# For file infobase it do nothing
|
46
|
+
def lock
|
47
|
+
fail NotImplementedError
|
48
|
+
end
|
49
|
+
|
50
|
+
# Unlock infobase which {#locked_we?}.
|
51
|
+
# It work for server infobase only.
|
52
|
+
# For file infobase it do nothing
|
53
|
+
def unlock
|
54
|
+
fail NotImplementedError
|
55
|
+
end
|
56
|
+
|
57
|
+
# Unlock infobase.
|
58
|
+
# It work for server infobase only.
|
59
|
+
# For file infobase it do nothing
|
60
|
+
def unlock!
|
61
|
+
fail NotImplementedError
|
62
|
+
end
|
63
|
+
|
64
|
+
# Lock infobase. It work for server infobase only.
|
65
|
+
# For file infobase it return +false+
|
66
|
+
def locked?
|
67
|
+
fail NotImplementedError
|
68
|
+
end
|
69
|
+
|
70
|
+
# True if infobase locked this
|
71
|
+
# For file infobase it return +false+
|
72
|
+
def locked_we?
|
73
|
+
fail NotImplementedError
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
module AssMaintainer
|
2
|
+
class InfoBase
|
3
|
+
# Mixins for infobase deployed on 1C:Eneterprise server
|
4
|
+
module ServerIb
|
5
|
+
require 'ass_maintainer/info_base/server_ib/helpers'
|
6
|
+
# Defauld destroyer for serever infobase
|
7
|
+
class ServerBaseDestroyer
|
8
|
+
include Interfaces::IbDestroyer
|
9
|
+
def entry_point
|
10
|
+
fail NotImplementedError
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def maker
|
15
|
+
options[:maker] || InfoBase::DefaultMaker.new
|
16
|
+
end
|
17
|
+
private :maker
|
18
|
+
|
19
|
+
# True if infobase exists
|
20
|
+
def exists?
|
21
|
+
infobase_wrapper.exists?
|
22
|
+
end
|
23
|
+
|
24
|
+
def destroyer
|
25
|
+
options[:destroyer] || ServerBaseDestroyer.new
|
26
|
+
end
|
27
|
+
private :destroyer
|
28
|
+
|
29
|
+
# @return (see #def_server_agent)
|
30
|
+
def server_agent
|
31
|
+
@server_agent ||= def_server_agent
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [EnterpriseServers::ServerAgent]
|
35
|
+
def def_server_agent
|
36
|
+
host = sagent_host || connection_string.servers[0].host
|
37
|
+
port = sagent_port || InfoBase::DEFAULT_SAGENT_PORT
|
38
|
+
EnterpriseServers::ServerAgent.new("#{host}:#{port}",
|
39
|
+
sagent_usr,
|
40
|
+
sagent_pwd)
|
41
|
+
end
|
42
|
+
private :def_server_agent
|
43
|
+
|
44
|
+
# @param a [EnterpriseServers::ServerAgent]
|
45
|
+
def server_agent=(a)
|
46
|
+
fail ArgumentError unless a.instance_of? ServerAgent
|
47
|
+
@server_agent = a
|
48
|
+
end
|
49
|
+
|
50
|
+
# Set claster user name
|
51
|
+
# @param user_name [String]
|
52
|
+
def cluster_usr=(user_name)
|
53
|
+
connection_string.susr = user_name
|
54
|
+
end
|
55
|
+
|
56
|
+
# Claster user name
|
57
|
+
def claster_usr
|
58
|
+
connection_string.susr || (self.claster_usr = options[:claster_usr])
|
59
|
+
end
|
60
|
+
|
61
|
+
# Set claster user password
|
62
|
+
# @param password [String]
|
63
|
+
def cluster_pwd=(password)
|
64
|
+
connection_string.spwd = password
|
65
|
+
end
|
66
|
+
|
67
|
+
# Claster user password
|
68
|
+
def claster_pwd
|
69
|
+
connection_string.spwd || (self.claster_pwd = options[:claster_pwd])
|
70
|
+
end
|
71
|
+
|
72
|
+
# @return [EnrepriseServers::Claster]
|
73
|
+
def claster
|
74
|
+
EnterpriseServers::Claster.from_cs(connection_string)
|
75
|
+
end
|
76
|
+
|
77
|
+
def filled?(fields)
|
78
|
+
fields.each do |f|
|
79
|
+
return false if connection_string[f].nil?
|
80
|
+
end
|
81
|
+
true
|
82
|
+
end
|
83
|
+
private :filled?
|
84
|
+
|
85
|
+
# Connection string fore createinfobase
|
86
|
+
def make_connection_string
|
87
|
+
fields = [:dbsrvr, :db, :dbms]
|
88
|
+
fail "Required fields #{fields} must be filled" unless filled?(fields)
|
89
|
+
AssLauncher::Support::ConnectionString.new(connection_string.to_s)
|
90
|
+
end
|
91
|
+
|
92
|
+
# @return {InfoBaseWrapper}
|
93
|
+
def infobase_wrapper
|
94
|
+
@infobase_wrapper = InfoBaseWrapper.new(self, server_agent, claster)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module AssMaintainer
|
2
|
+
class InfoBase
|
3
|
+
module ServerIb
|
4
|
+
module EnterpriseServers
|
5
|
+
# Mixins for serever connection describers {Claster} {ServerAgent}
|
6
|
+
module ServerConnection
|
7
|
+
attr_reader :host_port, :user, :password
|
8
|
+
def initialize(host_port, user, password)
|
9
|
+
fail ArgumentError, 'Host name require' if host_port.to_s.empty?
|
10
|
+
@host_port = host_port.to_s
|
11
|
+
@user = user
|
12
|
+
@password = password
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# Object descrbed 1C server agent connection
|
17
|
+
class ServerAgent
|
18
|
+
include ServerConnection
|
19
|
+
end
|
20
|
+
|
21
|
+
# Object descrbed 1C claster connection
|
22
|
+
class Claster
|
23
|
+
include ServerConnection
|
24
|
+
def self.from_cs(cs)
|
25
|
+
new cs.srvr, cs.susr, cs.spwd
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Wrapper for manipulate
|
31
|
+
# with real information base deployed in 1C:Enterprise server
|
32
|
+
# ower the 1C Ole classes
|
33
|
+
class InfoBaseWrapper
|
34
|
+
include Interfaces::InfoBaseWrapper
|
35
|
+
attr_accessor :infobase, :server_agent, :claster
|
36
|
+
# @api private
|
37
|
+
def initialize(infobase, server_agent, claster)
|
38
|
+
self.infobase = infobase
|
39
|
+
self.server_agent = server_agent
|
40
|
+
self.claster = claster
|
41
|
+
end
|
42
|
+
|
43
|
+
# True if infobase exists
|
44
|
+
def exists?
|
45
|
+
fail NotImplementedError
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
metadata
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ass_maintainer-info_base
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Leonid Vlasov
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ass_launcher
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.2.0
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.10'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: simplecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: mocha
|
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
|
+
description: Classes and utils for manipulate with 1C:Enterprise application instances
|
112
|
+
also known as "InfoBase" or "Information Base"
|
113
|
+
email:
|
114
|
+
- leoniv.vlasov@gmail.com
|
115
|
+
executables:
|
116
|
+
- ass_maintainer-info_base
|
117
|
+
extensions: []
|
118
|
+
extra_rdoc_files: []
|
119
|
+
files:
|
120
|
+
- .gitignore
|
121
|
+
- .simplecov
|
122
|
+
- .travis.yml
|
123
|
+
- Gemfile
|
124
|
+
- LICENSE.txt
|
125
|
+
- README.md
|
126
|
+
- Rakefile
|
127
|
+
- ass_maintainer-info_base.gemspec
|
128
|
+
- bin/console
|
129
|
+
- bin/setup
|
130
|
+
- examples/describe_infobase.rb
|
131
|
+
- exe/ass_maintainer-info_base
|
132
|
+
- lib/ass_maintainer/info_base.rb
|
133
|
+
- lib/ass_maintainer/info_base/cfg.rb
|
134
|
+
- lib/ass_maintainer/info_base/config.rb
|
135
|
+
- lib/ass_maintainer/info_base/default_maker.rb
|
136
|
+
- lib/ass_maintainer/info_base/file_ib.rb
|
137
|
+
- lib/ass_maintainer/info_base/interfaces.rb
|
138
|
+
- lib/ass_maintainer/info_base/server_ib.rb
|
139
|
+
- lib/ass_maintainer/info_base/server_ib/helpers.rb
|
140
|
+
- lib/ass_maintainer/info_base/version.rb
|
141
|
+
homepage: https://github.com/leoniv/ass_maintainer-info_base
|
142
|
+
licenses:
|
143
|
+
- MIT
|
144
|
+
metadata: {}
|
145
|
+
post_install_message:
|
146
|
+
rdoc_options: []
|
147
|
+
require_paths:
|
148
|
+
- lib
|
149
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - '>='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - '>='
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
requirements: []
|
160
|
+
rubyforge_project:
|
161
|
+
rubygems_version: 2.0.14
|
162
|
+
signing_key:
|
163
|
+
specification_version: 4
|
164
|
+
summary: Manipulate with 1C:Enterprise application instances
|
165
|
+
test_files: []
|
166
|
+
has_rdoc:
|