catsay 0.0.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.
data/bin/catsay ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+
5
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'catsay'))
6
+
7
+ Catsay::CLI.run!
data/cats/default.erb ADDED
@@ -0,0 +1,9 @@
1
+
2
+ <%= @message %>
3
+ O
4
+ o
5
+
6
+ |\ _,,,---,,_
7
+ /,`.-'`' -. ;-;;,_
8
+ |,4- ) )-,_..;\ ( `'-'
9
+ '---''(_/--' `-'\_)
data/cats/test.erb ADDED
@@ -0,0 +1 @@
1
+ A kitty meows, "<%= @message %>"
data/lib/cat.rb ADDED
@@ -0,0 +1,22 @@
1
+ module Catsay
2
+
3
+ # Cat class does the meowing.
4
+ class Cat
5
+
6
+ # create a new instance of cat
7
+ # :template specifies which template to use
8
+ # the default template is :default
9
+ def initialize(kwargs = {})
10
+ @template = kwargs[:template]
11
+ return self
12
+ end
13
+
14
+ # renders the message using an erb template
15
+ # returns the rendered template
16
+ def meow(message)
17
+ @message = message
18
+ ERB.new(@template).result(binding)
19
+ end
20
+ end
21
+
22
+ end # module Catsay
data/lib/catsay.rb ADDED
@@ -0,0 +1,144 @@
1
+ require 'erb'
2
+
3
+ # this is real ugly
4
+ includes = %w{cat exceptions}
5
+
6
+ includes.each do |inc|
7
+ require File.expand_path(File.join(File.dirname(__FILE__), inc))
8
+ end
9
+
10
+ module Catsay
11
+
12
+ # handle CLI stuff
13
+ class CLI
14
+ class << self
15
+
16
+ # - parses command-line arguments
17
+ # - finds the cat and makes it meow
18
+ # (or gives an error)
19
+ def run!
20
+ @options = parse_arguments
21
+
22
+ if @options[:verbose]
23
+ p @options
24
+ end
25
+
26
+ cat = @options[:cat]
27
+
28
+ output_handle.puts Cat.new(:template => template).meow(message)
29
+ end
30
+
31
+ private
32
+
33
+ # returns a file handle for the input
34
+ # if there is one or returns nil
35
+ def input_handle
36
+ if @options[:message] != nil
37
+ nil
38
+ elsif @options[:input]
39
+ begin
40
+ File.open(@options[:input])
41
+ rescue Errno::ENOENT
42
+ $stderr.puts "no such file #{@options[:input]}"
43
+ exit -1
44
+ end
45
+ else
46
+ $stdin
47
+ end
48
+ end
49
+
50
+ # check if output is a string
51
+ # if so, open it because that's probably a filename
52
+ # otherwise, just return $stdout
53
+ def output_handle
54
+ if @options[:output].is_a? String
55
+ File.open(@options[:output], 'w')
56
+ else
57
+ $stdout
58
+ end
59
+ end
60
+
61
+ # Given a symbol for a cat template, check if it
62
+ # exists. If it does, return the cat template, otherwise
63
+ # exits with an error
64
+ def template
65
+ begin
66
+ heisenberg?(@options[:cat])
67
+ rescue DeadKitty
68
+ $stderr.puts "I haven't met a kitty named \"#{@options[:cat]}\" yet."
69
+ exit -1
70
+ else
71
+ File.read(template_path_for(@options[:cat]))
72
+ end
73
+ end
74
+
75
+ # checks if a template exists given a template id
76
+ # if not, raises DeadKitty exception.
77
+ def heisenberg?(cat)
78
+ if File.exists? template_path_for(cat)
79
+ cat
80
+ else
81
+ raise DeadKitty
82
+ end
83
+ end
84
+
85
+ # returns the file path given a template id
86
+ # the template id should be the name of the file
87
+ # in the cats/ directory minus the cats/ and
88
+ # .erb extension
89
+ def template_path_for(template_id)
90
+ File.join('cats', "#{template_id}.erb")
91
+ end
92
+
93
+ # fetches the input by first looking for
94
+ # an input handle and then looking for
95
+ # options[:text] (text specified after arguments)
96
+ def message
97
+ if input_handle.nil?
98
+ @options[:message]
99
+ else
100
+ input_handle.read
101
+ end
102
+ end
103
+
104
+ # parses the command-line arguments
105
+ def parse_arguments
106
+
107
+ options = Hash.new
108
+
109
+ OptionParser.new do |opts|
110
+ opts.banner = "usage: catsay ..."
111
+
112
+ opts.on('-c', '--cat [TEMPLATE]', 'Chooses the cat.') do |cat|
113
+ options[:cat] = cat.to_sym || :default
114
+ end
115
+
116
+ opts.on('-o', '--out [OUTFILE]', 'Output file (default=/dev/stdout)') do |output|
117
+ options[:output] = output
118
+ end
119
+
120
+ opts.on('-i', '--in [INFILE]', 'Input file (default=/dev/stdin)') do |input|
121
+ options[:input] = input
122
+ end
123
+
124
+ opts.on('-e', '--verbose', 'Annoying kitty') do |verbose|
125
+ options[:verbose] = verbose
126
+ end
127
+ end.parse!
128
+
129
+ # check if there is a message, otherwise set message to nil
130
+ message = ARGV.join(' ')
131
+ options[:message] = message == "" ? nil : message
132
+
133
+ # check if there is a cat template, otherwise set to :default
134
+ options[:cat] = options[:cat] || :default
135
+
136
+ return options
137
+
138
+ end
139
+
140
+ end # class << self
141
+ end
142
+
143
+
144
+ end
data/lib/exceptions.rb ADDED
@@ -0,0 +1,5 @@
1
+ module Catsay
2
+ class DeadKitty< Exception
3
+ "I can't find the cat. It must be dead."
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,52 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: catsay
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Austin G. Davis-Richardson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-04-03 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Like cowsay but with cats
15
+ email: harekrishna@gmail.com
16
+ executables:
17
+ - catsay
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - bin/catsay
22
+ - lib/cat.rb
23
+ - lib/catsay.rb
24
+ - lib/exceptions.rb
25
+ - cats/default.erb
26
+ - cats/test.erb
27
+ homepage: https://github.com/audy/catsay
28
+ licenses:
29
+ - MIT
30
+ post_install_message:
31
+ rdoc_options: []
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ requirements: []
47
+ rubyforge_project:
48
+ rubygems_version: 1.8.23
49
+ signing_key:
50
+ specification_version: 3
51
+ summary: Cats in your terminal
52
+ test_files: []