Class: Copper::DataTypes::DataType

Inherits:
Object
  • Object
show all
Defined in:
lib/copper/data_types/data_type.rb

Direct Known Subclasses

Array, Filename, Image, Range, Semver, String

Constant Summary collapse

CLASS_MAP =
{
	"String" => "::Copper::DataTypes::String",
	"Array" => "::Copper::DataTypes::Array",
	"Semantic::Version" => "::Copper::DataTypes::Semver",
	"Semver" => "::Copper::DataTypes::Semver",
	"Range" => "::Copper::DataTypes::Range",
	"IPAddress" => "::Copper::DataTypes::IPAddress",
	"IPAddress::IPv4" => "::Copper::DataTypes::IPAddress",
	"IPAddress::IPv6" => "::Copper::DataTypes::IPAddress",
	"Copper::DataTypes::Image" => "::Copper::DataTypes::Image",
	"Image" => "::Copper::DataTypes::Image",
	"Copper::DataTypes::ImageClass" => "::Copper::DataTypes::Image",
	"Copper::DataTypes::FilenameClass" => "::Copper::DataTypes::Filename",
	"Copper::DataTypes::Filename" => "::Copper::DataTypes::Filename",
	"Filename" => "::Copper::DataTypes::Filename"
}
DATATYPE_MAP =
{
	"semver" => "Semver",
	"ipaddress" => "IPAddress",
	"image" => "Image",
	"range" => "Range",
	"filename" => "Filename",
}

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(value) ⇒ DataType

Returns a new instance of DataType.



30
31
32
# File 'lib/copper/data_types/data_type.rb', line 30

def initialize(value)
	@value = value
end

Class Method Details

.factory(poro) ⇒ Object

returns a DataType based on the given PORO this is to control the attribute exposure, better error handling, etc



48
49
50
51
52
53
# File 'lib/copper/data_types/data_type.rb', line 48

def self.factory(poro)
	poro_class = poro.class.name

	clazz = self.get_class(poro_class)
	return clazz.new(poro)
end

.get_class(class_name) ⇒ Object



55
56
57
58
59
60
# File 'lib/copper/data_types/data_type.rb', line 55

def self.get_class(class_name)
	raise RuntimeError, "unknown class #{class_name}" unless ::Copper::DataTypes::DataType::CLASS_MAP.has_key?(class_name)
	return Module.const_get(::Copper::DataTypes::DataType::CLASS_MAP[class_name])
rescue NameError => exc
	raise ::Copper::RuntimeError, "invalid return type #{class_name}"
end

Instance Method Details

#as(clazz) ⇒ Object

Raises:



38
39
40
41
42
43
44
# File 'lib/copper/data_types/data_type.rb', line 38

def as(clazz)
	clazz = ::Copper::DataTypes::DataType::DATATYPE_MAP[clazz]
	raise RuntimeError, "No class called #{clazz} found" if clazz.nil?

	found_class = ::Copper::DataTypes::DataType.get_class(clazz)
	return found_class.new(@value)
end

#valueObject



34
35
36
# File 'lib/copper/data_types/data_type.rb', line 34

def value
	@value
end