rubeetup 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 +7 -0
- data/.gitignore +11 -0
- data/.travis.yml +9 -0
- data/Gemfile +4 -0
- data/README.md +173 -0
- data/Rakefile +7 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/rubeetup/errors.rb +32 -0
- data/lib/rubeetup/request.rb +133 -0
- data/lib/rubeetup/request_builder.rb +68 -0
- data/lib/rubeetup/request_response.rb +88 -0
- data/lib/rubeetup/request_sender.rb +93 -0
- data/lib/rubeetup/requester.rb +74 -0
- data/lib/rubeetup/requests_catalog.rb +79 -0
- data/lib/rubeetup/requests_lib/meetup_catalog.json +634 -0
- data/lib/rubeetup/requests_lib/meetup_catalog.rb +33 -0
- data/lib/rubeetup/response_wrapper.rb +29 -0
- data/lib/rubeetup/utilities.rb +51 -0
- data/lib/rubeetup/version.rb +6 -0
- data/lib/rubeetup.rb +140 -0
- data/rubeetup.gemspec +33 -0
- metadata +179 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
module Rubeetup
|
2
|
+
##
|
3
|
+
# Provides some miscellaneous methods for mix-ins
|
4
|
+
#
|
5
|
+
module Utilities
|
6
|
+
##
|
7
|
+
# Determines if the object is not blank
|
8
|
+
# (see #blank?)
|
9
|
+
#
|
10
|
+
def present?(obj)
|
11
|
+
!blank?(obj)
|
12
|
+
end
|
13
|
+
|
14
|
+
##
|
15
|
+
# @param [Object] obj an object
|
16
|
+
# @return [Boolean] whether the object is blank as per Ruby Active Support
|
17
|
+
#
|
18
|
+
def blank?(obj)
|
19
|
+
obj.nil? || obj == false || obj.empty? || obj =~ /^\s+$/
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# Generates a string of key values to include in URL's
|
24
|
+
# @param [Hash{Symbol=>String}] options holds options for a request
|
25
|
+
# @return [String] a sringified representation of a Hash of options
|
26
|
+
#
|
27
|
+
def stringify(options)
|
28
|
+
return '' unless options.respond_to? :map
|
29
|
+
options.map { |key, val| "#{key}=#{val}" if key && val }.compact.join('&')
|
30
|
+
end
|
31
|
+
|
32
|
+
##
|
33
|
+
# Transforms the strings into a possibly nested collection, into symbols
|
34
|
+
# @note For speed and simplicity no error checking is performed
|
35
|
+
# @param [Array<String, Array...>] array a possibly recursive collection of strings
|
36
|
+
# @return [Array<Symbol, Array...>] a possibly recursive collection of Symbols
|
37
|
+
#
|
38
|
+
def collection_symbolyzer(array)
|
39
|
+
array.map {|elem| elem.is_a?(String) ? elem.to_sym : collection_symbolyzer(elem)}
|
40
|
+
end
|
41
|
+
|
42
|
+
##
|
43
|
+
# Gives you the dir where all the request catalogs should be stored
|
44
|
+
# @return [String] the directory where you should store request catalogs
|
45
|
+
#
|
46
|
+
def catalog_dir
|
47
|
+
'lib/rubeetup/requests_lib/'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
data/lib/rubeetup.rb
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
require 'rubeetup/version'
|
2
|
+
require 'rubeetup/utilities'
|
3
|
+
require 'rubeetup/requests_catalog'
|
4
|
+
require 'rubeetup/requester'
|
5
|
+
require 'rubeetup/errors'
|
6
|
+
require 'rubeetup/request_builder'
|
7
|
+
require 'rubeetup/request'
|
8
|
+
require 'rubeetup/request_sender'
|
9
|
+
require 'rubeetup/request_response'
|
10
|
+
require 'rubeetup/response_wrapper'
|
11
|
+
|
12
|
+
##
|
13
|
+
# @author Mike Vascelli <michele.vascelli@gmail.com>
|
14
|
+
#
|
15
|
+
# This module simplifies interaction with the Meetup.com API.
|
16
|
+
# It gives you easy access to all of the available API methods, and it checks
|
17
|
+
# that all the required parameters are provided with each request.
|
18
|
+
# For more information on the Meetup API itself, visit: http://www.meetup.com/meetup_api/
|
19
|
+
#
|
20
|
+
# ==Requests' Naming Convention
|
21
|
+
# They begin with the action to perform on a resource: (i.e. create, get, edit, delete)
|
22
|
+
# and are followed by underscore, and then the name of the resource requested
|
23
|
+
# (as in the Meetup API).
|
24
|
+
# ===Eg.
|
25
|
+
# http://www.meetup.com/meetup_api/docs/2/open_events/
|
26
|
+
#
|
27
|
+
# resource:: open_events
|
28
|
+
# action:: get
|
29
|
+
#
|
30
|
+
# request name:: get_open_events
|
31
|
+
#
|
32
|
+
# Check out the names of the supported requests, and their respective
|
33
|
+
# required arguments in +rubeetup/requests_lib/meetup_catalog.rb+, in the
|
34
|
+
# MeetupCatalog documentation, or at: http://www.meetup.com/meetup_api/
|
35
|
+
#
|
36
|
+
# ==Authorization
|
37
|
+
# Rubeetup will need a Meetup api key to successfully perform the requests.
|
38
|
+
# This can be obtained by signing-up at http://www.meetup.com, and by requesting
|
39
|
+
# a key for your account.
|
40
|
+
#
|
41
|
+
#
|
42
|
+
# Note that in order to +edit+, +create+, or +delete+ any resource in the API,
|
43
|
+
# you must first obtain the privileges to do those actions. This usually means
|
44
|
+
# becoming an organizer for a group. This can be achieved by either starting
|
45
|
+
# a meetup group, or by being granted the authorization by a current organizer
|
46
|
+
# of a group.
|
47
|
+
# If you want to experiment with the API or simply do some live testing, then you can
|
48
|
+
# request to become an organizer for the <tt>Meetup API Testing Sandbox Group</tt>.
|
49
|
+
# Visit here http://www.meetup.com/Meetup-API-Testing for more information.
|
50
|
+
#
|
51
|
+
# ==Usage
|
52
|
+
# auth = key: 'val'
|
53
|
+
#
|
54
|
+
# # If you wish to provide auth data for each instance,
|
55
|
+
# # then pass it to the Rubeetup.setup call as an argument:
|
56
|
+
# #
|
57
|
+
# requester = Rubeetup.setup(auth)
|
58
|
+
#
|
59
|
+
# # Otherwise you can pass default auth data once and be done with it:
|
60
|
+
# #
|
61
|
+
# Rubeetup.default_auth(auth)
|
62
|
+
# requester = Rubeetup.setup
|
63
|
+
#
|
64
|
+
#
|
65
|
+
# # Each request will take a Hash of options.
|
66
|
+
# # Check in rubeetup/requests_lib/meetup_catalog.rb, or in the
|
67
|
+
# # MeetupCatalog documentation, or at: http://www.meetup.com/meetup_api
|
68
|
+
# # for a list of required and available parameters for your specific request.
|
69
|
+
# #
|
70
|
+
# # Rubeetup will raise an Error if any request is attempted without
|
71
|
+
# # providing all the required parameters.
|
72
|
+
# #
|
73
|
+
# events = requester.get_events(group_urlname: 'Meetup-API-Testing')
|
74
|
+
#
|
75
|
+
#
|
76
|
+
# # Every request returns an array of results, and you can safely iterate over them.
|
77
|
+
# # Furthermore, each result stored in the array is a symbol-keyed Hash.
|
78
|
+
# #
|
79
|
+
# events.each do |event|
|
80
|
+
# # Each element is a Hash, so you can simply do:
|
81
|
+
# puts event[:name]
|
82
|
+
#
|
83
|
+
# # But Rubeetup also allows you to access elements' keys in OO-style:
|
84
|
+
# puts event.name
|
85
|
+
# .
|
86
|
+
# .
|
87
|
+
# .
|
88
|
+
# puts event.time
|
89
|
+
# puts event.duration
|
90
|
+
#
|
91
|
+
# venue = event.venue
|
92
|
+
# puts venue[:address_1]
|
93
|
+
# puts venue[:city]
|
94
|
+
# end
|
95
|
+
#
|
96
|
+
#
|
97
|
+
# To find out about all the available response attributes visit the Meetup API documentation:
|
98
|
+
# http://www.meetup.com/meetup_api
|
99
|
+
#
|
100
|
+
# For example, for the +events+ API request in the +Usage+ example above, check this link:
|
101
|
+
# http://www.meetup.com/meetup_api/docs/2/events
|
102
|
+
#
|
103
|
+
module Rubeetup
|
104
|
+
# Entry point to the Rubeetup client.
|
105
|
+
# It creates an object which handles all the requests for you.
|
106
|
+
# @param args [Hash{Symbol=>String}, nil] holds auth data to send with each request
|
107
|
+
# @option args [String] :key the api key
|
108
|
+
# @return [Rubeetup::Requester] the object which makes requests for the API user
|
109
|
+
#
|
110
|
+
def self.setup(args = nil)
|
111
|
+
agent.new(get_auth_data(args))
|
112
|
+
end
|
113
|
+
|
114
|
+
##
|
115
|
+
# Sets up permanent default auth data.
|
116
|
+
# If on Rails, you could include this call in a new file: config/initializers/rubeetup.rb
|
117
|
+
# @param [Hash{Symbol=>String}] args holds auth data to send with each request
|
118
|
+
# @option args [String] :key the api key
|
119
|
+
# @return [nil]
|
120
|
+
#
|
121
|
+
def self.default_auth(args)
|
122
|
+
@auth_options = args
|
123
|
+
nil
|
124
|
+
end
|
125
|
+
|
126
|
+
class << self
|
127
|
+
private
|
128
|
+
|
129
|
+
def agent
|
130
|
+
@agent = Requester
|
131
|
+
end
|
132
|
+
|
133
|
+
# Trivial version
|
134
|
+
# @todo Should be modified to allow for tokens as well
|
135
|
+
#
|
136
|
+
def get_auth_data(args)
|
137
|
+
args || @auth_options
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
data/rubeetup.gemspec
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rubeetup/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'rubeetup'
|
8
|
+
spec.version = Rubeetup::VERSION
|
9
|
+
spec.authors = ['Mike Vascelli']
|
10
|
+
spec.email = ['michele.vascelli@gmail.com']
|
11
|
+
|
12
|
+
spec.summary = 'Ruby client library to the Meetup.com API'
|
13
|
+
spec.description = "A comprehensive and easily extensible Ruby library \
|
14
|
+
which simplifies interaction with the Meetup.com API"
|
15
|
+
spec.homepage = 'https://github.com/mike-vascelli/rubeetup'
|
16
|
+
spec.license = 'MIT'
|
17
|
+
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
|
+
spec.bindir = 'exe'
|
20
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
|
+
spec.require_paths = ['lib']
|
22
|
+
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.10'
|
24
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
25
|
+
|
26
|
+
spec.add_development_dependency 'rspec'
|
27
|
+
spec.add_development_dependency 'coveralls'
|
28
|
+
spec.add_development_dependency 'vcr'
|
29
|
+
spec.add_development_dependency 'webmock'
|
30
|
+
spec.add_development_dependency 'yard'
|
31
|
+
|
32
|
+
spec.add_dependency 'multipart-post'
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rubeetup
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mike Vascelli
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.10'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: coveralls
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: vcr
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: webmock
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: yard
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: multipart-post
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: A comprehensive and easily extensible Ruby library which
|
126
|
+
simplifies interaction with the Meetup.com API
|
127
|
+
email:
|
128
|
+
- michele.vascelli@gmail.com
|
129
|
+
executables: []
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- ".gitignore"
|
134
|
+
- ".travis.yml"
|
135
|
+
- Gemfile
|
136
|
+
- README.md
|
137
|
+
- Rakefile
|
138
|
+
- bin/console
|
139
|
+
- bin/setup
|
140
|
+
- lib/rubeetup.rb
|
141
|
+
- lib/rubeetup/errors.rb
|
142
|
+
- lib/rubeetup/request.rb
|
143
|
+
- lib/rubeetup/request_builder.rb
|
144
|
+
- lib/rubeetup/request_response.rb
|
145
|
+
- lib/rubeetup/request_sender.rb
|
146
|
+
- lib/rubeetup/requester.rb
|
147
|
+
- lib/rubeetup/requests_catalog.rb
|
148
|
+
- lib/rubeetup/requests_lib/meetup_catalog.json
|
149
|
+
- lib/rubeetup/requests_lib/meetup_catalog.rb
|
150
|
+
- lib/rubeetup/response_wrapper.rb
|
151
|
+
- lib/rubeetup/utilities.rb
|
152
|
+
- lib/rubeetup/version.rb
|
153
|
+
- rubeetup.gemspec
|
154
|
+
homepage: https://github.com/mike-vascelli/rubeetup
|
155
|
+
licenses:
|
156
|
+
- MIT
|
157
|
+
metadata: {}
|
158
|
+
post_install_message:
|
159
|
+
rdoc_options: []
|
160
|
+
require_paths:
|
161
|
+
- lib
|
162
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - ">="
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
requirements: []
|
173
|
+
rubyforge_project:
|
174
|
+
rubygems_version: 2.4.5
|
175
|
+
signing_key:
|
176
|
+
specification_version: 4
|
177
|
+
summary: Ruby client library to the Meetup.com API
|
178
|
+
test_files: []
|
179
|
+
has_rdoc:
|