conjur-api 4.1.1 → 4.3.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.
data/Rakefile CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env rake
2
2
  require "bundler/gem_tasks"
3
+ require "yard"
3
4
 
4
5
  begin
5
6
  require 'rspec/core/rake_task'
@@ -10,6 +11,8 @@ rescue LoadError
10
11
  $stderr.puts "RSpec Rake tasks not available in environment #{ENV['RACK_ENV']}"
11
12
  end
12
13
 
14
+ YARD::Rake::YardocTask.new(:yard)
15
+
13
16
  task :jenkins do
14
17
  if ENV['BUILD_NUMBER']
15
18
  File.write('build_number', ENV['BUILD_NUMBER'])
@@ -17,6 +20,7 @@ task :jenkins do
17
20
  require 'ci/reporter/rake/rspec'
18
21
  Rake::Task["ci:setup:rspec"].invoke
19
22
  Rake::Task["spec"].invoke
23
+ Rake::Task["yard"].invoke
20
24
  end
21
25
 
22
26
  task default: :spec
@@ -15,6 +15,9 @@ Gem::Specification.new do |gem|
15
15
  gem.name = "conjur-api"
16
16
  gem.require_paths = ["lib"]
17
17
  gem.version = Conjur::API::VERSION
18
+
19
+ gem.required_ruby_version = '>= 1.9'
20
+
18
21
 
19
22
  gem.add_dependency 'rest-client'
20
23
  gem.add_dependency 'activesupport'
@@ -26,4 +29,6 @@ Gem::Specification.new do |gem|
26
29
  gem.add_development_dependency 'ci_reporter'
27
30
  gem.add_development_dependency 'simplecov'
28
31
  gem.add_development_dependency 'io-grab'
32
+ gem.add_development_dependency 'yard'
33
+ gem.add_development_dependency 'redcarpet'
29
34
  end
@@ -20,6 +20,6 @@
20
20
  #
21
21
  module Conjur
22
22
  class API
23
- VERSION = "4.1.1"
23
+ VERSION = "4.3.0"
24
24
  end
25
25
  end
@@ -29,5 +29,22 @@ module Conjur
29
29
  include HasAttributes
30
30
  end
31
31
  end
32
+
33
+ def add_member(role_name, member, options = {})
34
+ owned_role(role_name).grant_to member, options
35
+ end
36
+
37
+ def remove_member(role_name, member)
38
+ owned_role(role_name).revoke_from member
39
+ end
40
+
41
+ protected
42
+
43
+ def owned_role(role_name)
44
+ tokens = [ resource_kind, resource_id, role_name ]
45
+ grant_role = [ core_conjur_account, '@', tokens.join('/') ].join(':')
46
+ require 'conjur/role'
47
+ Conjur::Role.new(Conjur::Authz::API.host, self.options)[Conjur::API.parse_role_id(grant_role).join('/')]
48
+ end
32
49
  end
33
50
  end
@@ -26,6 +26,10 @@ module Conjur
26
26
  Conjur::Resource.new(Conjur::Authz::API.host, self.options)[[ core_conjur_account, 'resources', path_escape(resource_kind), path_escape(resource_id) ].join('/')]
27
27
  end
28
28
 
29
+ def resourceid
30
+ [ core_conjur_account, resource_kind, resource_id ].join(':')
31
+ end
32
+
29
33
  def resource_kind
30
34
  require 'active_support/core_ext'
31
35
  self.class.name.split("::")[-1].underscore.split('/').join('-')
@@ -39,5 +43,13 @@ module Conjur
39
43
  resource.delete
40
44
  super
41
45
  end
46
+
47
+ def permit(privilege, role, options = {})
48
+ resource.permit privilege, role, options
49
+ end
50
+
51
+ def deny(privilege, role)
52
+ resource.deny privilege, role
53
+ end
42
54
  end
43
55
  end
@@ -34,5 +34,17 @@ module Conjur
34
34
  require 'conjur/role'
35
35
  Conjur::Role.new(Conjur::Authz::API.host, self.options)[Conjur::API.parse_role_id(self.roleid).join('/')]
36
36
  end
37
+
38
+ # Permit this role to perform a privileged action.
39
+ def can(privilege, resource, options = {})
40
+ require 'conjur/resource'
41
+ Conjur::Resource.new(Conjur::Authz::API.host, self.options)[Conjur::API.parse_resource_id(resource).join('/')].permit privilege, self.roleid, options
42
+ end
43
+
44
+ # Deny this role from performing perform a privileged action.
45
+ def cannot(privilege, resource, options = {})
46
+ require 'conjur/resource'
47
+ Conjur::Resource.new(Conjur::Authz::API.host, self.options)[Conjur::API.parse_resource_id(resource).join('/')].deny privilege, self.roleid
48
+ end
37
49
  end
38
50
  end
@@ -25,5 +25,13 @@ module Conjur
25
25
  include ActsAsRole
26
26
  end
27
27
  end
28
+
29
+ def api_key
30
+ attributes['api_key'] or raise "api_key is only available on a newly created #{self.class.name.downcase}"
31
+ end
32
+
33
+ def api
34
+ Conjur::API.new_from_key login, api_key
35
+ end
28
36
  end
29
37
  end
@@ -31,6 +31,7 @@ require 'conjur/has_id'
31
31
  require 'conjur/acts_as_asset'
32
32
  require 'conjur/authn-api'
33
33
  require 'conjur/authz-api'
34
+ require 'conjur/audit-api'
34
35
  require 'conjur/core-api'
35
36
  require 'conjur-api/version'
36
37
 
@@ -0,0 +1,53 @@
1
+ #
2
+ # Copyright (C) 2013 Conjur Inc
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of
5
+ # this software and associated documentation files (the "Software"), to deal in
6
+ # the Software without restriction, including without limitation the rights to
7
+ # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
8
+ # the Software, and to permit persons to whom the Software is furnished to do so,
9
+ # subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in all
12
+ # copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
16
+ # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
17
+ # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
18
+ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
+ module Conjur
21
+ class API
22
+ # Return audit events related to the given role_id. Identitical to audit_events
23
+ # except that a String may be given instead of a Role object.
24
+ # @param role_id [String] the role for which events should be returned.
25
+ def audit_role role, options={}
26
+ audit_event_feed 'role', (role.roleid rescue role), options
27
+ end
28
+
29
+
30
+ # Return audit events related to the current authenticated role.
31
+ def audit_current_role options={}
32
+ audit_event_feed 'role', nil, options
33
+ end
34
+
35
+ # Return audit events related to the given resource
36
+ def audit_resource resource, options={}
37
+ audit_event_feed 'resource', (resource.resourceid rescue resource), options
38
+ end
39
+
40
+ private
41
+ def audit_event_feed kind, identifier=nil, options={}
42
+ path = "feeds/#{kind}"
43
+ path << "/#{CGI.escape identifier}" if identifier
44
+ query = options.slice(:limit, :offset)
45
+ path << "?#{query.to_param}" unless query.empty?
46
+ parse_response RestClient::Resource.new(Conjur::Audit::API.host, credentials)[path].get
47
+ end
48
+
49
+ def parse_response response
50
+ JSON.parse response
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,42 @@
1
+ #
2
+ # Copyright (C) 2013 Conjur Inc
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of
5
+ # this software and associated documentation files (the "Software"), to deal in
6
+ # the Software without restriction, including without limitation the rights to
7
+ # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
8
+ # the Software, and to permit persons to whom the Software is furnished to do so,
9
+ # subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in all
12
+ # copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
16
+ # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
17
+ # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
18
+ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
+ #
21
+
22
+ module Conjur
23
+ module Audit
24
+ class API < Conjur::API
25
+ class << self
26
+ def host
27
+ ENV['CONJUR_AUDIT_URL'] || default_host
28
+ end
29
+
30
+ def default_host
31
+ case Conjur.env
32
+ when 'test', 'development'
33
+ "http://localhost:#{Conjur.service_base_port + 300}"
34
+ else
35
+ "https://audit-#{Conjur.stack}-conjur.herokuapp.com"
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ require 'conjur/api/audit'
@@ -40,12 +40,26 @@ module Conjur
40
40
  class << self
41
41
  # Parse a role id into [ account, 'roles', kind, id ]
42
42
  def parse_role_id(id)
43
- parse_id id, 'roles'
43
+ id = id.role if id.respond_to?(:role)
44
+ if id.is_a?(Role)
45
+ [ id.account, 'roles', id.kind, id.identifier ]
46
+ elsif id.respond_to?(:role_kind)
47
+ [ Conjur::Core::API.conjur_account, 'roles', id.role_kind, id.identifier ]
48
+ else
49
+ parse_id id, 'roles'
50
+ end
44
51
  end
45
52
 
46
53
  # Parse a resource id into [ account, 'resources', kind, id ]
47
54
  def parse_resource_id(id)
