cli_yo 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1c3cb81486d2e06715a3de7678b6dbbcdce1ea29
4
+ data.tar.gz: a183a16fec3d63b6dda3f6d4e48730109285ea6f
5
+ SHA512:
6
+ metadata.gz: d2c5ea920cb0b919e134d33bb77bda6657bf51d55c36b5f3c16b40af6bf2255bd2940a2927ed3a2e1a9a717ebc3a6119906c5e22092205641d26f4a84686004b
7
+ data.tar.gz: 95e3aaa2bb274bb7154c90138008f37457506b9c0673f2862fdc76fa6e2aa33527eab2e93fca42c424996b3be75587c8cbed032adc650e0c6bc291e19426b679
data/bin/cli-yo ADDED
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "mercenary"
4
+
5
+ Mercenary.program(:cliYo) do |p|
6
+ p.description 'CliYo is a program which can send Yo!s from the command line, at regular intervals'
7
+ p.syntax "cli-yo <all your friends you wanna yo!> [options]"
8
+ p.version "0.0.1"
9
+
10
+ p.description "yo your friends from the command line"
11
+ p.option 'silent', "-s" , '--silent', 'silently yo your friend while you proceed with your work!'
12
+ p.option "times" , "-t COUNT" , "--times COUNT" , "how many times do you want to yo! your friend, defaults to 1"
13
+ p.option "interval" , "-i INTERVAL" , "--interval INTERVAL" , "how often do you want to yo! your friend (in minutes) , defaults to 1"
14
+ p.option "api_token" , "-a TOKEN" , "--api_token TOKEN" , "Write your api_token (or add it inside .bashrc file)"
15
+
16
+ p.action do |args , options|
17
+ require "cli_yo"
18
+ options = options.inject({}){ |memo , (key , value)| memo[key.to_sym] = value ; memo}
19
+ options[:usernames] = args
20
+
21
+ Cli_Yo.numeric_properties.each do |prop|
22
+ options[prop] = options[prop].to_i if options[prop]
23
+ end
24
+
25
+ Cli_Yo.yo! options
26
+
27
+ end
28
+ end
@@ -0,0 +1,27 @@
1
+ module Helper
2
+ def self.consecutive_counter n
3
+ suffix = "th"
4
+ unless (n >= 10 && n <= 20) || n.to_s[-2] == '1'
5
+ if n.to_s[-1] == '1'
6
+ suffix = "st"
7
+ elsif n.to_s[-1] == '2'
8
+ suffix = "nd"
9
+ elsif n.to_s[-1] == '3'
10
+ suffix = 'rd'
11
+ end
12
+ end
13
+ "#{n}-#{suffix}"
14
+ end
15
+
16
+ def self.beautiful_sentence arr
17
+ return nil if arr.size == 0
18
+ return arr[0] if arr.size == 1
19
+
20
+ str = ""
21
+ for i in 0...(arr.size - 1) do
22
+ str += ", " unless i == 0
23
+ str += "#{arr[i]}"
24
+ end
25
+ str = "#{str} and #{arr.last}"
26
+ end
27
+ end
@@ -0,0 +1,31 @@
1
+ class Yo_Arguments
2
+ def initialize arguments = Hash.new
3
+ @arguments = Hash.new
4
+
5
+ Cli_Yo.all_properties.each do |prop|
6
+ @arguments[prop] = arguments[prop]
7
+ end
8
+
9
+ @arguments[:times] ||= 1
10
+ @arguments[:api_token] ||= `echo $YO_TOKEN`.chomp
11
+ @arguments[:interval] ||= 1
12
+ end
13
+
14
+ def method_missing method , *args
15
+ #check whether the property actuall exists
16
+
17
+ is_setter = (method.to_s[-1] == '=')
18
+ reference_symbol = method.to_s[-1] == '=' ? method.to_s.chop.to_sym : method
19
+ super unless Cli_Yo.all_properties.include? reference_symbol
20
+ if is_setter
21
+ @arguments[reference_symbol] = args[0]
22
+ else
23
+ @arguments[reference_symbol]
24
+ end
25
+ end
26
+
27
+ def property_is_set? property
28
+ property = property.to_sym if property.class == String
29
+ @arguments[property] != nil
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+ class Yo_Error < Exception
2
+ attr_reader :error , :code
3
+
4
+ def initialize error , code = nil
5
+ @error = error
6
+ @code = code
7
+ end
8
+
9
+ def to_s
10
+ if @code
11
+ "Error code #{@code} => #{@error}"
12
+ else
13
+ @error
14
+ end
15
+ end
16
+ end
data/lib/cli_yo.rb ADDED
@@ -0,0 +1,59 @@
1
+ require "rest_client"
2
+ require "json"
3
+ YO_URL = "http://api.justyo.co/yo/"
4
+
5
+ module Cli_Yo
6
+
7
+ @all_properties = [:silent , :times , :usernames , :api_token , :interval];
8
+ @numeric_properties = [:times , :interval];
9
+ @mandatory_properties = [:usernames , :api_token]
10
+
11
+ require "cli_yo/yo_arguments.rb"
12
+ require "cli_yo/yo_error.rb"
13
+ require "cli_yo/helper.rb"
14
+
15
+ class << self
16
+ attr_reader :short_cut_mapping , :all_properties , :numeric_properties , :mandatory_properties
17
+
18
+ def yo! arguments
19
+
20
+ raise Yo_Error.new "invalid arguments class provided!" unless arguments.class == Hash || arguments.class == Yo_Arguments
21
+ arguments = Yo_Arguments.new arguments if arguments.class == Hash
22
+ p arguments
23
+ begin
24
+
25
+ raise Yo_Error.new "Noone to yo!" if arguments.usernames.size == 0
26
+ Cli_Yo.mandatory_properties.each do |prop|
27
+ raise Yo_Error.new "Missing mandatory argument #{prop}" unless arguments.property_is_set? (prop)
28
+ end
29
+
30
+ puts "Going to start yo-ing #{Helper::beautiful_sentence(arguments.usernames)}"
31
+ puts "Pid of current Process is #{Process.pid} "
32
+
33
+ Process.daemon(true) if arguments.silent
34
+ counter = arguments.times
35
+
36
+ until counter <= 0 do
37
+ arguments.usernames.each do |username|
38
+ result = RestClient.post YO_URL , {username: username , api_token: arguments.api_token}
39
+ result = JSON.parse result , symbolize_names: true
40
+ raise Yo_Error.new(result[:error] , result[:code]) if result[:code] || result[:error]
41
+ end
42
+ puts "Yo-ed #{Helper::beautiful_sentence(arguments.usernames)} ! This is the #{Helper::consecutive_counter (arguments.times - counter + 1)} Yo!!" unless arguments.silent
43
+ counter -= 1
44
+ break if counter <= 0
45
+ sleep arguments.interval * 60 #Yo allows at most 1 minutes once!
46
+ end
47
+
48
+ unless arguments.silent
49
+ puts "\nCompleted your Yo-es with ultimate awesomeness!"
50
+ puts "Add the silent option if you don't want these messages to pop up!"
51
+ end
52
+
53
+ rescue Yo_Error => err
54
+ puts err
55
+ end
56
+ end
57
+
58
+ end
59
+ end
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cli_yo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - FY Quah
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.7.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.7.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.8.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.8.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: mercenary
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 0.3.4
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.4
55
+ description: 'You can Yo anyone, while writing your magnificent code. The best part,
56
+ you don''t need to do anything! '
57
+ email: quah.fy95@gmail.com
58
+ executables:
59
+ - cli-yo
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - bin/cli-yo
64
+ - lib/cli_yo.rb
65
+ - lib/cli_yo/helper.rb
66
+ - lib/cli_yo/yo_arguments.rb
67
+ - lib/cli_yo/yo_error.rb
68
+ homepage: https://github.com/fyquah95/cli-yo/
69
+ licenses: []
70
+ metadata: {}
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubyforge_project:
87
+ rubygems_version: 2.2.2
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: A command line interface to send Yo!
91
+ test_files: []