ass_maintainer-info_base 0.1.2 → 1.0.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.
@@ -0,0 +1,198 @@
1
+ module AssMaintainer
2
+ class InfoBase
3
+ module ServerIb
4
+ require 'ass_ole'
5
+ module EnterpriseServers
6
+ # @api private
7
+ # Object for comunication with 1C Working process.
8
+ # @example
9
+ # wp_connection = WpConnection.new(wp_info).connect(infobase_wrapper)
10
+ module WpConnection
11
+ # Drop infobase modes defines what should do with infobase's database.
12
+ # - 0 - databse willn't be deleted
13
+ # - 1 - databse will be deleted
14
+ # - 2 - database willn't be deleted but will be cleared
15
+ DROP_MODES = {alive_db: 0, destroy_db: 1, clear_db: 2}.freeze
16
+
17
+ include Support::OleRuntime
18
+ include Support::InfoBaseFind
19
+ include Support::Reconnect
20
+
21
+ # Make new object of anonymous class which included this module.
22
+ # @param wp_info (see #initialize)
23
+ def self.new(wp_info)
24
+ Class.new do
25
+ include WpConnection
26
+ end.new wp_info
27
+ end
28
+
29
+ attr_reader :infobase_wrapper
30
+
31
+ attr_reader :wp_info
32
+
33
+ # @param wp_info [Wrappers::WorkingProcessInfo]
34
+ def initialize(wp_info)
35
+ @wp_info = wp_info
36
+ end
37
+
38
+ def runtime_type
39
+ :wp
40
+ end
41
+
42
+ def sagent
43
+ wp_info.sagent
44
+ end
45
+
46
+ def cluster
47
+ wp_info.cluster
48
+ end
49
+
50
+ def host_port
51
+ "#{wp_info.HostName}:#{wp_info.MainPort}"
52
+ end
53
+
54
+ def user
55
+ infobase_wrapper.ib.usr.to_s
56
+ end
57
+
58
+ def pass
59
+ infobase_wrapper.ib.pwd.to_s
60
+ end
61
+
62
+ def ping?
63
+ wp_info.ping?
64
+ end
65
+
66
+ # @param infobase_wrapper [InfoBaseWrapper]
67
+ def connect(infobase_wrapper)
68
+ @infobase_wrapper = infobase_wrapper
69
+ _connect host_port, sagent.platform_require
70
+ end
71
+
72
+ def ib_ref
73
+ infobase_wrapper.ib_ref
74
+ end
75
+
76
+ def authenticate
77
+ AuthenticateAdmin(cluster.user.to_s, cluster.password.to_s)
78
+ authenticate_infobase_admin
79
+ end
80
+
81
+ def authenticate_infobase_admin
82
+ AddAuthentication(user, pass)
83
+ ole_connector.GetInfoBaseConnections(ib_info_create)
84
+ true
85
+ end
86
+
87
+ def ib_info_create
88
+ ii = createInfoBaseInfo
89
+ ii.Name = ib_ref
90
+ ii
91
+ end
92
+
93
+ def authenticate?
94
+ false
95
+ end
96
+
97
+ def infobase_exists?
98
+ infobase_include? ib_ref
99
+ end
100
+
101
+ def drop_infobase!(mode)
102
+ fail ArgumentError, "Invalid mode #{mode}" unless DROP_MODES[mode]
103
+ lock_infobase!(nil, nil, "BEFORE DROP INFOBASE", '')
104
+ DropInfoBase(infobase_info, DROP_MODES[mode])
105
+ end
106
+
107
+ def infobase_info
108
+ fail 'Infobase not exists' unless infobase_exists?
109
+ authenticate_infobase_admin
110
+ infobase_find ib_ref
111
+ end
112
+
113
+ def locked?
114
+ ii = infobase_info
115
+ ii.SessionsDenied
116
+ end
117
+
118
+ def connections
119
+ GetInfoBaseConnections(infobase_info)
120
+ end
121
+
122
+ def lock_sessions!(from, to, code, mess)
123
+ fail ArgumentError, 'Permission code won\'t be empty' if\
124
+ code.to_s.empty?
125
+ ii = infobase_info
126
+ ii.DeniedFrom = (from.nil? ? Date.parse('1973.09.07') : from).to_time
127
+ ii.DeniedTo = (to.nil? ? Date.parse('2073.09.07') : to).to_time
128
+ ii.DeniedMessage = mess.to_s
129
+ ii.SessionsDenied = true
130
+ ii.PermissionCode = code
131
+ UpdateInfoBase(ii)
132
+ end
133
+
134
+ def drop_sessions
135
+ infobase_wrapper.sessions.each do |sess|
136
+ sess.terminate
137
+ end
138
+ end
139
+
140
+ def drop_connections
141
+ connections.each do |conn|
142
+ Disconnect(conn)
143
+ end
144
+ end
145
+
146
+ def lock_infobase!(from, to, code, mess)
147
+ lock_sessions!(from, to, code, mess)
148
+ lock_schjobs!
149
+ drop_sessions
150
+ drop_connections
151
+ end
152
+
153
+ def unlock_sessions!
154
+ ii = infobase_info
155
+ ii.DeniedFrom = Date.parse('1973.09.07').to_time
156
+ ii.DeniedTo = Date.parse('1973.09.07').to_time
157
+ ii.DeniedMessage = ''
158
+ ii.SessionsDenied = false
159
+ ii.PermissionCode = ''
160
+ UpdateInfoBase(ii)
161
+ end
162
+
163
+ def lock_schjobs!
164
+ ii = infobase_info
165
+ ii.ScheduledJobsDenied = true
166
+ UpdateInfoBase(ii)
167
+ end
168
+
169
+ def unlock_schjobs!
170
+ ii = infobase_info
171
+ ii.ScheduledJobsDenied = false
172
+ UpdateInfoBase(ii)
173
+ end
174
+
175
+ def infobases
176
+ reconnect
177
+ getInfoBases
178
+ end
179
+
180
+ def _reconnect_required?
181
+ getInfoBases.empty?
182
+ end
183
+ private :reconnect_required?
184
+
185
+ def raise_unless_unlock_possable(err, unlock_code)
186
+ ii = infobase_info
187
+ return if !ii.SessionsDenied
188
+ return if ii.PermissionCode.to_s.empty?
189
+ return if unlock_code.to_s.downcase == ii.PermissionCode
190
+ .to_s.downcase
191
+ fail err, "Infobase is locked and PermissionCode:"\
192
+ " `#{ii.PermissionCode}' not match unlock_code: `#{unlock_code}'"
193
+ end
194
+ end
195
+ end
196
+ end
197
+ end
198
+ end
@@ -1,6 +1,6 @@
1
1
  module AssMaintainer