48
- parse_id id, 'resources'
55
+ id = id.resource if id.respond_to?(:resource)
56
+ if id.is_a?(Resource)
57
+ [ id.account, 'resources', id.kind, id.identifier ]
58
+ elsif id.respond_to?(:resource_kind)
59
+ [ Conjur::Core::API.conjur_account, 'resources', id.resource_kind, id.resource_id ]
60
+ else
61
+ parse_id id, 'resources'
62
+ end
49
63
  end
50
64
 
51
65
  # Converts flat id into path components, with mixed-in "super-kind"
@@ -22,5 +22,13 @@ module Conjur
22
22
  class Group < RestClient::Resource
23
23
  include ActsAsAsset
24
24
  include ActsAsRole
25
+
26
+ def add_member(member, options = {})
27
+ role.grant_to member, options
28
+ end
29
+
30
+ def remove_member(member)
31
+ role.revoke_from member
32
+ end
25
33
  end
26
34
  end
@@ -28,6 +28,13 @@ module Conjur
28
28
  match_path(3..-1)
29
29
  end
30
30
 
31
+ # Name convention according to Role#roleid.
32
+ def resourceid
33
+ [account, kind, identifier].join ':'
34
+ end
35
+
36
+ alias :resource_id :resourceid
37
+
31
38
  def create(options = {})
32
39
  log do |logger|
33
40
  logger << "Creating resource #{kind}:#{identifier}"
@@ -67,7 +74,12 @@ module Conjur
67
74
  end
68
75
  end
69
76
 
70
- self["?permit&privilege=#{query_escape p}&role=#{query_escape role}"].post(options)
77
+ begin
78
+ self["?permit&privilege=#{query_escape p}&role=#{query_escape role}"].post(options)
79
+ rescue RestClient::Forbidden
80
+ # TODO: Remove once permit is idempotent
81
+ raise $! unless $!.http_body == "Privilege already granted."
82
+ end
71
83
  end
72
84
  end
73
85
 
@@ -98,4 +110,4 @@ module Conjur
98
110
  item.respond_to?(:each) ? item : [ item ]
99
111
  end
100
112
  end
101
- end
113
+ end
@@ -22,6 +22,9 @@ module Conjur
22
22
  class Variable < RestClient::Resource
23
23
  include ActsAsAsset
24
24
 
25
+ def kind; attributes['kind']; end
26
+ def mime_type; attributes['mime_type']; end
27
+
25
28
  def add_value value
26
29
  log do |logger|
27
30
  logger << "Adding a value to variable #{id}"
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ describe Conjur::ActsAsAsset do
4
+ let(:asset) { Object.new }
5
+ before {
6
+ class << asset
7
+ include Conjur::ActsAsAsset
8
+
9
+ def options
10
+ OPTIONS
11
+ end
12
+ end
13
+ }
14
+ let(:invoke) {
15
+ send action
16
+ }
17
+ let(:add_member) {
18
+ asset.add_member ROLE, MEMBER, OPTIONS
19
+ }
20
+ let(:remove_member) {
21
+ asset.remove_member ROLE, MEMBER
22
+ }
23
+
24
+ shared_context "asset with role" do
25
+ before(:each) {
26
+ asset.stub(:core_conjur_account).and_return(ACCOUNT)
27
+ asset.stub(:resource_kind).and_return(KIND)
28
+ asset.stub(:resource_id).and_return(ID)
29
+ Conjur::Role.stub(:new).and_return(role_base)
30
+ }
31
+ let(:role_base) {
32
+ double(:"[]" => role_instance)
33
+ }
34
+ let(:role_instance) {
35
+ double(grant_to: true, revoke_from: true)
36
+ }
37
+ end
38
+
39
+ shared_examples_for "it obtains role via asset" do
40
+ it "account=asset.core_conjur_account" do
41
+ asset.should_receive(:core_conjur_account)
42
+ invoke
43
+ end
44
+ it "kind=asset.resource_kind" do
45
+ asset.should_receive(:resource_kind)
46
+ invoke
47
+ end
48
+ it "id=asset.resource_id" do
49
+ asset.should_receive(:resource_id)
50
+ invoke
51
+ end
52
+
53
+ it "obtains role as #{ACCOUNT}:@:#{KIND}/#{ID}/#{ROLE}" do
54
+ Conjur::Role.should_receive(:new).with("http://localhost:5100", {}).and_return role_base
55
+ role_base.should_receive(:[]).with("#{CGI.escape ACCOUNT}/roles/@/#{KIND}/#{ID}/#{CGI.escape ROLE}").and_return role_instance
56
+
57
+ invoke
58
+ end
59
+ end
60
+
61
+ describe "#add_member" do
62
+ let(:action) { :add_member }
63
+ include_context "asset with role"
64
+ it_behaves_like "it obtains role via asset"
65
+ it 'calls role.grant_to(member,...)' do
66
+ role_instance.should_receive(:grant_to).with(MEMBER, anything)
67
+ invoke
68
+ end
69
+ end
70
+
71
+ describe "#remove_member" do
72
+ let(:action) { :remove_member }
73
+ include_context "asset with role"
74
+ it_behaves_like "it obtains role via asset"
75
+ it 'calls role.revoke_from(member)' do
76
+ role_instance.should_receive(:revoke_from).with(MEMBER)
77
+ invoke
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,102 @@
1
+ require 'spec_helper'
2
+
3
+ describe Conjur::API, api: :dummy do
4
+ describe "audit API methods" do
5
+
6
+ let(:options){ {limit:20, offset: 51, some_unwanted_option: 'heloo!'} }
7
+ let(:expected_options){ options.slice(:limit, :offset) }
8
+ let(:response){ ['some event'] }
9
+ let(:include_options){ false }
10
+ let(:query){ include_options ? '?' + expected_options.to_query : '' }
11
+ let(:expected_path){ nil }
12
+ let(:expected_url){ "#{Conjur::Audit::API.host}/#{expected_path}#{query}" }
13
+
14
+ def expect_request
15
+ RestClient::Request.should_receive(:execute).with(
16
+ user: credentials,
17
+ password: nil,
18
+ headers: {},
19
+ url: expected_url,
20
+ method: :get
21
+ ).and_return response.to_json
22
+ end
23
+
24
+
25
+ describe "#audit_role" do
26
+ let(:role_id){ 'acct:user:foobar' }
27
+ let(:role){ double('role', roleid: role_id) }
28
+ let(:expected_path){ "feeds/role/#{CGI.escape role_id}" }
29
+ let(:args){ [role_id] }
30
+ let(:full_args){ include_options ? args + [options] : args }
31
+ shared_examples_for "gets roles feed" do
32
+ it "GETs feeds/role/:role_id" do
33
+ expect_request
34
+ api.audit_role(*full_args).should == response
35
+ end
36
+ end
37
+
38
+ context "when called with a role id" do
39
+ let(:args){ [role_id] }
40
+ it_behaves_like "gets roles feed"
41
+ end
42
+
43
+ context "when called with a role instance" do
44
+ let(:audit_role_args){ [role] }
45
+ it_behaves_like "gets roles feed"
46
+ end
47
+
48
+ context "when called with pagination options" do
49
+ let(:include_options){ true }
50
+ let(:args){ [ role_id ] }
51
+ it_behaves_like "gets roles feed"
52
+ end
53
+ end
54
+
55
+ describe "#audit_current_role" do
56
+ let(:expected_path){ "feeds/role" }
57
+ let(:args){ include_options ? [options] : [] }
58
+ shared_examples_for "gets current role feed" do
59
+ it "GETS feeds/role" do
60
+ expect_request
61
+ api.audit_current_role(*args).should == response
62
+ end
63
+ end
64
+ context "when called with no args" do
65
+ it_behaves_like "gets current role feed"
66
+ end
67
+ context "when called with pagination options" do
68
+ let(:include_options){ true }
69
+ it_behaves_like "gets current role feed"
70
+ end
71
+ end
72
+
73
+ describe "#audit_resource" do
74
+ let(:resource_id){ 'acct:food:bacon' }
75
+ let(:resource){ double('resource', resourceid: resource_id) }
76
+ let(:expected_path){ "feeds/resource/#{CGI.escape resource_id}" }
77
+ let(:args){[resource_id]}
78
+ let(:full_args){ include_options ? args + [options] : args }
79
+ shared_examples_for "gets the resource feed" do
80
+ it "GETS feeds/resource/:resource_id" do
81
+ expect_request
82
+ api.audit_resource(*full_args).should == response
83
+ end
84
+ end
85
+
86
+ context "when called with resource id" do
87
+ let(:args){ [resource_id] }
88
+ it_behaves_like "gets the resource feed"
89
+ end
90
+
91
+ context "when called with resource instance" do
92
+ let(:args){ [resource] }
93
+ it_behaves_like "gets the resource feed"
94
+ end
95
+
96
+ context "when called with pagination options" do
97
+ let(:include_options) { true }
98
+ it_behaves_like "gets the resource feed"
99
+ end
100
+ end
101
+ end
102
+ end
@@ -82,10 +82,20 @@ end
82
82
 
83
83
  require 'conjur/api'
84
84
 
