Add basic field management features

This commit is contained in:
Guillaume Dott 2016-07-07 16:38:33 +02:00
parent f0a32f1ff4
commit 48f37cc15b
6 changed files with 82 additions and 0 deletions

40
lib/docurest/field.rb Normal file
View File

@ -0,0 +1,40 @@
require "docurest/field/base"
require "docurest/field/boolean"
require "docurest/field/date_time"
require "docurest/field/integer"
require "docurest/field/float"
module Docurest
module Field
CONVERSION = {
boolean: Docurest::Field::Boolean,
integer: Docurest::Field::Integer,
float: Docurest::Field::Float,
date_time: Docurest::Field::DateTime,
}
def field(name, docusign_name = nil, type = nil)
attr_accessor name
if docusign_name
alias_method docusign_name, name
define_method("#{docusign_name}=") do |value|
value = if type.is_a?(Proc)
type.call value
elsif CONVERSION.key?(type)
CONVERSION[type].new(value).convert
else
value
end
send("#{name}=", value)
end
end
end
def association(klass, &block)
define_method(klass) do
instance_variable_get(:"@#{klass}") ||
instance_variable_set(:"@#{klass}", persisted? ? instance_eval(&block) : [])
end
end
end
end

View File

@ -0,0 +1,6 @@
module Docurest
module Field
class Base < Struct.new(:value)
end
end
end

View File

@ -0,0 +1,9 @@
module Docurest
module Field
class Boolean < Docurest::Field::Base
def convert
value == "true" ? true : false
end
end
end
end

View File

@ -0,0 +1,9 @@
module Docurest
module Field
class DateTime < Docurest::Field::Base
def convert
::DateTime.parse(value)
end
end
end
end

View File

@ -0,0 +1,9 @@
module Docurest
module Field
class Float < Docurest::Field::Base
def convert
value.to_f
end
end
end
end

View File

@ -0,0 +1,9 @@
module Docurest
module Field
class Integer < Docurest::Field::Base
def convert
value.to_i
end
end
end
end