Sha256: 680c6b5b93a24aebd329c17ed577572ad37234311dc510c19247afcf0cf59221

Contents?: true

Size: 1.72 KB

Versions: 40

Compression:

Stored size: 1.72 KB

Contents

module Awspec::Generator
  module Spec
    class S3Bucket
      include Awspec::Helper::Finder
      def generate_all
        buckets = select_all_buckets
        raise 'Not Found Bucket' if buckets.empty?
        specs = buckets.map do |bucket|
          content(bucket)
        end
        specs.join("\n")
      end

      def generate(bucket_name)
        bucket = find_bucket(bucket_name)
        content(bucket)
      end

      def generate_grant_specs(acl)
        return [] unless acl
        linespecs = []
        acl.grants.each do |grant|
          linespecs.push(ERB.new(grant_linetemplate, nil, '-').result(binding))
        end
        linespecs
      end

      def grant_linetemplate
        grantee = 'grant.grantee.display_name || grant.grantee.uri || grant.grantee.id'
        template = <<-EOF
it { should have_acl_grant(grantee: '<%= #{grantee} %>', permission: '<%= grant.permission %>') }
        EOF
        template
      end

      def bucket_spec_template
        template = <<-'EOF'
describe s3_bucket('<%= bucket.name %>') do
  it { should exist }
<%- if acl -%>
  its(:acl_owner) { should eq '<%= acl.owner.display_name %>' }
  its(:acl_grants_count) { should eq <%= acl.grants.count %> }
<%- end -%>
<% grant_specs.each do |line| %>
  <%= line %>
<% end %>
<%- if bucket_policy -%>
  it { should have_policy('<%= bucket_policy %>') }
<%- end -%>
end
EOF
        template
      end

      private

      def content(bucket)
        acl = find_bucket_acl(bucket.name)
        grant_specs = generate_grant_specs(acl)
        policy = find_bucket_policy(bucket.name)
        bucket_policy = policy.policy.read if policy
        ERB.new(bucket_spec_template, nil, '-').result(binding).gsub(/^\n/, '')
      end
    end
  end
end

Version data entries

40 entries across 40 versions & 1 rubygems

Version Path
awspec-0.82.1 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.82.0 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.81.1 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.81.0 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.80.1 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.80.0 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.79.2 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.79.1 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.79.0 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.78.1 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.77.1 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.77.0 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.76.1 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.76.0 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.75.2 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.75.1 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.75.0 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.74.1 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.74.0 lib/awspec/generator/spec/s3_bucket.rb
awspec-0.73.2 lib/awspec/generator/spec/s3_bucket.rb