twitchus 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
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
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in twitchus.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Jakub Arnold
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,25 @@
1
+ # Twitchus [![Travis-CI](https://secure.travis-ci.org/darthdeus/twitchus.png)](http://travis-ci.org/#!/darthdeus/twitchus) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/darthdeus/twitchus)
2
+
3
+ Twitchus is a gem for managing a list of Twitch.tv streams.
4
+ You just give it a list of streams and it will check their status
5
+ and additional infromation and save all the data into Redis.
6
+
7
+ ## Installation
8
+
9
+ $ gem install twitchus
10
+
11
+ ## Usage
12
+
13
+ Twitchus is designed to be run via cron on a regular basis. For that
14
+ it needs a config file which lists all the stream names.
15
+
16
+ Then simply run `twitchus -c config.yml`
17
+
18
+ ## Contributing
19
+
20
+ 1. Fork it
21
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
22
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
23
+ 4. Push to the branch (`git push origin my-new-feature`)
24
+ 5. Create new Pull Request
25
+ 6. Be happy!
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ require "cucumber"
4
+ require "cucumber/rake/task"
5
+
6
+ RSpec::Core::RakeTask.new
7
+
8
+ Cucumber::Rake::Task.new :features do |t|
9
+ t.cucumber_opts = "features --format pretty"
10
+ t.fork = false
11
+ end
12
+
13
+ task :test => :speed
14
+
15
+ task :default do
16
+ Rake::Task["spec"].invoke
17
+ end
18
+
data/bin/twitchus ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative "../lib/twitchus"
4
+ Twitchus::Cli.new.run(ARGV, ENV)
@@ -0,0 +1,6 @@
1
+ host: localhost
2
+ port: 6379
3
+ key: streams
4
+ streams:
5
+ - scvrush1
6
+ - ConsoleCombat
@@ -0,0 +1,21 @@
1
+ Feature: Configuration file
2
+ As a user
3
+ I want to be able to specify a configuration file
4
+ In order to tell twitchus where to load and store the data.
5
+
6
+ Scenario: run the binary without any argumetns
7
+ When I run `twitchus`
8
+ Then the exit status should be 1
9
+
10
+ Scenario: pass non-existent config file
11
+ When I run `twitchus -c foo.yml`
12
+ Then the exit status should be 1
13
+
14
+ Scenario: pass an existing file
15
+ Given a file named "config.yml" with:
16
+ """
17
+ foo
18
+ """
19
+ When I run `twitchus -c config.yml`
20
+ Then the exit status should be 0
21
+
@@ -0,0 +1 @@
1
+ require "aruba/cucumber"
@@ -0,0 +1,26 @@
1
+ require "rest-client"
2
+ require "json"
3
+
4
+ module Twitchus
5
+ class Checker
6
+
7
+ def check_all(channels)
8
+ channels.select { |channel| online?(channel) }
9
+ end
10
+
11
+ def check(channel)
12
+ raise ArgumentError, "Channel is required." unless channel
13
+ response = JSON.parse(RestClient.get(base_url + channel))
14
+
15
+ return response.first
16
+ end
17
+
18
+ def online?(channel)
19
+ !check(channel).nil?
20
+ end
21
+
22
+ def base_url
23
+ "http://api.justin.tv/api/stream/list.json?channel="
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,62 @@
1
+ require "optparse"
2
+
3
+ module Twitchus
4
+ class Cli
5
+
6
+ attr_reader :options
7
+
8
+ def initialize
9
+ @options = {}
10
+ end
11
+
12
+ def parser
13
+ @parser ||= OptionParser.new do |opts|
14
+
15
+ opts.on("-c CONFIG", "Specify a config file.") do |config|
16
+ @options[:config] = config
17
+ end
18
+
19
+ opts.on( "-h", "--help", "Display this message.") do |h|
20
+ $stdout.puts opts.to_s
21
+ exit 0
22
+ end
23
+
24
+ opts.on( "-v", "--version", "Output the version of Twitchus.") do |v|
25
+ $stdout.puts "Twitchus version #{Twitchus::VERSION}"
26
+ exit 0
27
+ end
28
+
29
+ end
30
+ end
31
+
32
+ def parse(argv, env)
33
+ parser.parse! argv
34
+
35
+ if @options[:config]
36
+ if File.exists? @options[:config]
37
+ worker = Twitchus::Worker.new(@options[:config])
38
+ worker.run
39
+
40
+ exit 0
41
+ else
42
+ raise OptionParser::ParseError, "The config file you specified doesn't exist"
43
+ end
44
+ else
45
+ raise OptionParser::ParseError, "You must specify a config file."
46
+ end
47
+
48
+ return true
49
+ rescue OptionParser::ParseError => e
50
+ $stderr.puts e
51
+ $stderr.puts
52
+ $stderr.puts parser.help
53
+ exit 1
54
+ end
55
+
56
+ def run(argv = ARGV, env = ENV)
57
+ parse(argv, env)
58
+ end
59
+
60
+ end
61
+
62
+ end
@@ -0,0 +1,30 @@
1
+ require "yaml"
2
+
3
+ module Twitchus
4
+ class Config
5
+ attr_reader :streams
6
+
7
+ def load(file)
8
+ @data = YAML.load_file(file)
9
+ @streams = @data["streams"]
10
+ end
11
+
12
+ def host
13
+ @data["host"]
14
+ end
15
+
16
+ def port
17
+ @data["port"]
18
+ end
19
+
20
+ def key
21
+ @data["key"]
22
+ end
23
+
24
+ # TODO - remove duplication
25
+ def channels
26
+ @streams
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,22 @@
1
+ require "redis"
2
+ require "pry"
3
+
4
+ module Twitchus
5
+ class Storage
6
+
7
+ def initialize(host, port, key)
8
+ @client = Redis.new(host: host, port: port)
9
+ @key = key
10
+ end
11
+
12
+ # Add an item to the list specified in config
13
+ def push(item)
14
+ @client.lpush(@key, item) if item
15
+ end
16
+
17
+ def clear
18
+ @client.expire @key, -1
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,3 @@
1
+ module Twitchus
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,21 @@
1
+ module Twitchus
2
+ class Worker
3
+ def initialize(config_file)
4
+ @config = Twitchus::Config.new
5
+ @config.load(config_file)
6
+ @checker = Twitchus::Checker.new
7
+ end
8
+
9
+ def run
10
+ @storage = Twitchus::Storage.new(@config.host, @config.port, @config.key)
11
+ # Empty the online channel list first
12
+ @storage.clear
13
+
14
+ online_channels = @checker.check_all(@config.channels)
15
+ online_channels.each do |channel|
16
+ @storage.push channel
17
+ end
18
+ end
19
+ end
20
+
21
+ end
data/lib/twitchus.rb ADDED
@@ -0,0 +1,10 @@
1
+ require_relative "twitchus/version"
2
+ require_relative "twitchus/config"
3
+ require_relative "twitchus/cli"
4
+ require_relative "twitchus/checker"
5
+ require_relative "twitchus/storage"
6
+ require_relative "twitchus/worker"
7
+
8
+ module Twitchus
9
+
10
+ end
@@ -0,0 +1,136 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://api.justin.tv/api/stream/list.json?channel=dreamhacktv
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - ! '*/*; q=0.5, application/xml'
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: !binary |-
20
+ T0s=
21
+ headers:
22
+ !binary "U2VydmVy":
23
+ - !binary |-
24
+ bmdpbng=
25
+ !binary "RGF0ZQ==":
26
+ - !binary |-
27
+ U3VuLCAyMyBTZXAgMjAxMiAxNTo1MDozMiBHTVQ=
28
+ !binary "Q29udGVudC1UeXBl":
29
+ - !binary |-
30
+ YXBwbGljYXRpb24vanNvbg==
31
+ !binary "VHJhbnNmZXItRW5jb2Rpbmc=":
32
+ - !binary |-
33
+ Y2h1bmtlZA==
34
+ !binary "Q29ubmVjdGlvbg==":
35
+ - !binary |-
36
+ Y2xvc2U=
37
+ !binary "U3RhdHVz":
38
+ - !binary |-
39
+ MjAwIE9L
40
+ !binary "Vmlh":
41
+ - !binary |-
42
+ VHdpY2UgMC4yIHdlYjExOjMzNDc=
43
+ !binary "WC1SdW50aW1l":
44
+ - !binary |-
45
+ MC4wMjQ4NjA=
46
+ !binary "WC1VYS1Db21wYXRpYmxl":
47
+ - !binary |-
48
+ SUU9RWRnZSxjaHJvbWU9MQ==
49
+ !binary "Q2FjaGUtQ29udHJvbA==":
50
+ - !binary |-
51
+ bWF4LWFnZT0wLCBwcml2YXRlLCBtdXN0LXJldmFsaWRhdGU=
52
+ !binary "WC1HZW8=":
53
+ - !binary |-
54
+ Q1o=
55
+ !binary "RnJvbnQtRW5kLUh0dHBz":
56
+ - !binary |-
57
+ b2Zm
58
+ !binary "Q29udGVudC1FbmNvZGluZw==":
59
+ - !binary |-
60
+ Z3ppcA==
61
+ body:
62
+ encoding: ASCII-8BIT
63
+ string: !binary |-
64
+ H4sIAAAAAAAAA7VWbW/bNhD+KwIH9JNtvdmWLTQdgr5sAYrlg7EO2zIIlHSS
65
+ mFKkQJGWvaH/fUcpipQsWFMENSDAlO6Od8899/LnPwTqFPIkk0ZoEpOtt16T
66
+ BRG0BjxxdoTEtKCSXAGtK5p91kf83Gp7vFfyg2gb4OuMaiilOqNmSWsmSnxX
67
+ SFVTa9nasjIVFQL4qLvZ+n60IJppbi98Z+3+jNc476/+uHauGxCx84lyEBmj
68
+ zoerXy4/Ou8uf7d2gWqjICexVgbQJaZhiiLydyhDU/Q9UdBIpa1kQXmLoncu
69
+ kHgMHgRN+cxUpgBEktEmMYonNeTM1OhcpXUTu26rqWbZMsvF6lYfRbcSoN1G
70
+ wZFB17pPQrb0N97J98PVbWMxGaO9LgqGcXFnCvvQI4syCBqGR2JhOJ+QTUbV
71
+ n0Z8W5NOsD8UnqdhzHJuUXbw91qmt5BpR58buLghtGk4Q0NMCve0bCuZfe7o
72
+ EZYFp211Q5wKWFlpFAz2Gzx2LNcVnsJNiCeW498+8OGahtMzcmbUzammKHAH
73
+ X9d1q1vTaiZW+uiioRL0HWxz7VXbFT/eZepixj68Li0zyaVCkz94/e+GvHnd
74
+ UEVrx/LWRsO57D4gcoc+lahzpNzYL5YseHSfUmgzxRpNswzadqZCeUfP9sVj
75
+ pVpiymeC3x7gE0Z70I5UPfDAaJlYUC96Br96ApZXyEqlk6PkBhEIbI7QXXdI
76
+ 8psbgYzC8Oa0bmtE6WWsjrzTZuQ0q2mJvQLr5TmGsXCGvtKwzPK8dWcpXjZK
77
+ FoxD0ttcbmC/XYdB5EOR5Wm4X+K1kYelBLaWbDWa9ptah2Y1/C2FrYT3RskG
78
+ 3INGvleS28KbFdRYbUNZTRFWprTK/9cPXhTg1vNO+IwhIhy5yUCNrW5yBIvI
79
+ Ntvv5gh2rc29Gww7aOCH3hZbwIJMTnCqvi8cIcKBzwjHOEGQa1PsD7vKo2n1
80
+ kPjPyN5Xuvk29E7raGQ+p6I0SFR0Bmyd9XNgmo17LwiitY8fJsieNVJeRKF+
81
+ 4Ey5e1T7z0nZVzAIA+8UrG1S+olGS6zBoU64LJlAMOZJ+GJhyUEmwxwhcRR4
82
+ C/Jf5KxIyrTCRQLJtg3DVeB7+zCyhEP6kXC3Cfz1Pth5eGkNmia4aFjkD9j+
83
+ 3ipaaOfqKnZ+w92jdWThfGQpKH1G4VRJmme01baOSIFKs3cJTg/cUUJcGUzO
84
+ JCYvhwzF6iZEMdNgIxhuMcI5QOMEoeNt4rUXr/dO4Pl29xnC6+ciiX10cEFK
85
+ kGjj1wN+HTlruTFSw99tvV24w+1n/IqtZ5hBOIXvt5VhKD5eUYYFzA5vvOJu
86
+ tRpcGH2//PSWfPnrX1m4nUXhCQAA
87
+ http_version:
88
+ recorded_at: Sun, 23 Sep 2012 15:50:32 GMT
89
+ - request:
90
+ method: get
91
+ uri: http://api.justin.tv/api/stream/list.json?channel=scvrush1
92
+ body:
93
+ encoding: US-ASCII
94
+ string: ''
95
+ headers:
96
+ Accept:
97
+ - ! '*/*; q=0.5, application/xml'
98
+ Accept-Encoding:
99
+ - gzip, deflate
100
+ User-Agent:
101
+ - Ruby
102
+ response:
103
+ status:
104
+ code: 200
105
+ message: OK
106
+ headers:
107
+ Server:
108
+ - nginx
109
+ Date:
110
+ - Sun, 23 Sep 2012 15:51:43 GMT
111
+ Content-Type:
112
+ - application/json
113
+ Content-Length:
114
+ - '2'
115
+ Connection:
116
+ - close
117
+ Status:
118
+ - 200 OK
119
+ Via:
120
+ - Twice 0.2 web9:3347
121
+ X-Runtime:
122
+ - '0.014319'
123
+ X-Ua-Compatible:
124
+ - IE=Edge,chrome=1
125
+ Cache-Control:
126
+ - max-age=0, private, must-revalidate
127
+ X-Geo:
128
+ - CZ
129
+ Front-End-Https:
130
+ - 'off'
131
+ body:
132
+ encoding: US-ASCII
133
+ string: ! '[]'
134
+ http_version:
135
+ recorded_at: Sun, 23 Sep 2012 15:51:44 GMT
136
+ recorded_with: VCR 2.2.5
@@ -0,0 +1,8 @@
1
+ require "twitchus"
2
+ require "pry"
3
+ require "vcr"
4
+
5
+ VCR.configure do |c|
6
+ c.cassette_library_dir = "spec/fixtures/vcr"
7
+ c.hook_into :webmock
8
+ end
@@ -0,0 +1,32 @@
1
+ require "spec_helper"
2
+
3
+ module Twitchus
4
+
5
+ describe Checker do
6
+
7
+ let(:c) { Checker.new }
8
+
9
+ it "can tell if a channel is online" do
10
+ VCR.use_cassette "justin.tv", record: :new_episodes do
11
+ c.should be_online("dreamhacktv")
12
+ end
13
+ end
14
+
15
+ it "can tell if a channel is offline" do
16
+ VCR.use_cassette "justin.tv", record: :new_episodes do
17
+ c.should_not be_online("scvrush1")
18
+ end
19
+ end
20
+
21
+ describe "#check_all" do
22
+
23
+ it "selects only those channels which are online" do
24
+ VCR.use_cassette "justin.tv", record: :new_episodes do
25
+ c.check_all(%w{dreamhacktv scvrush1}).should == ["dreamhacktv"]
26
+ end
27
+ end
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,60 @@
1
+ require "spec_helper"
2
+
3
+ module Twitchus
4
+
5
+ describe Cli do
6
+
7
+ before do
8
+ @old_stderr = $stderr
9
+ $stderr = StringIO.new
10
+
11
+ @old_stdout = $stdout
12
+ $stdout = StringIO.new
13
+ # Twitchus.reset_global_options
14
+ end
15
+
16
+ after do
17
+ # Twitchus.reset_global_options
18
+ $stderr = @old_stderr
19
+ $stdout = @old_stdout
20
+ end
21
+
22
+ def cli_test(argv, env, exit_val, stderr_regex = nil, stdout_regex = nil)
23
+ begin
24
+ cli = Cli.new
25
+ cli.run(argv, env)
26
+ return cli
27
+ rescue SystemExit => e
28
+ e.status.should == exit_val
29
+ $stderr.string.should match stderr_regex if stderr_regex
30
+ $stdout.string.should match stdout_regex if stdout_regex
31
+ end
32
+ end
33
+
34
+ it "exits with 1 with invalid options" do
35
+ cli_test(%w{-w}, {}, 1, /invalid option/)
36
+ cli_test(%w{-g foo}, {}, 1, /invalid option/)
37
+ end
38
+
39
+ it "exits with 1 if no config is given" do
40
+ cli_test([], {}, 1, /specify a config file/)
41
+ end
42
+
43
+ it "exits with 1 if the config file doesn't exist" do
44
+ cli_test(%w{-c foo.yml}, {}, 1, /file you specified doesn't exist/)
45
+ end
46
+
47
+ it "exits with 0 if an existing config file is given" do
48
+ file =<<YAML
49
+ streams:
50
+ - scvrush2
51
+ YAML
52
+ File.write("./tmp/config.yml", file)
53
+ Twitchus::Worker.stub(:new) { stub.as_null_object }
54
+
55
+ cli_test(%w{-c ./tmp/config.yml}, {}, 0)
56
+ end
57
+
58
+ end
59
+
60
+ end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+
4
+ module Twitchus
5
+ describe Config do
6
+
7
+ let(:config) { Config.new }
8
+
9
+ it "can load config with multiple streams" do
10
+ file =<<YAML
11
+ streams:
12
+ - scvrush1
13
+ - scvrush2
14
+ YAML
15
+ File.write("./tmp/config.yml", file)
16
+ config.load("./tmp/config.yml")
17
+ config.streams.should == %w{scvrush1 scvrush2}
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,39 @@
1
+ require "spec_helper"
2
+
3
+ module Twitchus
4
+
5
+ describe Storage do
6
+
7
+ it "will add things to the given key" do
8
+ client = mock(:redis)
9
+ client.should_receive(:lpush).with(:key, :item)
10
+
11
+ Redis.should_receive(:new) { client }
12
+
13
+ storage = Storage.new(1, 1, :key)
14
+ storage.push :item
15
+ end
16
+
17
+ it "won't add empty items to the list" do
18
+ client = mock(:redis)
19
+ client.should_not_receive(:lpush).with(:key, nil)
20
+
21
+ Redis.should_receive(:new) { client }
22
+
23
+ storage = Storage.new(1, 1, :key)
24
+ storage.push nil
25
+ end
26
+
27
+ it "can empty the storage" do
28
+ client = mock(:redis)
29
+ client.should_receive(:expire).with(:key, -1)
30
+
31
+ Redis.should_receive(:new) { client }
32
+
33
+ storage = Storage.new(1, 1, :key)
34
+ storage.clear
35
+ end
36
+
37
+ end
38
+ end
39
+
@@ -0,0 +1,4 @@
1
+ require "spec_helper"
2
+
3
+ describe Twitchus do
4
+ end
data/tmp/.gitkeep ADDED
File without changes
data/twitchus.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'twitchus/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "twitchus"
8
+ gem.version = Twitchus::VERSION
9
+ gem.authors = ["Jakub Arnold"]
10
+ gem.email = ["darthdeus@gmail.com"]
11
+ gem.description = %q{Twitchus is a gem for managing a list of Twitch.tv streams}
12
+ gem.summary = %q{Twitchus is a gem for managing a list of Twitch.tv streams}
13
+ gem.homepage = ""
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency "rest-client", "~> 1.6.7"
21
+ gem.add_dependency "redis", "~> 3.0.1"
22
+
23
+ gem.add_development_dependency "webmock", "~> 1.8.10"
24
+ gem.add_development_dependency "vcr", "~> 2.2.5"
25
+ gem.add_development_dependency "pry", "~> 0.9.10"
26
+ gem.add_development_dependency "rake", "~> 0.9.2.2"
27
+ gem.add_development_dependency "rspec", "~> 2.11.0"
28
+ gem.add_development_dependency "cucumber", "~> 1.2.1"
29
+ gem.add_development_dependency "aruba", "~> 0.4.11"
30
+ end
metadata ADDED
@@ -0,0 +1,231 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: twitchus
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jakub Arnold
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rest-client
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.6.7
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.6.7
30
+ - !ruby/object:Gem::Dependency
31
+ name: redis
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 3.0.1
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 3.0.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: webmock
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 1.8.10
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.8.10
62
+ - !ruby/object:Gem::Dependency
63
+ name: vcr
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 2.2.5
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 2.2.5
78
+ - !ruby/object:Gem::Dependency
79
+ name: pry
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 0.9.10
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 0.9.10
94
+ - !ruby/object:Gem::Dependency
95
+ name: rake
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 0.9.2.2
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 0.9.2.2
110
+ - !ruby/object:Gem::Dependency
111
+ name: rspec
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 2.11.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 2.11.0
126
+ - !ruby/object:Gem::Dependency
127
+ name: cucumber
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: 1.2.1
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: 1.2.1
142
+ - !ruby/object:Gem::Dependency
143
+ name: aruba
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ~>
148
+ - !ruby/object:Gem::Version
149
+ version: 0.4.11
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: 0.4.11
158
+ description: Twitchus is a gem for managing a list of Twitch.tv streams
159
+ email:
160
+ - darthdeus@gmail.com
161
+ executables:
162
+ - twitchus
163
+ extensions: []
164
+ extra_rdoc_files: []
165
+ files:
166
+ - .gitignore
167
+ - .rspec
168
+ - Gemfile
169
+ - LICENSE.txt
170
+ - README.md
171
+ - Rakefile
172
+ - bin/twitchus
173
+ - config.example.yml
174
+ - features/config.feature
175
+ - features/support/env.rb
176
+ - lib/twitchus.rb
177
+ - lib/twitchus/checker.rb
178
+ - lib/twitchus/cli.rb
179
+ - lib/twitchus/config.rb
180
+ - lib/twitchus/storage.rb
181
+ - lib/twitchus/version.rb
182
+ - lib/twitchus/worker.rb
183
+ - spec/fixtures/vcr/justin_tv.yml
184
+ - spec/spec_helper.rb
185
+ - spec/twitchus/checker_spec.rb
186
+ - spec/twitchus/cli_spec.rb
187
+ - spec/twitchus/config_spec.rb
188
+ - spec/twitchus/storage_spec.rb
189
+ - spec/twitchus_spec.rb
190
+ - tmp/.gitkeep
191
+ - twitchus.gemspec
192
+ homepage: ''
193
+ licenses: []
194
+ post_install_message:
195
+ rdoc_options: []
196
+ require_paths:
197
+ - lib
198
+ required_ruby_version: !ruby/object:Gem::Requirement
199
+ none: false
200
+ requirements:
201
+ - - ! '>='
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ segments:
205
+ - 0
206
+ hash: 1599783581367613971
207
+ required_rubygems_version: !ruby/object:Gem::Requirement
208
+ none: false
209
+ requirements:
210
+ - - ! '>='
211
+ - !ruby/object:Gem::Version
212
+ version: '0'
213
+ segments:
214
+ - 0
215
+ hash: 1599783581367613971
216
+ requirements: []
217
+ rubyforge_project:
218
+ rubygems_version: 1.8.24
219
+ signing_key:
220
+ specification_version: 3
221
+ summary: Twitchus is a gem for managing a list of Twitch.tv streams
222
+ test_files:
223
+ - features/config.feature
224
+ - features/support/env.rb
225
+ - spec/fixtures/vcr/justin_tv.yml
226
+ - spec/spec_helper.rb
227
+ - spec/twitchus/checker_spec.rb
228
+ - spec/twitchus/cli_spec.rb
229
+ - spec/twitchus/config_spec.rb
230
+ - spec/twitchus/storage_spec.rb
231
+ - spec/twitchus_spec.rb