ruboty-syoboi_calendar 0.0.5

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: b037bd70fde5f02af1c9b1bb408f35193b5f8425
4
+ data.tar.gz: 58a98d475553d4a43d0f1a85388f340554d82d2a
5
+ SHA512:
6
+ metadata.gz: d1219e7a179a4a89ee87ed827794213d4eee45765572e68b5eea668e811ca078b2b4444d3cd2cf3b30d791f8fec4f67e81b71a5a3fe4b3dc14ce1521187b5c8f
7
+ data.tar.gz: 1ef5274447c4f46f023be4984153ff6af3f276549555819e50b2bff99a65a202aa1567cc410d2725fa83e6fafab55f85d652fda60c727649122cc7ef8f987f58
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/CHANGELOG.md ADDED
@@ -0,0 +1,16 @@
1
+ ## 0.0.5
2
+ * Rename: Ellen -> Ruboty
3
+
4
+ ## 0.0.4
5
+ * Format message if adapter supports :code option
6
+
7
+ ## 0.0.3
8
+ * Improve program count view
9
+ * Show channel name on description
10
+
11
+ ## 0.0.2
12
+ * Add SYOBOI_CALENDAR_CHANNEL_IDS ENV to filter programs
13
+ * Search in 04:00..28:00
14
+
15
+ ## 0.0.1
16
+ * 1st Release
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ruboty-syoboi_calendar.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Ryo Nakamura
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,21 @@
1
+ # Ruboty::SyoboiCalendar
2
+ Ask today's Japanese anime line-up from [cal.syoboi.jp](http://cal.syoboi.jp/).
3
+
4
+ ## Installation
5
+ ```ruby
6
+ # Gemfile
7
+ gem "ruboty-syoboi_calendar"
8
+ ```
9
+
10
+ ## Usage
11
+ ```
12
+ @ruboty list anime
13
+ ```
14
+
15
+ ## ENV
16
+ ```
17
+ SYOBOI_CALENDAR_CHANNEL_IDS - Comma-separated channel IDs to filter programs
18
+ ```
19
+
20
+ ## Screenshot
21
+ ![](https://raw.githubusercontent.com/r7kamura/ruboty-syoboi_calendar/master/images/screenshot.png)
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
Binary file
@@ -0,0 +1,65 @@
1
+ require "active_support/core_ext/enumerable"
2
+ require "active_support/core_ext/numeric/time"
3
+ require "active_support/core_ext/date"
4
+ require "active_support/core_ext/time"
5
+
6
+ module Ruboty
7
+ module Handlers
8
+ class SyoboiCalendar < Base
9
+ on(/list anime\z/, name: "list", description: "List today's anime")
10
+
11
+ env :SYOBOI_CALENDAR_CHANNEL_IDS, "Comma-separated channel IDs to filter programs", optional: true
12
+
13
+ def list(message)
14
+ message.reply(description, code: true)
15
+ end
16
+
17
+ private
18
+
19
+ def description
20
+ if programs.empty?
21
+ "No programs found"
22
+ else
23
+ programs.sort_by(&:started_at).map do |program|
24
+ count = " ##{program.count}" if program.count
25
+ %<#{program.started_at.strftime("%Y-%m-%d %H:%M")} #{program.title.name}#{count} (#{program.channel.name})>
26
+ end.join("\n")
27
+ end
28
+ end
29
+
30
+ def programs
31
+ @programs ||= ::SyoboiCalendar::Client.new.programs(program_options)
32
+ end
33
+
34
+ def program_options
35
+ {
36
+ played_from: played_from,
37
+ played_to: played_to,
38
+ channel_id: channel_ids,
39
+ includes: [:channel, :title],
40
+ }.reject {|key, value| value.nil? }
41
+ end
42
+
43
+ def channel_ids
44
+ ENV["SYOBOI_CALENDAR_CHANNEL_IDS"]
45
+ end
46
+
47
+ def now
48
+ @now ||= Time.now
49
+ end
50
+
51
+ def played_from
52
+ now
53
+ end
54
+
55
+ # 04:00 ~ 28:00
56
+ def played_to
57
+ if now.hour >= 4
58
+ now.tomorrow.beginning_of_day + 4.hour
59
+ else
60
+ now.beginning_of_day + 4.hour
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,5 @@
1
+ module Ruboty
2
+ module SyoboiCalendar
3
+ VERSION = "0.0.5"
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ require "ruboty"
2
+ require "syoboi_calendar"
3
+
4
+ require "ruboty/handlers/syoboi_calendar"
5
+ require "ruboty/syoboi_calendar/version"
@@ -0,0 +1,28 @@
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "ruboty/syoboi_calendar/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "ruboty-syoboi_calendar"
7
+ spec.version = Ruboty::SyoboiCalendar::VERSION
8
+ spec.authors = ["Ryo Nakamura"]
9
+ spec.email = ["r7kamura@gmail.com"]
10
+ spec.summary = "Ask today's Japanese anime line-up from cal.syoboi.jp."
11
+ spec.homepage = "https://github.com/r7kamura/ruboty-syoboi_calendar"
12
+ spec.license = "MIT"
13
+
14
+ spec.files = `git ls-files -z`.split("\x0")
15
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.require_paths = ["lib"]
18
+
19
+ spec.add_dependency "activesupport"
20
+ spec.add_dependency "ruboty"
21
+ spec.add_dependency "syoboi_calendar", "0.3.1"
22
+ spec.add_development_dependency "bundler", "~> 1.6"
23
+ spec.add_development_dependency "pry"
24
+ spec.add_development_dependency "rack"
25
+ spec.add_development_dependency "rake"
26
+ spec.add_development_dependency "rspec", "2.14.1"
27
+ spec.add_development_dependency "webmock"
28
+ end
@@ -0,0 +1,142 @@
1
+ require "spec_helper"
2
+
3
+ describe Ruboty::Handlers::SyoboiCalendar do
4
+ let(:instance) do
5
+ described_class.new(robot)
6
+ end
7
+
8
+ let(:robot) do
9
+ Ruboty::Robot.new
10
+ end
11
+
12
+ let(:dummy_channels_response) do
13
+ <<-EOS.strip_heredoc
14
+ <?xml version="1.0" encoding="UTF-8"?>
15
+ <ChLookupResponse>
16
+ <Result>
17
+ <Code>200</Code>
18
+ <Message>
19
+ </Message>
20
+ </Result>
21
+ <ChItems>
22
+ <ChItem id="3">
23
+ <ChComment>DummyComment</ChComment>
24
+ <ChEPGURL>http://example.com/epg-url</ChEPGURL>
25
+ <ChGID>1</ChGID>
26
+ <ChID>3</ChID>
27
+ <ChName>DummyChannelName</ChName>
28
+ <ChNumber>3</ChNumber>
29
+ <ChURL>http://example.com/</ChURL>
30
+ <ChiEPGName>DummyiEPGName</ChiEPGName>
31
+ <LastUpdate>2000-01-01 00:00:00</LastUpdate>
32
+ </ChItem>
33
+ </ChItems>
34
+ </ChLookupResponse>
35
+ EOS
36
+ end
37
+
38
+ let(:dummy_programs_response) do
39
+ <<-EOS.strip_heredoc
40
+ <?xml version="1.0" encoding="UTF-8"?>
41
+ <ProgLookupResponse>
42
+ <ProgItems>
43
+ <ProgItem id="1">
44
+ <ChID>3</ChID>
45
+ <Count>1</Count>
46
+ <Deleted>0</Deleted>
47
+ <EdTime>2000-01-01 00:00:00</EdTime>
48
+ <Flag>9</Flag>
49
+ <LastUpdate>2000-01-01 00:00:00</LastUpdate>
50
+ <PID>1</PID>
51
+ <ProgComment>DummyComment</ProgComment>
52
+ <Revision>2</Revision>
53
+ <STSubTitle>DummySubTitle</STSubTitle>
54
+ <StOffset>0</StOffset>
55
+ <StTime>2000-01-01 00:00:00</StTime>
56
+ <SubTitle></SubTitle>
57
+ <TID>2</TID>
58
+ <Warn>1</Warn>
59
+ </ProgItem>
60
+ </ProgItems>
61
+ <Result>
62
+ <Code>200</Code>
63
+ <Message>
64
+ </Message>
65
+ </Result>
66
+ </ProgLookupResponse>
67
+ EOS
68
+ end
69
+
70
+ let(:dummy_titles_response) do
71
+ <<-EOS.strip_heredoc
72
+ <?xml version="1.0" encoding="UTF-8"?>
73
+ <TitleLookupResponse>
74
+ <Result>
75
+ <Code>200</Code>
76
+ <Message>
77
+ </Message>
78
+ </Result>
79
+ <TitleItems>
80
+ <TitleItem id="2">
81
+ <Cat>4</Cat>
82
+ <Comment>DummyComment</Comment>
83
+ <FirstCh>DummyChannel</FirstCh>
84
+ <FirstEndMonth>1</FirstEndMonth>
85
+ <FirstEndYear>2000</FirstEndYear>
86
+ <FirstMonth>1</FirstMonth>
87
+ <FirstYear>2000</FirstYear>
88
+ <Keywords>DummyKeywords</Keywords>
89
+ <LastUpdate>2000-01-01 00:00:00</LastUpdate>
90
+ <ShortTitle>DummyShortTitle</ShortTitle>
91
+ <SubTitles>DummySubTitles</SubTitles>
92
+ <TID>2</TID>
93
+ <Title>DummyTitle</Title>
94
+ <TitleEN>DummyEnglishTitle</TitleEN>
95
+ <TitleFlag>0</TitleFlag>
96
+ <TitleYomi>ダミータイトル</TitleYomi>
97
+ <UserPoint>6</UserPoint>
98
+ <UserPointRank>1</UserPointRank>
99
+ </TitleItem>
100
+ </TitleItems>
101
+ </TitleLookupResponse>
102
+ EOS
103
+ end
104
+
105
+ let(:app) do
106
+ ->(env) do
107
+ [
108
+ 200,
109
+ { "Content-type" => "application/xml" },
110
+ [
111
+ case env["QUERY_STRING"]
112
+ when /ProgLookup/
113
+ dummy_programs_response
114
+ when /ChLookup/
115
+ dummy_channels_response
116
+ else
117
+ dummy_titles_response
118
+ end,
119
+ ],
120
+ ]
121
+ end
122
+ end
123
+
124
+ describe "#list" do
125
+ before do
126
+ stub_request(:get, /cal.syoboi.jp/).to_rack(app)
127
+ end
128
+
129
+ let(:message) do
130
+ {
131
+ body: "@ruboty list anime",
132
+ from: "test",
133
+ to: "ruboty",
134
+ }
135
+ end
136
+
137
+ it "replies today's anime list" do
138
+ Ruboty.logger.should_receive(:info).with("2000-01-01 00:00 DummyTitle #1 (DummyChannelName)")
139
+ robot.receive(message)
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,10 @@
1
+ require "ruboty/syoboi_calendar"
2
+ require "active_support/all"
3
+ require "rack"
4
+ require "webmock/rspec"
5
+
6
+ RSpec.configure do |config|
7
+ config.treat_symbols_as_metadata_keys_with_true_values = true
8
+ config.run_all_when_everything_filtered = true
9
+ config.filter_run :focus
10
+ end
metadata ADDED
@@ -0,0 +1,186 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruboty-syoboi_calendar
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Ryo Nakamura
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-05-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ruboty
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: syoboi_calendar
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 0.3.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.3.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.6'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.6'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rack
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 2.14.1
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 2.14.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: webmock
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description:
140
+ email:
141
+ - r7kamura@gmail.com
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - ".gitignore"
147
+ - CHANGELOG.md
148
+ - Gemfile
149
+ - LICENSE.txt
150
+ - README.md
151
+ - Rakefile
152
+ - images/screenshot.png
153
+ - lib/ruboty/handlers/syoboi_calendar.rb
154
+ - lib/ruboty/syoboi_calendar.rb
155
+ - lib/ruboty/syoboi_calendar/version.rb
156
+ - ruboty-syoboi_calendar.gemspec
157
+ - spec/ruboty/handlers/syoboi_calendar_spec.rb
158
+ - spec/spec_helper.rb
159
+ homepage: https://github.com/r7kamura/ruboty-syoboi_calendar
160
+ licenses:
161
+ - MIT
162
+ metadata: {}
163
+ post_install_message:
164
+ rdoc_options: []
165
+ require_paths:
166
+ - lib
167
+ required_ruby_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ required_rubygems_version: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
177
+ requirements: []
178
+ rubyforge_project:
179
+ rubygems_version: 2.2.2
180
+ signing_key:
181
+ specification_version: 4
182
+ summary: Ask today's Japanese anime line-up from cal.syoboi.jp.
183
+ test_files:
184
+ - spec/ruboty/handlers/syoboi_calendar_spec.rb
185
+ - spec/spec_helper.rb
186
+ has_rdoc: