identikey 0.5.1 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b55edf8d9a08412a4ce162b70b130f149a0ea1047c97a14a301056aa5c41350
4
- data.tar.gz: eac60565c851f0ee3d100171a804d60e5804bb59539ad83b81c09d92b0a811f8
3
+ metadata.gz: 7eb968c0e5dd54488d15939d79d81ebccbf7052c93e3da22ff77bad6fc623106
4
+ data.tar.gz: d90c163b2fdebaf21e6386a721c8f17b4ec0248dd44394e234c646007842a5fd
5
5
  SHA512:
6
- metadata.gz: bdcc16f8fa44bc513e44b6ed6b2ef5c3259cdc251568e2719a410306b033c27a1cc7542f19707ce1ae4803b6d1a7b0466a549f1a7a1ef93812c3e6bf70f26160
7
- data.tar.gz: f55cbd706367e52d32394c4e220146fec6ea0a0a881c3871d71a186b0857a58ecb19357e54837a67950b25647ad45a6125cdc7bf1f96ad83870734957e6f7394
6
+ metadata.gz: 984d1e2f3b20b1d882568d70e338420062ba54b89b26b5f7c9495fd92ee2f5507db7d1da38c4d45662c32fc478c68ac88622d3b69a8c50bb6a617b01a9761d7b
7
+ data.tar.gz: 1c8092afbd35a441141c9830422a26467fc1fd851cbb9eee3109e8e69edea710de97b1ab22041c66869f5a84ea2bc6a29d6e465142b0dba3727f2453cd0831a5
data/.gitignore CHANGED
@@ -6,14 +6,18 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /spec/test.env
9
+ /spec/examples.txt
9
10
  /tmp/
10
11
  /log/
11
12
  /sdk
13
+ /dpx
12
14
 
13
15
  Gemfile.lock
14
16
 
15
17
  .byebug_history
16
18
 
19
+ .env
20
+
17
21
  # vim swap files
18
22
 
19
23
  .*.sw?
@@ -0,0 +1,23 @@
1
+ # Note: The cmd option is now required due to the increasing number of ways
2
+ # rspec may be run, below are examples of the most common uses.
3
+ # * bundler: 'bundle exec rspec'
4
+ # * bundler binstubs: 'bin/rspec'
5
+ # * spring: 'bin/rspec' (This will use spring if running and you have
6
+ # installed the spring binstubs per the docs)
7
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
8
+ # * 'just' rspec: 'rspec'
9
+
10
+ guard :rspec, cmd: "bundle exec rspec" do
11
+ require "guard/rspec/dsl"
12
+ dsl = Guard::RSpec::Dsl.new(self)
13
+
14
+ # RSpec files
15
+ rspec = dsl.rspec
16
+ watch(rspec.spec_helper) { rspec.spec_dir }
17
+ watch(rspec.spec_support) { rspec.spec_dir }
18
+ watch(rspec.spec_files)
19
+
20
+ # Ruby files
21
+ ruby = dsl.ruby
22
+ dsl.watch_spec_files_for(ruby.lib_files)
23
+ end
data/README.md CHANGED
@@ -186,15 +186,21 @@ your application.
186
186
 
187
187
  ## Development
188
188
 
189
- After checking out the repo, run `bin/setup` to install dependencies. Then,
190
- run `rake` to run the tests. You can also run `bin/console` for an interactive
191
- prompt that will allow you to experiment.
189
+ After checking out the repo, run `bin/setup` to install dependencies.
192
190
 
193
- To run specs, please copy `spec/test.env.example` into `spec/test.env` and
191
+ Then, please copy `spec/test.env.example` into `spec/test.env` and
194
192
  populate it with your Identikey Authentication Server host, username, password
195
- and domain. You also need the Identikey SDK, that can be placed in `/sdk` and
193
+ and domain.
194
+
195
+ You also need the Identikey SDK, that can be placed in `sdk/` and
196
196
  its WSDL paths as well referenced in the `spec/test.env` file.
197
197
 
198
+ Then, run `rake` to run the tests.
199
+
200
+ You can also run `bin/console` for an interactive prompt that will allow you
201
+ to experiment. It requires the same environment variables required by the
202
+ specs.
203
+
198
204
  To install this gem onto your local machine, run `bundle exec rake install`.
199
205
 
200
206
  To release a new version, update the version number in `version.rb`, and then
data/Rakefile CHANGED
@@ -6,3 +6,9 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
6
6
  end
7
7
 
8
8
  task :default => :spec
9
+
10
+ require 'code_counter/engine'
11
+ desc 'Print code statistics'
12
+ task :stats do
13
+ puts CodeCounter::Engine.new.to_s
14
+ end
@@ -3,8 +3,27 @@
3
3
  require 'bundler/setup'
4
4
  require 'identikey'
5
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.
6
+ Identikey::Authentication.configure do
7
+ wsdl ENV.fetch('IK_WSDL_AUTH')
8
+ endpoint ENV.fetch('IK_HOST')
9
+ end
10
+
11
+ puts "Configured Auth WSDL #{ENV.fetch('IK_WSDL_AUTH')} against #{ENV.fetch('IK_HOST')}"
12
+
13
+ Identikey::Administration.configure do
14
+ wsdl ENV.fetch('IK_WSDL_ADMIN')
15
+ endpoint ENV.fetch('IK_HOST')
16
+ end
17
+
18
+ puts "Configured Admin WSDL #{ENV.fetch('IK_WSDL_ADMIN')} against #{ENV.fetch('IK_HOST')}"
19
+
20
+ $ik = Identikey::Administration::Session.new(
21
+ username: ENV.fetch('IK_USER'),
22
+ password: ENV.fetch('IK_PASS'),
23
+ domain: ENV.fetch('IK_DOMAIN')
24
+ )
25
+
26
+ puts "Opened admin session with #{ENV.fetch('IK_USER')}@#{ENV.fetch('IK_DOMAIN')} against #{ENV.fetch('IK_HOST')}. Find it in $ik variable"
8
27
 
9
28
  require "pry"
