chatwork_to_slack 0.1.0

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: 85fa4771962810514b9243ea9fba89437b0d494c
4
+ data.tar.gz: 5e560b0ec21b5074210684c79fea90271470d6fa
5
+ SHA512:
6
+ metadata.gz: 2540f1af5593f1987e5e654feba202b8b4a7470591712f7c8e41a83bf065e18a7f099a3283b579a3c50bddf3d490ae59cf9e5cf6cef616072b717dc39f18c6c4
7
+ data.tar.gz: 7ada0d43214f3b19776f61bf22c9421582343c4d845fd3bc71dda4cb8f72bbcfaa74e7e047ed26a1820bef76b221060b45940aaf11adfbe42bba0baeac34c6fd
data/.gitignore ADDED
@@ -0,0 +1,13 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ /chatwork_to_slack_data/
12
+ /chatwork_logs/
13
+ /users.csv
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in chatwork_to_slack.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 kkosuge
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # ChatWorkToSlack
2
+
3
+ ChatWork(chatwork.com)のデータを Slack の Import CSV 形式に変換するツール
4
+
5
+ ## Installation
6
+
7
+ ```
8
+ $ gem install chatwork_to_slack
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ユーザー定義リストのテンプレートを作成
14
+
15
+ ```
16
+ $ chatwork_to_slack --generate-template -k chatwork_api_key
17
+ ```
18
+
19
+ ChatWork からデータをダウンロードして Slack 形式に変換
20
+
21
+ ```
22
+ $ chatwork_to_slack -i example@example.co.jp -p your_password -x chatwork_room_id -c slack_channel_name
23
+ ```
24
+
25
+ ## Contributing
26
+
27
+ Bug reports and pull requests are welcome on GitHub at https://github.com/kkosuge/chatwork_to_slack.
28
+
29
+
30
+ ## License
31
+
32
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+ task :default => :spec
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "chatwork_to_slack"
5
+ require "optparse"
6
+ require "fileutils"
7
+ require "chatwork"
8
+ require "goodbye_chatwork"
9
+ require "csv"
10
+ require "pry"
11
+ require "pp"
12
+
13
+
14
+ opts = ARGV.getopts('i:p:e:x:c:d:h:k:', 'generate-template')
15
+ email = opts['i']
16
+ password = opts['p']
17
+ chatwork_api_key = opts['k']
18
+
19
+ if opts['generate-template'] && !!chatwork_api_key
20
+ client = ChatWorkToSlack::Client.new(chatwork_api_key: chatwork_api_key)
21
+ if File.exists?('users.csv')
22
+ puts 'users.csv exists'
23
+ else
24
+ csv = client.generate_template
25
+ CSV.parse(csv).each {|row| p row }
26
+ File.write('users.csv', csv)
27
+ puts 'users.csv generated'
28
+ end
29
+ exit
30
+ end
31
+
32
+ if opts['h'] || !email || !password
33
+ puts <<-EOS
34
+ Usage: chatwork_to_slack
35
+ -i your chatwork id -p your chatwork password
36
+ -e room id (export specified room's chat logs)
37
+ -x room id (export specified room's chat logs and download attachment files)
38
+ -c slack channel name
39
+ -d dir
40
+ -k chatwork API key (if --generate-template)
41
+ -h help
42
+ --generate-template generate users.csv
43
+ Example:
44
+ show room list
45
+ $ chatwork_to_slack -i example@example.com -p your_password
46
+ export specified room's chat logs (-e: chat logs only)
47
+ $ chatwork_to_slack -i example@example.com -p your_password -e room_id -c slack_channel_name
48
+ export specified room's chat logs (-x: chat logs and attachment files)
49
+ $ chatwork_to_slack -i example@example.com -p your_password -x room_id -c slack_channel_name
50
+ EOS
51
+ exit
52
+ end
53
+
54
+ gcw = GoodbyeChatwork::Client.new(email, password, verbose: true)
55
+
56
+ users =
57
+ if File.exists?('users.csv')
58
+ CSV.table('users.csv').map {|t| t.to_h }
59
+ else
60
+ gcw.info '[warning] users.csv not found'
61
+ []
62
+ end
63
+
64
+ ChatWorkToSlack::Importer.new(
65
+ gcw,
66
+ room_id: opts['x'] || opts['e'],
67
+ channel: opts['c'],
68
+ workdir: opts['d'] || 'chatwork_to_slack_data',
69
+ export_files: !!opts['x'],
70
+ users: users,
71
+ chatwork_api_key: chatwork_api_key
72
+ )
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'chatwork_to_slack/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "chatwork_to_slack"
8
+ spec.version = ChatWorkToSlack::VERSION
9
+ spec.authors = ["kkosuge"]
10
+ spec.email = ["root@kksg.net"]
11
+
12
+ spec.summary = %q{export ChatWork(chatwork.com) logs to Slack CSV format}
13
+ spec.description = %q{export ChatWork(chatwork.com) logs to Slack CSV format}
14
+ spec.homepage = "https://github.com/kkosuge/chatwork_to_slack"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
+ f.match(%r{^(test|spec|features)/})
19
+ end
20
+ spec.bindir = "bin"
21
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
22
+ spec.require_paths = ["lib"]
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.13"
25
+ spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "pry"
27
+
28
+ spec.add_runtime_dependency "chatwork", "~> 0.3"
29
+ spec.add_runtime_dependency "goodbye_chatwork", "~> 0.0"
30
+ end
@@ -0,0 +1,33 @@
1
+ module ChatWorkToSlack
2
+ module Filters
3
+ class Dtext
4
+ TEMPLATE = {
5
+ task_added: "タスク追加",
6
+ file_uploaded: "ファイルアップロード",
7
+ chatroom_chat_edited: "チャット変更",
8
+ chatroom_member_is: "メンバー ",
9
+ chatroom_priv_changed: " を管理者にしました",
10
+ chatroom_added: " が入室しました",
11
+ chatroom_deleted: " が退室しました",
12
+ chatroom_leaved: " が退室しました",
13
+ chatroom_chatname_is: "チャット名を ",
14
+ chatroom_description_is: "説明文を ",
15
+ chatroom_changed: " に変更しました",
16
+ chatroom_set: " に設定しました",
17
+ chatroom_groupchat_created: "チャット作成",
18
+ task_done: "タスク終了",
19
+ nickname_suffix: " さん",
20
+ chatroom_over_groupchatnum: " は,制限により入室できません"
21
+ }
22
+
23
+ def self.call(text, options)
24
+ text.scan(/(\[dtext:([\w]+)\])/).each do |dtext|
25
+ if t = TEMPLATE[dtext[1].to_sym]
26
+ text.gsub!(dtext[0], t)
27
+ end
28
+ end
29
+ text
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,55 @@
1
+ module ChatWorkToSlack
2
+ module Filters
3
+ class Emoji
4
+ TABLE = {
5
+ ':)' => ':grinning:',
6
+ ':(' => ':weary:',
7
+ ':D' => ':smiley:',
8
+ '8-)' => ':sunglasses:',
9
+ ':o' => ':hushed:',
10
+ ';)' => ':wink:',
11
+ ';(' => ':cry:',
12
+ '(sweat)' => ':sweat:',
13
+ ':|' => ':neutral_face:',
14
+ ':*' => ':kissing_heart:',
15
+ ':p' => ':stuck_out_tongue_winking_eye:',
16
+ '(blush)' => ':relaxed:',
17
+ ':^)' => ':thinking_face:',
18
+ '|-)' => ':sleeping:',
19
+ '(inlove)' => ':heart_eyes:',
20
+ ']:)' => ':triumph:',
21
+ '(talk)' => ':open_mouth:',
22
+ '(yawn)' => ':astonished:',
23
+ '(puke)' => ':hankey:',
24
+ '(emo)' => ':sunglasses:',
25
+ '8-|' => ':nerd_face:',
26
+ ':#)' => ':grin:',
27
+ '(nod)' => ':grin::slightly_smiling_face:',
28
+ '(shake)' => 'confused:',
29
+ '(^^;)' => ':sweat:',
30
+ '(whew)' => ':sweat:',
31
+ '(clap)' => ':clap:',
32
+ '(bow)' => ':bow:',
33
+ '(roger)' => ':hand:',
34
+ '(flex)' => ':muscle:',
35
+ '(dance)' => ':raised_hands:',
36
+ '(:/)' => ':spock-hand:',
37
+ '(devil)' => ':smiling_imp:',
38
+ '(*)' => ':star:',
39
+ '(h)' => ':heart:',
40
+ '(F)' => ':sunflower:',
41
+ '(cracker)' => ':tada:',
42
+ '(^)' => ':birthday:',
43
+ '(coffee)' => ':coffee:',
44
+ '(beer)' => ':beer:',
45
+ '(handshake)' => ':spock-hand:',
46
+ '(y)' => ':+1:',
47
+ }
48
+
49
+ def self.call(text, options)
50
+ TABLE.each {|c, s| text.gsub!(c, s)}
51
+ text
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,26 @@
1
+ module ChatWorkToSlack
2
+ module Filters
3
+ class Picon
4
+ def self.call(text, options)
5
+ return text unless options[:users]
6
+
7
+ text.scan(/(\[piconname:([\w]+)\])/).each do |picon|
8
+ user = options[:users].find {|cw| cw[:chatwork_account_id] == picon[1].to_i }
9
+ next unless user
10
+ member =
11
+ if user[:slack_name]
12
+ "#{user[:chatwork_name]} ( @#{user[:slack_name]} )"
13
+ else
14
+ user[:chatwork_name]
15
+ end
16
+ text.gsub!(picon[0], member)
17
+ end
18
+
19
+ text.scan(/(\[picon:([\w]+)\])/).each do |picon|
20
+ text.gsub!(picon[0], '')
21
+ end
22
+ text
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,18 @@
1
+ module ChatWorkToSlack
2
+ module Filters
3
+ class Pre
4
+ def self.call(text, options)
5
+ title_regexp = /(\[info\](\[title\]([\p{Hiragana}\p{Katakana}\p{Han}。、\w\s ]+)\[\/title\]))/
6
+ text.scan(title_regexp).each do |title|
7
+ text.gsub!(title[0], "*#{title[2]}*\n#{title[0]}")
8
+ text.gsub!(title[1], '')
9
+ end
10
+ text
11
+ .gsub(/\[code\]/, "```")
12
+ .gsub(/\[\/code\]/, "```")
13
+ .gsub(/\[info\]/, "```\n")
14
+ .gsub(/\[\/info\]/, "\n```")
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,43 @@
1
+ module ChatWorkToSlack
2
+ module Filters
3
+ class Quote
4
+ attr_reader :users, :chatwork_users
5
+ def initialize(users)
6
+ @users = users
7
+ end
8
+
9
+ def self.call(text, options)
10
+ new(options[:users]).call(text)
11
+ end
12
+
13
+ def call(text)
14
+ qts = text.scan(/(\[qt\].+\[\/qt\])/m)
15
+ return text if qts.empty?
16
+
17
+ quotes =
18
+ if text.scan(/\[qt\]/m).size > 1
19
+ text.split(/\[\/qt\]/).map{|t| "#{t}[/qt]".scan(/(\[qt\].+\[\/qt\])/m)[0]}.compact.map(&:first)
20
+ else
21
+ qts.first
22
+ end
23
+
24
+ result = text
25
+ quotes.each do |quote|
26
+ result.gsub!(quote,qtmeta(quote).split("\n").map{|t| ">#{t}"}.join("\n").gsub(/\[\/?qt\]/,''))
27
+ end
28
+ result
29
+ end
30
+
31
+ private
32
+
33
+ def qtmeta(text)
34
+ q = text.scan(/\[qtmeta.+\]/).first
35
+ qh = q.scan(/([\w]+)=([\d]+)/).to_h
36
+ time = Time.at(qh['time'].to_i)
37
+ user = users.find {|cw| cw[:chatwork_account_id] == qh['aid'].to_i }
38
+ return text unless user
39
+ text.gsub(q, "@#{user[:slack_name]}: #{time}\n")
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,50 @@
1
+ module ChatWorkToSlack
2
+ module Filters
3
+ class Reply
4
+ attr_reader :users
5
+ def initialize(users)
6
+ @users = users
7
+ end
8
+
9
+ def self.call(text, options)
10
+ new(options[:users]).call(text)
11
+ end
12
+
13
+ def call(text)
14
+ replace_reply(replace_to(text))
15
+ end
16
+
17
+ def replace_to(text)
18
+ if data = text.match(/(\[To:([\d]+)\](?:[\w\s]+さん)?)/)
19
+ to_text = data[0]
20
+ account_id = data[2]
21
+ user = users.find {|cw| cw[:chatwork_account_id] == account_id.to_i }
22
+
23
+ if !user || !user[:slack_name]
24
+ return replace_to(text.gsub(to_text, to_text.gsub(/\[/, '(').gsub(/\]/, ')')))
25
+ end
26
+
27
+ replace_to(text.gsub(to_text, "@#{user[:slack_name]}"))
28
+ else
29
+ text
30
+ end
31
+ end
32
+
33
+ def replace_reply(text)
34
+ if data = text.match(/\[rp[\s\w\-=]+\](?:[\w\s]+さん)?/)
35
+ to_text = data[0]
36
+ account_id = to_text.match(/aid=([\d]+)/)[1]
37
+ user = users.find {|cw| cw[:chatwork_account_id] == account_id.to_i }
38
+
39
+ if !user || !user[:slack_name]
40
+ return replace_reply(text.gsub(to_text, to_text.gsub(/\[/, '(').gsub(/\]/, ')')))
41
+ end
42
+
43
+ replace_reply(text.gsub(to_text, "@#{user[:slack_name]}"))
44
+ else
45
+ text
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,73 @@
1
+ require 'chatwork'
2
+
3
+ module ChatWorkToSlack
4
+ class Importer
5
+ attr_reader :room_id, :channel, :workdir, :export_files, :gcw, :c2s, :users, :chatwork_api_key
6
+ def initialize(gcw, args)
7
+ @room_id = args[:room_id]
8
+ @channel = args[:channel]
9
+ @workdir = args[:workdir]
10
+ @export_files = args[:export_files]
11
+ @users = args[:users]
12
+ @chatwork_api_key = args[:chatwork_api_key]
13
+ @gcw = gcw
14
+
15
+ gcw.login
16
+
17
+ if !room_id || !channel
18
+ chatwork_list
19
+ else
20
+ create_workdir
21
+ export
22
+ convert
23
+ end
24
+ end
25
+
26
+ def chatwork_list
27
+ puts gcw.room_list.map { |i| i.join(' ') }
28
+ end
29
+
30
+ def create_workdir
31
+ unless File.exists?(workdir)
32
+ gcw.info "mkdir #{workdir}"
33
+ FileUtils.mkdir_p(workdir)
34
+ end
35
+ end
36
+
37
+ def export
38
+ if export_files
39
+ gcw.export_csv(room_id, chatwork_csv_path, { include_file: true, dir: chatwork_files_path })
40
+ else
41
+ gcw.export_csv(room_id, chatwork_csv_path)
42
+ end
43
+ end
44
+
45
+ def chatwork_csv_path
46
+ File.join(workdir, "#{room_id}.csv")
47
+ end
48
+
49
+ def chatwork_files_path
50
+ File.join(workdir, "#{room_id}_files")
51
+ end
52
+
53
+ def slack_csv_path
54
+ File.join(workdir, "#{channel}.csv")
55
+ end
56
+
57
+ def convert
58
+ gcw.info "create #{slack_csv_path}"
59
+ File.write(slack_csv_path, c2s.to_csv)
60
+ end
61
+
62
+ def c2s
63
+ @c2s ||= ChatWorkToSlack::Client.new(
64
+ room_id: room_id,
65
+ channel: channel,
66
+ workdir: workdir,
67
+ users: users,
68
+ chatwork_csv_path: chatwork_csv_path,
69
+ chatwork_api_key: chatwork_api_key
70
+ )
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,59 @@
1
+ require "chatwork_to_slack/filters/dtext"
2
+ require "chatwork_to_slack/filters/emoji"
3
+ require "chatwork_to_slack/filters/picon"
4
+ require "chatwork_to_slack/filters/pre"
5
+ require "chatwork_to_slack/filters/reply"
6
+ require "chatwork_to_slack/filters/quote"
7
+
8
+ module ChatWorkToSlack
9
+ class Message
10
+ attr_reader :channel, :users
11
+ def initialize(args)
12
+ chatwork_message = args[:message]
13
+ @time = chatwork_message[0]
14
+ @name = chatwork_message[1]
15
+ @text = chatwork_message[2]
16
+ @users = args[:users]
17
+ @channel = args[:channel]
18
+ @chatwork_users = args[:chatwork_users]
19
+ end
20
+
21
+ def time
22
+ Time.parse(@time).to_i
23
+ end
24
+
25
+ def name
26
+ if @name.match(/\A[\d]+\Z/)
27
+ user = @users.find{|u| u[:chatwork_account_id] == @name.to_i}
28
+ else
29
+ user = @users.find{|u| u[:chatwork_name] == @name}
30
+ end
31
+
32
+ if !!user
33
+ user[:slack_name] || @name
34
+ else
35
+ @name
36
+ end
37
+ end
38
+
39
+ def text
40
+ options = { users: users }
41
+ filters.inject(@text) {|text, filter| filter.call(text, options)}
42
+ end
43
+
44
+ def filters
45
+ [
46
+ ChatWorkToSlack::Filters::Dtext,
47
+ ChatWorkToSlack::Filters::Emoji,
48
+ ChatWorkToSlack::Filters::Picon,
49
+ ChatWorkToSlack::Filters::Pre,
50
+ ChatWorkToSlack::Filters::Reply,
51
+ ChatWorkToSlack::Filters::Quote,
52
+ ]
53
+ end
54
+
55
+ def to_slack
56
+ [time, channel, name, text]
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,3 @@
1
+ module ChatWorkToSlack
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,83 @@
1
+ require "chatwork_to_slack/version"
2
+ require "chatwork_to_slack/message"
3
+ require "chatwork_to_slack/importer"
4
+ require "find"
5
+ require "csv"
6
+
7
+ module ChatWorkToSlack
8
+ class Client
9
+ attr_reader :room_id, :channel, :workdir, :chatwork_csv_path, :users, :chatwork_api_key
10
+
11
+ def initialize(args)
12
+ @room_id = args[:room_id]
13
+ @channel = args[:channel]
14
+ @workdir = args[:workdir]
15
+ @users = args[:users]
16
+ @chatwork_csv_path = args[:chatwork_csv_path]
17
+ @chatwork_api_key = args[:chatwork_api_key]
18
+ end
19
+
20
+ def to_csv
21
+ invalid_users.each do |name|
22
+ puts "[WARN] #{name} is not valid slack username"
23
+ end
24
+
25
+ CSV.generate do |csv|
26
+ slack_messages.each do |slack_message|
27
+ csv << slack_message
28
+ end
29
+ end
30
+ end
31
+
32
+ def generate_template
33
+ CSV.generate do |csv|
34
+ csv << ['chatwork_account_id', 'chatwork_name', 'slack_name']
35
+ chatwork_users.each do |u|
36
+ csv << [u['account_id'], u['name'], u['chatwork_id']]
37
+ end
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def chatwork_users
44
+ @chatwork_users ||= ->{
45
+ return [] unless chatwork_api_key
46
+ ChatWork.api_key = chatwork_api_key
47
+ ChatWork::Contacts.get.push(ChatWork::Me.get)
48
+ }.call
49
+ end
50
+
51
+ def channel
52
+ @channel
53
+ end
54
+
55
+ def chatwork_messages
56
+ CSV.read(chatwork_csv_path)
57
+ end
58
+
59
+ def invalid_users
60
+ slack_messages.map{|m| m[2]}.uniq.reject{|u| u.gsub(/[0-9]/,'').match(/[\w\.\-]+/)}
61
+ end
62
+
63
+ def valid_messages
64
+ chatwork_messages.reject do |message|
65
+ message[2] == '[deleted]'
66
+ end
67
+ end
68
+
69
+ def messages
70
+ valid_messages.map do |message|
71
+ Message.new(
72
+ message: message,
73
+ users: users,
74
+ channel: channel
75
+ ).to_slack
76
+ end
77
+ end
78
+
79
+ def slack_messages
80
+ messages.sort{|a, b| a[0] <=> b[0]}
81
+ end
82
+ end
83
+ end
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: chatwork_to_slack
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - kkosuge
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-11-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.13'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.13'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: chatwork
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.3'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: goodbye_chatwork
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.0'
83
+ description: export ChatWork(chatwork.com) logs to Slack CSV format
84
+ email:
85
+ - root@kksg.net
86
+ executables:
87
+ - chatwork_to_slack
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - Gemfile
93
+ - LICENSE.txt
94
+ - README.md
95
+ - Rakefile
96
+ - bin/chatwork_to_slack
97
+ - chatwork_to_slack.gemspec
98
+ - lib/chatwork_to_slack.rb
99
+ - lib/chatwork_to_slack/filters/dtext.rb
100
+ - lib/chatwork_to_slack/filters/emoji.rb
101
+ - lib/chatwork_to_slack/filters/picon.rb
102
+ - lib/chatwork_to_slack/filters/pre.rb
103
+ - lib/chatwork_to_slack/filters/quote.rb
104
+ - lib/chatwork_to_slack/filters/reply.rb
105
+ - lib/chatwork_to_slack/importer.rb
106
+ - lib/chatwork_to_slack/message.rb
107
+ - lib/chatwork_to_slack/version.rb
108
+ homepage: https://github.com/kkosuge/chatwork_to_slack
109
+ licenses:
110
+ - MIT
111
+ metadata: {}
112
+ post_install_message:
113
+ rdoc_options: []
114
+ require_paths:
115
+ - lib
116
+ required_ruby_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ required_rubygems_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ requirements: []
127
+ rubyforge_project:
128
+ rubygems_version: 2.4.5.1
129
+ signing_key:
130
+ specification_version: 4
131
+ summary: export ChatWork(chatwork.com) logs to Slack CSV format
132
+ test_files: []
133
+ has_rdoc: