Rubbit 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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZjlkZjMyNGY1NWI4ZmU5NzQyYjlkMzI1ODU1NTdkZjA0MzgzMDI2OA==
5
+ data.tar.gz: !binary |-
6
+ YmE4NDVjYjEyM2QyNzJlYTliN2ZmYzZkMjQzMWRlZWQxZTZkNTA2NQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ Nzc4NTQwYTI3NGEyNWFlZDhmM2YxYjk0MzdjZTI5NzljZjQzMmRjMTI0ZDJl
10
+ MGU0YTkzYjdlNzM2YTM1NzFhY2ZlYzVmZDM3ZDU4M2U5ZWU3NTM3ZWRjYTU4
11
+ NzRjNTliZjlkYjI2N2ZkNDZmMjQ0YWZlZGU5OTA3MTAyMTVkNTA=
12
+ data.tar.gz: !binary |-
13
+ OGFlNjdkZDNkMGE1YmJhZjc4ZGQ5NWVlMjZjZjgyYjk2Y2I0NWM0ZmUxZjJh
14
+ OWJjYjlkMzA5YTI3MzY0OTgzMGFiZjA4NTdjZWRiYjNkOGZiOGQ0ZDhkMGMw
15
+ NWE4ZjExOTYyMjIyYzg0ZTAzZmIwNDJiZDBkMTFjMTRlMjgwZjk=
data/lib/Rubbit.rb ADDED
@@ -0,0 +1,144 @@
1
+ require 'Rubbit/Rubbit_Objects'
2
+ require 'Rubbit/Rubbit_Construction_Layer'
3
+ require 'io/console'
4
+
5
+ class Rubbit
6
+ attr_accessor :client_name, :object_builder, :rubbit_poster, :me
7
+
8
+ def initialize(name)
9
+ @client_name = name
10
+ @object_builder = Rubbit_Object_Builder.instance(name)
11
+ @rubbit_poster = Rubbit_Poster.instance(name)
12
+ @me = nil
13
+ end
14
+
15
+ def get_subreddit(display_name)
16
+ return @object_builder.build_subreddit(display_name)
17
+ end
18
+
19
+ def get_redditor(user)
20
+ return @object_builder.build_user(user)
21
+ end
22
+
23
+ def login(user=nil,passwd=nil)
24
+ if(user==nil)
25
+ print('Enter username: ')
26
+ user = gets.chomp
27
+ print('Enter password for '+user.to_s+': ')
28
+ passwd = STDIN.noecho(&:gets).chomp
29
+ elsif(passwd==nil)
30
+ print('Enter password for '+user.to_s+': ')
31
+ passwd = STDIN.noecho(&:gets).chomp
32
+ end
33
+ @me = @rubbit_poster.login(user,passwd)
34
+ return @me
35
+ end
36
+
37
+ def clear_session(curpass=nil,uh=nil)
38
+ if(@me==nil)
39
+ print('Not logged in. No session to clear')
40
+ elsif(curpass==nil)
41
+ print('Enter password for '+user.to_s+': ')
42
+ passwd = STDIN.noecho(&:gets).chomp
43
+ end
44
+ return @rubbit_poster.clear_sessions(curpass,uh)
45
+ end
46
+
47
+ def delete_user(user=nil,passwd=nil,message="",uh=nil)
48
+ confirm = nil
49
+ if(user==nil)
50
+ print('Enter username: ')
51
+ user = gets.chomp
52
+ print('Enter password for '+user.to_s+': ')
53
+ passwd = STDIN.noecho(&:gets).chomp
54
+ elsif(passwd==nil)
55
+ print('Enter password for '+user.to_s+': ')
56
+ passwd = STDIN.noecho(&:gets).chomp
57
+ end
58
+ while(confirm==nil)
59
+ print('Confirm deletion of '+user.to_s+' (y/n): ')
60
+ answer = gets.chomp
61
+ if(answer=='y')
62
+ confirm = true
63
+ elsif(answer=='n')
64
+ confirm = false
65
+ else
66
+ puts("Invalid input.")
67
+ end
68
+ end
69
+
70
+ return @rubbit_poster.delete_user(user,passwd,confirm,message,@me.uh)
71
+ end
72
+
73
+ def get_me()
74
+ return @object_builder.build_user(@me.name)
75
+ end
76
+
77
+ def update(curpass=nil,email=nil,newpass=nil,verify=nil,verpass=nil)
78
+ if(@me==nil)
79
+ print('Not logged in. Cannot update password or email')
80
+ return false
81
+ else
82
+ if(curpass == nil)
83
+ print('Enter password for '+@me.name.to_s+': ')
84
+ curpass = STDIN.noecho(&:gets).chomp
85
+ end
86
+ if(email == nil)
87
+ print('Enter new email: ')
88
+ email = gets.chomp
89
+ end
90
+ if(newpass == nil)
91
+ print('Enter new password for '+@me.name.to_s+': ')
92
+ newpass = STDIN.noecho(&:gets).chomp
93
+ end
94
+ if(verify == nil)
95
+ while(verify==nil)
96
+ print('Are you sure? (y/n): ')
97
+ input = gets.chomp
98
+ if(input=='y')
99
+ verify=true
100
+ elsif(input=='n')
101
+ verify= false
102
+ end
103
+ end
104
+ end
105
+ if(verpass==nil)
106
+ print('Verify password for '+@me.name.to_s+': ')
107
+ verpass = STDIN.noecho(&:gets).chomp
108
+ end
109
+ return @rubbit_poster.update(curpass,email,newpass,verify,verpass)
110
+ end
111
+ end
112
+
113
+ def get_submission(link)
114
+ return @object_builder.build_submission(link)
115
+ end
116
+
117
+ def get_inbox(limit=100)
118
+ if(me!=nil)
119
+ return ContentGenerator.new('http://www.reddit.com/message/inbox.json',limit)
120
+ end
121
+ return nil
122
+ end
123
+
124
+ def get_unread(limit=100)
125
+ if(me!=nil)
126
+ return ContentGenerator.new('http://www.reddit.com/message/unread.json',limit)
127
+ end
128
+ return nil
129
+ end
130
+
131
+ def get_sent(limit=100)
132
+ if(me!=nil)
133
+ return ContentGenerator.new('http://www.reddit.com/message/sent.json',limit)
134
+ end
135
+ return nil
136
+ end
137
+
138
+ def submit(sr,title,url=nil,text=nil,kind='self',resubmit=false,save=false,sendreplies=true)
139
+ if(@me!=nil)
140
+ return @rubbit_poster.submit(sr,title,url,text,kind,resubmit,save,sendreplies)
141
+ end
142
+ return nil
143
+ end
144
+ end
@@ -0,0 +1,111 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'time'
4
+ require 'json'
5
+
6
+ class Reddit_Net_Wrapper
7
+ @used = nil
8
+ @remaining = nil
9
+ @reset = nil
10
+ @first_request = nil
11
+ @user_agent = nil
12
+
13
+ @cookie = nil
14
+
15
+ @@instance = nil
16
+
17
+ def self.instance(name=nil)
18
+ if(@@instance==nil)
19
+ if(name!=nil)
20
+ @@instance = new(name)
21
+ else
22
+ return nil
23
+ end
24
+ end
25
+ return @@instance
26
+ end
27
+
28
+ def initialize(user)
29
+ @used = 0
30
+ @remaining = 30
31
+ @reset = 60
32
+ @first_request = 0
33
+ @user_agent = 'Rubbit/1.0 Ruby RAW by The1RGood USED BY: '
34
+ @user_agent+=user
35
+
36
+ @cookie = ""
37
+ end
38
+
39
+ def make_request(request_type,url,params,redirect=false)
40
+ uri = URI(url)
41
+
42
+ if(@remaining==0)
43
+ while((Time.now-@first_request).to_i < 60)
44
+ end
45
+ end
46
+
47
+ if((Time.now - @first_request).to_i > 60)
48
+ @used = 0
49
+ @remaining = 30
50
+ @reset = 60
51
+ @first_request = Time.now
52
+ end
53
+
54
+ if(redirect==false)
55
+ @used += 1
56
+ @remaining -= 1
57
+ @reset = (Time.now - @first_request).to_i
58
+ end
59
+
60
+ puts url
61
+
62
+ case request_type.downcase
63
+ when 'post'
64
+ req = Net::HTTP::Post.new uri.request_uri
65
+ req['X-Ratelimit-Used'] = @used
66
+ req['X-Ratelimit-Remaining'] = @remaining
67
+ req['x-Ratelimit-Reset'] = @reset
68
+
69
+ req['Cookie']=@cookie
70
+
71
+ req.set_form_data(params)
72
+
73
+ res = Net::HTTP.start(uri.hostname, uri.port){|http|
74
+ http.request(req)
75
+ }
76
+
77
+ if(res.code=='302' or res.code=='301')
78
+ res = make_request(request_type,res['location'],params,true)
79
+ elsif(res['set-cookie']!=nil)
80
+ @cookie = res['set-cookie']
81
+ end
82
+
83
+ return res
84
+ when 'get'
85
+ req = Net::HTTP::Get.new uri.request_uri
86
+ req['X-Ratelimit-Used'] = @used
87
+ req['X-Ratelimit-Remaining'] = @remaining
88
+ req['x-Ratelimit-Reset'] = @reset
89
+
90
+ req['Cookie']=@cookie
91
+
92
+ res = Net::HTTP.start(uri.hostname, uri.port){|http|
93
+ http.request(req)
94
+ }
95
+
96
+ if(res.code=='302' or res.code=='301')
97
+ res = make_request(request_type,res['location'],true)
98
+ elsif(res['set-cookie']!=nil)
99
+ @cookie=res['set-cookie']
100
+ end
101
+
102
+ return res
103
+ when 'delete'
104
+ puts 'delete placeholder'
105
+ else
106
+ puts 'Bad Request Type'
107
+ end
108
+ end
109
+
110
+ private_class_method :new
111
+ end
@@ -0,0 +1,179 @@
1
+ require 'Rubbit/Rubbit_Objects'
2
+ require 'Rubbit/Reddit_Net_Wrapper'
3
+ require 'json'
4
+
5
+ class Rubbit_Object_Builder
6
+
7
+ @@instance = nil
8
+
9
+ def self.instance(name=nil)
10
+ if(@@instance==nil)
11
+ if(name!=nil)
12
+ @@instance = new(name)
13
+ else
14
+ return nil
15
+ end
16
+ end
17
+ return @@instance
18
+ end
19
+
20
+ def initialize(net_name)
21
+ Reddit_Net_Wrapper.instance(net_name)
22
+ end
23
+
24
+ def build_subreddit(display_name)
25
+ response = Reddit_Net_Wrapper.instance.make_request('get','http://www.reddit.com/r/'+display_name.to_s+"/about.json",{})
26
+ puts response.code
27
+ if(response.code=='200')
28
+ return Subreddit.new(JSON.parse(response.body))
29
+ end
30
+ end
31
+
32
+ def build_user(user)
33
+ response = Reddit_Net_Wrapper.instance.make_request('get','http://www.reddit.com/user/'+user.to_s+'/about.json',{})
34
+ if(response.code=='200')
35
+ return Redditor.new(JSON.parse(response.body))
36
+ end
37
+ end
38
+
39
+ def build_listing(link)
40
+ response = Reddit_Net_Wrapper.instance.make_request('get',link,{})
41
+ if(response.code=='200')
42
+ return Listing.new(JSON.parse(response.body,:max_nesting => 100))
43
+ end
44
+ end
45
+
46
+ def build_submission(link)
47
+ response = Reddit_Net_Wrapper.instance.make_request('get',link.to_s+".json",{})
48
+ if(response.code=='200')
49
+ json = JSON.parse(response.body)
50
+ if(json['kind']=='t1')
51
+ return Comment.new(json)
52
+ elsif(json['kind']=='t3')
53
+ return Post.new(json)
54
+ elsif(json['kind']=='t4')
55
+ return Message.new(json)
56
+ else
57
+ return nil
58
+ end
59
+ end
60
+ end
61
+
62
+ private_class_method :new
63
+ end
64
+
65
+ class Rubbit_Poster
66
+ @@instance = nil
67
+ @logged_in_user = nil
68
+
69
+ def initialize(net_name)
70
+ Reddit_Net_Wrapper.instance(net_name)
71
+ @logged_in_user = nil
72
+ end
73
+
74
+ def self.instance(name=nil)
75
+ if(@@instance==nil)
76
+ if(name!=nil)
77
+ @@instance = new(name)
78
+ else
79
+ return nil
80
+ end
81
+ end
82
+ return @@instance
83
+ end
84
+
85
+ def login(user,passwd)
86
+ params = {}
87
+ params['op']='login'
88
+ params['user']=user
89
+ params['passwd']=passwd
90
+ params['api-type']='json'
91
+
92
+ login_status = Reddit_Net_Wrapper.instance.make_request('post','http://www.reddit.com/api/login/',params).code
93
+
94
+ if(login_status=='200')
95
+ user = Rubbit_Object_Builder.instance.build_user('the1rgood')
96
+ @logged_in_user = user.name
97
+ return user
98
+ end
99
+ return nil
100
+ end
101
+
102
+ def clear_sessions(curpass)
103
+ params = {}
104
+ params['api_type']='json'
105
+ params['curpass'] = curpass
106
+ params['uh']=get_modhash
107
+
108
+ response = Reddit_Net_Wrapper.instance.make_request('post','http://www.reddit.com/api/clear_sessions/',params)
109
+
110
+ if(response.code=='200')
111
+ return true
112
+ end
113
+ return false
114
+ end
115
+
116
+ def delete_user(user,passwd,message,confirm)
117
+ params = {}
118
+ params['api_type']='json'
119
+ params['user']=user
120
+ params['passwd']=passwd
121
+ params['message']=message
122
+ params['uh']=get_modhash
123
+
124
+ response = Reddit_Net_Wrapper.instance.make_request('post','http://www.reddit.com/api/delete_user/',params)
125
+ if(response.code=='200')
126
+ return true
127
+ end
128
+ return false
129
+ end
130
+
131
+ def update(email,newpass,curpass,verify,verpass)
132
+ params = {}
133
+ params['api_type']='json'
134
+ params['curpass']=curpass
135
+ params['email']=email
136
+ params['newpass']=newpass
137
+ params['verify']=verify
138
+ params['verpass']=verpass
139
+ params['uh']=get_modhash
140
+
141
+ response = Reddit_Net_Wrapper.instance.make_request('post','http://www.reddit.com/api/update/',params)
142
+ if(response.code=='200')
143
+ return true
144
+ end
145
+ return false
146
+ end
147
+
148
+ def submit(sr,title,url=nil,text=nil,kind='self',resubmit=false,save=false,sendreplies=true)
149
+ params = {}
150
+ params['api_type']='json'
151
+ params['captcha']=nil
152
+ params['extension']=nil
153
+ params['iden']=nil
154
+ params['kind']=kind
155
+ params['resubmit']=resubmit
156
+ params['save']=save
157
+ params['sendreplies']=sendreplies
158
+ params['sr']=sr
159
+ params['text']=text
160
+ params['title']=title
161
+ params['uh']=get_modhash
162
+ params['url']=url
163
+
164
+ puts params
165
+
166
+ response = Reddit_Net_Wrapper.instance.make_request('post','http://www.reddit.com/api/submit/',params)
167
+ return JSON.parse(response.body)
168
+
169
+ end
170
+
171
+ def get_modhash
172
+ response = Reddit_Net_Wrapper.instance.make_request('get','http://www.reddit.com/user/'+@logged_in_user+'/about.json',{})
173
+ data = JSON.parse(response.body)
174
+ puts data
175
+ return data['data']['modhash']
176
+ end
177
+
178
+ private_class_method :new
179
+ end
@@ -0,0 +1,229 @@
1
+ require 'Rubbit/Reddit_Net_Wrapper'
2
+
3
+ class Subreddit
4
+ def initialize(json)
5
+ if(json['kind']=='t5')
6
+ data = json['data']
7
+ data.each_key do |k|
8
+ self.class.module_eval {attr_accessor(k)}
9
+ self.send("#{k}=",data[k])
10
+ end
11
+ end
12
+ end
13
+
14
+ def get_new(limit=100)
15
+ return ContentGenerator.new('http://www.reddit.com/r/'+@display_name.to_s+'/new.json',limit)
16
+ end
17
+
18
+ def get_hot(limit=100)
19
+ return ContentGenerator.new('http://www.reddit.com/r/'+@display_name.to_s+'/hot.json',limit)
20
+ end
21
+
22
+ def get_top(limit=100)
23
+ return ContentGenerator.new('http://www.reddit.com/r/'+@display_name.to_s+'/top.json',limit)
24
+ end
25
+
26
+ def get_gilded(limit=100)
27
+ return ContentGenerator.new('http://www.reddit.com/r/'+@display_name.to_s+'/gilded.json',limit)
28
+ end
29
+
30
+ def get_rising(limit=100)
31
+ return ContentGenerator.new('http://www.reddit.com/r/'+@display_name.to_s+'/rising.json',limit)
32
+ end
33
+
34
+ def get_controversial(limit=100)
35
+ return ContentGenerator.new('http://www.reddit.com/r/'+@display_name.to_s+'/controversial.json',limit)
36
+ end
37
+
38
+ def submit(title,url=nil,text=nil,kind='text',resubmit=false,save=false,sendreplies=true)
39
+ return Rubbit_Poster.instance.submit(@display_name,title,url,text,kind,resubmit,save,sendreplies)
40
+ end
41
+ end
42
+
43
+ class Redditor
44
+ def initialize(json)
45
+ if(json['kind']=='t2')
46
+ data = json['data']
47
+ data.each_key do |k|
48
+ self.class.module_eval {attr_accessor(k)}
49
+ self.send("#{k}=",data[k])
50
+ end
51
+ end
52
+ end
53
+
54
+ def get_overview(limit=100)
55
+ return ContentGenerator.new('http://www.reddit.com/user/'+@name.to_s+'/.json',limit)
56
+ end
57
+
58
+ def get_comments(limit=100)
59
+ return ContentGenerator.new('http://www.reddit.com/user/'+@name.to_s+'/comments.json',limit)
60
+ end
61
+
62
+ def get_submitted(limit=100)
63
+ return ContentGenerator.new('http://www.reddit.com/user/'+@name.to_s+'/submitted.json',limit)
64
+ end
65
+ end
66
+
67
+ class ContentGenerator
68
+ include Enumerable
69
+ @limit = nil
70
+ @count = nil
71
+ @source = nil
72
+ @data = nil
73
+ @after = nil
74
+ def initialize(source,limit=100,after='')
75
+ @source = source
76
+ @limit = limit
77
+ @count = 0
78
+ @data = []
79
+ @after = after
80
+ end
81
+
82
+ def each
83
+ index = 0
84
+ if(@limit!=nil)
85
+ listing = Rubbit_Object_Builder.instance.build_listing(@source+'?limit='+[@limit-@count,100].min.to_s+"&after="+@after+"&count="+@count.to_s)
86
+ if(listing.children[listing.children.length-1]!=nil)
87
+ @after = listing.children[listing.children.length-1].name
88
+ else
89
+ @after = nil
90
+ end
91
+ if(@after == nil)
92
+ @data+=[]
93
+ else
94
+ @data += listing.children
95
+ @count += listing.children.length
96
+ end
97
+ else
98
+ listing = Rubbit_Object_Builder.instance.build_listing(@source+'?limit='+100.to_s+"&after="+@after+"&count="+@count.to_s)
99
+ if(listing.children[listing.children.length-1]!=nil)
100
+ @after = listing.children[listing.children.length-1].name
101
+ else
102
+ @after = nil
103
+ end
104
+ if(@after == nil)
105
+ @data+=[]
106
+ else
107
+ @data += listing.children
108
+ @count+= listing.children.length
109
+ end
110
+ end
111
+
112
+ while(index<@data.length)
113
+ yield @data[index]
114
+ index+=1
115
+ if(index==@data.length)
116
+ if(@after==nil)
117
+ @after=''
118
+ end
119
+ if(@limit!=nil)
120
+ if(@limit-@count>0)
121
+ listing = Rubbit_Object_Builder.instance.build_listing(@source+'?limit='+[@limit-@count,100].min.to_s+"&after="+@after+"&count="+@count.to_s)
122
+ if(listing.children[listing.children.length-1]!=nil)
123
+ @after = listing.children[listing.children.length-1].name
124
+ else
125
+ @after = nil
126
+ end
127
+ if(@after == nil)
128
+ @data+=[]
129
+ else
130
+ @data += listing.children
131
+ @count += listing.children.length
132
+ end
133
+ else
134
+ @data += []
135
+ end
136
+ else
137
+ listing = Rubbit_Object_Builder.instance.build_listing(@source+"?limit="+100.to_s+"&after="+@after+"&count="+@count.to_s)
138
+ puts(@source+"?limit="+100.to_s+"&after="+@after+"&count="+@count.to_s)
139
+ if(listing.children[listing.children.length-1]!=nil)
140
+ @after = listing.children[listing.children.length-1].name
141
+ else
142
+ @after = nil
143
+ end
144
+ if(@after == nil)
145
+ @data+=[]
146
+ else
147
+ @data += listing.children
148
+ @count += listing.children.length
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end
154
+
155
+ def [](i)
156
+ return @data[i]
157
+ end
158
+
159
+ def length
160
+ return @data.length
161
+ end
162
+ end
163
+
164
+ class Comment
165
+ def initialize(json)
166
+ if(json['kind']=='t1')
167
+ data = json['data']
168
+ data.each_key do |k|
169
+ self.class.module_eval {attr_accessor(k)}
170
+ self.send("#{k}=",data[k])
171
+ end
172
+ end
173
+ end
174
+ end
175
+
176
+ class Post
177
+ def initialize(json)
178
+ if(json['kind']=='t3')
179
+ data = json['data']
180
+ data.each_key do |k|
181
+ self.class.module_eval {attr_accessor(k)}
182
+ self.send("#{k}=",data[k])
183
+ end
184
+ end
185
+ end
186
+ end
187
+
188
+ class Message
189
+ def initialize(json)
190
+ if(json['kind']=='t4')
191
+ data = json['data']
192
+ data.each_key do |k|
193
+ self.class.module_eval {attr_accessor(k)}
194
+ self.send("#{k}=",data[k])
195
+ end
196
+ end
197
+ end
198
+ end
199
+
200
+ class Listing
201
+ @after = nil
202
+ def initialize(json)
203
+ if(json['kind']=='Listing')
204
+ data = json['data']
205
+ data.each_key do |k|
206
+ self.class.module_eval {attr_accessor(k)}
207
+ self.send("#{k}=",data[k])
208
+ end
209
+ children_objects = []
210
+ @children.each do |c|
211
+ case c['kind']
212
+ when 't1'
213
+ children_objects += [Comment.new(c)]
214
+ when 't2'
215
+ children_objects += [Redditor.new(c)]
216
+ when 't3'
217
+ children_objects += [Post.new(c)]
218
+ when 't4'
219
+ children_objects += [Message.new(c)]
220
+ when 't5'
221
+ children_objects += [Subreddit.new(c)]
222
+ when 'Listing'
223
+ children_objects += [Listing.new(c)]
224
+ end
225
+ end
226
+ @children = children_objects
227
+ end
228
+ end
229
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Rubbit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - /u/The1RGood
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-13 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A simple Ruby-based Reddit API Wrapper
14
+ email: randy@kindofabigdeal.org
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/Rubbit.rb
20
+ - lib/Rubbit/Reddit_Net_Wrapper.rb
21
+ - lib/Rubbit/Rubbit_Construction_Layer.rb
22
+ - lib/Rubbit/Rubbit_Objects.rb
23
+ homepage: http://rubygems.org/gems/rubbit
24
+ licenses:
25
+ - GPL v3
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.2.2
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: Ruby API Wrapper for Reddit
47
+ test_files: []