10
29
  Pry.start
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'identikey'
5
+ require 'json'
6
+
7
+ if ARGV.size != 1
8
+ $stderr.puts "Usage: #{$0} <users.json>"
9
+ exit 1
10
+ end
11
+
12
+ Identikey::Administration.configure do
13
+ wsdl ENV.fetch('IK_WSDL_ADMIN')
14
+ endpoint ENV.fetch('IK_HOST')
15
+ end
16
+
17
+ puts "Configured Admin WSDL #{ENV.fetch('IK_WSDL_ADMIN')} against #{ENV.fetch('IK_HOST')}"
18
+
19
+ $ik = Identikey::Administration::Session.new(
20
+ username: ENV.fetch('IK_USER'),
21
+ password: ENV.fetch('IK_PASS'),
22
+ domain: ENV.fetch('IK_DOMAIN')
23
+ )
24
+
25
+ $ik.logon
26
+
27
+ puts "Opened admin session with #{ENV.fetch('IK_USER')}@#{ENV.fetch('IK_DOMAIN')} against #{ENV.fetch('IK_HOST')}"
28
+
29
+ at_exit { $ik.logoff }
30
+
31
+ users = Identikey::Administration::User.search(session: $ik, query: {})
32
+ users_slim = users.map do |u|
33
+ { username: u.username,
34
+ email: u.email,
35
+ digipass: u.digipass,
36
+ disabled: u.disabled,
37
+ locked: u.locked,
38
+ expires_at: u.expires_at
39
+ }
40
+ end
41
+
42
+ File.write ARGV[0], users_slim.to_json
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'identikey'
5
+ require 'json'
6
+
7
+ if ARGV.size != 1
8
+ $stderr.puts "Usage: #{$0} <users.json>"
9
+ exit 1
10
+ end
11
+
12
+ Identikey::Administration.configure do
13
+ wsdl ENV.fetch('IK_WSDL_ADMIN')
14
+ endpoint ENV.fetch('IK_HOST')
15
+ end
16
+
17
+ puts "Configured Admin WSDL #{ENV.fetch('IK_WSDL_ADMIN')} against #{ENV.fetch('IK_HOST')}"
18
+
19
+ $ik = Identikey::Administration::Session.new(
20
+ username: ENV.fetch('IK_USER'),
21
+ password: ENV.fetch('IK_PASS'),
22
+ domain: ENV.fetch('IK_DOMAIN')
23
+ )
24
+
25
+ $ik.logon
26
+
27
+ puts "Opened admin session with #{ENV.fetch('IK_USER')}@#{ENV.fetch('IK_DOMAIN')} against #{ENV.fetch('IK_HOST')}"
28
+
29
+ at_exit { $ik.logoff }
30
+
31
+ users = JSON.load File.read ARGV[0]
32
+
33
+ users.each do |import|
34
+
35
+ puts "Looking up #{import['username']}"
36
+ ik_user = begin
37
+ Identikey::Administration::User.find(session: $ik, username: import['username'], domain: ENV.fetch('IK_DOMAIN'))
38
+ rescue => e
39
+ puts "Cannot look up #{import['username']}: #{e.message}"
40
+ nil
41
+ end
42
+
43
+ unless ik_user
44
+ puts "User #{import['username']} not found, creating"
45
+
46
+ ik_user = Identikey::Administration::User.new($ik,
47
+ 'USERFLD_USERID' => import['username'],
48
+ 'USERFLD_EMAIL' => import['email'],
49
+ 'USERFLD_DOMAIN' => ENV.fetch('IK_DOMAIN'),
50
+ 'USERFLD_LOCAL_AUTH' => 'Default',
51
+ 'USERFLD_BACKEND_AUTH' => 'Default',
52
+ 'USERFLD_DISABLED' => import['disabled'],
53
+ 'USERFLD_LOCKED' => import['locked'],
54
+ 'USERFLD_EXPIRATION_TIME' => import['expires_at']
55
+ )
56
+
57
+ begin
58
+ ik_user.save!
59
+ puts "User #{import['username']} created"
60
+ rescue => e
61
+
62
+ puts "Cannot create #{import['username']}: #{e.message}"
63
+
64
+ next
65
+ end
66
+ end
67
+
68
+ missing_digipass = import['digipass'] - ik_user.digipass
69
+
70
+ missing_digipass.each do |digipass|
71
+ puts "Assigining digipass #{digipass} to #{import['username']}"
72
+
73
+ ik_token = begin
74
+ Identikey::Administration::Digipass.find(session: $ik, serial_no: digipass)
75
+ rescue => e
76
+ puts "Digipass #{digipass} was not found"
77
+ next
78
+ end
79
+
80
+ begin
81
+ ik_token.assign! import['username'], ENV.fetch('IK_DOMAIN')
82
+ rescue => e
83
+ puts "Digipass #{digipass} could not be assigned to #{import['username']}: #{e.message}"
84
+ end
85
+
86
+ puts "Assignment of digipass #{digipass} to #{import['username']} was successful"
87
+ end
88
+
89
+ end
@@ -25,11 +25,14 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency "savon", "~> 2.0"
26
26
 
27
27
  spec.add_development_dependency "bundler", "~> 2.0"
28
- spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rake", ">= 12.3.3"
29
29
  spec.add_development_dependency "rspec", "~> 3.0"
30
30
  spec.add_development_dependency 'pry'
31
31
  spec.add_development_dependency 'hirb'
32
32
  spec.add_development_dependency 'byebug'
33
33
  spec.add_development_dependency 'simplecov'
34
34
  spec.add_development_dependency 'dotenv'
35
+ spec.add_development_dependency 'guard-rspec'
36
+ spec.add_development_dependency 'vacman_controller'
37
+ spec.add_development_dependency 'code_counter'
35
38
  end
@@ -61,12 +61,7 @@ module Identikey
61
61
  # `log:` keyword is set to false.
62
62
  #
63
63
  def ping(session_id:, log:)
64
- old_log = client.globals[:log]
65
- client.globals[:log] = log
66
-
67
- sessionalive(session_id: session_id)
68
- ensure
69
- client.globals[:log] = old_log
64
+ logging_to(log) { sessionalive(session_id: session_id) }
70
65
  end
71
66
 
72
67
  def admin_session_query(session_id:)
@@ -150,17 +145,58 @@ module Identikey
150
145
  )
151
146
  end
152
147
 
148
+ def user_execute_RESET_PASSWORD(session_id:, username:, domain:)
149
+ user_execute(
150
+ session_id: session_id,
151
+ cmd: 'USERCMD_RESET_PASSWORD',
152
+ attributes: typed_attributes_list_from(
153
+ USERFLD_USERID: username,
154
+ USERFLD_DOMAIN: domain
155
+ )
156
+ )
157
+ end
153
158
 
154
- def user_query(session_id:, attributes:, query_options:)
155
- resp = super(message: {
156
- sessionID: session_id,
157
- attributeSet: {
158
- attributes: typed_attributes_query_list_from(attributes)
159
- },
160
- queryOptions: query_options
161
- })
159
+ def user_execute_SET_PASSWORD(session_id:, username:, domain:, password:)
160
+ user_execute(
161
+ session_id: session_id,
162
+ cmd: 'USERCMD_SET_PASSWORD',
163
+ attributes: typed_attributes_list_from(
164
+ USERFLD_USERID: username,
165
+ USERFLD_DOMAIN: domain,
166
+ USERFLD_NEW_PASSWORD: password,
167
+ USERFLD_CONFIRM_NEW_PASSWORD: password
168
+ )
169
+ )
170
+ end
162
171
 
163
- parse_response resp, :user_query_response
172
+ def user_execute_UNLOCK(session_id:, username:, domain:)
173
+ user_execute(
174
+ session_id: session_id,
175
+ cmd: 'USERCMD_UNLOCK',
176
+ attributes: typed_attributes_list_from(
177
+ USERFLD_USERID: username,
178
+ USERFLD_DOMAIN: domain
179
+ )
180
+ )
181
+ end
182
+
183
+ # Executes a userQuery command that searches users. By default, it doesn't
184
+ # log anywhere. To enable logging to a specific destination, pass a logger
185
+ # as the log: option. To log to the default destination, pass `true` as
186
+ # the log: option.
187
+ #
188
+ def user_query(session_id:, attributes:, query_options:, log: false)
189
+ logging_to(log) do
190
+ resp = super(message: {
191
+ sessionID: session_id,
192
+ attributeSet: {
193
+ attributes: typed_attributes_query_list_from(attributes)
194
+ },
195
+ queryOptions: query_options
196
+ })
197
+
198
+ parse_response resp, :user_query_response
199
+ end
164
200
  end
165
201
 
166
202
 
@@ -260,5 +296,24 @@ module Identikey
260
296
  )
261
297
  end
262
298
 
299
+ private
300
+ # Allows temporarily overriding the log destination. If it
301
+ # is set to `false` then logging is disabled altogether.
302
+ # If it is set to `true`, then this is a no-op.
303
+ #
304
+ def logging_to(destination)
305
+ old_log = client.globals[:log]
306
+
307
+ unless destination === true
308
+ client.globals[:log] = destination
309
+ end
310
+
311
+ yield
312
+
313
+ ensure
314
+ client.globals[:log] = old_log
315
+ end
316
+
317
+
263
318
  end
264
319
  end
@@ -6,7 +6,7 @@ module Identikey
6
6
  new(session).find(username, domain)
7
7
  end
8
8
 
9
- def self.search(session:, query:, options: {})
9
+ def self.search(session:, query:, options: {}, log: false)
10
10
  [:has_digipass, :not_has_digipass].each do |funky_boolean|
11
11
  if query.key?(funky_boolean) && [true, false].include?(query[funky_boolean])
12
12
  query[funky_boolean] = query[funky_boolean] ? 'Assigned' : 'Unassigned'
@@ -29,10 +29,12 @@ module Identikey
29
29
 
30
30
  stat, users, error = session.execute(:user_query,
31
31
  attributes: Base.search_attributes_from(query, attribute_map: query_keys),
32
- query_options: Base.search_options_from(options))
32
+ query_options: Base.search_options_from(options),
33
+ log: log
34
+ )
33
35
 
34
36
  case stat
35
- when 'STAT_SUCCESS' then (users||[]).map {|user| new(session, user) }
37
+ when 'STAT_SUCCESS' then (users||[]).map {|user| new(session, user, persisted: true) }
36
38
  when 'STAT_NOT_FOUND' then []
37
39
  else
38
40
  raise Identikey::Error, "Search user failed: #{stat} - #{error}"
@@ -59,11 +61,17 @@ module Identikey
59
61
  attr_accessor :expired
60
62
  attr_accessor :last_auth_attempt_at
61
63
  attr_accessor :description
64
+ attr_accessor :passwd_last_set_at
65
+ attr_accessor :has_password
62
66
 
63
- def initialize(session, user = nil)
67
+ alias locked? locked
68
+ alias digipass? has_digipass
69
+ alias password? has_password
70
+
71
+ def initialize(session, user = nil, persisted: false)
64
72
  @session = session
65
73
 
66
- replace(user) if user
74
+ replace(user, persisted: persisted) if user
67
75
  end
68
76
 
69
77
  def find(username, domain)
@@ -102,26 +110,20 @@ module Identikey
102
110
  })
103
111
 
104
112
  if stat != 'STAT_SUCCESS'
105
- raise Identikey::OperationFailed, "Save user failed: #{stat} - #{error}"
113
+ raise Identikey::OperationFailed, "Save user #{self.username} failed: #{stat} - #{error}"
106
114
  end
107
115
 
108
116
  replace(user, persisted: true)
109
117
  end
110
118
 
111
119
  def destroy!
112
- unless self.persisted?
113
- raise Identikey::UsageError, "User #{self.username} is not persisted"
114
- end
115
-
116
- unless self.username && self.domain
117
- raise Identikey::UsageError, "User #{self} is missing username and/or domain"
118
- end
120
+ ensure_persisted!
119
121
 
120
122
  stat, _, error = @session.execute(
121
123
  :user_execute_DELETE, username: username, domain: domain)
122
124
 
123
125
  if stat != 'STAT_SUCCESS'
124
- raise Identikey::OperationFailed, "Delete user failed: #{stat} - #{error}"
126
+ raise Identikey::OperationFailed, "Delete user #{self.username} failed: #{stat} - #{error}"
125
127
  end
126
128
 
127
129
  @persisted = false
@@ -129,6 +131,51 @@ module Identikey
129
131
  self
130
132
  end
131
133
 
134
+ def clear_password!
135
+ ensure_persisted!
136
+
137
+ stat, _, error = @session.execute(
138
+ :user_execute_RESET_PASSWORD, username: username, domain: domain)
139
+
140
+ if stat != 'STAT_SUCCESS'
141
+ raise Identikey::OperationFailed, "Clear user #{self.username} password failed: #{stat} - #{error}"
142
+ end
143
+
144
+ self.has_password = false
145
+
146
+ true
147
+ end
148
+
149
+ def set_password!(password)
150
+ ensure_persisted!
151
+
152
+ stat, _, error = @session.execute(
153
+ :user_execute_SET_PASSWORD, username: username, domain: domain, password: password)
154
+
155
+ if stat != 'STAT_SUCCESS'
156
+ raise Identikey::OperationFailed, "Set user #{self.username} password failed: #{stat} - #{error}"
157
+ end
158
+
159
+ self.has_password = true
160
+
161
+ true
162
+ end
163
+
164
+ def unlock!
165
+ ensure_persisted!
166
+
167
+ stat, _, error = @session.execute(
168
+ :user_execute_UNLOCK, username: username, domain: domain)
169
+
170
+ if stat != 'STAT_SUCCESS'
171
+ raise Identikey::OperationFailed, "Unlock user #{self.username} failed: #{stat} - #{error}"
172
+ end
173
+
174
+ self.locked = false
175
+
176
+ true
177
+ end
178
+
132
179
  protected
133
180
  def replace(user, persisted: false)
134
181
  self.username = user['USERFLD_USERID']
@@ -151,11 +198,23 @@ module Identikey
151
198
  self.expired = user['USERFLD_EXPIRED']
152
199
  self.last_auth_attempt_at = user['USERFLD_LASTAUTHREQ_TIME']
153
200
  self.description = user['USERFLD_DESCRIPTION']
201
+ self.passwd_last_set_at = user['USERFLD_LAST_PASSWORD_SET_TIME']
202
+ self.has_password = !user['USERFLD_PASSWORD'].nil?
154
203
 
155
204
  @persisted = persisted
156
205
 
157
206
  self
158
207
  end
208
+
209
+ def ensure_persisted!
210
+ unless self.persisted?
211
+ raise Identikey::UsageError, "User #{self.username} is not persisted"
212
+ end
213
+
214
+ unless self.username && self.domain
215
+ raise Identikey::UsageError, "User #{self} is missing username and/or domain"
216
+ end
217
+ end
159
218
  end
160
219
 
161
220
  end
@@ -264,8 +264,8 @@ module Identikey
264
264
  parse = /^(not_)?(.*)/i.match(full_name.to_s)
265
265
  name = parse[2]
266
266
 
267
- options = []
268
- options.push(negative: true) if !parse[1].nil?
267
+ options = {}
268
+ options[:negative] = true if !parse[1].nil?
269
269
 
270
270
  type, value = case value
271
271
 
@@ -275,8 +275,8 @@ module Identikey
275
275
  when Integer
276
276
  [ 'xsd:int', value.to_s ]
277
277
 
278
- when DateTime, Time
279
- [ 'xsd:datetime', value.utc.iso8601 ]
278
+ when Time
279
+ [ 'xsd:dateTime', value.utc.iso8601 ]
280
280
 
281
281
  when TrueClass, FalseClass
282
282
  [ 'xsd:boolean', value.to_s ]
@@ -285,7 +285,7 @@ module Identikey
285
285
  [ 'xsd:string', value.to_s ]
286
286
 
287
287
  when NilClass
288
- options.push(null: true)
288
+ options[:null] = true
289
289
  [ 'xsd:string', '' ]
290
290
 
291
291
  else
@@ -1,3 +1,3 @@
1
1
  module Identikey
2
- VERSION = "0.5.1"
2
+ VERSION = "0.7.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: identikey
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcello Barnaba
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-01 00:00:00.000000000 Z
11
+ date: 2020-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: savon
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: 12.3.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: 12.3.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +136,48 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: guard-rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: vacman_controller
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: code_counter
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
139
181
  description: This gem contains a SOAP client to consume Identikey API
140
182
  email:
141
183
  - vjt@openssl.it
@@ -146,10 +188,13 @@ files:
146
188
  - ".gitignore"
147
189
  - ".rspec"
148
190
  - Gemfile
191
+ - Guardfile
149
192
  - LICENSE.txt
150
193
  - README.md
151
194
  - Rakefile
152
195
  - bin/console
196
+ - bin/export
197
+ - bin/import
153
198
  - bin/setup
154
199
  - identikey.gemspec
155
200
  - lib/identikey.rb