-
-
Save dbkbali/5600540 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class SomeModel | |
include Mongoid::Document | |
field :date, :type => Date | |
validates_presence_of :date | |
def date=(value) | |
begin | |
date_parsed = value.to_date | |
write_attribute :date, date_parsed | |
@bad_date = nil | |
rescue | |
write_attribute :date, nil | |
@bad_date = value | |
end | |
end | |
def date | |
return @bad_date if @bad_date | |
read_attribute :date | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Mongoid | |
module DateField | |
extend ActiveSupport::Concern | |
included do | |
validates_with Mongoid::DateFieldValidator | |
end | |
module ClassMethods | |
def date_field(name) | |
self.class_eval(<<-EOL, __FILE__, __LINE__) | |
field :#{name}, :type => Date | |
def #{name}=(value) | |
set_date_field_value :#{name}, value | |
end | |
def #{name} | |
get_date_field_value :#{name} | |
end | |
EOL | |
end | |
end | |
def date_fields | |
@date_fields ||= {} | |
end | |
def set_date_field_value(name, value) | |
field = get_date_field name | |
begin | |
parsed_value = value.to_date | |
field[:broken_value] = nil | |
field[:valid] = true | |
rescue | |
parsed_value = nil | |
field[:broken_value] = value | |
field[:valid] = false | |
end | |
write_attribute name, parsed_value | |
end | |
def get_date_field_value(name) | |
field = get_date_field name | |
if !field.key?(:valid) or field[:valid] | |
raw_value = read_attribute(name) | |
value = raw_value.to_date if raw_value | |
else | |
value = field[:broken_value] | |
end | |
value | |
end | |
def get_date_field(name) | |
if date_fields.key? name | |
field = date_fields[name] | |
else | |
field = {} | |
date_fields[name] = field | |
end | |
field | |
end | |
end | |
class DateFieldValidator < ActiveModel::Validator | |
def validate(model) | |
is_valid = true | |
model.date_fields.each do |name, data| | |
if !data[:valid] | |
is_valid = false | |
model.errors.add name, "must be a valid date: MM/DD/YYYY" | |
end | |
end | |
is_valid | |
end | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class SomeModel | |
include Mongoid::Document | |
include Mongoid::DateField | |
date_field :date | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
med_data = params[:medication] | |
start_date = med_data[:start_date] | |
prescription_date = med_data[:prescription_date] | |
med_data.reject! {|k,v| [:start_date, :prescription_date].include? k.to_sym} | |
med = Medication.new med_data | |
med.start_date = start_date | |
med.prescription_date = prescription_date | |
med.save |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment