aun 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 75493ad2bc8313a55e259705ab7b84fcd5fad2ae
4
+ data.tar.gz: f69acf2389fed37aa47c324a3e8ecf523b24b723
5
+ SHA512:
6
+ metadata.gz: ee910d95a60feb90e1561664cb747bdd5d37f80b372fcd9b89eccd1a216e671c7915587e33ee59db9c18351bed6d9e749334f93141a77395d29a375e495bd933
7
+ data.tar.gz: 1b1b57cacdc46a2782a07a3fd1deb4e33752dde16fe7b3df3d496adcb0e476e99bd35f8bf29bc443df84d5096edf068496c5174bf21609a4685d94bc066b65a4
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/.rubocop.yml ADDED
@@ -0,0 +1 @@
1
+ inherit_from: rubocop-todo.yml
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ before_install:
3
+ - gem update --system 2.1.11
4
+ - gem --version
5
+ rvm:
6
+ - 2.0.0
7
+ - 2.1.0
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+ gem "rspec", "~> 2.14.1"
5
+ gem "thor", "~> 0.18.1"
6
+ gem "simplecov", "~> 0.8.2"
7
+ group :test do
8
+ gem 'coveralls', require: false
9
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 tbpgr
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,172 @@
1
+ # Aun
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/aun.svg)](http://badge.fury.io/rb/aun)
4
+ [![Build Status](https://travis-ci.org/tbpgr/aun.png?branch=master)](https://travis-ci.org/tbpgr/aun)
5
+
6
+ Aun [阿吽] は「阿吽の呼吸」、「ツー」といえば「カー」など
7
+ A に呼応して B のメッセージを返却するためのツールです。
8
+ これといって有効な用途はありません。ジョークのたぐいです。
9
+
10
+ ## Demo
11
+ ![demo](./images/aun.gif)
12
+
13
+ ## Target Versions
14
+ * Ruby 2.0
15
+ * Ruby 2.1
16
+
17
+ ## Installation
18
+
19
+ Add this line to your application's Gemfile:
20
+
21
+ ```ruby
22
+ gem 'aun'
23
+ ```
24
+
25
+ And then execute:
26
+
27
+ $ bundle
28
+
29
+ Or install it yourself as:
30
+
31
+ $ gem install aun
32
+
33
+ ## Usage
34
+ ### help
35
+ ~~~bash
36
+ $ aun help
37
+ Commands:
38
+ aun help [COMMAND] # Describe available commands or one specific command
39
+ aun init # Generate Aundefinition.csv template
40
+ aun inspect # inspect
41
+ aun inspect_all # inspect_all
42
+ aun owner_talk # owner_talk
43
+ aun talk # talk
44
+ aun talk_with_origin # talk_with_origin
45
+ aun version # version
46
+ ~~~
47
+
48
+ ## デフォルトの阿吽メッセージ
49
+ 下記をデフォルトとして登録してあります。
50
+
51
+ [default_messages.rb](./lib/aun/default_messages.rb)
52
+
53
+ ## CLI Tool 「 aun 」の利用法
54
+ ### talk
55
+ ~~~bash
56
+ $ aun talk 君名前は?
57
+ 田原年彦
58
+ ~~~
59
+
60
+ ### owner_talk
61
+ ~~~bash
62
+ $ aun owner_talk 君名前は?
63
+ 田原年彦「田原年彦」
64
+ ~~~
65
+
66
+ ### talk_with_origin
67
+ ~~~bash
68
+ $ aun talk_with_origin 君名前は?
69
+ 田原年彦「田原年彦」 from [行け!稲中卓球部]
70
+ ~~~
71
+
72
+ ### inspect
73
+ ~~~bash
74
+ $ aun inspect ぬるぽ
75
+ 阿:ぬるぽ 吽:ガッ 発言者:unknown 原典:unknown, ユーザー定義:false
76
+ ~~~
77
+
78
+ ### init
79
+ ユーザー定義データ登録用のcsvテンプレート生成
80
+
81
+ ~~~bash
82
+ $ aun init
83
+ $ cat Aundefinition.csv
84
+ 阿(例:海賊王に),吽(例:俺はなる),発言者(モンキー・D・ルフィ※不明の場合は空欄に),原典(One Piece※不明の場合は空欄に)
85
+ ~~~
86
+
87
+ ユーザー定義データを編集して、 talk を呼び出してみます。
88
+
89
+ * Aundefinition.csv
90
+
91
+ ~~~
92
+ 海賊王に,俺はなる,モンキー・D・ルフィ,One Piece
93
+ ~~~
94
+
95
+ * 実行
96
+
97
+ ~~~bash
98
+ $ aun talk 海賊王に
99
+ 俺はなる
100
+ ~~~
101
+
102
+ ### inspect_all
103
+ ~~~bash
104
+ $ aun inspect_all
105
+ 阿:君名前は? 吽:田原年彦 発言者:田原年彦 原典:行け!稲中卓球部, ユーザー定義:false
106
+ 阿:山 吽:川 発言者:unknown 原典:unknown, ユーザー定義:false
107
+ 阿:ぬるぽ 吽:ガッ 発言者:unknown 原典:unknown, ユーザー定義:false
108
+ 阿:海賊王に 吽:俺はなる 発言者:モンキー・D・ルフィ 原典:One Piece, ユーザー定義:true
109
+ ~~~
110
+
111
+ ## gem を直接 require して利用する方法
112
+
113
+ ### サンプルコード
114
+ ~~~ruby
115
+ require 'aun_core'
116
+
117
+ messages = [
118
+ # owner, origin は省略すると :unknown になります
119
+ # user_defined は省略すると false になります
120
+ Aun::Message.new('やらないか?', 'アーッ!', owner: '阿部さん', origin: 'くそみそテクニック', user_defined: true),
121
+ Aun::Message.new('もうひといきじゃ パワーをメテオに', 'いいですとも!', owner: 'ゴルベーザ', origin: 'ファイナルファンタジーIV', user_defined: true)
122
+ ]
123
+
124
+ finder = Aun::Finder.new
125
+ print finder.inspect_all, "\n"
126
+ # ユーザー定義のメッセージを追加
127
+ finder.add_messages(messages)
128
+ print finder.inspect_all, "\n"
129
+ print finder.talk('ぬるぽ'), "\n"
130
+ print finder.owner_talk('ぬるぽ'), "\n"
131
+ print finder.talk_with_origin('ぬるぽ'), "\n"
132
+ print finder.talk('やらないか?'), "\n"
133
+ print finder.owner_talk('やらないか?'), "\n"
134
+ print finder.talk_with_origin('やらないか?'), "\n"
135
+ ~~~
136
+
137
+ ### 出力
138
+
139
+ ~~~
140
+ 阿:君名前は? 吽:田原年彦 発言者:田原年彦 原典:行け!稲中卓球部, ユーザー定義:false
141
+ 阿:山 吽:川 発言者:unknown 原典:unknown, ユーザー定義:false
142
+ 阿:ぬるぽ 吽:ガッ 発言者:unknown 原典:unknown, ユーザー定義:false
143
+ 阿:君名前は? 吽:田原年彦 発言者:田原年彦 原典:行け!稲中卓球部, ユーザー定義:false
144
+ 阿:山 吽:川 発言者:unknown 原典:unknown, ユーザー定義:false
145
+ 阿:ぬるぽ 吽:ガッ 発言者:unknown 原典:unknown, ユーザー定義:false
146
+ 阿:やらないか? 吽:アーッ! 発言者:阿部さん 原典:くそみそテクニック, ユーザー定義:true
147
+ 阿:もうひといきじゃ パワーをメテオに 吽:いいですとも! 発言者:ゴルベーザ 原典:ファイナルファンタジーIV, ユーザー定義:true
148
+ ガッ
149
+ ガッ
150
+ ガッ
151
+ アーッ!
152
+ 阿部さん「アーッ!」
153
+ 阿部さん「アーッ!」 from [くそみそテクニック]
154
+ ~~~
155
+
156
+ ## デフォルト阿吽メッセージへのプルリク
157
+ これは定番だろ!みたいなプルリクがあれば default_messages.rb を編集してプルリクください。
158
+ プルリクのメッセージに元ネタと簡単な説明を書いておいてください。
159
+
160
+ merge か reject かは独断と偏見で行います。
161
+ また元ネタの説明は出来る限り日本語でお願いします。
162
+
163
+ ## History
164
+ * version 0.0.1 : First release.
165
+
166
+ ## Contributing
167
+
168
+ 1. Fork it ( https://github.com/tbpgr/aun/fork )
169
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
170
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
171
+ 4. Push to the branch (`git push origin my-new-feature`)
172
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core'
3
+ require 'rspec/core/rake_task'
4
+ task default: [:spec]
5
+
6
+ RSpec::Core::RakeTask.new(:spec) do |spec|
7
+ spec.pattern = 'spec/**/*_spec.rb'
8
+ end
data/aun.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'aun/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'aun'
8
+ spec.version = Aun::VERSION
9
+ spec.authors = ['tbpgr']
10
+ spec.email = ['tbpgr@tbpgr.jp']
11
+ spec.summary = %q(A-Un)
12
+ spec.description = %q(A-Un)
13
+ spec.homepage = 'https://github.com/tbpgr/aun'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.6'
22
+ spec.add_development_dependency 'rake', '~> 10.0'
23
+ spec.add_development_dependency 'rspec'
24
+ end
data/bin/aun ADDED
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require 'aun_core'
5
+ require 'aun/version'
6
+ require 'thor'
7
+
8
+ module Aun
9
+ # = Aun CLI
10
+ class CLI < Thor
11
+ class_option :help, type: :boolean, aliases: '-h', desc: 'help message.'
12
+ class_option :version, type: :boolean, desc: 'version'
13
+
14
+ desc 'init', 'Generate Aundefinition.csv template'
15
+ def init
16
+ Aun::DefinitionManager.new.init
17
+ exit(true)
18
+ rescue
19
+ exit(false)
20
+ end
21
+
22
+ desc 'inspect_all', 'inspect_all'
23
+ def inspect_all
24
+ call_finder_no_arity(:inspect_all)
25
+ end
26
+
27
+ %i(talk owner_talk talk_with_origin inspect).each do |m|
28
+ desc m.to_s, m.to_s
29
+ define_method m do |key|
30
+ call_finder_1_arity(m, key)
31
+ end
32
+ end
33
+
34
+ desc 'version', 'version'
35
+ def version
36
+ p Aun::VERSION
37
+ end
38
+
39
+ private
40
+
41
+ def call_finder_no_arity(m)
42
+ af = get_finder_instance
43
+ puts af.send(m)
44
+ exit(true)
45
+ rescue => e
46
+ STDERR.puts(e.backtrace)
47
+ exit(false)
48
+ end
49
+
50
+ def call_finder_1_arity(m, key)
51
+ af = get_finder_instance
52
+ puts af.send(m, key.encode('utf-8'))
53
+ exit(true)
54
+ rescue => e
55
+ STDERR.puts(e.backtrace)
56
+ exit(false)
57
+ end
58
+
59
+ def get_finder_instance
60
+ user_definition = Aun::DefinitionManager.new.load_user_definition
61
+ af = Aun::Finder.new
62
+ af.add_messages(user_definition)
63
+ af
64
+ end
65
+ end
66
+ end
67
+
68
+ Aun::CLI.start(ARGV)
data/images/aun.gif ADDED
Binary file
@@ -0,0 +1,10 @@
1
+ # encoding: utf-8
2
+ module Aun
3
+ module DefaultMessages
4
+ MESSAGES = [
5
+ Message.new('君名前は?', '田原年彦', owner: '田原年彦', origin: '行け!稲中卓球部'),
6
+ Message.new('山', '川'),
7
+ Message.new('ぬるぽ', 'ガッ'),
8
+ ]
9
+ end
10
+ end
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+ require 'csv'
3
+
4
+ module Aun
5
+ class DefinitionManager
6
+ AUNDEFINITION_FILE = 'Aundefinition.csv'
7
+ AUNDEFINITION_TEMPLATE = <<-EOS
8
+ 阿(例:海賊王に),吽(例:俺はなる),発言者(モンキー・D・ルフィ※不明の場合は空欄に),原典(One Piece※不明の場合は空欄に)
9
+ EOS
10
+
11
+ def init
12
+ File.open(AUNDEFINITION_FILE, 'w:UTF-8') do |f|
13
+ f.puts AUNDEFINITION_TEMPLATE
14
+ end
15
+ end
16
+
17
+ def load_user_definition
18
+ return [] unless File.exist?(AUNDEFINITION_FILE)
19
+ memo = []
20
+ CSV.foreach(AUNDEFINITION_FILE, encoding: 'utf-8') do |row|
21
+ owner = row[2]
22
+ origin = row[3]
23
+ memo << Aun::Message.new(row[0], row[1], owner: row[2], origin: origin, user_defined: true)
24
+ end
25
+ memo
26
+ end
27
+
28
+ private
29
+ def empty_to_unknown(target)
30
+ target.empty? ? :unknown : target
31
+ end
32
+ end
33
+ end
data/lib/aun/finder.rb ADDED
@@ -0,0 +1,30 @@
1
+ require 'aun/message'
2
+ require 'aun/default_messages'
3
+
4
+ module Aun
5
+ class Finder
6
+ attr_reader :messages
7
+ def initialize
8
+ @messages = Aun::DefaultMessages::MESSAGES
9
+ end
10
+
11
+ %i(talk owner_talk talk_with_origin inspect).each do |m|
12
+ define_method m do |key|
13
+ message = @messages.select { |e|e.a == key }
14
+ message.empty? ? '' : message.sample.send(m)
15
+ end
16
+ end
17
+
18
+ def inspect_all
19
+ @messages.map(&:inspect).join("\n")
20
+ end
21
+
22
+ def aun_definitions
23
+ @messages
24
+ end
25
+
26
+ def add_messages(messages = [])
27
+ @messages += messages
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+ module Aun
3
+ # Message
4
+ class Message
5
+ attr_reader :a, :un, :owner, :origin, :user_defined
6
+ def initialize(a, un, owner: :unknown, origin: :unknown, user_defined: false)
7
+ @a, @un, @owner, @origin, @user_defined = a, un, owner, origin, user_defined
8
+ end
9
+
10
+ # talk (format '@un')
11
+ def talk
12
+ @un
13
+ end
14
+
15
+ # talk (format '@owner 「@un」')
16
+ # if @owner is empty, (format '@un')
17
+ def owner_talk
18
+ return talk if unknown?(owner)
19
+ "#{@owner}「#{talk}」"
20
+ end
21
+
22
+ # talk (format '@owner 「@un」 from [@origin]')
23
+ # if @owner is empty and @origin is empty, (format '@un')
24
+ # if @owner is empty and @origin is not empty, (format '@un' from [@origin])
25
+ # if @owner is not empty and @origin is empty, (format '@owner 「@un」')
26
+ def talk_with_origin
27
+ ret = talk
28
+ ret = "#{@owner}「#{ret}」" unless unknown?(@owner)
29
+ ret = "#{ret} from [#{@origin}]" unless unknown?(@origin)
30
+ ret
31
+ end
32
+
33
+ def inspect
34
+ "阿:#{@a}\t吽:#{@un}\t発言者:#{@owner}\t原典:#{@origin},\tユーザー定義:#{user_defined}"
35
+ end
36
+
37
+ # Columns
38
+ # @return [Array(*String)] @a, @un, @owner, @origin, @user_defined
39
+ def columns
40
+ [@a, @un, @owner, @origin, @user_defined]
41
+ end
42
+
43
+ private
44
+
45
+ def unknown?(target)
46
+ target == :unknown
47
+ end
48
+ end
49
+ end