nyancat 0.0.3 → 0.1.0

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.
@@ -32,16 +32,20 @@
32
32
  # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
33
33
  # WITH THE SOFTWARE.
34
34
 
35
- require 'yaml'
35
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
36
36
  require 'nyancat'
37
+ require 'optparse'
37
38
 
38
- path = File.dirname(__FILE__)
39
+ options = {}
40
+ OptionParser.new do |opts|
41
+ opts.banner = "Usage: nyancat [options]"
39
42
 
40
- begin
41
- frames = YAML::load(IO.read(path + '/../lib/nyancat/frames.yml'))
42
- palette = YAML::load(IO.read(path + '/../lib/nyancat/palette.yml'))
43
- rescue Exception => e
44
- puts "Unable to read frames or palette YAML"
45
- end
43
+ opts.on("-s", "--silent", "Don't play audio") do |s|
44
+ options[:mute] = s
45
+ end
46
+ opts.on("-f", "--flavour FLAVOUR", "Available flavours: #{NyanCat.flavours.join(', ')}") do |f|
47
+ options[:flavour] = f
48
+ end
49
+ end.parse!
46
50
 
47
- NyanCat.nyancat(frames, palette)
51
+ NyanCat.nyancat(options)
@@ -30,30 +30,41 @@
30
30
  # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
31
31
  # WITH THE SOFTWARE.
32
32
 
33
- module NyanCat
33
+ require 'yaml'
34
34
 
35
+ module NyanCat
35
36
  OUTPUT_CHAR = " "
36
37
 
37
- def self.nyancat(frames, palette)
38
-
38
+ def self.flavours
39
+ return Dir.entries(File.expand_path("../nyancat/", __FILE__)).select { |entry| !(entry =='.' || entry == '..') }
40
+ end
41
+
42
+ def self.nyancat(options = {})
43
+ flavour = options[:flavour] || 'original'
44
+ mute = options[:mute] || false
45
+
46
+ frames = YAML.load_file(File.expand_path("../nyancat/#{flavour}/frames.yml", __FILE__))
47
+ palette = YAML.load_file(File.expand_path("../nyancat/#{flavour}/palette.yml", __FILE__))
48
+ audio = File.expand_path("../nyancat/#{flavour}/audio.mp3", __FILE__)
49
+
39
50
  # Get TTY size
40
51
  term_width, term_height = `stty size`.split.map { |x| x.to_i }.reverse
41
52
 
42
53
  # Calculate the width in terms of the output char
43
54
  term_width = term_width / OUTPUT_CHAR.length
44
-
55
+
45
56
  min_row = 0
46
57
  max_row = frames[0].length
47
-
58
+
48
59
  min_col = 0
49
60
  max_col = frames[0][0].length
50
-
61
+
51
62
  min_row = (max_row - term_height) / 2 if max_row > term_height
52
63
  max_row = min_row + term_height if max_row > term_height
53
-
64
+
54
65
  min_col = (max_col - term_width) / 2 if max_col > term_width
55
66
  max_col = min_col + term_width if max_col > term_width
56
-
67
+
57
68
  frames = frames.map do |frame|
58
69
  frame[min_row...max_row].map do |line|
59
70
  line.chars.to_a[min_col...max_col].map do |c|
@@ -62,6 +73,8 @@ module NyanCat
62
73
  end.join + "\033[H"
63
74
  end
64
75
 
76
+ audio_thread = Thread.new { IO.popen("mpg123 -loop 0 -q #{audio} > /dev/null 2>&1") } unless mute
77
+
65
78
  start_time = Time.now
66
79
  printf("\033[H\033[2J\033[?25l")
67
80
  begin
@@ -80,4 +93,4 @@ module NyanCat
80
93
  raise e
81
94
  end
82
95
  end
83
- end
96
+ end
metadata CHANGED
@@ -1,70 +1,50 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: nyancat
3
- version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 0
9
- - 3
10
- version: 0.0.3
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Ben Arblaster
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-12-06 00:00:00 +00:00
19
- default_executable:
12
+ date: 2013-01-01 00:00:00.000000000 Z
20
13
  dependencies: []
21
-
22
14
  description: A Ruby port of Kevin Lange's nyancat
23
15
  email: ben@andatche.com
24
- executables:
16
+ executables:
25
17
  - nyancat
26
18
  extensions: []
27
-
28
19
  extra_rdoc_files: []
29
-
30
- files:
20
+ files:
31
21
  - lib/nyancat.rb
32
- - lib/nyancat/frames.yml
33
- - lib/nyancat/palette.yml
22
+ - lib/nyancat/original/audio.mp3
23
+ - lib/nyancat/original/frames.yml
24
+ - lib/nyancat/original/palette.yml
34
25
  - bin/nyancat
35
- has_rdoc: true
36
26
  homepage: https://github.com/andatche/ruby_nyancat/
37
27
  licenses: []
38
-
39
28
  post_install_message:
40
29
  rdoc_options: []
41
-
42
- require_paths:
30
+ require_paths:
43
31
  - lib
44
- required_ruby_version: !ruby/object:Gem::Requirement
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
45
37
  none: false
46
- requirements:
47
- - - ">="
48
- - !ruby/object:Gem::Version
49
- hash: 3
50
- segments:
51
- - 0
52
- version: "0"
53
- required_rubygems_version: !ruby/object:Gem::Requirement
38
+ required_rubygems_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
54
43
  none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 3
59
- segments:
60
- - 0
61
- version: "0"
62
44
  requirements: []
63
-
64
45
  rubyforge_project:
65
- rubygems_version: 1.3.7
46
+ rubygems_version: 1.8.23
66
47
  signing_key:
67
48
  specification_version: 3
68
49
  summary: nyancat on your terminal
69
50
  test_files: []
70
-