coop_cli 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.
Files changed (5) hide show
  1. data/README.rdoc +42 -0
  2. data/bin/coop_cli +106 -0
  3. data/coop_cli.rdoc +5 -0
  4. data/lib/coop_cli.rb +33 -0
  5. metadata +143 -0
data/README.rdoc ADDED
@@ -0,0 +1,42 @@
1
+ = coop_cli
2
+
3
+ Author:: Warwick Poole (wpoole@gmail.com)
4
+ https://github.com/warwickp/coop_cli
5
+
6
+ A simple cli tool for interacting with Co-op (https://coopapp.com) the group collaboration tool from Harvest (http://www.getharvest.com).
7
+
8
+ == License
9
+
10
+ MIT bitches.
11
+
12
+ == Install
13
+
14
+ gem install coop_cli
15
+
16
+
17
+ == Usage
18
+
19
+ First, set up your configuration file at ~/.coop_cli (set to chmod 600 on creation) to contain your username, password, group ID and optional (http://coopapp.com/api/statuses) Cobot Key
20
+
21
+ coop_cli -u me@me.com -p happypants -g 1234 -k 1234567899003030 initconfig
22
+
23
+ Alternatively you can specify/override these at runtime like a pirate.
24
+
25
+ Now to post to Co-op as your user:
26
+
27
+ coop_cli post "My horse is thirsty @bob"
28
+
29
+ Or, pirately:
30
+
31
+ coop_cli -u me@me.com -p happypants -g 12345 post "Hey @tim, may I have this dance?"
32
+
33
+ Now to post to Co-op as Cobot
34
+
35
+ coop_cli post -c "Building on fire. Everyone panic. Thanks."
36
+
37
+ Or, pirately:
38
+
39
+ coop_cli -k 12344598989723387 post -c "Sharks have escaped. Self destruction in 5 minutes."
40
+
41
+ :include:coop_cli.rdoc
42
+
data/bin/coop_cli ADDED
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/env ruby
2
+ # 1.9 adds realpath to resolve symlinks; 1.8 doesn't
3
+ # have this method, so we add it so we get resolved symlinks
4
+ # and compatibility
5
+ unless File.respond_to? :realpath
6
+ class File #:nodoc:
7
+ def self.realpath path
8
+ return realpath(File.readlink(path)) if symlink?(path)
9
+ path
10
+ end
11
+ end
12
+ end
13
+ $: << File.expand_path(File.dirname(File.realpath(__FILE__)) + '/../lib')
14
+ require 'rubygems'
15
+ require 'gli'
16
+ require 'coop_cli'
17
+
18
+ include GLI
19
+
20
+ program_desc 'A cli interface to Co-op, the team collaboration tool from Harvest (https://coopapp.com)'
21
+
22
+ version CoopCli::VERSION
23
+
24
+ config_file '.coop_cli'
25
+
26
+ ### global options will override config file values if both are specified
27
+ desc 'Use specified URL for Co-op, allows local testing'
28
+ default_value 'https://coopapp.com'
29
+ flag [:b,:baseurl]
30
+
31
+ desc 'The numerical ID of your Co-op group (eg: 1234)'
32
+ flag [:g,:group]
33
+
34
+ desc 'Your Co-op username (eg: me@example.com)'
35
+ flag [:u,:username]
36
+
37
+ desc 'Your Co-op password (eg: horseradishburns)'
38
+ flag [:p,:password]
39
+
40
+ desc 'Key to use when posting as Cobot (eg: 12345678910111213)'
41
+ flag [:k,:key]
42
+
43
+ ### method options
44
+ desc "Post a status or a note to a Co-op group (eg: coop_cli post 'eating a cookie, delicious' or: coop_cli post -c '@all meeting at 10am')"
45
+ arg_name "'status to post to coop'"
46
+ command :post do |c|
47
+ c.desc 'Post a note as Cobot instead of your own Co-op user (requires a key)'
48
+ c.switch [:c,:cobot]
49
+
50
+ c.action do |global_options,options,args|
51
+
52
+ #====validations
53
+ raise("You need to specify a status to post. (eg: coop_cli post 'whats for dinner?')") if args.empty?
54
+ raise("You need to specify a SINGLE status to post. (eg: coop_cli post 'whats for dinner?')") if args.size > 1
55
+ raise("There is no group for me to use, try using initconfig to set up a config file first") unless global_options[:g]
56
+ if options[:c]
57
+ raise("There is no key for me to use") unless global_options[:k]
58
+ end
59
+ unless options[:c]
60
+ raise("There is no username for me to use") unless global_options[:u]
61
+ raise("There is no password for me to use") unless global_options[:p]
62
+ end
63
+ #==END==validations
64
+
65
+ #====posting to co-op
66
+ post_to_coop = CoopCli::Coop.new(global_options[:b])
67
+ if options[:c] #using a key, no basic auth
68
+ post_to_coop.post_as_cobot("/groups/#{global_options[:g]}/statuses",args[0],global_options[:k])
69
+ else
70
+ post_to_coop.basic_auth(global_options[:u],global_options[:p])
71
+ post_to_coop.post_as_user("/groups/#{global_options[:g]}/statuses",args[0])
72
+ end
73
+ #==END==posting to co-op
74
+ end
75
+ end
76
+
77
+ desc 'List statuses and notes from a Co-op group'
78
+ arg_name 'Describe arguments to list here'
79
+ command :list do |c|
80
+ c.action do |global_options,options,args|
81
+ end
82
+ end
83
+
84
+
85
+ pre do |global,command,options,args|
86
+ # Pre logic here
87
+ # Return true to proceed; false to abort and not call the
88
+ # chosen command
89
+ # Use skips_pre before a command to skip this block
90
+ # on that command only
91
+ true
92
+ end
93
+
94
+ post do |global,command,options,args|
95
+ # Post logic here
96
+ # Use skips_post before a command to skip this
97
+ # block on that command only
98
+ end
99
+
100
+ on_error do |exception|
101
+ # Error logic here
102
+ # return false to skip default error handling
103
+ true
104
+ end
105
+
106
+ exit GLI.run(ARGV)
data/coop_cli.rdoc ADDED
@@ -0,0 +1,5 @@
1
+ = coop_cli
2
+
3
+ Generate this with
4
+ coop_cli rdoc
5
+ After you have described your command line interface
data/lib/coop_cli.rb ADDED
@@ -0,0 +1,33 @@
1
+ module CoopCli
2
+ require 'httparty'
3
+ require 'json'
4
+
5
+ VERSION = '0.0.1'
6
+
7
+ class Coop
8
+ include HTTParty
9
+
10
+ def initialize(base_uri)
11
+ self.class.base_uri base_uri
12
+ end
13
+
14
+ def basic_auth(user,pass)
15
+ self.class.basic_auth user, pass
16
+ end
17
+
18
+ def user_agent
19
+ "coop_cli (v: #{CoopCli::VERSION})"
20
+ end
21
+
22
+ def post_as_user(path,message)
23
+ self.class.post(path, :query => { :status => message }, :headers => { "User-Agent" => self.user_agent })
24
+ end
25
+
26
+ def post_as_cobot(path,message,cobotkey)
27
+ self.class.post(path, :query => { :status => message, :key => cobotkey }, :headers => { "User-Agent" => self.user_agent, "Accept" => "application/json",
28
+ "Content-Type" => "application/json; charset=utf-8" })
29
+ end
30
+
31
+ end
32
+
33
+ end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: coop_cli
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Warwick Poole
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-02-18 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: httparty
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: gli
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: json
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: rake
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ type: :development
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
77
+ name: rdoc
78
+ prerelease: false
79
+ requirement: &id005 !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ type: :development
89
+ version_requirements: *id005
90
+ description: A small cli interface to Co-op, the team collaboration tool from Harvest
91
+ email: wpoole@gmail.com
92
+ executables:
93
+ - coop_cli
94
+ extensions: []
95
+
96
+ extra_rdoc_files:
97
+ - README.rdoc
98
+ - coop_cli.rdoc
99
+ files:
100
+ - bin/coop_cli
101
+ - lib/coop_cli.rb
102
+ - README.rdoc
103
+ - coop_cli.rdoc
104
+ homepage: https://github.com/warwickp/coop_cli
105
+ licenses: []
106
+
107
+ post_install_message:
108
+ rdoc_options:
109
+ - --title
110
+ - coop_cli
111
+ - --main
112
+ - README.rdoc
113
+ - -ri
114
+ require_paths:
115
+ - lib
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ hash: 3
123
+ segments:
124
+ - 0
125
+ version: "0"
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ hash: 3
132
+ segments:
133
+ - 0
134
+ version: "0"
135
+ requirements: []
136
+
137
+ rubyforge_project:
138
+ rubygems_version: 1.8.15
139
+ signing_key:
140
+ specification_version: 3
141
+ summary: cli co-op interface
142
+ test_files: []
143
+