class TokyoMetro::Rake::BugFix::BarrierFreeFacility::Pattern

Public Class Methods

new( title , facility_names , proc_for_deciding_invalidity ) click to toggle source
# File lib/tokyo_metro/rake/bug_fix/barrier_free_facility/service_detail/service_detail/pattern.rb, line 3
def initialize( title , facility_names , proc_for_deciding_invalidity )
  puts title

  @facility_names = [ facility_names ].flatten
  @proc_for_deciding_invalidity = proc_for_deciding_invalidity
  @facility_info_ids = []
  @invalid_service_detail_pattern_id = nil

  set_facility_info_ids
  set_invalid_service_detail_pattern
  set_facility_info_ids_related_to_invalid_pattern
end
process( title , facility_names , proc_for_deciding_invalidity , info_for_updating , h_for_updating , proc_for_creating_h_for_new_pattern_instance , to_test: true ) click to toggle source
# File lib/tokyo_metro/rake/bug_fix/barrier_free_facility/service_detail/service_detail/pattern.rb, line 54
def self.process( title , facility_names , proc_for_deciding_invalidity , info_for_updating , h_for_updating , proc_for_creating_h_for_new_pattern_instance , to_test: true )
  self.new( title , facility_names , proc_for_deciding_invalidity ).process( info_for_updating , h_for_updating , proc_for_creating_h_for_new_pattern_instance , to_test )
end

Public Instance Methods

process( info_for_updating , h_for_updating , proc_for_creating_h_for_new_pattern_instance , to_test ) click to toggle source
# File lib/tokyo_metro/rake/bug_fix/barrier_free_facility/service_detail/service_detail/pattern.rb, line 16
def process( info_for_updating , h_for_updating , proc_for_creating_h_for_new_pattern_instance , to_test )
  if to_update_pattern_instance?
    puts "Update - Begin"
    unless info_for_updating.present?
      raise "Info for updating is not present."
    end
    unless to_test
      @invalid_service_detail_pattern.update( h_for_updating )
    end
    puts "Update instance"
    puts "by #{ h_for_updating }"
    puts "Update - Complete"

  else
    puts "Create new instance - Begin"
    h_for_new_pattern_instance = proc_for_creating_h_for_new_pattern_instance.call( info_for_updating , @invalid_service_detail_pattern )
    new_pattern_instance = ::BarrierFreeFacilityServiceDetailPattern.find_by( h_for_new_pattern_instance )
    unless new_pattern_instance.present?
      new_pattern_instance = ::BarrierFreeFacilityServiceDetailPattern.create( h_for_new_pattern_instance.merge({
        id: ::BarrierFreeFacilityServiceDetailPattern.all.pluck(:id).max + 1
      }))
      puts "A new instance is created."
    end

    ::BarrierFreeFacilityServiceDetail.where(
      barrier_free_facility_info_id: @facility_info_ids ,
      barrier_free_facility_service_detail_pattern_id: @invalid_service_detail_pattern_id
    ).to_a.each do | service_detail |
      puts "Update service_detail instance \##{ service_detail.id } (barrier_free_facility_service_detail_pattern_id: #{ new_pattern_instance.id })"
      unless to_test
        service_detail.update( barrier_free_facility_service_detail_pattern_id: new_pattern_instance.id )
      end
    end

    puts "Create new instance - Complete"
  end
end

Private Instance Methods

set_facility_info_ids() click to toggle source
# File lib/tokyo_metro/rake/bug_fix/barrier_free_facility/service_detail/service_detail/pattern.rb, line 60
def set_facility_info_ids
  @facility_names.each do | facility_name |
    facility = ::BarrierFreeFacility::Info.find_by( same_as: facility_name )
    unless facility.present?
      raise "\"#{ facility_name }\" is not present."
    end
    @facility_info_ids << facility.id
  end
  @facility_info_ids.sort!

  puts "facility_info_ids: #{ @facility_info_ids.to_s }"
end
set_invalid_service_detail_pattern() click to toggle source
# File lib/tokyo_metro/rake/bug_fix/barrier_free_facility/service_detail/service_detail/pattern.rb, line 73
def set_invalid_service_detail_pattern
  @facility_info_ids.each do | facility_info_id |
    facility_info = ::BarrierFreeFacility::Info.find( facility_info_id )
    service_details = facility_info.service_details
    service_details.each.with_index(1) do | detail_info , i |
      pattern = detail_info.barrier_free_facility_service_detail_pattern

      if @proc_for_deciding_invalidity.call( pattern )
        if @invalid_service_detail_pattern_id.blank?
          @invalid_service_detail_pattern_id = pattern.id
        elsif @invalid_service_detail_pattern_id != pattern.id
           raise "Pattern \#1 of \"#{ facility_info.same_as }\" is not valid."
        end
      end

    end
  end

  @invalid_service_detail_pattern = ::BarrierFreeFacilityServiceDetailPattern.find( @invalid_service_detail_pattern_id )
  puts "invalid_service_detail_pattern_id: #{ @invalid_service_detail_pattern_id }"
end
to_update_pattern_instance?() click to toggle source
# File lib/tokyo_metro/rake/bug_fix/barrier_free_facility/service_detail/service_detail/pattern.rb, line 100
def to_update_pattern_instance?
  @facility_info_ids_related_to_invalid_pattern == @facility_info_ids
end