Sha256: e097378d00ac582ba034ffbe9b9b535c2560d3adca38ae2ac7eb3c81a8cfac40

Contents?: true

Size: 1.59 KB

Versions: 2

Compression:

Stored size: 1.59 KB

Contents

require 'active_record'

module Ds
  class Command

    def self.run(argv)
      new(argv).execute
    end

    def initialize(argv)
      @argv = argv
    end

    def execute
      options = Options.parse!(@argv)
      sub_command = options.delete(:command)

      DB.prepare

      deeds = case sub_command
              when 'create'
                create_deed(options[:content], options[:hour])
              when 'delete'
                delete_deed(options[:id])
              when 'update'
                update_deed(options[:id], options)
              when 'list'
                list_deed
              end
      display_deeds deeds

    rescue => e
      abort "Error: #{e.message}"
    end

    def list_deed
      Deed.order('created_at DESC')
    end

    def create_deed(content, hour)
      ActiveRecord::Base.transaction do
        deed = Deed.create!(content: content, hour: hour)
        Timestamp.create!(deed_id: deed.id)
        deed
      end
    end

    def delete_deed(id)
      deed = Deed.find(id)
      deed.destroy
    end

    def update_deed(id, attributes)
      deed = Deed.find(id)
      attributes[:hour] = deed.hour + attributes[:hour]
      deed.update_attributes! attributes
    end

    private

    def display_deeds(deeds)
      header = display_format('ID', 'Content', 'Total Time')

      puts header
      puts '-' * header.size
      Array(deeds).each do |deed|
        puts display_format(deed.id, deed.content, deed.hour)
      end
    end

    def display_format(id, content, hour)
      [id.to_s.rjust(4), content.ljust(38), hour.to_s.ljust(11)].join(' | ')
    end
  end
end

Version data entries

2 entries across 1 versions & 1 rubygems

Version Path
mdg-1.0.1 vendor/bundle/ruby/2.3.0/gems/ds-0.0.2/lib/ds/command.rb
mdg-1.0.1 vendor/bundle/ruby/2.3.0/gems/ds-0.0.3/lib/ds/command.rb