cureutils 0.2.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +24 -2
- data/Gemfile +2 -6
- data/README.md +58 -11
- data/cureutils.gemspec +3 -3
- data/cureutils.plugin.zsh +3 -1
- data/img/cure_echo_demo.gif +0 -0
- data/lib/cureutils.rb +1 -0
- data/lib/cureutils/cli.rb +53 -46
- data/lib/cureutils/common.rb +2 -1
- data/lib/cureutils/logic/base_logic.rb +44 -0
- data/lib/cureutils/logic/date_logic.rb +180 -0
- data/lib/cureutils/{cure_echo_manager.rb → logic/echo_logic.rb} +4 -16
- data/lib/cureutils/{cure_grep_manager.rb → logic/grep_logic.rb} +4 -29
- data/lib/cureutils/{cure_janken_manager.rb → logic/janken_logic.rb} +6 -7
- data/lib/cureutils/{cure_translate_manager.rb → logic/translate_logic.rb} +7 -5
- data/lib/cureutils/version.rb +4 -3
- data/zsh-completion/_cure +8 -3
- metadata +17 -15
- data/lib/cureutils/cure_date_manager.rb +0 -137
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c34da5a7a9fce98a5f8314e7d61cad556629c6f0
         | 
| 4 | 
            +
              data.tar.gz: ed11bee62896aa13fac07861429e124a59c97f9d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 943b29cfd42f50375593689d021eb89778d627bc27292128e8a5098b2982d12e274adfd1fbd955b9f1540655cf023915dfbbcfe3bb090b07c4ed989f0f0028e4
         | 
| 7 | 
            +
              data.tar.gz: 880578332edaf71257b36eb70ef5f1812ff4af600791188a307f928361bce2f2a1dd800c13f37b097f09d2f2a1875e5858f6a4246d41fa8d3885138525991737
         | 
    
        data/.travis.yml
    CHANGED
    
    | @@ -1,4 +1,26 @@ | |
| 1 1 | 
             
            language: ruby
         | 
| 2 | 
            +
             | 
| 2 3 | 
             
            rvm:
         | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 4 | 
            +
            - 2.2.2
         | 
| 5 | 
            +
            - 2.3.3
         | 
| 6 | 
            +
            - 2.4.0
         | 
| 7 | 
            +
            - ruby-head
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            before_install:
         | 
| 10 | 
            +
            - gem update --system --no-document
         | 
| 11 | 
            +
            - gem install bundler -v 1.11.2
         | 
| 12 | 
            +
            - bundle install
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            branches:
         | 
| 15 | 
            +
              only:
         | 
| 16 | 
            +
              - master
         | 
| 17 | 
            +
              - develop-1.0.0
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            matrix:
         | 
| 20 | 
            +
              allow_failures:
         | 
| 21 | 
            +
              - rvm: ruby-head
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            sudo: false
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            script:
         | 
| 26 | 
            +
            - bash test/test.sh
         | 
    
        data/Gemfile
    CHANGED
    
    | @@ -3,10 +3,6 @@ source 'https://rubygems.org' | |
| 3 3 | 
             
            # Specify your gem's dependencies in cureutils.gemspec
         | 
| 4 4 | 
             
            gemspec
         | 
