disqus_rails 0.0.6 → 0.0.7

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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 715641735b00fbc5288f351cfd8d7ae8f2cd2cd1
4
+ data.tar.gz: 3db92d0024c17e36841ffe27fd1ed99eca34e3c6
5
+ SHA512:
6
+ metadata.gz: 4dda3d56b89d215e161d4c7bc7582a98eb23a0515e71d0f7afe619b912551992afc6b99cc92cd043453fe6cedf6163c2e2c38bb9ebfb0b87e1feea6d262be2bf
7
+ data.tar.gz: 41bac90f9606d853d183298f7ae8e2333707a817b5ee9d9db842ec3334dc5d3255c75e39c1392017fbe98e7bc2d35700645a7c5e8c7ef19c347f867caa3c41c4
metadata CHANGED
@@ -1,94 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: disqus_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
5
- prerelease:
4
+ version: 0.0.7
6
5
  platform: ruby
7
6
  authors:
8
7
  - Anton Kyrychenko
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-10 00:00:00.000000000 Z
11
+ date: 2017-11-07 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
- name: rails
28
+ name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
- name: rake
42
+ name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
- name: rspec
56
+ name: sqlite3
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: travis-lint
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
- - - ! '>='
73
+ - - ">="
68
74
  - !ruby/object:Gem::Version
69
75
  version: '0'
70
76
  type: :development
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
- - - ! '>='
80
+ - - ">="
76
81
  - !ruby/object:Gem::Version
77
82
  version: '0'
78
83
  - !ruby/object:Gem::Dependency
79
84
  name: rails
80
85
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
86
  requirements:
83
- - - ! '>='
87
+ - - ">="
84
88
  - !ruby/object:Gem::Version
85
89
  version: '0'
86
90
  type: :runtime
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
- - - ! '>='
94
+ - - ">="
92
95
  - !ruby/object:Gem::Version
93
96
  version: '0'
94
97
  description: Disqus 2012 Ruby on Rails wrapper
@@ -97,75 +100,29 @@ email:
97
100
  executables: []
98
101
  extensions: []
99
102
  extra_rdoc_files: []
100
- files:
101
- - .gitignore
102
- - Gemfile
103
- - LICENSE.txt
104
- - README.md
105
- - Rakefile
106
- - disqus_rails.gemspec
107
- - lib/disqus_rails.rb
108
- - lib/disqus_rails/active_record/acts_as_disqusable.rb
109
- - lib/disqus_rails/active_record/acts_as_disquser.rb
110
- - lib/disqus_rails/api.rb
111
- - lib/disqus_rails/api.yml
112
- - lib/disqus_rails/category.rb
113
- - lib/disqus_rails/collection.rb
114
- - lib/disqus_rails/forum.rb
115
- - lib/disqus_rails/helpers.rb
116
- - lib/disqus_rails/model.rb
117
- - lib/disqus_rails/post.rb
118
- - lib/disqus_rails/thread.rb
119
- - lib/disqus_rails/user.rb
120
- - lib/disqus_rails/version.rb
121
- - spec/disqus_rails/active_record/acts_as_disqusable_spec.rb
122
- - spec/disqus_rails/active_record/acts_as_disquser_spec.rb
123
- - spec/disqus_rails/api_spec.rb
124
- - spec/disqus_rails/category_spec.rb
125
- - spec/disqus_rails/collection_spec.rb
126
- - spec/disqus_rails/forum_spec.rb
127
- - spec/disqus_rails/model_spec.rb
128
- - spec/disqus_rails/post_spec.rb
129
- - spec/disqus_rails/thread_spec.rb
130
- - spec/disqus_rails/user_spec.rb
131
- - spec/disqus_rails_spec.rb
132
- - spec/spec_helper.rb
133
- - vendor/assets/javascripts/disqus_rails.js.coffee
103
+ files: []
134
104
  homepage: https://github.com/sandric/disqus_rails
135
105
  licenses:
