ruby_meetup2 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/api_key_client.rb +57 -0
- data/lib/authenticated_client.rb +93 -0
- data/lib/ruby_meetup.rb +107 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3b2259f6d227fabfd45a391f60fb921bfe5a9bfa
|
4
|
+
data.tar.gz: 261c71c7d833d3972848bea212a5e26dea6d6f24
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ad17c9b2e18a6f64ffbecf3a0a714cfedf6bec7b97b44d871f4e07f3ae0a268d63e71559efa132aec2042d35c523ed9d03bd7962d54677f3605ed31b6994825f
|
7
|
+
data.tar.gz: 0c25063711c7a25582a059c58872f42d12c69ae1953394f92287bee6594e89102fcc4fdb1d315905891498ef94b7145f72025c0d70295b22ebd8f6212255adca
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module RubyMeetup
|
2
|
+
|
3
|
+
# This class is typically used to read data without needing to first obtain a
|
4
|
+
# user authenticated +access_token+. We just need a valid API Key, which any one
|
5
|
+
# can obtain directly from http://www.meetup.com
|
6
|
+
#
|
7
|
+
# The API key can be configured globally like so,
|
8
|
+
#
|
9
|
+
# > RubyMeetup::ApiKeyClient.key = 'abcd000000000000000wxyz'
|
10
|
+
#
|
11
|
+
# Then create a new client and make a request,
|
12
|
+
#
|
13
|
+
# > client = RubyMeetup::ApiKeyClient.new
|
14
|
+
# > json_string = client.get_path("/2/groups", {:group_id => 390230})
|
15
|
+
#
|
16
|
+
# The same client instance may be used to make multiple requests. Just supply a
|
17
|
+
# different @path and/or @options parameters as required.
|
18
|
+
#
|
19
|
+
# ---
|
20
|
+
# Copyright (c) 2013 Long On, released under the MIT license
|
21
|
+
|
22
|
+
class ApiKeyClient < Client
|
23
|
+
@@key = ""
|
24
|
+
|
25
|
+
# == class methods
|
26
|
+
|
27
|
+
# Set the global API Key
|
28
|
+
def self.key=string
|
29
|
+
@@key = string
|
30
|
+
end
|
31
|
+
|
32
|
+
# == instance methods
|
33
|
+
|
34
|
+
# :nodoc:
|
35
|
+
def to_s
|
36
|
+
s = super
|
37
|
+
s << ", key=#{short_key}"
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
protected
|
42
|
+
# :nodoc:
|
43
|
+
def merge_params(options)
|
44
|
+
{:sign => true, :key => @@key}.merge!(options)
|
45
|
+
end
|
46
|
+
|
47
|
+
# :nodoc:
|
48
|
+
def short_key
|
49
|
+
key = @@key
|
50
|
+
return "" if key.nil? || key.empty?
|
51
|
+
key[0..3] + "..." + key[(key.length - 4)..(key.length - 1)]
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module RubyMeetup
|
2
|
+
|
3
|
+
# This class can be used to read and write data on behalf of an authenticated user.
|
4
|
+
# An <b>OAuth 2</b> +access_token+ is given once user is authenticated. One of the
|
5
|
+
# methods is to use the +ominauth-meetup+ gem.
|
6
|
+
#
|
7
|
+
# An +access_token+ is user-specific so we configure it per Client instance like so,
|
8
|
+
#
|
9
|
+
# > client = RubyMeetup::AuthenticatedClient.new
|
10
|
+
# > client.access_token = user.access_token
|
11
|
+
#
|
12
|
+
# Then make a request,
|
13
|
+
#
|
14
|
+
# > json_string = client.get_path("/2/groups", {:member_id => user.member_id})
|
15
|
+
#
|
16
|
+
# The same client instance may be used to make multiple requests. Just supply a
|
17
|
+
# different @path and/or @options parameters as required.
|
18
|
+
#
|
19
|
+
# ---
|
20
|
+
# Copyright (c) 2013 Long On, released under the MIT license
|
21
|
+
|
22
|
+
class AuthenticatedClient < Client
|
23
|
+
|
24
|
+
attr_accessor :access_token
|
25
|
+
|
26
|
+
# == instance methods
|
27
|
+
|
28
|
+
# Make a POST API call with the current path value and @options.
|
29
|
+
# Return a JSON string if successful, otherwise an Exception
|
30
|
+
# TODO - test AuthenticatedClient.post()
|
31
|
+
def post(options)
|
32
|
+
uri = new_uri
|
33
|
+
params = merge_params(options)
|
34
|
+
response = Net::HTTP.post_form(uri, params)
|
35
|
+
unless response.is_a?(Net::HTTPSuccess)
|
36
|
+
raise "#{response.code} #{response.message}\n#{response.body}"
|
37
|
+
end
|
38
|
+
response.body
|
39
|
+
end
|
40
|
+
|
41
|
+
# Fake a PUT API call since meetup.com only support POST method
|
42
|
+
# TODO - test AuthenticatedClient.put()
|
43
|
+
def put(options)
|
44
|
+
post(options)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Make a DELETE API call with the current path value and @options.
|
48
|
+
# Return true if successful, otherwise an Exception
|
49
|
+
# TODO - test AuthenticatedClient.delete()
|
50
|
+
def delete(options={})
|
51
|
+
uri = new_uri
|
52
|
+
params = merge_params(options)
|
53
|
+
uri.query = URI.encode_www_form(params)
|
54
|
+
|
55
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
56
|
+
request = Net::HTTP::Delete.new(uri) # uri or uri.request_uri?
|
57
|
+
response = http.request(request)
|
58
|
+
unless response.is_a?(Net::HTTPSuccess)
|
59
|
+
raise "#{response.code} #{response.message}\n#{response.body}"
|
60
|
+
end
|
61
|
+
true
|
62
|
+
end
|
63
|
+
|
64
|
+
# :nodoc:
|
65
|
+
def to_s
|
66
|
+
s = super
|
67
|
+
s << ", access_token=#{short_token}"
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
protected
|
72
|
+
# :nodoc:
|
73
|
+
def initialize
|
74
|
+
super
|
75
|
+
@access_token = ""
|
76
|
+
end
|
77
|
+
|
78
|
+
# :nodoc:
|
79
|
+
def merge_params(options)
|
80
|
+
{:access_token => access_token}.merge!(options)
|
81
|
+
end
|
82
|
+
|
83
|
+
# :nodoc:
|
84
|
+
def short_token
|
85
|
+
return "" if access_token.nil? || access_token.empty?
|
86
|
+
access_token[0..3] + "..." +
|
87
|
+
access_token[(access_token.length - 4)..(access_token.length - 1)]
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
data/lib/ruby_meetup.rb
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
#
|
3
|
+
# RubyMeetup is a light-weight client for the Meetup.com API version 2.
|
4
|
+
#
|
5
|
+
# ---
|
6
|
+
# Copyright (c) 2013 Long On, released under the MIT license
|
7
|
+
|
8
|
+
module RubyMeetup
|
9
|
+
|
10
|
+
# This class is abstract. It has accessor methods for configuring
|
11
|
+
# the API site. By default it is set to https://api.meetup.com but may be changed
|
12
|
+
# using the class setter method +site=+.
|
13
|
+
#
|
14
|
+
# The gem supports API request with two authentication strategies:
|
15
|
+
# <b>API Key</b> and <b>OAuth 2</b> via the concrete classes *ApiKeyClient* and
|
16
|
+
# *AuthenticatedClient*, respectively. More information can be found in the
|
17
|
+
# specific class documentation.
|
18
|
+
#
|
19
|
+
# Example usage:
|
20
|
+
#
|
21
|
+
# > require 'ruby_meetup'
|
22
|
+
# > RubyMeetup::ApiKeyClient.key = 'abcd000000000000000wxyz'
|
23
|
+
# > client = RubyMeetup::ApiKeyClient.new
|
24
|
+
# > json_string = client.get_path("/2/groups", {:group_id => 390230})
|
25
|
+
# > second_result = client.get({:group_id => 939203})
|
26
|
+
#
|
27
|
+
# If successful the captured response is a raw JSON string. The response can then
|
28
|
+
# be processed using a JSON parser. Otherwise an exception is raised.
|
29
|
+
#
|
30
|
+
# Typically, ApiKeyClient class is used to read data while the AuthenticatedClient
|
31
|
+
# class is used for both read and write data, subject to Meetup API permission scopes.
|
32
|
+
#
|
33
|
+
# ---
|
34
|
+
# Copyright (c) 2013 Long On, released under the MIT license
|
35
|
+
|
36
|
+
class Client
|
37
|
+
@@site = "https://api.meetup.com"
|
38
|
+
|
39
|
+
attr_accessor :path
|
40
|
+
|
41
|
+
# == class methods
|
42
|
+
|
43
|
+
# Retun the configured API endpoint
|
44
|
+
def self.site
|
45
|
+
@@site
|
46
|
+
end
|
47
|
+
# Set the global API endpoint
|
48
|
+
def self.site=string
|
49
|
+
@@site = string
|
50
|
+
end
|
51
|
+
|
52
|
+
# == instance methods
|
53
|
+
|
54
|
+
# A convenience method to set @path and @options in the same API call.
|
55
|
+
# Return a JSON string if successful, otherwise an Exception
|
56
|
+
def get_path(path, options={})
|
57
|
+
self.path = path
|
58
|
+
get(options)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Make a GET API call with the current path value and @options.
|
62
|
+
# Return a JSON string if successful, otherwise an Exception
|
63
|
+
def get(options={})
|
64
|
+
uri = new_uri
|
65
|
+
params = merge_params(options)
|
66
|
+
uri.query = URI.encode_www_form(params)
|
67
|
+
|
68
|
+
Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
|
69
|
+
request = Net::HTTP::Get.new(uri)
|
70
|
+
response = http.request(request)
|
71
|
+
unless response.is_a?(Net::HTTPSuccess)
|
72
|
+
raise "#{response.code} #{response.message}\n#{response.body}"
|
73
|
+
end
|
74
|
+
return response.body
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# :nodoc:
|
79
|
+
def to_s
|
80
|
+
"#{self.class.name}: site=#{@@site}, path=#{path}"
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
protected
|
85
|
+
# :nodoc:
|
86
|
+
def initialize
|
87
|
+
@path = ""
|
88
|
+
end
|
89
|
+
|
90
|
+
# :nodoc:
|
91
|
+
def new_uri
|
92
|
+
URI(@@site + path)
|
93
|
+
end
|
94
|
+
|
95
|
+
# :nodoc:
|
96
|
+
def merge_params(options={})
|
97
|
+
options
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
# :nodoc:
|
104
|
+
require 'authenticated_client'
|
105
|
+
# :nodoc:
|
106
|
+
require 'api_key_client'
|
107
|
+
|
metadata
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ruby_meetup2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Long On
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-10-02 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A light-weight Ruby client for working with the Meetup API
|
14
|
+
email: on.long.on@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/ruby_meetup.rb
|
20
|
+
- lib/api_key_client.rb
|
21
|
+
- lib/authenticated_client.rb
|
22
|
+
homepage: https://github.com/fun-ruby/ruby-meetup2
|
23
|
+
licenses:
|
24
|
+
- MIT
|
25
|
+
metadata: {}
|
26
|
+
post_install_message:
|
27
|
+
rdoc_options: []
|
28
|
+
require_paths:
|
29
|
+
- lib
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
requirements:
|
41
|
+
- ruby net/http[s]
|
42
|
+
rubyforge_project:
|
43
|
+
rubygems_version: 2.0.3
|
44
|
+
signing_key:
|
45
|
+
specification_version: 4
|
46
|
+
summary: Meetup API v2 Ruby client
|
47
|
+
test_files: []
|