| 5 5 |  | 
| 6 | 
            -
            if Gem::Version.create(RUBY_VERSION) < Gem::Version.create( | 
| 7 | 
            -
              gem  | 
| 8 | 
            -
            end
         | 
| 9 | 
            -
             | 
| 10 | 
            -
            if Gem::Version.create(RUBY_VERSION) < Gem::Version.create("2.2.2")
         | 
| 11 | 
            -
              gem "activesupport", ">= 4.0.0", "< 5.0.0"
         | 
| 6 | 
            +
            if Gem::Version.create(RUBY_VERSION) < Gem::Version.create('2.3.0')
         | 
| 7 | 
            +
              gem 'backport_dig'
         | 
| 12 8 | 
             
            end
         | 
    
        data/README.md
    CHANGED
    
    | @@ -4,14 +4,27 @@ | |
| 4 4 |  | 
| 5 5 | 
             
            # Cureutils
         | 
| 6 6 | 
             
            [](https://badge.fury.io/rb/cureutils)
         | 
| 7 | 
            +
            [](https://travis-ci.org/greymd/cureutils)
         | 
| 7 8 |  | 
| 8 9 | 
             
            Useful command line tool for Japanese battle heroine Pretty Cure (Precure).
         | 
| 9 10 |  | 
| 11 | 
            +
            
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            ## Requirements
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            * ruby >= 2.2.2
         | 
| 16 | 
            +
              + more: [.travis.yml](./.travis.yml)
         | 
| 17 | 
            +
             | 
| 10 18 | 
             
            ## Installation
         | 
| 11 19 |  | 
| 12 20 | 
             
            Install:
         | 
| 13 21 |  | 
| 14 | 
            -
             | 
| 22 | 
            +
            ```
         | 
| 23 | 
            +
            $ gem install cureutils
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            # for 2.2
         | 
| 26 | 
            +
            $ gem install 'backport_dig'
         | 
| 27 | 
            +
            ```
         | 
| 15 28 |  | 
| 16 29 |  | 
| 17 30 | 
             
            After that, `cure` command is available.
         | 
| @@ -61,15 +74,32 @@ And other general date formats are usable. | |
| 61 74 |  | 
| 62 75 | 
             
            ### Options
         | 
| 63 76 |  | 
| 64 | 
            -
            | Option | Description | 
| 65 | 
            -
            | ------ | --------- | 
| 66 | 
            -
            | -d     | cure date -d STRING: display time described by STRING | 
| 77 | 
            +
            | Option | Description                                                               |
         | 
| 78 | 
            +
            | ------ | ---------                                                                 |
         | 
| 79 | 
            +
            | -d     | cure date -d STRING: display time described by STRING                     |
         | 
| 80 | 
            +
            | -f     | cure date -f DATEFILE: Load each line of DATEFILE as STRING of -d option. |
         | 
| 67 81 |  | 
| 68 82 | 
             
            ```sh
         | 
| 69 83 | 
             
            $ cure date -d '3 years ago' '+%Y/%m @P'
         | 
| 70 84 | 
             
            2013/06 ドキドキ!プリキュア放映期間
         | 
| 71 85 | 
             
            ```
         | 
| 72 86 |  | 
| 87 | 
            +
            Standard input can be loaded by giving `-` as DATEFILE.
         | 
| 88 | 
            +
             | 
| 89 | 
            +
            ```sh
         | 
| 90 | 
            +
            $ echo 2016{01..12}{01..31}| xargs -n 1 | cure date -f - '+%F @P' 2>/dev/null | grep 誕生日 | head
         | 
| 91 | 
            +
            2016-01-07 宇佐美いちか(キュアホイップ)誕生日/Go!プリンセスプリキュア放映期間
         | 
| 92 | 
            +
            2016-04-04 雪城ほのか(キュアホワイト)誕生日/魔法つかいプリキュア!放映期間
         | 
| 93 | 
            +
            2016-04-10 春野はるか(キュアフローラ)誕生日/魔法つかいプリキュア!放映期間
         | 
| 94 | 
            +
            2016-04-16 有栖川ひまり(キュアカスタード)誕生日/魔法つかいプリキュア!放映期間
         | 
| 95 | 
            +
            2016-05-28 四葉ありす(キュアロゼッタ)誕生日/魔法つかいプリキュア!放映期間
         | 
| 96 | 
            +
            2016-06-11 琴爪ゆかり(キュアマカロン)誕生日/魔法つかいプリキュア!放映期間
         | 
| 97 | 
            +
            2016-06-12 朝日奈みらい(キュアミラクル)誕生日/魔法つかいプリキュア!放映期間
         | 
| 98 | 
            +
            2016-07-20 海藤みなみ(キュアマーメイド)誕生日/魔法つかいプリキュア!放映期間
         | 
| 99 | 
            +
            2016-08-04 相田マナ(キュアハート)誕生日/魔法つかいプリキュア!放映期間
         | 
| 100 | 
            +
            2016-08-07 日向咲(キュアブルーム)誕生日/魔法つかいプリキュア!放映期間
         | 
| 101 | 
            +
            ```
         | 
| 102 | 
            +
             | 
| 73 103 | 
             
            ## `cure echo`
         | 
| 74 104 | 
             
            Print messages of Precure.
         | 
| 75 105 |  | 
| @@ -90,15 +120,23 @@ $ cure echo -p happy | |
| 90 120 | 
             
            キラキラ輝く未来の光! キュアハッピー!
         | 
| 91 121 | 
             
            5つの光が導く未来!
         | 
| 92 122 | 
             
            輝け!スマイルプリキュア!
         | 
| 123 | 
            +
             | 
| 124 | 
            +
            # Choose style for MAHO GIRLS PRECURE!
         | 
| 125 | 
            +
            $ cure echo -p cure_magical -s ruby
         | 
| 126 | 
            +
            キュアップ・ラパパ! ルビー!
         | 
| 127 | 
            +
            ミラクル・マジカル・ジュエリーレ!
         | 
| 128 | 
            +
            ふたりの魔法!キュアマジカル!
         | 
| 129 | 
            +
            魔法つかいプリキュア!!
         | 
| 93 130 | 
             
            ```
         | 
| 94 131 |  | 
| 95 132 | 
             
            ### Options
         | 
| 96 133 |  | 
| 97 | 
            -
            | Option | Description | 
| 98 | 
            -
            | ------ | ----------- | 
| 99 | 
            -
            | -a     | Print attack message. | 
| 100 | 
            -
            | -q     | Print messages immediately. | 
| 101 | 
            -
            | -p     | Print the given PRECURE's message. | 
| 134 | 
            +
            | Option | Description                         |
         | 
| 135 | 
            +
            | ------ | -----------                         |
         | 
| 136 | 
            +
            | -a     | Print attack message.               |
         | 
| 137 | 
            +
            | -q     | Print messages immediately.         |
         | 
| 138 | 
            +
            | -p     | Print the given PRECURE's message.  |
         | 
| 139 | 
            +
            | -s     | Choose style of the transformation. |
         | 
| 102 140 |  | 
| 103 141 |  | 
| 104 142 | 
             
            ## `cure girls`
         | 
| @@ -121,7 +159,7 @@ $ cure girls | |
| 121 159 |  | 
| 122 160 | 
             
            | Option | Description                                   |
         | 
| 123 161 | 
             
            | ------ | -----------                                   |
         | 
| 124 | 
            -
            | - | 
| 162 | 
            +
            | -f     | Show girl's full name if it exists.           |
         | 
| 125 163 | 
             
            | -m     | Include who have only appeared in the movies. |
         | 
| 126 164 |  | 
| 127 165 |  | 
| @@ -246,10 +284,19 @@ $ cure precures | |
| 246 284 |  | 
| 247 285 | 
             
            [zsh-completion/_cure](zsh-completion/_cure) is the file for `cure` command completion.
         | 
| 248 286 | 
             
            With [zplug](https://github.com/zplug/zplug), it can be installed like this.
         | 
| 287 | 
            +
             | 
| 288 | 
            +
            ```sh
         | 
| 289 | 
            +
            zplug "greymd/cureutils"
         | 
| 290 | 
            +
            ```
         | 
| 291 | 
            +
             | 
| 292 | 
            +
            And update like this.
         | 
| 293 | 
            +
             | 
| 249 294 | 
             
            ```sh
         | 
| 250 | 
            -
            zplug  | 
| 295 | 
            +
            $ zplug update greymd/cureutils
         | 
| 251 296 | 
             
            ```
         | 
| 252 297 |  | 
| 298 | 
            +
            
         | 
| 299 | 
            +
             | 
| 253 300 | 
             
            ## Contributing
         | 
| 254 301 |  | 
| 255 302 | 
             
            Bug reports and pull requests are welcome on GitHub at https://github.com/greymd/cureutils. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
         | 
    
        data/cureutils.gemspec
    CHANGED
    
    | @@ -16,12 +16,12 @@ Gem::Specification.new do |spec| | |
| 16 16 | 
             
              spec.bindir        = 'bin'
         | 
| 17 17 | 
             
              spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
         | 
| 18 18 | 
             
              spec.require_paths = ['lib']
         | 
| 19 | 
            -
              spec.required_ruby_version = '>= 2. | 
| 19 | 
            +
              spec.required_ruby_version = '>= 2.2.2'
         | 
| 20 20 | 
             
              spec.add_development_dependency 'bundler', '~> 1.11'
         | 
| 21 21 | 
             
              spec.add_development_dependency 'rake', '~> 10.0'
         | 
| 22 22 | 
             
              spec.add_development_dependency 'rspec', '~> 3.0'
         | 
| 23 23 | 
             
              spec.add_dependency 'thor', ['>= 0.19.1', '< 2']
         | 
| 24 | 
            -
              spec.add_dependency 'rubicure', '~> 0. | 
| 24 | 
            +
              spec.add_dependency 'rubicure', '~> 1.0.0'
         | 
| 25 25 | 
             
              spec.add_dependency 'colorize', '~> 0.7.7'
         | 
| 26 | 
            -
              spec.add_dependency 'activesupport', ' | 
| 26 | 
            +
              spec.add_dependency 'activesupport', '>= 5.0.0'
         | 
| 27 27 | 
             
            end
         | 
    
        data/cureutils.plugin.zsh
    CHANGED
    
    
| Binary file | 
    
        data/lib/cureutils.rb
    CHANGED
    
    
    
        data/lib/cureutils/cli.rb
    CHANGED
    
    | @@ -1,11 +1,12 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 1 2 | 
             
            # coding: utf-8
         | 
| 2 3 | 
             
            require 'cureutils/version'
         | 
| 3 4 | 
             
            require 'cureutils/common'
         | 
| 4 | 
            -
            require 'cureutils/ | 
| 5 | 
            -
            require 'cureutils/ | 
| 6 | 
            -
            require 'cureutils/ | 
| 7 | 
            -
            require 'cureutils/ | 
| 8 | 
            -
            require 'cureutils/ | 
| 5 | 
            +
            require 'cureutils/logic/janken_logic'
         | 
| 6 | 
            +
            require 'cureutils/logic/date_logic'
         | 
| 7 | 
            +
            require 'cureutils/logic/grep_logic'
         | 
| 8 | 
            +
            require 'cureutils/logic/echo_logic'
         | 
| 9 | 
            +
            require 'cureutils/logic/translate_logic'
         | 
| 9 10 | 
             
            require 'active_support'
         | 
| 10 11 | 
             
            require 'active_support/time'
         | 
| 11 12 | 
             
            require 'time'
         | 
| @@ -31,38 +32,38 @@ module Cureutils | |
| 31 32 |  | 
| 32 33 | 
             
                desc 'transform', 'Change human_name to precure_name.'
         | 
| 33 34 | 
             
                def transform
         | 
| 34 | 
            -
                   | 
| 35 | 
            -
                   | 
| 36 | 
            -
                   | 
| 37 | 
            -
                  exit( | 
| 35 | 
            +
                  logic = TranslateLogic.new
         | 
| 36 | 
            +
                  logic.translate_from_to('[:human_name:]', '[:precure_name:]')
         | 
| 37 | 
            +
                  logic.in = $stdin
         | 
| 38 | 
            +
                  exit(logic.print_results)
         | 
| 38 39 | 
             
                end
         | 
| 39 40 |  | 
| 40 41 | 
             
                desc 'humanize', 'Change precure_name to human_name.'
         | 
| 41 42 | 
             
                def humanize
         | 
| 42 | 
            -
                   | 
| 43 | 
            -
                   | 
| 44 | 
            -
                   | 
| 45 | 
            -
                  exit( | 
| 43 | 
            +
                  logic = TranslateLogic.new
         | 
| 44 | 
            +
                  logic.translate_from_to('[:precure_name:]', '[:human_name:]')
         | 
| 45 | 
            +
                  logic.in = $stdin
         | 
| 46 | 
            +
                  exit(logic.print_results)
         | 
| 46 47 | 
             
                end
         | 
| 47 48 |  | 
| 48 49 | 
             
                desc 'girls [OPTIONS]', "Print girls' name."
         | 
| 49 | 
            -
                 | 
| 50 | 
            +
                # In order to keep backward compatibility, v option is still remaining.
         | 
| 51 | 
            +
                option 'full-name', aliases: 'f',
         | 
| 50 52 | 
             
                                    type: :boolean,
         | 
| 51 | 
            -
                                    desc: " | 
| 53 | 
            +
                                    desc: "Show girl's full name if it exists."
         | 
| 52 54 | 
             
                option 'movie',     aliases: 'm',
         | 
| 53 55 | 
             
                                    type: :boolean,
         | 
| 54 56 | 
             
                                    desc: 'Include who have only appeared in the movies.'
         | 
| 55 57 | 
             
                def girls
         | 
| 56 | 
            -
                  girls = Precure. | 
| 57 | 
            -
                  girls | 
| 58 | 
            -
                   | 
| 59 | 
            -
                  if options[:verbose]
         | 
| 58 | 
            +
                  girls = Precure.all_girls
         | 
| 59 | 
            +
                  girls.delete(Cure.echo) unless options[:movie]
         | 
| 60 | 
            +
                  if options['full-name'.to_sym]
         | 
| 60 61 | 
             
                    girls.each do |v|
         | 
| 61 | 
            -
                      puts v
         | 
| 62 | 
            +
                      puts v.full_name
         | 
| 62 63 | 
             
                    end
         | 
| 63 64 | 
             
                  else
         | 
| 64 65 | 
             
                    girls.each do |v|
         | 
| 65 | 
            -
                      puts v. | 
| 66 | 
            +
                      puts v.human_name
         | 
| 66 67 | 
             
                    end
         | 
| 67 68 | 
             
                  end
         | 
| 68 69 | 
             
                end
         | 
| @@ -72,8 +73,8 @@ module Cureutils | |
| 72 73 | 
             
                                    type: :boolean,
         | 
| 73 74 | 
             
                                    desc: 'Include who have only appeared in the movies.'
         | 
| 74 75 | 
             
                def precures
         | 
| 75 | 
            -
                  cures = Precure. | 
| 76 | 
            -
                  cures | 
| 76 | 
            +
                  cures = Precure.all_girls
         | 
| 77 | 
            +
                  cures.delete(Cure.echo) unless options[:movie]
         | 
| 77 78 | 
             
                  cures.map!(&:precure_name)
         | 
| 78 79 | 
             
                  cures.each do |v|
         | 
| 79 80 | 
             
                    puts v
         | 
| @@ -88,22 +89,22 @@ module Cureutils | |
| 88 89 | 
             
                                        type: :boolean,
         | 
| 89 90 | 
             
                                        desc: 'Print only the matched parts.'
         | 
| 90 91 | 
             
                def grep(default_pat = '[:precure_name:]', filename = nil)
         | 
| 91 | 
            -
                   | 
| 92 | 
            -
                   | 
| 93 | 
            -
                   | 
| 92 | 
            +
                  logic = GrepLogic.new
         | 
| 93 | 
            +
                  logic.source_input(filename)
         | 
| 94 | 
            +
                  logic.pattern(default_pat.clone, options['extended-regexp'.to_sym])
         | 
| 94 95 | 
             
                  # Check the file discriptor to check the pipe exists or not.
         | 
| 95 | 
            -
                   | 
| 96 | 
            -
                   | 
| 96 | 
            +
                  logic.option_colorize($stdout.isatty)
         | 
| 97 | 
            +
                  logic.option_only(options['only-matching'.to_sym])
         | 
| 97 98 | 
             
                  # Print matched lines.
         | 
| 98 | 
            -
                  exit( | 
| 99 | 
            +
                  exit(logic.print_results)
         | 
| 99 100 | 
             
                end
         | 
| 100 101 |  | 
| 101 102 | 
             
                desc 'tr PATTERN REPLACE', 'Translate Precure related parameters.'
         | 
| 102 103 | 
             
                def tr(pat_from = '[:precure_name:]', pat_to = '[:human_name:]')
         | 
| 103 | 
            -
                   | 
| 104 | 
            -
                   | 
| 105 | 
            -
                   | 
| 106 | 
            -
                  exit( | 
| 104 | 
            +
                  logic = TranslateLogic.new
         | 
| 105 | 
            +
                  logic.in = $stdin
         | 
| 106 | 
            +
                  logic.translate_from_to(pat_from, pat_to)
         | 
| 107 | 
            +
                  exit(logic.print_results)
         | 
| 107 108 | 
             
                end
         | 
| 108 109 |  | 
| 109 110 | 
             
                desc 'echo [OPTIONS] PATTERN', 'Print messages of Precure.'
         | 
| @@ -123,30 +124,36 @@ module Cureutils | |
| 123 124 | 
             
                                    type: :string,
         | 
| 124 125 | 
             
                                    desc: 'Choose style of the transformation.'
         | 
| 125 126 | 
             
                def echo
         | 
| 126 | 
            -
                   | 
| 127 | 
            -
                   | 
| 128 | 
            -
                   | 
| 129 | 
            -
                   | 
| 130 | 
            -
                   | 
| 131 | 
            -
                  exit( | 
| 127 | 
            +
                  logic = EchoLogic.new
         | 
| 128 | 
            +
                  logic.precure(options[:precure])
         | 
| 129 | 
            +
                  logic.msg_attack(options[:attack])
         | 
| 130 | 
            +
                  logic.nosleep(options[:quick])
         | 
| 131 | 
            +
                  logic.style(options[:style])
         | 
| 132 | 
            +
                  exit(logic.print_results)
         | 
| 132 133 | 
             
                end
         | 
| 133 134 |  | 
| 134 135 | 
             
                desc 'date [OPTIONS] [+FORMAT]',
         | 
| 135 136 | 
             
                     'Display date, time and Precure related events.'
         | 
| 136 | 
            -
                option 'date', aliases: 'd'
         | 
| 137 | 
            +
                option 'date', aliases: 'd',
         | 
| 138 | 
            +
                               type: :string,
         | 
| 139 | 
            +
                               desc: '-d STRING: Display time described by STRING.'
         | 
| 140 | 
            +
                option 'file', aliases: 'f',
         | 
| 141 | 
            +
                               type: :string,
         | 
| 142 | 
            +
                               desc: '-f DATEFILE: Load each line of DATEFILE as STRING of -d option.'
         | 
| 137 143 | 
             
                # Original date command's default is '+%a %b %e %H:%M:%S %Z %Y @P'
         | 
| 138 144 | 
             
                # However, I would like to adopt this setting.
         | 
| 139 145 | 
             
                def date(fmt = '+%F %H:%M:%S @P')
         | 
| 140 | 
            -
                   | 
| 141 | 
            -
                   | 
| 142 | 
            -
                   | 
| 143 | 
            -
                   | 
| 146 | 
            +
                  logic = DateLogic.new
         | 
| 147 | 
            +
                  logic.opt_date(options[:date])
         | 
| 148 | 
            +
                  logic.opt_file(options[:file])
         | 
| 149 | 
            +
                  logic.format = fmt
         | 
| 150 | 
            +
                  exit(logic.print_results)
         | 
| 144 151 | 
             
                end
         | 
| 145 152 |  | 
| 146 153 | 
             
                desc 'janken', %q(Let's play "Pikarin Janken" !)
         | 
| 147 154 | 
             
                def janken
         | 
| 148 | 
            -
                   | 
| 149 | 
            -
                  exit( | 
| 155 | 
            +
                  logic = JankenLogic.new
         | 
| 156 | 
            +
                  exit(logic.janken.to_i)
         | 
| 150 157 | 
             
                end
         | 
| 151 158 | 
             
              end
         | 
| 152 159 | 
             
            end
         | 
    
        data/lib/cureutils/common.rb
    CHANGED
    
    | @@ -1,3 +1,4 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 1 2 | 
             
            # coding: utf-8
         | 
| 2 3 | 
             
            #
         | 
| 3 4 | 
             
            # Class includes common methos which are refered from multiple commands.
         | 
| @@ -18,7 +19,7 @@ class Common | |
| 18 19 | 
             
                end
         | 
| 19 20 |  | 
| 20 21 | 
             
                def cure_list(sym)
         | 
| 21 | 
            -
                  list = Precure. | 
| 22 | 
            +
                  list = Precure.all_girls.map(&sym)
         | 
| 22 23 | 
             
                  list << Cure.echo[sym]
         | 
| 23 24 | 
             
                  # Regulate cure princes human name
         | 
| 24 25 | 
             
                  list.map do |str|
         | 
| @@ -0,0 +1,44 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
            # coding: utf-8
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # Base class of logic class
         | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            class BaseLogic
         | 
| 8 | 
            +
              def initialize
         | 
| 9 | 
            +
                @in  = $stdin
         | 
| 10 | 
            +
                @out = $stdout
         | 
| 11 | 
            +
                @err = $stderr
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              def source_output(source = $stdout)
         | 
| 15 | 
            +
                @out = source
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              def source_input(source = $stdin)
         | 
| 19 | 
            +
                @in = source
         | 
| 20 | 
            +
                if source.nil? || source =~ /^-$/
         | 
| 21 | 
            +
                  # If the file name is "-", use STDIN.
         | 
| 22 | 
            +
                  @in = $stdin
         | 
| 23 | 
            +
                else
         | 
| 24 | 
            +
                  file(source)
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              def source_err(source = $stderr)
         | 
| 29 | 
            +
                @err = source
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              private
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              def file(filename)
         | 
| 35 | 
            +
                @in = File.open(filename)
         | 
| 36 | 
            +
              rescue SystemCallError => e
         | 
| 37 | 
            +
                @err.puts e.message.to_s
         | 
| 38 | 
            +
                # TODO: Define error codes as enum.
         | 
| 39 | 
            +
                exit(2)
         | 
| 40 | 
            +
              rescue IOError => e
         | 
| 41 | 
            +
                @err.puts e.message.to_s
         | 
| 42 | 
            +
                exit(2)
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
            end
         | 
| @@ -0,0 +1,180 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
            # coding: utf-8
         | 
| 3 | 
            +
            require 'cureutils/logic/base_logic'
         | 
| 4 | 
            +
            require 'date'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            # Date class supports the precure format
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
            class DateLogic < BaseLogic
         | 
| 10 | 
            +
              def initialize
         | 
| 11 | 
            +
                super
         | 
| 12 | 
            +
                hashize_cure_date
         | 
| 13 | 
            +
                hashize_movie_date
         | 
| 14 | 
            +
                @in = []
         | 
| 15 | 
            +
                @in << nil
         | 
| 16 | 
            +
                @opt_date = false
         | 
| 17 | 
            +
                @opt_file = false
         | 
| 18 | 
            +
                @format = '+%F %H:%M:%S @P'
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def opt_date(given_datetime)
         | 
| 22 | 
            +
                return if given_datetime.nil?
         | 
| 23 | 
            +
                @opt_date = true
         | 
| 24 | 
            +
                @in = []
         | 
| 25 | 
            +
                @in << given_datetime
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              def opt_file(filename)
         | 
| 29 | 
            +
                return if filename.nil?
         | 
| 30 | 
            +
                @opt_file = true
         | 
| 31 | 
            +
                source_input(filename)
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              attr_writer :format
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              def print_results
         | 
| 37 | 
            +
                return 1 unless check_opts
         | 
| 38 | 
            +
                @in.each do |line|
         | 
| 39 | 
            +
                  given_date = line ? natural_lang2time(line) : Time.now
         | 
| 40 | 
            +
                  updated_fmt = update_fmt(given_date, @format) if given_date
         | 
| 41 | 
            +
                  @out.puts given_date.strftime(updated_fmt) if updated_fmt
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
                0
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              private
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              def check_opts
         | 
| 49 | 
            +
                # Either option must be true, but both must NOT be same.
         | 
| 50 | 
            +
                return true unless @opt_date && @opt_file
         | 
| 51 | 
            +
                @err.puts <<-EOS
         | 
| 52 | 
            +
            cure date: the options to specify dates for printing are mutually exclusive.
         | 
| 53 | 
            +
                EOS
         | 
| 54 | 
            +
                false
         | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
              def validate_date_str(str)
         | 
| 58 | 
            +
                Date.parse(str)
         | 
| 59 | 
            +
              rescue ArgumentError => e
         | 
| 60 | 
            +
                @err.puts "cure date: #{e.message} '#{str.chomp}'"
         | 
| 61 | 
            +
                return false
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              def natural_lang2time(time_str)
         | 
| 65 | 
            +
                updated_fmt = time_str.dup
         | 
| 66 | 
            +
                updated_fmt.gsub!(/yesterday/, '1 day ago')
         | 
| 67 | 
            +
                updated_fmt.gsub!(/tomorrow/, '-1 day ago')
         | 
| 68 | 
            +
                units = 'second|minute|hour|day|week|month|year'
         | 
| 69 | 
            +
                regulated_format = /(-?[0-9]+) *(#{units})s? *(ago)?/
         | 
| 70 | 
            +
                if updated_fmt =~ regulated_format
         | 
| 71 | 
            +
                  diff_value = Regexp.last_match(1).to_i
         | 
| 72 | 
            +
                  unit = Regexp.last_match(2).to_sym
         | 
| 73 | 
            +
                  minus_flg = Regexp.last_match(3)
         | 
| 74 | 
            +
                  return Time.now + diff_value.send(unit) if minus_flg.nil?
         | 
| 75 | 
            +
                  return Time.now - diff_value.send(unit)
         | 
| 76 | 
            +
                elsif validate_date_str(updated_fmt)
         | 
| 77 | 
            +
                  # Format like "yyyy-mm-dd", "yyyy/mm/dd" and "yyyymmdd"
         | 
| 78 | 
            +
                  return Time.parse(updated_fmt)
         | 
| 79 | 
            +
                end
         | 
| 80 | 
            +
                false
         | 
| 81 | 
            +
              end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
              def update_fmt(datetime, fmt)
         | 
| 84 | 
            +
                # Find precure related events
         | 
| 85 | 
            +
                date4check_event = time2date(datetime)
         | 
| 86 | 
            +
                found_event = events(date4check_event)
         | 
| 87 | 
            +
                checked_fmt = fmt
         | 
| 88 | 
            +
                if fmt =~ /^\+(.*)$/
         | 
| 89 | 
            +
                  checked_fmt = Regexp.last_match(1)
         | 
| 90 | 
            +
                else
         | 
| 91 | 
            +
                  @err.puts "cure date: invalid date format '#{fmt}'"
         | 
| 92 | 
            +
                  exit 1
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
                # Find precure related events
         | 
| 95 | 
            +
                checked_fmt.gsub(/@P/, found_event)
         | 
| 96 | 
            +
              end
         | 
| 97 | 
            +
             | 
| 98 | 
            +
              def events(date)
         | 
| 99 | 
            +
                event_list = [birth_date?(date),
         | 
| 100 | 
            +
                              created_date?(date),
         | 
| 101 | 
            +
                              movie_date?(date),
         | 
| 102 | 
            +
                              series_between(date)].compact
         | 
| 103 | 
            +
                event_list.flatten.join('/')
         | 
| 104 | 
            +
              end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
              def time2date(time_obj)
         | 
| 107 | 
            +
                Date.parse(time_obj.strftime('%Y-%m-%d'))
         | 
| 108 | 
            +
              end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
              def birth_date?(date)
         | 
| 111 | 
            +
                date_str = date.strftime('%-m/%-d')
         | 
| 112 | 
            +
                result = @birth_date[date_str.to_sym]
         | 
| 113 | 
            +
                return if result.nil?
         | 
| 114 | 
            +
                result.map { |v| "#{v[:human_name]}(#{v[:precure_name]})誕生日" }
         | 
| 115 | 
            +
              end
         | 
| 116 | 
            +
             | 
| 117 | 
            +
              def created_date?(date)
         | 
| 118 | 
            +
                date_str = date.strftime('%Y-%m-%d')
         | 
| 119 | 
            +
                result = @created_date[date_str.to_sym]
         | 
| 120 | 
            +
                return if result.nil?
         | 
| 121 | 
            +
                result.map { |v| v[:precure_name] + '登場日' }
         | 
| 122 | 
            +
              end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
              def movie_date?(date)
         | 
| 125 | 
            +
                date_str = date.strftime('%Y-%m-%d')
         | 
| 126 | 
            +
                result = @movie_started_date[date_str.to_sym]
         | 
| 127 | 
            +
                # format
         | 
| 128 | 
            +
                "#{result[:title]}映画公開日" unless result.nil?
         | 
| 129 | 
            +
              end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
              def series_between(date)
         | 
| 132 | 
            +
                event_name = nil
         | 
| 133 | 
            +
                Rubicure::Series.config.each do |_k, v|
         | 
| 134 | 
            +
                  if v[:started_date] == date
         | 
| 135 | 
            +
                    event_name = "#{v[:title]}初放映"
         | 
| 136 | 
            +
                    break
         | 
| 137 | 
            +
                  end
         | 
| 138 | 
            +
                  if v[:ended_date] == date
         | 
| 139 | 
            +
                    event_name = "#{v[:title]}最終回"
         | 
| 140 | 
            +
                    break
         | 
| 141 | 
            +
                  end
         | 
| 142 | 
            +
                  # Nobody expects the future. Precure series may be abolished today.
         | 
| 143 | 
            +
                  v[:ended_date] = Date.today + 1 if v[:ended_date].nil?
         | 
| 144 | 
            +
                  if v[:started_date] < date && date < v[:ended_date]
         | 
| 145 | 
            +
                    event_name = "#{v[:title]}放映期間"
         | 
| 146 | 
            +
                    break
         | 
| 147 | 
            +
                  end
         | 
| 148 | 
            +
                end
         | 
| 149 | 
            +
                event_name
         | 
| 150 | 
            +
              end
         | 
| 151 | 
            +
             | 
| 152 | 
            +
              def hashize_cure_date
         | 
| 153 | 
            +
                @birth_date = {}
         | 
| 154 | 
            +
                @created_date = {}
         | 
| 155 | 
            +
                Precure.all_girls.each do |precure|
         | 
| 156 | 
            +
                  # Create birthday table
         | 
| 157 | 
            +
                  birthday_key = precure.birthday.to_s.to_sym
         | 
| 158 | 
            +
                  @birth_date =
         | 
| 159 | 
            +
                    create_array_on_hash(@birth_date, birthday_key, precure)
         | 
| 160 | 
            +
                  # Create table for the first appeared date .
         | 
| 161 | 
            +
                  created_date_key = precure.created_date.strftime('%Y-%m-%d').to_sym
         | 
| 162 | 
            +
                  @created_date =
         | 
| 163 | 
            +
                    create_array_on_hash(@created_date, created_date_key, precure)
         | 
| 164 | 
            +
                end
         | 
| 165 | 
            +
              end
         | 
| 166 | 
            +
             | 
| 167 | 
            +
              def create_array_on_hash(arr_hash, key, value)
         | 
| 168 | 
            +
                arr_hash[key] = [] unless arr_hash.key?(key)
         | 
| 169 | 
            +
                arr_hash[key] << value
         | 
| 170 | 
            +
                arr_hash
         | 
| 171 | 
            +
              end
         | 
| 172 | 
            +
             | 
| 173 | 
            +
              def hashize_movie_date
         | 
| 174 | 
            +
                @movie_started_date = {}
         | 
| 175 | 
            +
                Rubicure::Movie.config.map do |_k, v|
         | 
| 176 | 
            +
                  next if v[:started_date].nil?
         | 
| 177 | 
            +
                  @movie_started_date[v[:started_date].strftime('%Y-%m-%d').to_sym] = v
         | 
| 178 | 
            +
                end
         | 
| 179 | 
            +
              end
         | 
| 180 | 
            +
            end
         | 
| @@ -1,33 +1,21 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 1 2 | 
             
            # coding: utf-8
         | 
| 3 | 
            +
            require 'cureutils/logic/base_logic'
         | 
| 2 4 |  | 
| 3 5 | 
             
            # Singleton class for cure echo
         | 
| 4 | 
            -
            class  | 
| 6 | 
            +
            class EchoLogic < BaseLogic
         | 
| 5 7 | 
             
              module EchoMode
         | 
| 6 8 | 
             
                TRANSFORM = 1
         | 
| 7 9 | 
             
                ATTACK = 2
         | 
| 8 10 | 
             
              end
         | 
| 9 11 |  | 
| 10 12 | 
             
              def initialize
         | 
| 11 | 
            -
                 | 
| 12 | 
            -
                @out = $stdout
         | 
| 13 | 
            -
                @err = $stderr
         | 
| 13 | 
            +
                super
         | 
| 14 14 | 
             
                @cure_name = 'echo'
         | 
| 15 15 | 
             
                @message_mode = EchoMode::TRANSFORM
         | 
| 16 16 | 
             
                @style_priority = []
         | 
| 17 17 | 
             
              end
         | 
| 18 18 |  | 
| 19 | 
            -
              def source_output(source = $stdout)
         | 
| 20 | 
            -
                @out = source
         | 
| 21 | 
            -
              end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
              def source_input(source = $stdin)
         | 
| 24 | 
            -
                @in = source
         | 
| 25 | 
            -
              end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
              def source_err(source = $stderr)
         | 
| 28 | 
            -
                @err = source
         | 
| 29 | 
            -
              end
         | 
| 30 | 
            -
             | 
| 31 19 | 
             
              def precure(cure_name = false)
         | 
| 32 20 | 
             
                @cure_name = cure_name || 'echo'
         | 
| 33 21 | 
             
              end
         | 
| @@ -1,18 +1,18 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 1 2 | 
             
            # coding: utf-8
         | 
| 3 | 
            +
            require 'cureutils/logic/base_logic'
         | 
| 2 4 | 
             
            require 'colorize'
         | 
| 3 5 |  | 
| 4 6 | 
             
            # Singleton class for cure grep
         | 
| 5 7 | 
             
            # Managing the method for matching and printing.
         | 
| 6 | 
            -
            class  | 
| 8 | 
            +
            class GrepLogic < BaseLogic
         | 
| 7 9 | 
             
              module ColorMode
         | 
| 8 10 | 
             
                NONE = :to_s
         | 
| 9 11 | 
             
                RED = :red
         | 
| 10 12 | 
             
              end
         | 
| 11 13 |  | 
| 12 14 | 
             
              def initialize
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                @out = $stdout
         | 
| 15 | 
            -
                @err = $stderr
         | 
| 15 | 
            +
                super
         | 
| 16 16 | 
             
                @match_method = 'match'
         | 
| 17 17 | 
             
              end
         | 
| 18 18 |  | 
| @@ -25,21 +25,6 @@ class CureGrepManager | |
| 25 25 | 
             
                @str_color = (colorize ? ColorMode::RED : ColorMode::NONE)
         | 
| 26 26 | 
             
              end
         | 
| 27 27 |  | 
| 28 | 
            -
              def source_output(source = $stdout)
         | 
| 29 | 
            -
                @out = source
         | 
| 30 | 
            -
              end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
              def source_input(source = nil)
         | 
| 33 | 
            -
                if source.nil? || source.empty?
         | 
| 34 | 
            -
                  @in = $stdin
         | 
| 35 | 
            -
                elsif source =~ /^-$/
         | 
| 36 | 
            -
                  # If the file name is "-", use STDIN.
         | 
| 37 | 
            -
                  @in = $stdin
         | 
| 38 | 
            -
                else
         | 
| 39 | 
            -
                  file(source)
         | 
| 40 | 
            -
                end
         | 
| 41 | 
            -
              end
         | 
| 42 | 
            -
             | 
| 43 28 | 
             
              def pattern(pat, is_exregex = false)
         | 
| 44 29 | 
             
                if is_exregex
         | 
| 45 30 | 
             
                  @pattern = /#{pat}/
         | 
| @@ -62,14 +47,4 @@ class CureGrepManager | |
| 62 47 | 
             
                end
         | 
| 63 48 | 
             
                exit_status
         | 
| 64 49 | 
             
              end
         | 
| 65 | 
            -
             | 
| 66 | 
            -
              private
         | 
| 67 | 
            -
             | 
| 68 | 
            -
              def file(filename)
         | 
| 69 | 
            -
                @in = File.open(filename)
         | 
| 70 | 
            -
              rescue SystemCallError => e
         | 
| 71 | 
            -
                puts %(class=[#{e.class}] message=[#{e.message}])
         | 
| 72 | 
            -
              rescue IOError => e
         | 
| 73 | 
            -
                puts %(class=[#{e.class}] message=[#{e.message}])
         | 
| 74 | 
            -
              end
         | 
| 75 50 | 
             
            end
         | 
| @@ -1,9 +1,13 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 1 2 | 
             
            # coding: utf-8
         | 
| 3 | 
            +
            require 'cureutils/logic/base_logic'
         | 
| 4 | 
            +
             | 
| 2 5 | 
             
            #
         | 
| 3 6 | 
             
            # Class of Pikarin Janken
         | 
| 4 7 | 
             
            #
         | 
| 5 | 
            -
            class  | 
| 8 | 
            +
            class JankenLogic < BaseLogic
         | 
| 6 9 | 
             
              def initialize
         | 
| 10 | 
            +
                super
         | 
| 7 11 | 
             
                # Set the sleep time 0
         | 
| 8 12 | 
             
                Rubicure::Girl.sleep_sec = 0
         | 
| 9 13 | 
             
                # 0: win, 1: lose, 2: aiko
         | 
| @@ -15,15 +19,10 @@ class CureJankenManager | |
| 15 19 | 
             
                @te_idx = %w(グー チョキ パー グッチョッパー)
         | 
| 16 20 | 
             
                @te_hash = Hash[[@te_idx, (0..3).map(&:to_s)].transpose]
         | 
| 17 21 | 
             
                @buf = []
         | 
| 18 | 
            -
                @out = $stdout
         | 
| 19 22 | 
             
              end
         | 
| 20 23 |  | 
| 21 24 | 
             
              attr_writer :io
         | 
| 22 25 |  | 
| 23 | 
            -
              def source_output(output = $stdout)
         | 
| 24 | 
            -
                @out = output
         | 
| 25 | 
            -
              end
         | 
| 26 | 
            -
             | 
| 27 26 | 
             
              def puts(input)
         | 
| 28 27 | 
             
                @buf << input
         | 
| 29 28 | 
             
              end
         | 
| @@ -43,7 +42,7 @@ class CureJankenManager | |
| 43 42 | 
             
              end
         | 
| 44 43 |  | 
| 45 44 | 
             
              def input_te
         | 
| 46 | 
            -
                @out.print( | 
| 45 | 
            +
                @out.print('1...グー, 2...チョキ, 3...パー : ')
         | 
| 47 46 | 
             
                # TODO: Check input and raise the error.
         | 
| 48 47 | 
             
                player_te = $stdin.gets
         | 
| 49 48 | 
             
                player_te.to_i - 1
         | 
| @@ -1,16 +1,18 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 1 2 | 
             
            # coding: utf-8
         | 
| 3 | 
            +
            require 'cureutils/logic/base_logic'
         | 
| 4 | 
            +
             | 
| 2 5 | 
             
            #
         | 
| 3 6 | 
             
            # Class for managing cure tr (translate).
         | 
| 4 7 | 
             
            #
         | 
| 5 | 
            -
            class  | 
| 8 | 
            +
            class TranslateLogic < BaseLogic
         | 
| 6 9 | 
             
              def initialize
         | 
| 10 | 
            +
                super
         | 
| 7 11 | 
             
                @translate_from = :human_name
         | 
| 8 12 | 
             
                @translate_to = :precure_name
         | 
| 9 | 
            -
                @out = $stdout
         | 
| 10 | 
            -
                @in = $stdin
         | 
| 11 13 | 
             
              end
         | 
| 12 14 |  | 
| 13 | 
            -
              attr_writer : | 
| 15 | 
            +
              attr_writer :in
         | 
| 14 16 |  | 
| 15 17 | 
             
              def translate_from_to(from, to)
         | 
| 16 18 | 
             
                @translate_from = pregex2str(from).to_sym
         | 
| @@ -37,7 +39,7 @@ class CureTranslateManager | |
| 37 39 | 
             
                  line.scan(/#{cure_pattern}/).each do |pat|
         | 
| 38 40 | 
             
                    updated_line.gsub!(/#{pat[0]}/, table[pat[0]])
         | 
| 39 41 | 
             
                  end
         | 
| 40 | 
            -
                  puts updated_line
         | 
| 42 | 
            +
                  @out.puts updated_line
         | 
| 41 43 | 
             
                end
         | 
| 42 44 | 
             
                0
         | 
| 43 45 | 
             
              end
         | 
    
        data/lib/cureutils/version.rb
    CHANGED
    
    
    
        data/zsh-completion/_cure
    CHANGED
    
    | @@ -17,7 +17,7 @@ subcommands=( | |
| 17 17 | 
             
            	"transform: Replace human_name to precure_name"
         | 
| 18 18 | 
             
            )
         | 
| 19 19 |  | 
| 20 | 
            -
            # cure precures | cure tr [:precure_name:] [:girl_name:] | grep '[[:alnum:]]' | sort | uniq | 
| 20 | 
            +
            # bundle exec cure precures -m |bundle exec cure tr [:precure_name:] [:girl_name:] | grep '[[:alnum:]]' | sort | uniq
         | 
| 21 21 | 
             
            precure_girl_names=(
         | 
| 22 22 | 
             
            	'cure_ace'
         | 
| 23 23 | 
             
            	'cure_aqua'
         | 
| @@ -27,6 +27,8 @@ precure_girl_names=( | |
| 27 27 | 
             
            	'cure_black'
         | 
| 28 28 | 
             
            	'cure_bloom'
         | 
| 29 29 | 
             
            	'cure_blossom'
         | 
| 30 | 
            +
            	'cure_chocolat'
         | 
| 31 | 
            +
            	'cure_custard'
         | 
| 30 32 | 
             
            	'cure_diamond'
         | 
| 31 33 | 
             
            	'cure_dream'
         | 
| 32 34 | 
             
            	'cure_echo'
         | 
| @@ -34,11 +36,13 @@ precure_girl_names=( | |
| 34 36 | 
             
            	'cure_felice'
         | 
| 35 37 | 
             
            	'cure_flora'
         | 
| 36 38 | 
             
            	'cure_fortune'
         | 
| 39 | 
            +
            	'cure_gelato'
         | 
| 37 40 | 
             
            	'cure_happy'
         | 
| 38 41 | 
             
            	'cure_heart'
         | 
| 39 42 | 
             
            	'cure_honey'
         | 
| 40 43 | 
             
            	'cure_lemonade'
         | 
| 41 44 | 
             
            	'cure_lovely'
         | 
| 45 | 
            +
            	'cure_macaroon'
         | 
| 42 46 | 
             
            	'cure_magical'
         | 
| 43 47 | 
             
            	'cure_march'
         | 
| 44 48 | 
             
            	'cure_marine'
         | 
| @@ -61,6 +65,7 @@ precure_girl_names=( | |
| 61 65 | 
             
            	'cure_sunshine'
         | 
| 62 66 | 
             
            	'cure_sword'
         | 
| 63 67 | 
             
            	'cure_twinkle'
         | 
| 68 | 
            +
            	'cure_whip'
         | 
| 64 69 | 
             
            	'cure_white'
         | 
| 65 70 | 
             
            	'milky_rose'
         | 
| 66 71 | 
             
            	'shiny_luminous'
         | 
| @@ -115,7 +120,7 @@ function _cure-echo () { | |
| 115 120 | 
             
            function _cure-date () {
         | 
| 116 121 | 
             
            	local -a args
         | 
| 117 122 | 
             
            	args=(
         | 
| 118 | 
            -
            		'-d: cure date -d STRING:  | 
| 123 | 
            +
            		'-d: cure date -d STRING: Display time described by STRING.'
         | 
| 119 124 | 
             
            		'+%Y/%m/%d_%H\:%M\:%S_@P: Example date string 1.'
         | 
| 120 125 | 
             
            		'+%Y/%m/%d_@P: Example date string 2.'
         | 
| 121 126 | 
             
            	)
         | 
| @@ -139,7 +144,7 @@ function _cure-precures () { | |
| 139 144 | 
             
            function _cure-girls () {
         | 
| 140 145 | 
             
            	local -a args
         | 
| 141 146 | 
             
            	if (( CURRENT>=3 )) ; then
         | 
| 142 | 
            -
            		echo $words | grep -w -- '- | 
| 147 | 
            +
            		echo $words | grep -w -- '-f' 1> /dev/null || args=($args "-f:Show girl's full name if it exists.")
         | 
| 143 148 | 
             
            		echo $words | grep -w -- '-m' 1> /dev/null || args=($args '-m:Include who have only appeared in the movies.')
         | 
| 144 149 | 
             
            		_describe -t args 'args' args
         | 
| 145 150 | 
             
            	fi
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: cureutils
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 1.0.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Yamada, Yasuhiro
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2017-03-26 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -78,14 +78,14 @@ dependencies: | |
| 78 78 | 
             
                requirements:
         | 
| 79 79 | 
             
                - - "~>"
         | 
| 80 80 | 
             
                  - !ruby/object:Gem::Version
         | 
| 81 | 
            -
                    version:  | 
| 81 | 
            +
                    version: 1.0.0
         | 
| 82 82 | 
             
              type: :runtime
         | 
| 83 83 | 
             
              prerelease: false
         | 
| 84 84 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 85 85 | 
             
                requirements:
         | 
| 86 86 | 
             
                - - "~>"
         | 
| 87 87 | 
             
                  - !ruby/object:Gem::Version
         | 
| 88 | 
            -
                    version:  | 
| 88 | 
            +
                    version: 1.0.0
         | 
| 89 89 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 90 90 | 
             
              name: colorize
         | 
| 91 91 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -104,16 +104,16 @@ dependencies: | |
| 104 104 | 
             
              name: activesupport
         | 
| 105 105 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 106 106 | 
             
                requirements:
         | 
| 107 | 
            -
                - - " | 
| 107 | 
            +
                - - ">="
         | 
| 108 108 | 
             
                  - !ruby/object:Gem::Version
         | 
| 109 | 
            -
                    version:  | 
| 109 | 
            +
                    version: 5.0.0
         | 
| 110 110 | 
             
              type: :runtime
         | 
| 111 111 | 
             
              prerelease: false
         | 
| 112 112 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 113 113 | 
             
                requirements:
         | 
| 114 | 
            -
                - - " | 
| 114 | 
            +
                - - ">="
         | 
| 115 115 | 
             
                  - !ruby/object:Gem::Version
         | 
| 116 | 
            -
                    version:  | 
| 116 | 
            +
                    version: 5.0.0
         | 
| 117 117 | 
             
            description: Useful command line tool for Japanese battle heroine Pretty Cure (Precure).
         | 
| 118 118 | 
             
            email:
         | 
| 119 119 | 
             
            - greengregson@gmail.com
         | 
| @@ -133,15 +133,17 @@ files: | |
| 133 133 | 
             
            - bin/cure
         | 
| 134 134 | 
             
            - cureutils.gemspec
         | 
| 135 135 | 
             
            - cureutils.plugin.zsh
         | 
| 136 | 
            +
            - img/cure_echo_demo.gif
         | 
| 136 137 | 
             
            - img/cureutils_logo.png
         | 
| 137 138 | 
             
            - lib/cureutils.rb
         | 
| 138 139 | 
             
            - lib/cureutils/cli.rb
         | 
| 139 140 | 
             
            - lib/cureutils/common.rb
         | 
| 140 | 
            -
            - lib/cureutils/ | 
| 141 | 
            -
            - lib/cureutils/ | 
| 142 | 
            -
            - lib/cureutils/ | 
| 143 | 
            -
            - lib/cureutils/ | 
| 144 | 
            -
            - lib/cureutils/ | 
| 141 | 
            +
            - lib/cureutils/logic/base_logic.rb
         | 
| 142 | 
            +
            - lib/cureutils/logic/date_logic.rb
         | 
| 143 | 
            +
            - lib/cureutils/logic/echo_logic.rb
         | 
| 144 | 
            +
            - lib/cureutils/logic/grep_logic.rb
         | 
| 145 | 
            +
            - lib/cureutils/logic/janken_logic.rb
         | 
| 146 | 
            +
            - lib/cureutils/logic/translate_logic.rb
         | 
| 145 147 | 
             
            - lib/cureutils/version.rb
         | 
| 146 148 | 
             
            - zsh-completion/_cure
         | 
| 147 149 | 
             
            homepage: https://github.com/greymd/cureutils
         | 
| @@ -156,7 +158,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 156 158 | 
             
              requirements:
         | 
| 157 159 | 
             
              - - ">="
         | 
| 158 160 | 
             
                - !ruby/object:Gem::Version
         | 
| 159 | 
            -
                  version: 2. | 
| 161 | 
            +
                  version: 2.2.2
         | 
| 160 162 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 161 163 | 
             
              requirements:
         | 
| 162 164 | 
             
              - - ">="
         | 
| @@ -164,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 164 166 | 
             
                  version: '0'
         | 
| 165 167 | 
             
            requirements: []
         | 
| 166 168 | 
             
            rubyforge_project: 
         | 
| 167 | 
            -
            rubygems_version: 2. | 
| 169 | 
            +
            rubygems_version: 2.5.1
         | 
| 168 170 | 
             
            signing_key: 
         | 
| 169 171 | 
             
            specification_version: 4
         | 
| 170 172 | 
             
            summary: Useful commands for battle heroine Pretty Cure (Precure).
         | 
| @@ -1,137 +0,0 @@ | |
| 1 | 
            -
            # coding: utf-8
         | 
| 2 | 
            -
            require 'date'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            #
         | 
| 5 | 
            -
            # Date class supports the precure format
         | 
| 6 | 
            -
            #
         | 
| 7 | 
            -
            class CureDateManager
         | 
| 8 | 
            -
              def initialize
         | 
| 9 | 
            -
                hashize_cure_date unless @birth_date || @created_date
         | 
| 10 | 
            -
                hashize_movie_date unless @movie_started_date
         | 
| 11 | 
            -
                @datetime = Time.now
         | 
| 12 | 
            -
                @format = '+%F %H:%M:%S @P'
         | 
| 13 | 
            -
                @out = $stdout
         | 
| 14 | 
            -
              end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
              def source_output(output = $stdout)
         | 
| 17 | 
            -
                @out = output
         | 
| 18 | 
            -
              end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
              def datetime(datetime_str)
         | 
| 21 | 
            -
                @datetime = datetime_str ? natural_lang2time(datetime_str) : Time.now
         | 
| 22 | 
            -
              end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
              attr_writer :format
         | 
| 25 | 
            -
             | 
| 26 | 
            -
              def print_results
         | 
| 27 | 
            -
                updated_fmt = update_fmt(@datetime, @format)
         | 
| 28 | 
            -
                @out.puts @datetime.strftime(updated_fmt)
         | 
| 29 | 
            -
                0
         | 
| 30 | 
            -
              end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
              private
         | 
| 33 | 
            -
             | 
| 34 | 
            -
              def natural_lang2time(time_str)
         | 
| 35 | 
            -
                updated_fmt = time_str.dup
         | 
| 36 | 
            -
                updated_fmt.gsub!(/yesterday/, '1 day ago')
         | 
| 37 | 
            -
                updated_fmt.gsub!(/tomorrow/, '-1 day ago')
         | 
| 38 | 
            -
                units = 'second|minute|hour|day|week|month|year'
         | 
| 39 | 
            -
                regulated_format = /(-?[0-9]+) *(#{units})s? *(ago)?/
         | 
| 40 | 
            -
                if updated_fmt =~ regulated_format
         | 
| 41 | 
            -
                  diff_value = Regexp.last_match(1).to_i
         | 
| 42 | 
            -
                  unit = Regexp.last_match(2).to_sym
         | 
| 43 | 
            -
                  minus_flg = Regexp.last_match(3)
         | 
| 44 | 
            -
                  if minus_flg.nil?
         | 
| 45 | 
            -
                    Time.now + diff_value.send(unit)
         | 
| 46 | 
            -
                  else
         | 
| 47 | 
            -
                    Time.now - diff_value.send(unit)
         | 
| 48 | 
            -
                  end
         | 
| 49 | 
            -
                else
         | 
| 50 | 
            -
                  Time.parse(updated_fmt)
         | 
| 51 | 
            -
                end
         | 
| 52 | 
            -
              end
         | 
| 53 | 
            -
             | 
| 54 | 
            -
              def update_fmt(datetime, fmt)
         | 
| 55 | 
            -
                # Find precure related events
         | 
| 56 | 
            -
                date4check_event = time2date(datetime)
         | 
| 57 | 
            -
                found_event = events(date4check_event)
         | 
| 58 | 
            -
                checked_fmt = fmt
         | 
| 59 | 
            -
                if fmt =~ /^\+(.*)$/
         | 
| 60 | 
            -
                  checked_fmt = Regexp.last_match(1)
         | 
| 61 | 
            -
                else
         | 
| 62 | 
            -
                  puts "cure date: invalid date format '#{fmt}'"
         | 
| 63 | 
            -
                  exit 1
         | 
| 64 | 
            -
                end
         | 
| 65 | 
            -
                # Find precure related events
         | 
| 66 | 
            -
                checked_fmt.gsub(/@P/, found_event)
         | 
| 67 | 
            -
              end
         | 
| 68 | 
            -
             | 
| 69 | 
            -
              def events(date)
         | 
| 70 | 
            -
                event_list = [birth_date?(date),
         | 
| 71 | 
            -
                              created_date?(date),
         | 
| 72 | 
            -
                              movie_date?(date),
         | 
| 73 | 
            -
                              series_between(date)].compact
         | 
| 74 | 
            -
                event_list.join('/')
         | 
| 75 | 
            -
              end
         | 
| 76 | 
            -
             | 
| 77 | 
            -
              def time2date(time_obj)
         | 
| 78 | 
            -
                Date.parse(time_obj.strftime('%Y-%m-%d'))
         | 
| 79 | 
            -
              end
         | 
| 80 | 
            -
             | 
| 81 | 
            -
              def birth_date?(date)
         | 
| 82 | 
            -
                date_str = date.strftime('%m/%d')
         | 
| 83 | 
            -
                result = @birth_date[date_str]
         | 
| 84 | 
            -
                # format
         | 
| 85 | 
            -
                result.nil? ? nil : "#{result[:human_name]}(#{result[:precure_name]})誕生日"
         | 
| 86 | 
            -
              end
         | 
| 87 | 
            -
             | 
| 88 | 
            -
              def created_date?(date)
         | 
| 89 | 
            -
                date_str = date.strftime('%m/%d')
         | 
| 90 | 
            -
                result = @created_date[date_str]
         | 
| 91 | 
            -
                # format
         | 
| 92 | 
            -
                result.nil? ? nil : "#{result[:precure_name]}初登場日"
         | 
| 93 | 
            -
              end
         | 
| 94 | 
            -
             | 
| 95 | 
            -
              def movie_date?(date)
         | 
| 96 | 
            -
                result = @created_date[date]
         | 
| 97 | 
            -
                # format
         | 
| 98 | 
            -
                result.nil? ? nil : "#{result[:title]}映画公開日"
         | 
| 99 | 
            -
              end
         | 
| 100 | 
            -
             | 
| 101 | 
            -
              def series_between(date)
         | 
| 102 | 
            -
                event_name = nil
         | 
| 103 | 
            -
                Rubicure::Series.config.each do |_k, v|
         | 
| 104 | 
            -
                  if v[:started_date] == date
         | 
| 105 | 
            -
                    event_name = "#{v[:title]}初放映"
         | 
| 106 | 
            -
                    break
         | 
| 107 | 
            -
                  end
         | 
| 108 | 
            -
                  if v[:ended_date] == date
         | 
| 109 | 
            -
                    event_name = "#{v[:title]}最終回"
         | 
| 110 | 
            -
                    break
         | 
| 111 | 
            -
                  end
         | 
| 112 | 
            -
                  # Nobody expects the future. Precure series may be abolished today.
         | 
| 113 | 
            -
                  v[:ended_date] = Date.today + 1 if v[:ended_date].nil?
         | 
| 114 | 
            -
                  if v[:started_date] < date && date < v[:ended_date]
         | 
| 115 | 
            -
                    event_name = "#{v[:title]}放映期間"
         | 
| 116 | 
            -
                    break
         | 
| 117 | 
            -
                  end
         | 
| 118 | 
            -
                end
         | 
| 119 | 
            -
                event_name
         | 
| 120 | 
            -
              end
         | 
| 121 | 
            -
             | 
| 122 | 
            -
              def hashize_cure_date
         | 
| 123 | 
            -
                @birth_date = {}
         | 
| 124 | 
            -
                @created_date = {}
         | 
| 125 | 
            -
                Rubicure::Girl.config.map do |_k, v|
         | 
| 126 | 
            -
                  v[:birthday].nil? || @birth_date[v[:birthday]] = v
         | 
| 127 | 
            -
                  v[:created_date].nil? || @created_date[v[:created_date]] = v
         | 
| 128 | 
            -
                end
         | 
| 129 | 
            -
              end
         | 
| 130 | 
            -
             | 
| 131 | 
            -
              def hashize_movie_date
         | 
| 132 | 
            -
                @movie_started_date = {}
         | 
| 133 | 
            -
                Rubicure::Movie.config.map do |_k, v|
         | 
| 134 | 
            -
                  v[:started_date].nil? || @movie_started_date[v[:started_date]] = v
         | 
| 135 | 
            -
                end
         | 
| 136 | 
            -
              end
         | 
| 137 | 
            -
            end
         |