Sha256: be6c447800243611e6ddbc2d8d0486803b16620c092d9dfeb11fdcf4a0af4d7e

Contents?: true

Size: 1.96 KB

Versions: 2

Compression:

Stored size: 1.96 KB

Contents

module Keyrack
  class Site
    def initialize(*args)
      if args[0].is_a?(Hash)
        hash = args[0]
        if !hash.has_key?('name')
          raise ArgumentError, "hash is missing the 'name' key"
        end
        if !hash['name'].is_a?(String)
          raise ArgumentError, "name is not a String"
        end
        if !hash.has_key?('username')
          raise ArgumentError, "hash is missing the 'username' key"
        end
        if !hash['username'].is_a?(String)
          raise ArgumentError, "name is not a String"
        end
        if !hash.has_key?('password')
          raise ArgumentError, "hash is missing the 'password' key"
        end
        if !hash['password'].is_a?(String)
          raise ArgumentError, "name is not a String"
        end
      else
        hash = {
          'name' => args[0],
          'username' => args[1],
          'password' => args[2]
        }
      end
      @attributes = hash

      @event_hooks = []
    end

    def change_attribute(name, value)
      event = Event.new(self, 'change')
      event.attribute_name = name
      event.previous_value = @attributes[name]
      event.new_value = value

      @attributes[name] = value
      trigger(event)
    end

    def name
      @attributes['name']
    end

    def name=(name)
      change_attribute('name', name)
    end

    def username
      @attributes['username']
    end

    def username=(username)
      change_attribute('username', username)
    end

    def password
      @attributes['password']
    end

    def password=(password)
      change_attribute('password', password)
    end

    def after_event(&block)
      @event_hooks << block
    end

    def ==(other)
      if other.instance_of?(Site)
        other.name == name && other.username == username
      else
        super
      end
    end

    def to_h
      @attributes.clone
    end

    private

    def trigger(event)
      @event_hooks.each do |block|
        block.call(event)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
keyrack-0.3.2 lib/keyrack/site.rb
keyrack-0.3.1 lib/keyrack/site.rb