ass_maintainer-info_base 0.1.2 → 1.0.0

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