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.
@@ -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
+
@@ -0,0 +1,6 @@
1
+ module Rubeetup
2
+ ##
3
+ # Current gem version
4
+ #
5
+ VERSION = '0.0.1'
6
+ end
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: