aun 0.0.1

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 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