remind101 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/remind101 +6 -0
- data/lib/remind101/client/access_tokens.rb +13 -0
- data/lib/remind101/client/groups.rb +11 -17
- data/lib/remind101/client/messages.rb +23 -26
- data/lib/remind101/client/subscribers.rb +32 -28
- data/lib/remind101/client.rb +23 -3
- data/lib/remind101/command/auth.rb +86 -0
- data/lib/remind101/command/base.rb +154 -0
- data/lib/remind101/command/groups.rb +75 -0
- data/lib/remind101/command/help.rb +156 -0
- data/lib/remind101/command/messages.rb +32 -0
- data/lib/remind101/configuration.rb +5 -1
- data/lib/remind101/version.rb +1 -1
- data/remind101.gemspec +3 -2
- data/spec/remind101/client_spec.rb +60 -33
- metadata +42 -45
- data/lib/remind101/client/rescuable.rb +0 -27
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1e634a534ebd0a1286e7583d315615a8796c06ff
|
4
|
+
data.tar.gz: b25cf0eb73962fed9269b6373fc75117687a0007
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 37534508d3f2990ded85119d03ffa3ea1d19f31f22d615423981910d1f486ae0abda76742e3c4b318c15744b7a5676e41b96eec3fff30a9765f6dd5d31814e10
|
7
|
+
data.tar.gz: 132ed59a5d7787aedc4f64f40a6906697b04181da767149a5273de3ef5a4b16a2ef3989089e1b9ec60e22e927a34d9b490dd6a59942011a1b8e21634fc7e2bd4
|
data/bin/remind101
ADDED
@@ -1,41 +1,35 @@
|
|
1
1
|
module Remind101::Client::Groups
|
2
|
-
extend Remind101::Client::Rescuable
|
3
2
|
|
4
3
|
# Public: Returns all groups for the current user.
|
5
4
|
#
|
6
5
|
# Examples
|
7
6
|
#
|
8
|
-
# remind101.
|
9
|
-
# # => [{ ... }]
|
7
|
+
# remind101.get_groups
|
10
8
|
#
|
11
|
-
# Returns
|
12
|
-
def
|
13
|
-
api_get('/groups', options)
|
9
|
+
# Returns the faraday response.
|
10
|
+
def get_groups(options = {})
|
11
|
+
api_get('/groups', options)
|
14
12
|
end
|
15
13
|
|
16
14
|
# Public: Creates a new group.
|
17
15
|
#
|
18
16
|
# Examples
|
19
17
|
#
|
20
|
-
# remind101.
|
21
|
-
# # => { :id => 4321, :name => "Math 101", ... }
|
18
|
+
# remind101.post_group group: { name: 'Math 101' }
|
22
19
|
#
|
23
|
-
# Returns the
|
24
|
-
def
|
25
|
-
api_post('/groups',
|
20
|
+
# Returns the faraday response.
|
21
|
+
def post_group(hash)
|
22
|
+
api_post('/groups', hash)
|
26
23
|
end
|
27
|
-
def_rescued :create_group, :create_group!
|
28
24
|
|
29
25
|
# Public: Destroys an existing group.
|
30
26
|
#
|
31
27
|
# Examples
|
32
28
|
#
|
33
|
-
# remind101.
|
34
|
-
# # => { :id => 4321, :name => "Math 101", ... }
|
29
|
+
# remind101.delete_group 4321
|
35
30
|
#
|
36
31
|
# Returns the destroyed group.
|
37
|
-
def
|
38
|
-
api_delete("/groups/#{group_id}")
|
32
|
+
def delete_group(group_id)
|
33
|
+
api_delete("/groups/#{group_id}")
|
39
34
|
end
|
40
|
-
def_rescued :destroy_group, :destroy_group!
|
41
35
|
end
|
@@ -1,49 +1,46 @@
|
|
1
1
|
module Remind101::Client::Messages
|
2
|
-
extend Remind101::Client::Rescuable
|
3
2
|
|
4
3
|
# Public: Returns all messages for the current user.
|
5
4
|
#
|
6
5
|
# Examples
|
7
6
|
#
|
8
|
-
# remind101.
|
9
|
-
# # => [{ ... }]
|
7
|
+
# remind101.get_messages
|
10
8
|
#
|
11
|
-
# Returns
|
12
|
-
def
|
13
|
-
api_get('/messages', options)
|
9
|
+
# Returns the faraday response.
|
10
|
+
def get_messages(options = {})
|
11
|
+
api_get('/messages', options)
|
14
12
|
end
|
15
13
|
|
16
|
-
# Public:
|
14
|
+
# Public: Returns a single message for the current user.
|
15
|
+
#
|
16
|
+
# Examples
|
17
|
+
#
|
18
|
+
# remind101.get_message(1234)
|
17
19
|
#
|
18
|
-
#
|
20
|
+
# Returns the faraday response.
|
21
|
+
def get_message(id)
|
22
|
+
api_get("/messages/#{id}")
|
23
|
+
end
|
24
|
+
|
25
|
+
# Public: Creates a new message.
|
19
26
|
#
|
20
27
|
# Examples
|
21
28
|
#
|
22
|
-
# remind101.
|
23
|
-
# # => { :id => 4321, :body => "Hello World!", :group_ids => [1234], ... }
|
29
|
+
# remind101.post_message message: { body: 'Hello World!', group_ids: [1234] }
|
24
30
|
#
|
25
|
-
# Returns the
|
26
|
-
def
|
27
|
-
api_post('/messages',
|
31
|
+
# Returns the faraday response.
|
32
|
+
def post_message(hash)
|
33
|
+
api_post('/messages', hash)
|
28
34
|
end
|
29
|
-
def_rescued :create_message, :create_message!
|
30
|
-
alias_method :send_message!, :create_message!
|
31
|
-
alias_method :send_message, :create_message
|
32
35
|
|
33
36
|
# Public: Destroy an existing message.
|
34
37
|
#
|
35
|
-
# Also aliased as `cancel_message!`.
|
36
|
-
#
|
37
38
|
# Examples
|
38
39
|
#
|
39
|
-
# remind101.
|
40
|
-
# # => { :id => 4321, :body => "Hello World!", :group_ids => [1234], ... }
|
40
|
+
# remind101.delete_message 4321
|
41
41
|
#
|
42
|
-
# Returns the
|
43
|
-
def
|
44
|
-
api_delete("/messages/#{message_id}")
|
42
|
+
# Returns the faraday response.
|
43
|
+
def delete_message(message_id)
|
44
|
+
api_delete("/messages/#{message_id}")
|
45
45
|
end
|
46
|
-
def_rescued :destroy_message, :destroy_message!
|
47
|
-
alias_method :cancel_message!, :destroy_message!
|
48
|
-
alias_method :cancel_message, :destroy_message
|
49
46
|
end
|
@@ -1,64 +1,68 @@
|
|
1
1
|
module Remind101::Client::Subscribers
|
2
|
-
|
2
|
+
|
3
|
+
# Public: Returns all subscribers for the current user.
|
4
|
+
#
|
5
|
+
# Examples
|
6
|
+
#
|
7
|
+
# remind101.get_subscribers
|
8
|
+
#
|
9
|
+
# Returns the faraday response.
|
10
|
+
def get_subscribers(options = {})
|
11
|
+
api_get("/subscribers", options)
|
12
|
+
end
|
3
13
|
|
4
14
|
# Public: Returns all subscribers for the given group.
|
5
15
|
#
|
6
16
|
# Examples
|
7
17
|
#
|
8
|
-
# remind101.
|
9
|
-
# #=> [{ ... }]
|
18
|
+
# remind101.get_group_subscribers 1234
|
10
19
|
#
|
11
|
-
# Returns
|
12
|
-
def
|
13
|
-
api_get("/groups/#{group_id}/subscribers", options)
|
20
|
+
# Returns the faraday response.
|
21
|
+
def get_group_subscribers(group_id, options = {})
|
22
|
+
api_get("/groups/#{group_id}/subscribers", options)
|
14
23
|
end
|
15
24
|
|
16
|
-
# Public: Returns a single subscriber
|
25
|
+
# Public: Returns a single subscriber.
|
17
26
|
#
|
18
27
|
# Examples
|
19
28
|
#
|
20
|
-
# remind101.
|
21
|
-
# # => { ... }
|
29
|
+
# remind101.get_subscriber 4321
|
22
30
|
#
|
23
|
-
# Returns the
|
24
|
-
def
|
25
|
-
api_get("/
|
31
|
+
# Returns the faraday response.
|
32
|
+
def get_subscriber(subscriber_id, options = {})
|
33
|
+
api_get("/subscribers/#{subscriber_id}", options)
|
26
34
|
end
|
27
35
|
|
28
36
|
# Public: Updates a subscriber.
|
29
37
|
#
|
30
38
|
# Examples
|
31
39
|
#
|
32
|
-
# remind101.
|
33
|
-
# # => { ... }
|
40
|
+
# remind101.patch_subscriber 4321, attributes
|
34
41
|
#
|
35
|
-
# Returns the
|
36
|
-
def
|
37
|
-
|
42
|
+
# Returns the faraday response.
|
43
|
+
def rename_subscriber(subscriber_id, name)
|
44
|
+
api_post("/subscribers/#{subscriber_id}/rename", name: name)
|
38
45
|
end
|
39
|
-
def_rescued :update_subscriber, :update_subscriber!
|
40
46
|
|
41
47
|
# Public: Removes a subscriber from the group.
|
42
48
|
#
|
43
49
|
# Examples
|
44
50
|
#
|
45
|
-
# remind101.
|
51
|
+
# remind101.delete_group_subscriber 1234, 4321
|
46
52
|
#
|
47
|
-
# Returns the
|
48
|
-
def
|
49
|
-
api_delete("/groups/#{group_id}/subscribers/#{subscriber_id}")
|
53
|
+
# Returns the faraday response.
|
54
|
+
def delete_group_subscriber(group_id, subscriber_id)
|
55
|
+
api_delete("/groups/#{group_id}/subscribers/#{subscriber_id}")
|
50
56
|
end
|
51
|
-
def_rescued :remove_subscriber, :remove_subscriber!
|
52
57
|
|
53
58
|
# Public: Removes all subscribers from the group.
|
54
59
|
#
|
55
60
|
# Examples
|
56
61
|
#
|
57
|
-
# remind101.
|
62
|
+
# remind101.delete_group_subscribers
|
58
63
|
#
|
59
|
-
# Returns
|
60
|
-
def
|
61
|
-
api_delete("/groups/#{group_id}/subscribers")
|
64
|
+
# Returns the faraday response.
|
65
|
+
def delete_group_subscribers(group_id)
|
66
|
+
api_delete("/groups/#{group_id}/subscribers")
|
62
67
|
end
|
63
|
-
def_rescued :remove_subscribers, :remove_subscribers!
|
64
68
|
end
|
data/lib/remind101/client.rb
CHANGED
@@ -1,27 +1,47 @@
|
|
1
1
|
module Remind101
|
2
2
|
class Client
|
3
|
-
require 'remind101/client/rescuable'
|
4
3
|
require 'remind101/client/connection'
|
4
|
+
require 'remind101/client/access_tokens'
|
5
5
|
require 'remind101/client/groups'
|
6
6
|
require 'remind101/client/messages'
|
7
7
|
require 'remind101/client/subscribers'
|
8
8
|
|
9
9
|
include Connection
|
10
|
+
include AccessTokens
|
10
11
|
include Groups
|
11
12
|
include Messages
|
12
13
|
include Subscribers
|
13
14
|
|
14
15
|
attr_reader :options
|
15
16
|
|
17
|
+
# Public: Creates a new access token and sets it on the client for future requests.
|
18
|
+
#
|
19
|
+
# Returns the faraday response from creating the access token.
|
20
|
+
def authenticate!(username, password)
|
21
|
+
post_access_tokens(user: { email: username, password: password }).tap do |response|
|
22
|
+
self.auth_token = response.body.auth_token
|
23
|
+
# Force the connection to be recreated to use the new auth token.
|
24
|
+
@connection = nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
16
28
|
def initialize(options = {})
|
17
29
|
@options = options
|
18
30
|
yield middleware if block_given?
|
19
31
|
end
|
20
32
|
|
21
|
-
|
22
|
-
|
33
|
+
# Public: Returns the auth token that's being used for authenticated requests.
|
34
|
+
#
|
35
|
+
# Returns String.
|
23
36
|
def auth_token
|
24
37
|
options[:auth_token]
|
25
38
|
end
|
39
|
+
|
40
|
+
# Public: Sets the auth token to be used for authenticated requests.
|
41
|
+
#
|
42
|
+
# Returns nothing.
|
43
|
+
def auth_token=(token)
|
44
|
+
options[:auth_token] = token
|
45
|
+
end
|
26
46
|
end
|
27
47
|
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require "remind101/command/base"
|
2
|
+
|
3
|
+
# authentication (login, logout)
|
4
|
+
#
|
5
|
+
class Remind101::Command::Auth < Remind101::Command::Base
|
6
|
+
|
7
|
+
# auth
|
8
|
+
#
|
9
|
+
# Authenticate, display token and current user
|
10
|
+
def index
|
11
|
+
validate_arguments!
|
12
|
+
|
13
|
+
Remind101::Command::Help.new.send(:help_for_command, current_command)
|
14
|
+
end
|
15
|
+
|
16
|
+
# auth:login
|
17
|
+
#
|
18
|
+
# log in with your remind101 credentials
|
19
|
+
#
|
20
|
+
#Example:
|
21
|
+
#
|
22
|
+
# $ remind101 auth:login
|
23
|
+
# Enter your Remind101 credentials:
|
24
|
+
# Email: email@example.com
|
25
|
+
# Password (typing will be hidden):
|
26
|
+
# Authentication successful.
|
27
|
+
#
|
28
|
+
def login
|
29
|
+
validate_arguments!
|
30
|
+
|
31
|
+
Remind101::Auth.login
|
32
|
+
display "Authentication successful."
|
33
|
+
end
|
34
|
+
|
35
|
+
alias_command "login", "auth:login"
|
36
|
+
|
37
|
+
# auth:logout
|
38
|
+
#
|
39
|
+
# clear local authentication credentials
|
40
|
+
#
|
41
|
+
#Example:
|
42
|
+
#
|
43
|
+
# $ remind101 auth:logout
|
44
|
+
# Local credentials cleared.
|
45
|
+
#
|
46
|
+
def logout
|
47
|
+
validate_arguments!
|
48
|
+
|
49
|
+
Remind101::Auth.logout
|
50
|
+
display "Local credentials cleared."
|
51
|
+
end
|
52
|
+
|
53
|
+
alias_command "logout", "auth:logout"
|
54
|
+
|
55
|
+
# auth:token
|
56
|
+
#
|
57
|
+
# display your api token
|
58
|
+
#
|
59
|
+
#Example:
|
60
|
+
#
|
61
|
+
# $ remind101 auth:token
|
62
|
+
# ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCD
|
63
|
+
#
|
64
|
+
def token
|
65
|
+
validate_arguments!
|
66
|
+
|
67
|
+
display Remind101::Auth.token
|
68
|
+
end
|
69
|
+
|
70
|
+
# auth:whoami
|
71
|
+
#
|
72
|
+
# display your remind101 email address
|
73
|
+
#
|
74
|
+
#Example:
|
75
|
+
#
|
76
|
+
# $ remind101 auth:whoami
|
77
|
+
# email@example.com
|
78
|
+
#
|
79
|
+
def whoami
|
80
|
+
validate_arguments!
|
81
|
+
|
82
|
+
display Remind101::Auth.user
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
@@ -0,0 +1,154 @@
|
|
1
|
+
require "fileutils"
|
2
|
+
require "remind101/command"
|
3
|
+
|
4
|
+
class Remind101::Command::Base
|
5
|
+
include Remind101::Helpers
|
6
|
+
|
7
|
+
def self.namespace
|
8
|
+
self.to_s.split("::").last.downcase
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :args
|
12
|
+
attr_reader :options
|
13
|
+
|
14
|
+
def initialize(args=[], options={})
|
15
|
+
@args = args
|
16
|
+
@options = options
|
17
|
+
end
|
18
|
+
|
19
|
+
def remind101
|
20
|
+
Remind101::Client.new(auth_token: Remind101::Auth.token)
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def self.inherited(klass)
|
26
|
+
unless klass == Remind101::Command::Base
|
27
|
+
help = extract_help_from_caller(caller.first)
|
28
|
+
|
29
|
+
Remind101::Command.register_namespace(
|
30
|
+
:name => klass.namespace,
|
31
|
+
:description => help.first
|
32
|
+
)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.method_added(method)
|
37
|
+
return if self == Remind101::Command::Base
|
38
|
+
return if private_method_defined?(method)
|
39
|
+
return if protected_method_defined?(method)
|
40
|
+
|
41
|
+
help = extract_help_from_caller(caller.first)
|
42
|
+
resolved_method = (method.to_s == "index") ? nil : method.to_s
|
43
|
+
command = [ self.namespace, resolved_method ].compact.join(":")
|
44
|
+
banner = extract_banner(help) || command
|
45
|
+
|
46
|
+
Remind101::Command.register_command(
|
47
|
+
:klass => self,
|
48
|
+
:method => method,
|
49
|
+
:namespace => self.namespace,
|
50
|
+
:command => command,
|
51
|
+
:banner => banner.strip,
|
52
|
+
:help => help.join("\n"),
|
53
|
+
:summary => extract_summary(help),
|
54
|
+
:description => extract_description(help),
|
55
|
+
:options => extract_options(help)
|
56
|
+
)
|
57
|
+
|
58
|
+
alias_command command.gsub(/_/, '-'), command if command =~ /_/
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.alias_command(new, old)
|
62
|
+
raise "no such command: #{old}" unless Remind101::Command.commands[old]
|
63
|
+
Remind101::Command.command_aliases[new] = old
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
# Parse the caller format and identify the file and line number as identified
|
68
|
+
# in : http://www.ruby-doc.org/core/classes/Kernel.html#M001397. This will
|
69
|
+
# look for a colon followed by a digit as the delimiter. The biggest
|
70
|
+
# complication is windows paths, which have a colon after the drive letter.
|
71
|
+
# This regex will match paths as anything from the beginning to a colon
|
72
|
+
# directly followed by a number (the line number).
|
73
|
+
#
|
74
|
+
# Examples of the caller format :
|
75
|
+
# * c:/Ruby192/lib/.../lib/heroku/command/addons.rb:8:in `<module:Command>'
|
76
|
+
# * c:/Ruby192/lib/.../heroku-2.0.1/lib/heroku/command/pg.rb:96:in `<class:Pg>'
|
77
|
+
# * /Users/ph7/...../xray-1.1/lib/xray/thread_dump_signal_handler.rb:9
|
78
|
+
#
|
79
|
+
def self.extract_help_from_caller(line)
|
80
|
+
# pull out of the caller the information for the file path and line number
|
81
|
+
if line =~ /^(.+?):(\d+)/
|
82
|
+
extract_help($1, $2)
|
83
|
+
else
|
84
|
+
raise("unable to extract help from caller: #{line}")
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.extract_help(file, line_number)
|
89
|
+
buffer = []
|
90
|
+
lines = Remind101::Command.files[file]
|
91
|
+
|
92
|
+
(line_number.to_i-2).downto(0) do |i|
|
93
|
+
line = lines[i]
|
94
|
+
case line[0..0]
|
95
|
+
when ""
|
96
|
+
when "#"
|
97
|
+
buffer.unshift(line[1..-1])
|
98
|
+
else
|
99
|
+
break
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
buffer
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.extract_banner(help)
|
107
|
+
help.first
|
108
|
+
end
|
109
|
+
|
110
|
+
def self.extract_summary(help)
|
111
|
+
extract_description(help).split("\n")[2].to_s.split("\n").first
|
112
|
+
end
|
113
|
+
|
114
|
+
def self.extract_description(help)
|
115
|
+
help.reject do |line|
|
116
|
+
line =~ /^\s+-(.+)#(.+)/
|
117
|
+
end.join("\n")
|
118
|
+
end
|
119
|
+
|
120
|
+
def self.extract_options(help)
|
121
|
+
help.select do |line|
|
122
|
+
line =~ /^\s+-(.+)#(.+)/
|
123
|
+
end.inject([]) do |options, line|
|
124
|
+
args = line.split('#', 2).first
|
125
|
+
args = args.split(/,\s*/).map {|arg| arg.strip}.sort.reverse
|
126
|
+
name = args.last.split(' ', 2).first[2..-1]
|
127
|
+
options << { :name => name, :args => args }
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def current_command
|
132
|
+
Remind101::Command.current_command
|
133
|
+
end
|
134
|
+
|
135
|
+
def extract_option(key)
|
136
|
+
options[key.dup.gsub('-','_').to_sym]
|
137
|
+
end
|
138
|
+
|
139
|
+
def invalid_arguments
|
140
|
+
Remind101::Command.invalid_arguments
|
141
|
+
end
|
142
|
+
|
143
|
+
def shift_argument
|
144
|
+
Remind101::Command.shift_argument
|
145
|
+
end
|
146
|
+
|
147
|
+
def validate_arguments!
|
148
|
+
Remind101::Command.validate_arguments!
|
149
|
+
end
|
150
|
+
|
151
|
+
def escape(value)
|
152
|
+
heroku.escape(value)
|
153
|
+
end
|
154
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require "remind101/command/base"
|
2
|
+
|
3
|
+
# manage groups
|
4
|
+
#
|
5
|
+
class Remind101::Command::Groups < Remind101::Command::Base
|
6
|
+
|
7
|
+
# groups
|
8
|
+
#
|
9
|
+
# list groups
|
10
|
+
def index
|
11
|
+
validate_arguments!
|
12
|
+
|
13
|
+
groups = remind101.groups
|
14
|
+
|
15
|
+
if groups.empty?
|
16
|
+
display "You have no groups"
|
17
|
+
else
|
18
|
+
styled_header "My Groups"
|
19
|
+
styled_array groups.map { |g| [ g.name, g.class_name ] }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# groups:info [CODE]
|
24
|
+
#
|
25
|
+
# show detailed group information
|
26
|
+
def info
|
27
|
+
end
|
28
|
+
|
29
|
+
# groups:create [NAME]
|
30
|
+
#
|
31
|
+
# create a new group
|
32
|
+
#
|
33
|
+
# -c, --code CODE # the group code (optional)
|
34
|
+
#
|
35
|
+
#Examples
|
36
|
+
#
|
37
|
+
# $ remind101 groups:create "Math 101" -c math101
|
38
|
+
#
|
39
|
+
def create
|
40
|
+
name = shift_argument
|
41
|
+
validate_arguments!
|
42
|
+
|
43
|
+
attributes = { class_name: name }
|
44
|
+
attributes[:code] = options[:code] if options[:code]
|
45
|
+
|
46
|
+
group = action "Creating #{name}" do
|
47
|
+
remind101.create_group! attributes
|
48
|
+
end
|
49
|
+
|
50
|
+
hputs([ group.name, group.class_name ].join(" | "))
|
51
|
+
end
|
52
|
+
|
53
|
+
# groups:destroy [CODE]
|
54
|
+
#
|
55
|
+
# permanently destroy a group
|
56
|
+
#
|
57
|
+
#Example:
|
58
|
+
#
|
59
|
+
# $ remind101 groups:destroy math101
|
60
|
+
# Destroying math101... done
|
61
|
+
#
|
62
|
+
def destroy
|
63
|
+
code = shift_argument
|
64
|
+
|
65
|
+
group = remind101.groups.find { |g| g.name == code }
|
66
|
+
error("Unable to find a group with that code") if group.nil?
|
67
|
+
|
68
|
+
message = "WARNING: Potentially Destructive Action\nThis command will destroy @#{code} (#{group.class_name})."
|
69
|
+
if confirm_command(code, message)
|
70
|
+
action("Destroying @#{code} (#{group.class_name})") do
|
71
|
+
remind101.destroy_group!(group.id)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
require "remind101/command/base"
|
2
|
+
|
3
|
+
# list commands and display help
|
4
|
+
#
|
5
|
+
class Remind101::Command::Help < Remind101::Command::Base
|
6
|
+
|
7
|
+
PRIMARY_NAMESPACES = %w( auth groups messages )
|
8
|
+
|
9
|
+
# help [COMMAND]
|
10
|
+
#
|
11
|
+
# list available commands or display help for a specific command
|
12
|
+
#
|
13
|
+
#Examples:
|
14
|
+
#
|
15
|
+
# $ remind101 help
|
16
|
+
# Usage: remind101 COMMAND [--app APP] [command-specific-options]
|
17
|
+
#
|
18
|
+
# Primary help topics, type "remind101 help TOPIC" for more details:
|
19
|
+
#
|
20
|
+
# addons # manage addon resources
|
21
|
+
# apps # manage apps (create, destroy)
|
22
|
+
# ...
|
23
|
+
#
|
24
|
+
# Additional topics:
|
25
|
+
#
|
26
|
+
# account # manage remind101 account options
|
27
|
+
# accounts # manage multiple remind101 accounts
|
28
|
+
# ...
|
29
|
+
#
|
30
|
+
# $ remind101 help apps:create
|
31
|
+
# Usage: remind101 apps:create [NAME]
|
32
|
+
#
|
33
|
+
# create a new app
|
34
|
+
#
|
35
|
+
# --addons ADDONS # a comma-delimited list of addons to install
|
36
|
+
# -b, --buildpack BUILDPACK # a buildpack url to use for this app
|
37
|
+
# -r, --remote REMOTE # the git remote to create, default "remind101"
|
38
|
+
# -s, --stack STACK # the stack on which to create the app
|
39
|
+
#
|
40
|
+
def index
|
41
|
+
if command = args.shift
|
42
|
+
help_for_command(command)
|
43
|
+
else
|
44
|
+
help_for_root
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
alias_command "-h", "help"
|
49
|
+
alias_command "--help", "help"
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def commands_for_namespace(name)
|
54
|
+
Remind101::Command.commands.values.select do |command|
|
55
|
+
command[:namespace] == name && command[:command] != name
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def namespaces
|
60
|
+
Remind101::Command.namespaces
|
61
|
+
end
|
62
|
+
|
63
|
+
def commands
|
64
|
+
Remind101::Command.commands
|
65
|
+
end
|
66
|
+
|
67
|
+
def skip_namespace?(ns)
|
68
|
+
return true if ns[:description] =~ /DEPRECATED:/
|
69
|
+
return true if ns[:description] =~ /HIDDEN:/
|
70
|
+
false
|
71
|
+
end
|
72
|
+
|
73
|
+
def skip_command?(command)
|
74
|
+
return true if command[:help] =~ /DEPRECATED:/
|
75
|
+
return true if command[:help] =~ /^ HIDDEN:/
|
76
|
+
false
|
77
|
+
end
|
78
|
+
|
79
|
+
def primary_namespaces
|
80
|
+
PRIMARY_NAMESPACES.map { |name| namespaces[name] }.compact
|
81
|
+
end
|
82
|
+
|
83
|
+
def additional_namespaces
|
84
|
+
(namespaces.values - primary_namespaces)
|
85
|
+
end
|
86
|
+
|
87
|
+
def summary_for_namespaces(namespaces)
|
88
|
+
size = longest(namespaces.map { |n| n[:name] })
|
89
|
+
namespaces.sort_by {|namespace| namespace[:name]}.each do |namespace|
|
90
|
+
next if skip_namespace?(namespace)
|
91
|
+
name = namespace[:name]
|
92
|
+
namespace[:description] ||= legacy_help_for_namespace(name)
|
93
|
+
puts " %-#{size}s # %s" % [ name, namespace[:description] ]
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def help_for_root
|
98
|
+
puts "Usage: remind101 COMMAND [command-specific-options]"
|
99
|
+
puts
|
100
|
+
puts "Primary help topics, type \"remind101 help TOPIC\" for more details:"
|
101
|
+
puts
|
102
|
+
summary_for_namespaces(primary_namespaces)
|
103
|
+
puts
|
104
|
+
puts "Additional topics:"
|
105
|
+
puts
|
106
|
+
summary_for_namespaces(additional_namespaces)
|
107
|
+
puts
|
108
|
+
end
|
109
|
+
|
110
|
+
def help_for_namespace(name)
|
111
|
+
namespace_commands = commands_for_namespace(name)
|
112
|
+
|
113
|
+
unless namespace_commands.empty?
|
114
|
+
size = longest(namespace_commands.map { |c| c[:banner] })
|
115
|
+
namespace_commands.sort_by { |c| c[:banner].to_s }.each do |command|
|
116
|
+
next if skip_command?(command)
|
117
|
+
command[:summary] ||= legacy_help_for_command(command[:command])
|
118
|
+
puts " %-#{size}s # %s" % [ command[:banner], command[:summary] ]
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def help_for_command(name)
|
124
|
+
if command_alias = Remind101::Command.command_aliases[name]
|
125
|
+
display("Alias: #{name} redirects to #{command_alias}")
|
126
|
+
name = command_alias
|
127
|
+
end
|
128
|
+
if command = commands[name]
|
129
|
+
puts "Usage: remind101 #{command[:banner]}"
|
130
|
+
|
131
|
+
if command[:help].strip.length > 0
|
132
|
+
help = command[:help].split("\n").reject do |line|
|
133
|
+
line =~ /HIDDEN/
|
134
|
+
end
|
135
|
+
puts help[1..-1].join("\n")
|
136
|
+
else
|
137
|
+
puts
|
138
|
+
puts " " + legacy_help_for_command(name).to_s
|
139
|
+
end
|
140
|
+
puts
|
141
|
+
end
|
142
|
+
|
143
|
+
namespace_commands = commands_for_namespace(name).reject do |command|
|
144
|
+
command[:help] =~ /DEPRECATED/
|
145
|
+
end
|
146
|
+
|
147
|
+
if !namespace_commands.empty?
|
148
|
+
puts "Additional commands, type \"remind101 help COMMAND\" for more details:"
|
149
|
+
puts
|
150
|
+
help_for_namespace(name)
|
151
|
+
puts
|
152
|
+
elsif command.nil?
|
153
|
+
error "#{name} is not a remind101 command. See `remind101 help`."
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "remind101/command/base"
|
2
|
+
|
3
|
+
# send messages
|
4
|
+
#
|
5
|
+
class Remind101::Command::Messages < Remind101::Command::Base
|
6
|
+
|
7
|
+
# messages:create [MESSAGE]
|
8
|
+
#
|
9
|
+
# send a new message
|
10
|
+
#
|
11
|
+
# -c, --code CODE # the group code to send the message to
|
12
|
+
#
|
13
|
+
#Examples
|
14
|
+
#
|
15
|
+
# $ remind101 send "Don't forget to study!" -c math101
|
16
|
+
#
|
17
|
+
def create
|
18
|
+
body = shift_argument
|
19
|
+
validate_arguments!
|
20
|
+
|
21
|
+
group = remind101.groups.find { |g| g.name == options[:code] }
|
22
|
+
error("Unable to find a group with that code") if group.nil?
|
23
|
+
|
24
|
+
attributes = { body: body, group_ids: [ group.id ] }
|
25
|
+
|
26
|
+
action "Sending message: #{body}" do
|
27
|
+
remind101.create_message! attributes
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
alias_command "send", "messages:create"
|
32
|
+
end
|
@@ -5,13 +5,17 @@ module Remind101
|
|
5
5
|
attr_accessor :version
|
6
6
|
|
7
7
|
def endpoint
|
8
|
-
@endpoint ||= 'https://api.
|
8
|
+
@endpoint ||= 'https://api.remind.com'
|
9
9
|
end
|
10
10
|
|
11
11
|
def adapter
|
12
12
|
@adapter ||= Faraday.default_adapter
|
13
13
|
end
|
14
14
|
|
15
|
+
def user_agent
|
16
|
+
@user_agent ||= "remind101.rb/#{Remind101::VERSION} (#{RUBY_PLATFORM}) ruby/#{RUBY_VERSION}"
|
17
|
+
end
|
18
|
+
|
15
19
|
def version
|
16
20
|
@version ||= 'v2'
|
17
21
|
end
|
data/lib/remind101/version.rb
CHANGED
data/remind101.gemspec
CHANGED
@@ -18,9 +18,10 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_dependency 'faraday'
|
22
|
-
spec.add_dependency 'faraday_middleware'
|
21
|
+
spec.add_dependency 'faraday'
|
22
|
+
spec.add_dependency 'faraday_middleware'
|
23
23
|
spec.add_dependency 'hashie', ['>= 1.2', '< 2.1']
|
24
|
+
spec.add_dependency 'netrc', '~> 0.7.7'
|
24
25
|
|
25
26
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
26
27
|
spec.add_development_dependency 'rspec', '~> 2.14'
|
@@ -6,91 +6,118 @@ describe Remind101::Client do
|
|
6
6
|
let(:subscriber_id) { 789 }
|
7
7
|
let(:client ) { described_class.new }
|
8
8
|
|
9
|
-
describe '#
|
10
|
-
|
9
|
+
describe '#authenticate!' do
|
10
|
+
let(:username) { 'eric@remind101.com' }
|
11
|
+
let(:password) { 'foobar' }
|
12
|
+
let(:auth_token) { 'a21d9240-f446-4a4b-884a-56127fa59617' }
|
13
|
+
|
14
|
+
before do
|
15
|
+
stub_request(:post, 'https://api.remind.com/v2/access_tokens')
|
16
|
+
.with(body: { user: { email: username, password: password } })
|
17
|
+
.to_return(body: { auth_token: auth_token })
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'returns an auth token for the user' do
|
21
|
+
client.authenticate!(username, password)
|
22
|
+
expect(client.auth_token).to eq auth_token
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#get_groups' do
|
27
|
+
before { stub_request(:get, 'https://api.remind.com/v2/groups') }
|
11
28
|
|
12
29
|
it 'gets the groups' do
|
13
|
-
client.
|
30
|
+
client.get_groups
|
14
31
|
end
|
15
32
|
end
|
16
33
|
|
17
|
-
describe '#
|
18
|
-
before { stub_request(:post, 'https://api.
|
34
|
+
describe '#post_group' do
|
35
|
+
before { stub_request(:post, 'https://api.remind.com/v2/groups').with(body: body) }
|
36
|
+
let(:body) { { group: { name: 'Math 101' } } }
|
19
37
|
|
20
38
|
it 'creates the group' do
|
21
|
-
client.
|
39
|
+
client.post_group body
|
22
40
|
end
|
23
41
|
end
|
24
42
|
|
25
|
-
describe '#
|
26
|
-
before { stub_request(:delete, "https://api.
|
43
|
+
describe '#delete_group' do
|
44
|
+
before { stub_request(:delete, "https://api.remind.com/v2/groups/#{group_id}") }
|
27
45
|
|
28
46
|
it 'destroys the group' do
|
29
|
-
client.
|
47
|
+
client.delete_group group_id
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#get_messages' do
|
52
|
+
before { stub_request(:get, 'https://api.remind.com/v2/messages') }
|
53
|
+
|
54
|
+
it 'gets the messages' do
|
55
|
+
client.get_messages
|
30
56
|
end
|
31
57
|
end
|
32
58
|
|
33
|
-
describe '#
|
34
|
-
before { stub_request(:get, 'https://api.
|
59
|
+
describe '#get_message' do
|
60
|
+
before { stub_request(:get, 'https://api.remind.com/v2/messages/1') }
|
35
61
|
|
36
62
|
it 'gets the messages' do
|
37
|
-
client.
|
63
|
+
client.get_message(1)
|
38
64
|
end
|
39
65
|
end
|
40
66
|
|
41
|
-
describe '#
|
42
|
-
before { stub_request(:post, 'https://api.
|
67
|
+
describe '#post_message' do
|
68
|
+
before { stub_request(:post, 'https://api.remind.com/v2/messages').with(body: body) }
|
69
|
+
let(:body) { { message: { body: "There's a test tomorrow!", recipients: [{ type: 'group', id: [1] }] } } }
|
43
70
|
|
44
71
|
it 'creates the message' do
|
45
|
-
client.
|
72
|
+
client.post_message body
|
46
73
|
end
|
47
74
|
end
|
48
75
|
|
49
|
-
describe '#
|
50
|
-
before { stub_request(:delete, "https://api.
|
76
|
+
describe '#delete_message' do
|
77
|
+
before { stub_request(:delete, "https://api.remind.com/v2/messages/#{message_id}") }
|
51
78
|
|
52
79
|
it 'destroys the message' do
|
53
|
-
client.
|
80
|
+
client.delete_message message_id
|
54
81
|
end
|
55
82
|
end
|
56
83
|
|
57
|
-
describe '#
|
58
|
-
before { stub_request(:get, "https://api.
|
84
|
+
describe '#get_subscribers' do
|
85
|
+
before { stub_request(:get, "https://api.remind.com/v2/subscribers") }
|
59
86
|
|
60
87
|
it 'gets the subscribers' do
|
61
|
-
client.
|
88
|
+
client.get_subscribers
|
62
89
|
end
|
63
90
|
end
|
64
91
|
|
65
|
-
describe '#
|
66
|
-
before { stub_request(:get, "https://api.
|
92
|
+
describe '#get_subscriber' do
|
93
|
+
before { stub_request(:get, "https://api.remind.com/v2/subscribers/#{subscriber_id}") }
|
67
94
|
|
68
95
|
it 'gets the subscriber' do
|
69
|
-
client.
|
96
|
+
client.get_subscriber(subscriber_id)
|
70
97
|
end
|
71
98
|
end
|
72
99
|
|
73
|
-
describe '#
|
74
|
-
before { stub_request(:
|
100
|
+
describe '#rename_subscriber' do
|
101
|
+
before { stub_request(:post, "https://api.remind.com/v2/subscribers/#{subscriber_id}/rename").with(body: { name: 'Eric' }) }
|
75
102
|
|
76
103
|
it 'updates the subscriber' do
|
77
|
-
client.
|
104
|
+
client.rename_subscriber(subscriber_id, 'Eric')
|
78
105
|
end
|
79
106
|
end
|
80
107
|
|
81
|
-
describe '#
|
82
|
-
before { stub_request(:delete, "https://api.
|
108
|
+
describe '#delete_group_subscriber' do
|
109
|
+
before { stub_request(:delete, "https://api.remind.com/v2/groups/#{group_id}/subscribers/#{subscriber_id}") }
|
83
110
|
|
84
111
|
it 'removes the subscriber' do
|
85
|
-
client.
|
112
|
+
client.delete_group_subscriber(group_id, subscriber_id)
|
86
113
|
end
|
87
114
|
end
|
88
115
|
|
89
|
-
describe '#
|
90
|
-
before { stub_request(:delete, "https://api.
|
116
|
+
describe '#delete_group_subscribers' do
|
117
|
+
before { stub_request(:delete, "https://api.remind.com/v2/groups/#{group_id}/subscribers") }
|
91
118
|
|
92
119
|
it 'removes the subscriber' do
|
93
|
-
client.
|
120
|
+
client.delete_group_subscribers(group_id)
|
94
121
|
end
|
95
122
|
end
|
96
123
|
end
|
metadata
CHANGED
@@ -1,54 +1,48 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remind101
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Eric J. Holmes
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-08-27 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: faraday
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: '0
|
19
|
+
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '0
|
26
|
+
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: faraday_middleware
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version: '0
|
33
|
+
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version: '0
|
40
|
+
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: hashie
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '1.2'
|
54
48
|
- - <
|
@@ -57,18 +51,30 @@ dependencies:
|
|
57
51
|
type: :runtime
|
58
52
|
prerelease: false
|
59
53
|
version_requirements: !ruby/object:Gem::Requirement
|
60
|
-
none: false
|
61
54
|
requirements:
|
62
|
-
- -
|
55
|
+
- - '>='
|
63
56
|
- !ruby/object:Gem::Version
|
64
57
|
version: '1.2'
|
65
58
|
- - <
|
66
59
|
- !ruby/object:Gem::Version
|
67
60
|
version: '2.1'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: netrc
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ~>
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 0.7.7
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ~>
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 0.7.7
|
68
75
|
- !ruby/object:Gem::Dependency
|
69
76
|
name: bundler
|
70
77
|
requirement: !ruby/object:Gem::Requirement
|
71
|
-
none: false
|
72
78
|
requirements:
|
73
79
|
- - ~>
|
74
80
|
- !ruby/object:Gem::Version
|
@@ -76,7 +82,6 @@ dependencies:
|
|
76
82
|
type: :development
|
77
83
|
prerelease: false
|
78
84
|
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
none: false
|
80
85
|
requirements:
|
81
86
|
- - ~>
|
82
87
|
- !ruby/object:Gem::Version
|
@@ -84,7 +89,6 @@ dependencies:
|
|
84
89
|
- !ruby/object:Gem::Dependency
|
85
90
|
name: rspec
|
86
91
|
requirement: !ruby/object:Gem::Requirement
|
87
|
-
none: false
|
88
92
|
requirements:
|
89
93
|
- - ~>
|
90
94
|
- !ruby/object:Gem::Version
|
@@ -92,7 +96,6 @@ dependencies:
|
|
92
96
|
type: :development
|
93
97
|
prerelease: false
|
94
98
|
version_requirements: !ruby/object:Gem::Requirement
|
95
|
-
none: false
|
96
99
|
requirements:
|
97
100
|
- - ~>
|
98
101
|
- !ruby/object:Gem::Version
|
@@ -100,7 +103,6 @@ dependencies:
|
|
100
103
|
- !ruby/object:Gem::Dependency
|
101
104
|
name: simplecov
|
102
105
|
requirement: !ruby/object:Gem::Requirement
|
103
|
-
none: false
|
104
106
|
requirements:
|
105
107
|
- - ~>
|
106
108
|
- !ruby/object:Gem::Version
|
@@ -108,7 +110,6 @@ dependencies:
|
|
108
110
|
type: :development
|
109
111
|
prerelease: false
|
110
112
|
version_requirements: !ruby/object:Gem::Requirement
|
111
|
-
none: false
|
112
113
|
requirements:
|
113
114
|
- - ~>
|
114
115
|
- !ruby/object:Gem::Version
|
@@ -116,7 +117,6 @@ dependencies:
|
|
116
117
|
- !ruby/object:Gem::Dependency
|
117
118
|
name: webmock
|
118
119
|
requirement: !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
120
|
requirements:
|
121
121
|
- - ~>
|
122
122
|
- !ruby/object:Gem::Version
|
@@ -124,7 +124,6 @@ dependencies:
|
|
124
124
|
type: :development
|
125
125
|
prerelease: false
|
126
126
|
version_requirements: !ruby/object:Gem::Requirement
|
127
|
-
none: false
|
128
127
|
requirements:
|
129
128
|
- - ~>
|
130
129
|
- !ruby/object:Gem::Version
|
@@ -132,23 +131,22 @@ dependencies:
|
|
132
131
|
- !ruby/object:Gem::Dependency
|
133
132
|
name: rake
|
134
133
|
requirement: !ruby/object:Gem::Requirement
|
135
|
-
none: false
|
136
134
|
requirements:
|
137
|
-
- -
|
135
|
+
- - '>='
|
138
136
|
- !ruby/object:Gem::Version
|
139
137
|
version: '0'
|
140
138
|
type: :development
|
141
139
|
prerelease: false
|
142
140
|
version_requirements: !ruby/object:Gem::Requirement
|
143
|
-
none: false
|
144
141
|
requirements:
|
145
|
-
- -
|
142
|
+
- - '>='
|
146
143
|
- !ruby/object:Gem::Version
|
147
144
|
version: '0'
|
148
145
|
description: Ruby client for the Remind101 API.
|
149
146
|
email:
|
150
147
|
- eric@ejholmes.net
|
151
|
-
executables:
|
148
|
+
executables:
|
149
|
+
- remind101
|
152
150
|
extensions: []
|
153
151
|
extra_rdoc_files: []
|
154
152
|
files:
|
@@ -160,13 +158,19 @@ files:
|
|
160
158
|
- LICENSE.txt
|
161
159
|
- README.md
|
162
160
|
- Rakefile
|
161
|
+
- bin/remind101
|
163
162
|
- lib/remind101.rb
|
164
163
|
- lib/remind101/client.rb
|
164
|
+
- lib/remind101/client/access_tokens.rb
|
165
165
|
- lib/remind101/client/connection.rb
|
166
166
|
- lib/remind101/client/groups.rb
|
167
167
|
- lib/remind101/client/messages.rb
|
168
|
-
- lib/remind101/client/rescuable.rb
|
169
168
|
- lib/remind101/client/subscribers.rb
|
169
|
+
- lib/remind101/command/auth.rb
|
170
|
+
- lib/remind101/command/base.rb
|
171
|
+
- lib/remind101/command/groups.rb
|
172
|
+
- lib/remind101/command/help.rb
|
173
|
+
- lib/remind101/command/messages.rb
|
170
174
|
- lib/remind101/configuration.rb
|
171
175
|
- lib/remind101/error.rb
|
172
176
|
- lib/remind101/middleware/raise_error.rb
|
@@ -178,33 +182,26 @@ files:
|
|
178
182
|
homepage: https://github.com/remind101/remind101.rb
|
179
183
|
licenses:
|
180
184
|
- MIT
|
185
|
+
metadata: {}
|
181
186
|
post_install_message:
|
182
187
|
rdoc_options: []
|
183
188
|
require_paths:
|
184
189
|
- lib
|
185
190
|
required_ruby_version: !ruby/object:Gem::Requirement
|
186
|
-
none: false
|
187
191
|
requirements:
|
188
|
-
- -
|
192
|
+
- - '>='
|
189
193
|
- !ruby/object:Gem::Version
|
190
194
|
version: '0'
|
191
|
-
segments:
|
192
|
-
- 0
|
193
|
-
hash: -555288322554717939
|
194
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
195
|
-
none: false
|
196
196
|
requirements:
|
197
|
-
- -
|
197
|
+
- - '>='
|
198
198
|
- !ruby/object:Gem::Version
|
199
199
|
version: '0'
|
200
|
-
segments:
|
201
|
-
- 0
|
202
|
-
hash: -555288322554717939
|
203
200
|
requirements: []
|
204
201
|
rubyforge_project:
|
205
|
-
rubygems_version:
|
202
|
+
rubygems_version: 2.0.14
|
206
203
|
signing_key:
|
207
|
-
specification_version:
|
204
|
+
specification_version: 4
|
208
205
|
summary: Ruby client for the Remind101 API.
|
209
206
|
test_files:
|
210
207
|
- spec/remind101/client_spec.rb
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Remind101::Client::Rescuable
|
2
|
-
|
3
|
-
# Internal: Defines a version of the method that will be rescued from
|
4
|
-
# ClientError's
|
5
|
-
#
|
6
|
-
# Example
|
7
|
-
#
|
8
|
-
# def my_method!
|
9
|
-
# raise Remind101::Error::ClientError
|
10
|
-
# end
|
11
|
-
# def_rescued :my_method, :my_method!
|
12
|
-
#
|
13
|
-
# my_method
|
14
|
-
# # => false
|
15
|
-
#
|
16
|
-
# Returns nothing.
|
17
|
-
def def_rescued(new, original)
|
18
|
-
define_method new do |*args, &block|
|
19
|
-
begin
|
20
|
-
__send__ original, *args, &block
|
21
|
-
rescue Remind101::Error::ClientError
|
22
|
-
false
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|