2
2
  #
3
3
  class InfoBase
4
- VERSION = '0.1.2'
4
+ VERSION = '1.0.0'
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,111 +1,153 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ass_maintainer-info_base
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 1.0.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: 2016-12-02 00:00:00.000000000 Z
11
+ date: 2017-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ass_launcher
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.0
19
+ version: '0.3'
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.2.0
26
+ version: '0.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ass_ole
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: net-ping
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.0.0
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: bundler
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
- - - ~>
59
+ - - "~>"
32
60
  - !ruby/object:Gem::Version
33
61
  version: '1.10'
34
62
  type: :development
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
- - - ~>
66
+ - - "~>"
39
67
  - !ruby/object:Gem::Version
40
68
  version: '1.10'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rake
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
- - - ~>
73
+ - - "~>"
46
74
  - !ruby/object:Gem::Version
47
75
  version: '10.0'
48
76
  type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
- - - ~>
80
+ - - "~>"
53
81
  - !ruby/object:Gem::Version
54
82
  version: '10.0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: minitest
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
- - - '>='
87
+ - - ">="
60
88
  - !ruby/object:Gem::Version
61
89
  version: '0'
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
- - - '>='
94
+ - - ">="
67
95
  - !ruby/object:Gem::Version
68
96
  version: '0'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: pry
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
- - - '>='
101
+ - - ">="
74
102
  - !ruby/object:Gem::Version
75
103
  version: '0'
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
- - - '>='
108
+ - - ">="
81
109
  - !ruby/object:Gem::Version
82
110
  version: '0'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: simplecov
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
- - - '>='
115
+ - - ">="
88
116
  - !ruby/object:Gem::Version
89
117
  version: '0'
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
- - - '>='
122
+ - - ">="
95
123
  - !ruby/object:Gem::Version
96
124
  version: '0'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: mocha
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
- - - '>='
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
+ - !ruby/object:Gem::Dependency
140
+ name: clamp
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
102
144
  - !ruby/object:Gem::Version
103
145
  version: '0'
104
146
  type: :development
105
147
  prerelease: false
106
148
  version_requirements: !ruby/object:Gem::Requirement
107
149
  requirements:
108
- - - '>='
150
+ - - ">="
109
151
  - !ruby/object:Gem::Version
110
152
  version: '0'
111
153
  description: Classes and utils for manipulate with 1C:Enterprise application instances
@@ -117,15 +159,16 @@ executables:
117
159
  extensions: []
118
160
  extra_rdoc_files: []
119
161
  files:
120
- - .gitignore
121
- - .simplecov
122
- - .travis.yml
162
+ - ".gitignore"
163
+ - ".simplecov"
164
+ - ".travis.yml"
123
165
  - Gemfile
124
166
  - LICENSE.txt
125
167
  - README.md
126
168
  - Rakefile
127
169
  - ass_maintainer-info_base.gemspec
128
170
  - bin/console
171
+ - bin/runsrv
129
172
  - bin/setup
130
173
  - examples/describe_infobase.rb
131
174
  - exe/ass_maintainer-info_base
@@ -136,7 +179,11 @@ files:
136
179
  - lib/ass_maintainer/info_base/file_ib.rb
137
180
  - lib/ass_maintainer/info_base/interfaces.rb
138
181
  - lib/ass_maintainer/info_base/server_ib.rb
139
- - lib/ass_maintainer/info_base/server_ib/helpers.rb
182
+ - lib/ass_maintainer/info_base/server_ib/enterprise_servers.rb
183
+ - lib/ass_maintainer/info_base/server_ib/enterprise_servers/cluster.rb
184
+ - lib/ass_maintainer/info_base/server_ib/enterprise_servers/server_agent.rb
185
+ - lib/ass_maintainer/info_base/server_ib/enterprise_servers/support.rb
186
+ - lib/ass_maintainer/info_base/server_ib/enterprise_servers/wp_connection.rb
140
187
  - lib/ass_maintainer/info_base/version.rb
141
188
  homepage: https://github.com/leoniv/ass_maintainer-info_base
142
189
  licenses:
@@ -148,19 +195,18 @@ require_paths:
148
195
  - lib
149
196
  required_ruby_version: !ruby/object:Gem::Requirement
150
197
  requirements:
151
- - - '>='
198
+ - - ">="
152
199
  - !ruby/object:Gem::Version
153
200
  version: '0'
154
201
  required_rubygems_version: !ruby/object:Gem::Requirement
155
202
  requirements:
156
- - - '>='
203
+ - - ">="
157
204
  - !ruby/object:Gem::Version
158
205
  version: '0'
159
206
  requirements: []
160
207
  rubyforge_project:
161
- rubygems_version: 2.0.14
208
+ rubygems_version: 2.6.13
162
209
  signing_key:
163
210
  specification_version: 4
164
211
  summary: Manipulate with 1C:Enterprise application instances
165
212
  test_files: []
166
- has_rdoc:
@@ -1,50 +0,0 @@
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