136
106
  - MIT
107
+ metadata: {}
137
108
  post_install_message:
138
109
  rdoc_options: []
139
110
  require_paths:
140
111
  - lib
141
112
  required_ruby_version: !ruby/object:Gem::Requirement
142
- none: false
143
113
  requirements:
144
- - - ! '>='
114
+ - - ">="
145
115
  - !ruby/object:Gem::Version
146
116
  version: '0'
147
117
  required_rubygems_version: !ruby/object:Gem::Requirement
148
- none: false
149
118
  requirements:
150
- - - ! '>='
119
+ - - ">="
151
120
  - !ruby/object:Gem::Version
152
121
  version: '0'
153
122
  requirements: []
154
123
  rubyforge_project:
155
- rubygems_version: 1.8.24
124
+ rubygems_version: 2.6.13
156
125
  signing_key:
157
- specification_version: 3
126
+ specification_version: 4
158
127
  summary: Integrates Disqus service into your Ruby on Rails application
159
- test_files:
160
- - spec/disqus_rails/active_record/acts_as_disqusable_spec.rb
161
- - spec/disqus_rails/active_record/acts_as_disquser_spec.rb
162
- - spec/disqus_rails/api_spec.rb
163
- - spec/disqus_rails/category_spec.rb
164
- - spec/disqus_rails/collection_spec.rb
165
- - spec/disqus_rails/forum_spec.rb
166
- - spec/disqus_rails/model_spec.rb
167
- - spec/disqus_rails/post_spec.rb
168
- - spec/disqus_rails/thread_spec.rb
169
- - spec/disqus_rails/user_spec.rb
170
- - spec/disqus_rails_spec.rb
171
- - spec/spec_helper.rb
128
+ test_files: []
data/.gitignore DELETED
@@ -1,18 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- .rspec
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in disqus_rails.gemspec
4
- gemspec
@@ -1,22 +0,0 @@
1
- Copyright (c) 2013 Anton Kirichenko
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md DELETED
@@ -1,296 +0,0 @@
1
- # DisqusRails
2
-
3
- DisqusRails is a gem for including [Disqus](http://disqus.com/) service into Ruby on Rails application.
4
-
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- `gem 'disqus_rails'`
10
-
11
- And then execute:
12
-
13
- `$ bundle`
14
-
15
- Or install it yourself as:
16
-
17
- `$ gem install disqus_rails`
18
-
19
- And add to your javascript manifest file:
20
-
21
- `//= require disqus_rails`
22
-
23
- ## Usage
24
- ### Getting started
25
-
26
- Create new initializer, lets say 'disqus_rails.rb' in config/initializers directory with this:
27
- ```ruby
28
- DisqusRails.setup do |config|
29
- config::SHORT_NAME = "your_short_name"
30
- config::SECRET_KEY = "your_secret_disqus_key" #leave blank if not used
31
- config::PUBLIC_KEY = "your public_disqus_key" #leave blank if not used
32
- config::ACCESS_TOKEN = "your_access_token" #you got it, right? ;-)
33
- end
34
- ```
35
- In your layout file place 'disqus_init' helper:
36
- ```erb
37
- <%= disqus_init %>
38
- ```
39
- In your view, where you want to display Disqus thread, place 'disqus_thread' helper:
40
- ```erb
41
- <%= disqus_thread %>
42
- ```
43
- And you are ready to go.
44
-
45
- ####additional params:
46
-
47
- You can omit creating initializer if you want - you can pass all those params right into 'disqus_init' helper as hash:
48
- ```erb
49
- <%= disqus_init :short_name => "short_name", :public_key => "public key", :secret_key => "secret_key", :access_token => "access_token" %>
50
- ```
51
- also you can pass reset option to 'disqus_init' to invoke 'DISQUS.reset' function to be triggered on 'onReady' disqus event:
52
- ```erb
53
- <%= disqus_init :reset => true %>
54
- ```
55
- This is for ajax-heavy sites, read more [here](http://help.disqus.com/customer/portal/articles/472107-using-disqus-on-ajax-sites)
56
-
57
- 'disqus_thread' has two params - first is 'ident' identifier and the second is title:
58
- ```erb
59
- <%= disqus_thread 1, "some title, that will preferred to document.title" %>
60
- ```
61
-
62
- ###Api
63
-
64
- ####Api calls
65
-
66
- 'DisqusRails::Api' stands for [Disqus API](http://disqus.com/api/docs/) calls. Each entity of Disqus API (Posts, Users, Forums, etc...)
67
- has its own class in 'DisqusRails::Api' module. Lets say you want to get all reactions for some forum with limit of 50 results, with desc order:
68
- ```ruby
69
- DisqusRails::Api::Reactions.list(:forum => "forum_id", :limit => 50, :order => "desc")
70
- ```
71
- or, for example to update some post:
72
- ```ruby
73
- DisqusRails::Api::Posts.update(:post => post_id, :message => "some updated message")
74
- ```
75
- Disqus return data as json, 'DisqusRails::Api' requests translates it to hash with symbolized keys.
76
- All methods with required and optional params you can see in 'api.yml' file. If any of required params not passed - it will generate
77
- exeption, so as if passed param neither required nor optional. Also, you have to initialize access_token for methods that has
78
- 'require authentication' option set to true.
79
-
80
- ####Models
81
-
82
- For more flexibility and using Disqus entities as an ActiveRecord model there is 'DisqusRails::Model' class that is inherited by
83
- 'DisqusRails::Forum', 'DisqusRails::Category', 'DisqusRails::Thread', 'DisqusRails::Post' and 'DisqusRails::User'.
84
- Lets take previous example and turn it into model's presentation:
85
- ```ruby
86
- new_post = DisqusRails::Post.create(:message => "initial message")
87
- new_post.update(:message => "updated message")
88
- new_post.author.checkUsername("John Doe")
89
- new_post.remove
90
- new_post.restore
91
- ```
92
- If Disqus entity has 'details' api method, than model has 'find' singleton method
93
- ```ruby
94
- user = DisqusRails::User.find(:user => "user_id")
95
- user_posts.follow()
96
- ```
97
- Each 'DisqusRails::Model' has number of attributes that you can find in model's code. For example, here is Posts:
98
- ```ruby
99
- class Post < Model
100
- attr_accessor :id,
101
- :isJuliaFlagged,
102
- :isFlagged,
103
- :parent,
104
- :media,
105
- :isApproved,
106
- :dislikes,
107
- :raw_message,
108
- :points,
109
- :createdAt,
110
- :isEdited,
111
- :message,
112
- :isHighlighted,
113
- :ipAddress,
114
- :isSpam,
115
- :isDeleted,
116
- :likes,
117
-
118
- :author,
119
- :thread,
120
- :forum
121
- ```
122
-
123
- ####Collections
124
-
125
- Collections, as you may guess, is a list of similar Models. Its inherited from Enumerable. There is similar to models
126
- number of collection - 'DisqusRails::Forums', 'DisqusRails::Categories', 'DisqusRails::Threads', 'DisqusRails::Posts' and 'DisqusRails::Users'.
127
- Here some examples:
128
- ```ruby
129
- user = DisqusRails.User.find(:user => "user_id")
130
- user.active_threads(:limit => 50)[15].posts.each do |post|
131
- post.update(:message => "my post is nothing comparing to #{user.username} writings...")
132
- end
133
- ```
134
- If there is 'list' method in Disqus entity - it transforms to 'where' singleton method of model that creates corresponding collection. For example:
135
- ```ruby
136
- forum_categories = DisqusRails::Category.where(:forum => "forum_id")
137
- ```
138
- Disqus API is designed in such way, that you can only get maximum 100 results for list query, and by default its 25. To get more
139
- results you are given with 'cursor' object that have 'next' and 'prev' values, passing which into query you can walk through
140
- results as if it was a list data structure. To define if there is more values to get, Disqus provides 'hasNext' and 'hasPrev' boolean
141
- values. For example, to get first 225 posts you can use this code:
142
- ```ruby
143
- posts = DisqusRails::Post.where(:limit => 75)
144
- 2.times do
145
- if posts.has_cursor_next?
146
- previous_items = posts.items
147
- posts.cursor_next!
148
- posts.items = previous_items + posts.items
149
- end
150
- end
151
- ```
152
- In future I, may be, will rewrite this to handle common cases for :limit attribute to be set to any number. As you saw, in
153
- previous example were used 'cursor_next!' method. There is both 'cursor_next', 'cursor_next!' and 'cursor_prev', 'cursor_prev!' methods.
154
- The difference is in returned values - method with bang in the end initializes new collection right in invoked instance,
155
- when method without it - just returns new collection.
156
- Also, each collection has singleton method 'find_all_#collection_class_name#!' that will get all results for query:
157
- ```ruby
158
- threads = Disqus::Thread.where(:forum => "forum_name", :limit => 100).find_all_threads!
159
- ```
160
-
161
- ###Connection to ActiveRecord models
162
-
163
- ####acts_as_disqusable and disqus_thread
164
-
165
- Lets say you have a 'Content' ActiveRecord model that implements logic for displaying some content information, and you add to that displaying
166
- Disqus thread. Then you may want to match threads info with different Content model instances. For example you may want to know
167
- how many comments and what is the last comment for each model instance.
168
- For this you need to wright 'acts_as_disqusable' in models definition:
169
- ```ruby
170
- class Content < ActiveRecord::Base
171
- acts_as_disqusable
172
- ...
173
- end
174
- ```
175
- And then all your model instances will be populated with 'disqus_thread' method that will return 'DisqusRails::Thread' instance
176
- that is found by Disqus 'ident' identifier which you can pass to 'disqus_thread' helper in your view. Here is full example:
177
-
178
- Your model:
179
- ```ruby
180
- class Content < ActiveRecord::Base
181
- acts_as_disqusable
182
- ...
183
- end
184
- ```
185
- Your model's details view
186
- ```erb
187
- <%= disqus_thread @content.id %>
188
-
189
- ```
190
- And now, when you run this
191
- ```ruby
192
- disqus_thread = Content.first.disqus_thread #It will be thanslated to DisqusRails::Thread.find(:'thread:ident' => Content.first.id)
193
- disqus_thread.posts_count #number of posts
194
- disqus_thread.posts(:limit => 1).createdAt #last comment date
195
- ```
196
- This work also in opposite direction - after you include 'acts_as_disqusable' in your model definition, all 'DisqusRails::Thread'
197
- instances you will have method 'disqusable' what will return your model instance that is linked to Disqus thread via 'ident' identificator.
198
- As an example lets say that we want to get all threads from Disqus service and update comments_count attribute in Content model:
199
- ```ruby
200
- DisqusRails.Thread.where().find_all_threads!.each do |thread|
201
- thread.disqusable.comments_count = thread.posts_count
202
- thread.disqusable.save()
203
- end
204
- ```
205
-
206
- ####acts_as_disquser and Single Sign On
207
-
208
- Disqus provides [SSO service](http://help.disqus.com/customer/portal/articles/236206-integrating-single-sign-on) which gives
209
- ability to link your local users info to Disqus users, read more in Disqus tutorial. To do this, as and for linking model to
210
- Disqus thread - you have to add 'acts_as_disquser' line in your users model. You need pass there four attributes:
211
- 'id', 'username', 'email' and 'avatar'(avatar is an optional field, so you can omit this). Here is example:
212
- ```ruby
213
- class User < ActiveRecord::Base
214
- acts_as_disquser :username => :full_name, :email => :email, :avatar => Proc.new{ avatar.url }
215
- ...
216
- end
217
- ```
218
- As you see, you can pass there or symbols, or procs. First will try to get instance variable with such name from model's instance,
219
- second will evaluate code inside Proc with context of model's instance. Important - only Proc are available for second way of
220
- defining attribute, no lambdas.
221
- Also, you may not implicitly pass `acts_as_disquser :id => :id` - it will try to get id automatically if it is not defined.
222
- Next, you need to specify in disqus_init helper attributes 'disquser' with current user instance, and 'sso' as
223
- boolean to enable or disable SSO.
224
- ```erb
225
- <%= disqus_init :disquser => current_user, :sso => true %>
226
- ```
227
- After this is done, when users will post comments via Disqus, their username, email and avatar will be taken from your site.
228
-
229
- ###Javascript events
230
-
231
- Disqus provides developer with set of events which could be used to implement some logic that depends on it. The problem is
232
- that instead of triggering events we have to append function definitions in array for each of this events - for example look
233
- at [this article](http://help.disqus.com/customer/portal/articles/466258-how-can-i-capture-disqus-commenting-activity-in-my-own-analytics-tool-).
234
- I found that it might be a little bit more useful to set event listener for this, so I defined separate event for every Disqus event
235
- that developer can implicitly create listener:
236
- ```coffeescript
237
- @callbacks.afterRender = [->
238
- $(document).trigger "disqus:after_render"
239
- ]
240
- @callbacks.onInit = [->
241
- $(document).trigger "disqus:on_init"
242
- ]
243
- @callbacks.onNewComment = [->
244
- $(document).trigger "disqus:on_new_comment"
245
- ]
246
- @callbacks.onPaginate = [->
247
- $(document).trigger "disqus:on_paginate"
248
- ]
249
- @callbacks.onReady = [->
250
- $(document).trigger "disqus:on_ready"
251
- ]
252
- @callbacks.preData = [->
253
- $(document).trigger "disqus:pre_data"
254
- ]
255
- @callbacks.preInit = [->
256
- $(document).trigger "disqus:pre_init"
257
- ]
258
- @callbacks.preReset = [->
259
- $(document).trigger "disqus:pre_reset"
260
- ]
261
- ```
262
- For more information about coffeescript global class 'DisqusRails' look into 'disqus_rails.js.coffee' file.
263
-
264
- ### Keeping data up to date
265
- It is equally little hard to do that with Disqus for now, as for me. The problem is that you can not set some callback for user
266
- actions - all you can is to set event listener for 'disqus:on_new_comment', but that will not be valid for all circumstances.
267
- Lets say user deleted or created new post from his users admin page in Disqus site. Disqus does not provide any callback for setting url
268
- where should query go, or some other futuristic way like web socket channel (sarcasm tag). So we should create some cron task for keeping data
269
- that we need up to date. For example, lets go back to problem of getting comments count and last comment for each Disqus thread.
270
- Here is example of such rake task that could be scheduled with whenever (or any else) gem:
271
-
272
- ```ruby
273
- require 'resque/tasks'
274
-
275
- namespace :disqus do
276
- desc "Refreshing local data about remote disqus comments"
277
- task :refresh => :environment do
278
- threads = DisqusRails::Thread.where(:forum => "forum_name", :limit => 100).find_all_threads!
279
- threads.each do |thread|
280
- if thread.disqusable_id && Content.find_by_id(thread.disqusable_id)
281
- content = thread.disqusable
282
- if (content.comments_count != thread.posts_count) || (thread.posts_count > 0 && thread.posts(:limit => 1).first.createdAt != content.last_comment_at)
283
- content.comments_count = thread.posts_count
284
- if thread.posts_count > 0
285
- content.last_comment_at = DateTime.parse(thread.posts(:limit => 1).first.createdAt)
286
- else
287
- content.last_comment_at = nil
288
- end
289
- content.save
290
- end
291
- end
292
- end
293
- end
294
- end
295
-
296
- ```