Sha256: 16a9465539d87db180119e158d341290d365564bd97b06f0901d55cbd5b7eb93

Contents?: true

Size: 1.98 KB

Versions: 41

Compression:

Stored size: 1.98 KB

Contents

require 'pact_broker/configuration'
require 'pact_broker/logging'
require 'pact_broker/config/setting'

module PactBroker
  module Config
    class Save

      include PactBroker::Logging

      def self.call configuration, setting_names
        new(configuration, setting_names).call
      end

      def initialize configuration, setting_names
        @configuration = configuration
        @setting_names = setting_names
      end

      def call
        setting_names.each do | setting_name |
          if class_supported?(setting_name)
            create_or_update_setting(setting_name)
          else
            logger.warn "Could not save configuration setting \"#{setting_name}\" to database as the class #{get_value(setting_name).class} is not supported."
          end
        end
      end

      private

      attr_reader :configuration, :setting_names

      def create_or_update_setting setting_name
        setting = Setting.find(name: setting_name.to_s) || Setting.new(name: setting_name.to_s)
        setting.type = get_db_type(setting_name)
        setting.value = get_db_value(setting_name)
        setting.save
      end

      def class_supported? setting_name
        !!get_db_type(setting_name)
      end

      def get_db_type setting_name
        val = get_value(setting_name)
        case val
          when true, false
            'boolean'
          when String, nil
            'string'
          when Array, Hash
            'json'
          when Integer
            'integer'
          when Float
            'float'
          else
            nil
          end
      end

      def get_db_value setting_name
        val = get_value(setting_name)
        case val
        when String, Integer, Float, NilClass
          val
        when TrueClass
          "1"
        when FalseClass
          "0"
        when Array, Hash
          val.to_json
        else
          nil
        end
      end

      def get_value setting_name
        configuration.send(setting_name)
      end
    end
  end
end

Version data entries

41 entries across 41 versions & 1 rubygems

Version Path
pact_broker-2.21.0 lib/pact_broker/config/save.rb
pact_broker-2.20.0 lib/pact_broker/config/save.rb
pact_broker-2.19.2 lib/pact_broker/config/save.rb
pact_broker-2.19.1 lib/pact_broker/config/save.rb
pact_broker-2.19.0 lib/pact_broker/config/save.rb
pact_broker-2.18.0 lib/pact_broker/config/save.rb
pact_broker-2.17.1 lib/pact_broker/config/save.rb
pact_broker-2.17.0 lib/pact_broker/config/save.rb
pact_broker-2.16.1 lib/pact_broker/config/save.rb
pact_broker-2.16.0 lib/pact_broker/config/save.rb
pact_broker-2.15.0 lib/pact_broker/config/save.rb
pact_broker-2.14.0 lib/pact_broker/config/save.rb
pact_broker-2.13.1 lib/pact_broker/config/save.rb
pact_broker-2.13.0 lib/pact_broker/config/save.rb
pact_broker-2.12.0 lib/pact_broker/config/save.rb
pact_broker-2.11.0 lib/pact_broker/config/save.rb
pact_broker-2.10.0 lib/pact_broker/config/save.rb
pact_broker-2.9.0 lib/pact_broker/config/save.rb
pact_broker-2.9.0.beta.5 lib/pact_broker/config/save.rb
pact_broker-2.8.0.beta.5 lib/pact_broker/config/save.rb