Rubbit 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []