Class: Ezframe::BirthdayType

Inherits:
TextType show all
Defined in:
lib/ezframe/column_type.rb

Instance Attribute Summary

Attributes inherited from TypeBase

#attribute, #error, #parent

Instance Method Summary collapse

Methods inherited from TextType

#db_type, #normalize, #value=

Methods inherited from TypeBase

#db_type, #db_value, get_class, #initialize, #key, #label, #make_error_box, #no_edit?, #no_view?, #normalize, #type, type_name, #use_view_format, #value, #value=

Constructor Details

This class inherits a constructor from Ezframe::TypeBase

Instance Method Details

#form(opts = {}) ⇒ Object



509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
# File 'lib/ezframe/column_type.rb', line 509

def form(opts = {})
  return nil if no_edit? && !opts[:force]
  now = Time.now
  year_list = []
  110.times do |y|
    year = now.year - y - 10
    year_list.push [year, "#{year}(#{Japanese.convert_wareki(year)})"]
  end
  year_list.unshift([ 0, "(年)" ])

  key = self.key
  key ="#{key}#{opts[:key_suffix]}" if opts[:key_suffix]

  year, mon, mday = parse_date(@value)
  mon_list = (1..12).map { |m| [m, "#{m}"] }
  mon_list.unshift([0, "(月)"])
  mday_list = (1..31).map { |d| [d, "#{d}"] }
  mday_list.unshift([0, "(日)"])
  ezvalid = "target_key=#{key}:with=#multi-#{key}"
  return  Ht.div(id: "multi-#{key}",
    child: [ Ht.div([Ht.select(name: "#{key}_year", class: %w[browser-default multi_input], item: year_list, value: year, ezvalid: ezvalid),
          Ht.small("")]),
          Ht.select(name: "#{key}_mon", class: %w[browser-default multi_input], item: mon_list, value: mon, ezvalid: ezvalid),
          Ht.small(""),
          Ht.select(name: "#{key}_mday", class: %w[browser-default multi_input], item: mday_list, value: mday, ezvalid: ezvalid),
          Ht.small(""), 
          make_error_box(key)])
end

#form_to_value(form, target_key: nil) ⇒ Object



559
560
561
562
563
# File 'lib/ezframe/column_type.rb', line 559

def form_to_value(form, target_key: nil)
  key = target_key || self.key
  y, m, d = form["#{key}_year".to_sym], form["#{key}_mon".to_sym], form["#{key}_mday".to_sym]
  return "%d-%02d-%02d"%[y.to_i, m.to_i, d.to_i]
end

#multi_inputs?Boolean

Returns:

  • (Boolean)


555
556
557
# File 'lib/ezframe/column_type.rb', line 555

def multi_inputs?
  true
end

#parse_date(date) ⇒ Object



548
549
550
551
552
553
# File 'lib/ezframe/column_type.rb', line 548

def parse_date(date)
  if date && date =~ /(\d+)\-(\d+)\-(\d+)/
    return [ $1.to_i,$2.to_i,$3.to_i ]
  end
  return nil
end

#validate(val) ⇒ Object



565
566
567
# File 'lib/ezframe/column_type.rb', line 565

def validate(val)
  return validate_date(val)
end

#validate_date(val) ⇒ Object

日付の検証



570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
# File 'lib/ezframe/column_type.rb', line 570

def validate_date(val)
  if val.is_a?(String)
    y,m,d = val.split("-")
    if y.to_i == 0 || m.to_i == 0 || d.to_i == 0
      return nil
    end
    tm = Time.mktime(y.to_i, m.to_i, d.to_i)
  elsif val.is_a?(Time)
    tm = val
  end
  if tm.mday != d.to_i
    @error = :invalid_value
    return @error
  end
  return nil
end

#view(opts = {}) ⇒ Object



538
539
540
541
542
543
544
545
546
# File 'lib/ezframe/column_type.rb', line 538

def view(opts = {})
  return nil if no_view? && !opts[:force]
  return nil unless @value
  year, mon, mday = parse_date(@value)
  year_s = if year.to_i == 0 then "?" else "%d" % [year]; end
  mon_s = if mon.to_i == 0 then "?" else "%2d" % [mon]; end
  mday_s = if mday.to_i == 0 then "?" else "%2d" % [mday]; end
  return "#{year_s}<small>年</small>#{mon_s}<small>月</small>#{mday_s}<small>日</small>"
end