Sha256: 2e044581a9759e9ecf90f75ec70c37de64801e76d60b927465d2f0abf34552b7

Contents?: true

Size: 1.7 KB

Versions: 6

Compression:

Stored size: 1.7 KB

Contents

module SecretService
  module DatabaseStore
    class ActiveRecordStore
      TABLE_NAME = '_secret_service_secrets'

      class Secret < ::ActiveRecord::Base
        if respond_to? :table_name=
          self.table_name = TABLE_NAME
        else
          set_table_name TABLE_NAME
        end

        validates_presence_of :key, :value
      end


      def initialize
        setup_database unless database_set_up?
      end

      def find(key)
        secret_record = find_if_present(key)
        unless secret_record
          new_secret = yield
          begin
            secret_record = Secret.create!(:key => key, :value => new_secret)
          rescue ::ActiveRecord::StatementInvalid
            secret_record = find_if_present(key)
          end
        end
        secret_record.value
      end

      def update(key, value)
        secret_record = find_if_present(key) || Secret.new(:key => key)
        secret_record.value = value
        secret_record.save!
      end

      def drop_database
        # tests need this
        Secret.connection.drop_table TABLE_NAME
        Secret.reset_column_information
      rescue ::ActiveRecord::StatementInvalid
      end


      private

      def setup_database
        Secret.connection.create_table TABLE_NAME do |table|
          table.string :key
          table.text :value
          table.timestamps
        end
        Secret.connection.add_index TABLE_NAME, :key, :unique => true
      rescue ::ActiveRecord::StatementInvalid
      end

      def database_set_up?
        Secret.table_exists?
      end

      def find_if_present(key)
        Secret.first(:conditions => {:key => key})
      end
    end


    def self.get
      ActiveRecordStore.new
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
secret_service-0.1.5 lib/secret_service/database_store/active_record_store.rb
secret_service-0.1.4 lib/secret_service/database_store/active_record_store.rb
secret_service-0.1.3 lib/secret_service/database_store/active_record_store.rb
secret_service-0.1.2 lib/secret_service/database_store/active_record_store.rb
secret_service-0.1.1 lib/secret_service/database_store/active_record_store.rb
secret_service-0.1.0 lib/secret_service/database_store/active_record_store.rb