85
+ KIND="asset_kind"
86
+ ID="unique_id"
87
+ ROLE='<role>'
88
+ MEMBER='<member>'
89
+ PRIVILEGE='<privilege>'
90
+ OWNER='<owner/userid>'
91
+ ACCOUNT='<core_account>'
92
+ OPTIONS={}
93
+
85
94
  shared_context api: :dummy do
86
95
  let(:username) { "user" }
87
96
  let(:api){ Conjur::API.new_from_key username, 'key' }
88
97
  let(:authz_host) { 'http://authz.example.com' }
98
+ let(:audit_host) { 'http://audit.example.com' }
89
99
  let(:credentials) { double "fake credentials" }
90
100
  let(:core_host) { 'http://core.example.com' }
91
101
  let(:account) { 'the-account' }
@@ -94,6 +104,7 @@ shared_context api: :dummy do
94
104
  Conjur::Authz::API.stub host: authz_host
95
105
  Conjur::Core::API.stub host: core_host
96
106
  Conjur::Core::API.stub conjur_account: account
107
+ Conjur::Audit::API.stub host:audit_host
97
108
  api.stub credentials: credentials
98
109
  end
99
110
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: conjur-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.1
4
+ version: 4.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-10-24 00:00:00.000000000 Z
13
+ date: 2013-11-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client
@@ -156,6 +156,38 @@ dependencies:
156
156
  - - ! '>='
157
157
  - !ruby/object:Gem::Version
158
158
  version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: yard
161
+ requirement: !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ! '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ type: :development
168
+ prerelease: false
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ! '>='
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ - !ruby/object:Gem::Dependency
176
+ name: redcarpet
177
+ requirement: !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ! '>='
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ type: :development
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
159
191
  description: Conjur API
160
192
  email:
161
193
  - divided.mind@gmail.com
@@ -183,6 +215,7 @@ files:
183
215
  - lib/conjur/acts_as_role.rb
184
216
  - lib/conjur/acts_as_user.rb
185
217
  - lib/conjur/api.rb
218
+ - lib/conjur/api/audit.rb
186
219
  - lib/conjur/api/authn.rb
187
220
  - lib/conjur/api/groups.rb
188
221
  - lib/conjur/api/hosts.rb
@@ -191,6 +224,7 @@ files:
191
224
  - lib/conjur/api/secrets.rb
192
225
  - lib/conjur/api/users.rb
193
226
  - lib/conjur/api/variables.rb
227
+ - lib/conjur/audit-api.rb
194
228
  - lib/conjur/authn-api.rb
195
229
  - lib/conjur/authz-api.rb
196
230
  - lib/conjur/base.rb
@@ -225,6 +259,8 @@ files:
225
259
  - spec/api/variables_spec.rb
226
260
  - spec/cas_rest_client.rb
227
261
  - spec/lib/api_spec.rb
262
+ - spec/lib/asset_spec.rb
263
+ - spec/lib/audit_spec.rb
228
264
  - spec/lib/build_from_response_spec.rb
229
265
  - spec/lib/exists_spec.rb
230
266
  - spec/lib/host_spec.rb
@@ -254,10 +290,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
254
290
  requirements:
255
291
  - - ! '>='
256
292
  - !ruby/object:Gem::Version
257
- version: '0'
258
- segments:
259
- - 0
260
- hash: 2013228503366139163
293
+ version: '1.9'
261
294
  required_rubygems_version: !ruby/object:Gem::Requirement
262
295
  none: false
263
296
  requirements:
@@ -266,7 +299,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
266
299
  version: '0'
267
300
  segments:
268
301
  - 0
269
- hash: 2013228503366139163
302
+ hash: 1370688255515528538
270
303
  requirements: []
271
304
  rubyforge_project:
272
305
  rubygems_version: 1.8.25
@@ -288,6 +321,8 @@ test_files:
288
321
  - spec/api/variables_spec.rb
289
322
  - spec/cas_rest_client.rb
290
323
  - spec/lib/api_spec.rb
324
+ - spec/lib/asset_spec.rb
325
+ - spec/lib/audit_spec.rb
291
326
  - spec/lib/build_from_response_spec.rb
292
327
  - spec/lib/exists_spec.rb
293
328
  - spec/lib/host_spec.rb
@@ -305,3 +340,4 @@ test_files:
305
340
  - spec/vcr_cassettes/Conjur_Resource/_create/with_path-like_identifier.yml
306
341
  - spec/vcr_cassettes/Conjur_Resource/_create/with_un-encoded_path-like_identifier.yml
307
342
  - spec/vcr_cassettes/Conjur_Resource/_create/with_uuid_identifier.yml
343
+ has_rdoc: