thredded 0.0.12 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. metadata +7 -114
  3. data/MIT-LICENSE +0 -20
  4. data/README.mkdn +0 -72
  5. data/Rakefile +0 -31
  6. data/app/assets/javascripts/thredded/application.js +0 -15
  7. data/app/assets/stylesheets/thredded/application.css +0 -13
  8. data/app/controllers/thredded/application_controller.rb +0 -60
  9. data/app/controllers/thredded/emails_controller.rb +0 -4
  10. data/app/controllers/thredded/messageboards_controller.rb +0 -7
  11. data/app/controllers/thredded/posts_controller.rb +0 -85
  12. data/app/controllers/thredded/preferences_controller.rb +0 -28
  13. data/app/controllers/thredded/private_topics_controller.rb +0 -58
  14. data/app/controllers/thredded/setups_controller.rb +0 -44
  15. data/app/controllers/thredded/topics_controller.rb +0 -99
  16. data/app/decorators/thredded/messageboard_decorator.rb +0 -74
  17. data/app/decorators/thredded/post_decorator.rb +0 -61
  18. data/app/decorators/thredded/topic_decorator.rb +0 -94
  19. data/app/decorators/thredded/user_topic_decorator.rb +0 -88
  20. data/app/helpers/thredded/application_helper.rb +0 -4
  21. data/app/helpers/thredded/posts_helper.rb +0 -7
  22. data/app/helpers/thredded/topics_helper.rb +0 -4
  23. data/app/mailers/thredded/post_mailer.rb +0 -28
  24. data/app/mailers/thredded/topic_mailer.rb +0 -29
  25. data/app/models/thredded/ability.rb +0 -66
  26. data/app/models/thredded/attachment.rb +0 -23
  27. data/app/models/thredded/category.rb +0 -9
  28. data/app/models/thredded/image.rb +0 -26
  29. data/app/models/thredded/messageboard.rb +0 -117
  30. data/app/models/thredded/messageboard_preference.rb +0 -14
  31. data/app/models/thredded/null_preference.rb +0 -11
  32. data/app/models/thredded/null_topic.rb +0 -16
  33. data/app/models/thredded/null_topic_read.rb +0 -19
  34. data/app/models/thredded/null_user.rb +0 -35
  35. data/app/models/thredded/post.rb +0 -120
  36. data/app/models/thredded/post_notification.rb +0 -5
  37. data/app/models/thredded/private_topic.rb +0 -42
  38. data/app/models/thredded/private_user.rb +0 -6
  39. data/app/models/thredded/role.rb +0 -16
  40. data/app/models/thredded/topic.rb +0 -154
  41. data/app/models/thredded/topic_category.rb +0 -6
  42. data/app/models/thredded/user_detail.rb +0 -6
  43. data/app/models/thredded/user_extender.rb +0 -21
  44. data/app/models/thredded/user_preference.rb +0 -6
  45. data/app/models/thredded/user_topic_read.rb +0 -9
  46. data/app/uploaders/thredded/attachment_uploader.rb +0 -30
  47. data/app/uploaders/thredded/image_uploader.rb +0 -16
  48. data/app/views/thredded/attachments/_attachment.html.erb +0 -7
  49. data/app/views/thredded/messageboards/_messageboard.html.erb +0 -20
  50. data/app/views/thredded/messageboards/index.html.erb +0 -18
  51. data/app/views/thredded/post_mailer/at_notification.html.erb +0 -17
  52. data/app/views/thredded/post_mailer/at_notification.text.erb +0 -13
  53. data/app/views/thredded/posts/_form.html.erb +0 -17
  54. data/app/views/thredded/posts/_null_user.html.erb +0 -0
  55. data/app/views/thredded/posts/_post.html.erb +0 -29
  56. data/app/views/thredded/posts/_user.html.erb +0 -7
  57. data/app/views/thredded/posts/edit.html.erb +0 -31
  58. data/app/views/thredded/posts/index.html.erb +0 -64
  59. data/app/views/thredded/preferences/edit.html.erb +0 -22
  60. data/app/views/thredded/private_topics/_form.html.erb +0 -15
  61. data/app/views/thredded/private_topics/index.html.erb +0 -34
  62. data/app/views/thredded/private_topics/new.html.erb +0 -28
  63. data/app/views/thredded/search/_form.html.erb +0 -9
  64. data/app/views/thredded/setups/_form.html.erb +0 -35
  65. data/app/views/thredded/setups/new.html.erb +0 -6
  66. data/app/views/thredded/shared/_currently_online.html.erb +0 -10
  67. data/app/views/thredded/shared/_error_msgs.html.erb +0 -7
  68. data/app/views/thredded/shared/_google_analytics.html.erb +0 -10
  69. data/app/views/thredded/shared/_topic_nav.html.erb +0 -21
  70. data/app/views/thredded/topic_mailer/message_notification.html.erb +0 -17
  71. data/app/views/thredded/topic_mailer/message_notification.text.erb +0 -13
  72. data/app/views/thredded/topics/_form.html.erb +0 -6
  73. data/app/views/thredded/topics/_recent_topics_by_user.html.erb +0 -8
  74. data/app/views/thredded/topics/_topic_condensed.html.erb +0 -24
  75. data/app/views/thredded/topics/_topic_form.html.erb +0 -27
  76. data/app/views/thredded/topics/by_category.html.erb +0 -54
  77. data/app/views/thredded/topics/edit.html.erb +0 -28
  78. data/app/views/thredded/topics/index.html.erb +0 -34
  79. data/app/views/thredded/topics/menu/_new_topic.html.erb +0 -3
  80. data/app/views/thredded/topics/new.html.erb +0 -21
  81. data/app/views/thredded/topics/search.html.erb +0 -34
  82. data/config/initializers/griddler.rb +0 -4
  83. data/config/routes.rb +0 -29
  84. data/db/migrate/20130425230852_create_thredded_tables.rb +0 -143
  85. data/db/migrate/20131005032727_prevent_null_sticky_and_locked.rb +0 -15
  86. data/db/migrate/20131014014258_uniqs_on_user_topic_read.rb +0 -9
  87. data/db/migrate/20131019014258_index_necessary_columns.rb +0 -24
  88. data/db/migrate/20131026202621_move_filter_to_messageboards.rb +0 -11
  89. data/db/migrate/20131029034507_convert_textile_to_markdown.rb +0 -7
  90. data/lib/html/pipeline/at_mention_filter.rb +0 -19
  91. data/lib/html/pipeline/attached_image_filter.rb +0 -59
  92. data/lib/html/pipeline/bbcode_filter.rb +0 -19
  93. data/lib/tasks/thredded_tasks.rake +0 -4
  94. data/lib/thredded.rb +0 -58
  95. data/lib/thredded/at_notification_extractor.rb +0 -15
  96. data/lib/thredded/at_notifier.rb +0 -67
  97. data/lib/thredded/at_users.rb +0 -19
  98. data/lib/thredded/email_processor.rb +0 -76
  99. data/lib/thredded/engine.rb +0 -17
  100. data/lib/thredded/errors.rb +0 -40
  101. data/lib/thredded/messageboard_user_permissions.rb +0 -27
  102. data/lib/thredded/post_sql_builder.rb +0 -34
  103. data/lib/thredded/post_user_permissions.rb +0 -41
  104. data/lib/thredded/private_topic_notifier.rb +0 -56
  105. data/lib/thredded/private_topic_user_permissions.rb +0 -38
  106. data/lib/thredded/search_parser.rb +0 -45
  107. data/lib/thredded/search_sql_builder.rb +0 -25
  108. data/lib/thredded/setup_thredded.rb +0 -7
  109. data/lib/thredded/table_sql_builder.rb +0 -105
  110. data/lib/thredded/topic_sql_builder.rb +0 -32
  111. data/lib/thredded/topic_user_permissions.rb +0 -55
  112. data/lib/thredded/version.rb +0 -3
@@ -1,88 +0,0 @@
1
- module Thredded
2
- class UserTopicDecorator
3
- extend ActiveModel::Naming
4
- include ActiveModel::Conversion
5
-
6
- def initialize(user, topic)
7
- @user = user || NullUser.new
8
- @topic = topic
9
- end
10
-
11
- def method_missing(meth, *args)
12
- if decorated_topic.respond_to?(meth)
13
- decorated_topic.send(meth, *args)
14
- else
15
- super
16
- end
17
- end
18
-
19
- def respond_to?(meth)
20
- decorated_topic.respond_to?(meth)
21
- end
22
-
23
- def self.decorate_all(user, topics)
24
- topics.map do |topic|
25
- new(user, topic)
26
- end
27
- end
28
-
29
- def self.model_name
30
- ActiveModel::Name.new(self, nil, "Topic")
31
- end
32
-
33
- def persisted?
34
- false
35
- end
36
-
37
- def read?
38
- topic.posts_count == read_status.posts_count
39
- end
40
-
41
- def farthest_page
42
- read_status.page
43
- end
44
-
45
- def farthest_post
46
- read_status.farthest_post
47
- end
48
-
49
- def css_class
50
- if read?
51
- "read #{decorated_topic.css_class}"
52
- else
53
- "unread #{decorated_topic.css_class}"
54
- end
55
- end
56
-
57
- def user_link
58
- if topic.user && topic.user.to_s != 'Anonymous User'
59
- user_path = Thredded.user_path(topic.user)
60
- "<a href='#{user_path}'>#{topic.user}</a>".html_safe
61
- else
62
- '<a href="#">?</a>'.html_safe
63
- end
64
- end
65
-
66
- def decorated_topic
67
- @decorated_topic ||= TopicDecorator.new(topic)
68
- end
69
-
70
- private
71
-
72
- attr_reader :topic, :user
73
-
74
- def read_status
75
- if user.id > 0
76
- @read_status ||= topic.user_topic_reads.select do |reads|
77
- reads.user_id == user.id
78
- end
79
- end
80
-
81
- if @read_status.blank?
82
- NullTopicRead.new
83
- else
84
- @read_status.first
85
- end
86
- end
87
- end
88
- end
@@ -1,4 +0,0 @@
1
- module Thredded
2
- module ApplicationHelper
3
- end
4
- end
@@ -1,7 +0,0 @@
1
- module Thredded
2
- module PostsHelper
3
- def link_to_edit_post(site, messageboard, topic, post)
4
- path = edit_messageboard_topic_post_path(messageboard.name, topic, post)
5
- end
6
- end
7
- end
@@ -1,4 +0,0 @@
1
- module Thredded
2
- module TopicsHelper
3
- end
4
- end
@@ -1,28 +0,0 @@
1
- module Thredded
2
- class PostMailer < ActionMailer::Base
3
- def at_notification(post_id, user_emails)
4
- @post = Post.find(post_id)
5
-
6
- headers['X-SMTPAPI'] = %Q{{"category": ["thredded_#{@post.messageboard.name}","at_notification"]}}
7
- mail from: no_reply,
8
- to: no_reply,
9
- bcc: user_emails,
10
- reply_to: reply_to,
11
- subject: subject
12
- end
13
-
14
- private
15
-
16
- def subject
17
- "#{Thredded.email_outgoing_prefix} #{@post.topic.title}"
18
- end
19
-
20
- def reply_to
21
- "#{@post.topic.hash_id}@#{Thredded.email_incoming_host}"
22
- end
23
-
24
- def no_reply
25
- Thredded.email_from
26
- end
27
- end
28
- end
@@ -1,29 +0,0 @@
1
- module Thredded
2
- class TopicMailer < ActionMailer::Base
3
- def message_notification(topic_id, emails)
4
- @topic = Topic.find(topic_id)
5
- headers['X-SMTPAPI'] =
6
- %Q{{"category": ["thredded_#{@topic.messageboard.name}","at_notification"]}}
7
-
8
- mail from: no_reply,
9
- to: no_reply,
10
- bcc: emails,
11
- reply_to: reply_to,
12
- subject: subject
13
- end
14
-
15
- private
16
-
17
- def subject
18
- "#{Thredded.email_outgoing_prefix} #{@topic.title}"
19
- end
20
-
21
- def reply_to
22
- "#{@topic.hash_id}@#{Thredded.email_incoming_host}"
23
- end
24
-
25
- def no_reply
26
- Thredded.email_from
27
- end
28
- end
29
- end
@@ -1,66 +0,0 @@
1
- module Thredded
2
- class Ability
3
- include ::CanCan::Ability
4
-
5
- def initialize(user)
6
- user ||= Thredded::NullUser.new
7
- user_details = Thredded::UserDetail.where(user_id: user.id).first
8
-
9
- can :manage, :all if user_details.try(:superadmin?)
10
-
11
- can :read, Thredded::Messageboard do |messageboard|
12
- Thredded::MessageboardUserPermissions.new(messageboard, user).readable?
13
- end
14
-
15
- can :admin, Thredded::Topic do |topic|
16
- Thredded::TopicUserPermissions.new(topic, user, user_details).adminable?
17
- end
18
-
19
- can :edit, Thredded::Topic do |topic|
20
- Thredded::TopicUserPermissions.new(topic, user, user_details).editable?
21
- end
22
-
23
- can :update, Thredded::Topic do |topic|
24
- Thredded::TopicUserPermissions.new(topic, user, user_details).editable?
25
- end
26
-
27
- can :read, Thredded::Topic do |topic|
28
- Thredded::TopicUserPermissions.new(topic, user, user_details).readable?
29
- end
30
-
31
- can :create, Thredded::Topic do |topic|
32
- Thredded::TopicUserPermissions.new(topic, user, user_details).creatable?
33
- end
34
-
35
- cannot :manage, Thredded::PrivateTopic
36
-
37
- can :list, Thredded::PrivateTopic do |private_topic|
38
- Thredded::PrivateTopicUserPermissions.new(private_topic, user, user_details).listable?
39
- end
40
-
41
- can :manage, Thredded::PrivateTopic do |private_topic|
42
- Thredded::PrivateTopicUserPermissions.new(private_topic, user, user_details).manageable?
43
- end
44
-
45
- can :create, Thredded::PrivateTopic do |private_topic|
46
- Thredded::PrivateTopicUserPermissions.new(private_topic, user, user_details).creatable?
47
- end
48
-
49
- can :read, Thredded::PrivateTopic do |private_topic|
50
- Thredded::PrivateTopicUserPermissions.new(private_topic, user, user_details).readable?
51
- end
52
-
53
- can :edit, Thredded::Post do |post|
54
- Thredded::PostUserPermissions.new(post, user, user_details).editable?
55
- end
56
-
57
- can :manage, Thredded::Post do |post|
58
- Thredded::PostUserPermissions.new(post, user, user_details).manageable?
59
- end
60
-
61
- can :create, Thredded::Post do |post|
62
- Thredded::PostUserPermissions.new(post, user, user_details).creatable?
63
- end
64
- end
65
- end
66
- end
@@ -1,23 +0,0 @@
1
- module Thredded
2
- class Attachment < ActiveRecord::Base
3
- belongs_to :post, touch: true
4
- validates_presence_of :attachment
5
- mount_uploader :attachment, Thredded::AttachmentUploader
6
- before_save :update_attachment_attributes
7
-
8
- def cache_dir
9
- "#{Rails.root}/tmp/uploads"
10
- end
11
-
12
- def filename
13
- File.basename(attachment.path)
14
- end
15
-
16
- def update_attachment_attributes
17
- if attachment.present? && attachment_changed?
18
- self.content_type = attachment.file.content_type
19
- self.file_size = attachment.file.size
20
- end
21
- end
22
- end
23
- end
@@ -1,9 +0,0 @@
1
- module Thredded
2
- class Category < ActiveRecord::Base
3
- belongs_to :messageboard
4
- has_many :topic_categories
5
- has_many :topics, through: :topic_categories
6
-
7
- validates :name, presence: true
8
- end
9
- end
@@ -1,26 +0,0 @@
1
- module Thredded
2
- class Image < ActiveRecord::Base
3
- mount_uploader :image, ImageUploader
4
- validates :image, presence: true
5
- before_validation :save_dimensions, :save_orientation, :save_position
6
-
7
- private
8
-
9
- def save_dimensions
10
- if image.path
11
- self.width = MiniMagick::Image.open(image.path)[:width]
12
- self.height = MiniMagick::Image.open(image.path)[:height]
13
- end
14
- end
15
-
16
- def save_orientation
17
- if image.path
18
- self.orientation = (height.to_i > width.to_i) ? 'portrait' : 'landscape'
19
- end
20
- end
21
-
22
- def save_position
23
- self.position = (self._index + 1) if self.new_record? and self._index
24
- end
25
- end
26
- end
@@ -1,117 +0,0 @@
1
- module Thredded
2
- class Messageboard < ActiveRecord::Base
3
- SECURITY = %w{private logged_in public}
4
- PERMISSIONS = %w{members logged_in anonymous}
5
- FILTERS = %w{markdown bbcode}
6
-
7
- extend FriendlyId
8
- friendly_id :name, use: :slugged
9
-
10
- validates :filter, presence: true
11
- validates :filter, inclusion: { in: FILTERS }
12
- validates :name, length: {
13
- within: 1..16,
14
- message: 'should be between 1 and 16 characters'
15
- }
16
- validates :name, presence: true
17
- validates :name, uniqueness: { message: 'must be a unique board name.' }
18
- validates :posting_permission, inclusion: { in: PERMISSIONS }
19
- validates :security, inclusion: { in: SECURITY }
20
- validates :topics_count, numericality: true
21
-
22
- has_many :categories
23
- has_many :messageboard_preferences
24
- has_many :posts
25
- has_many :roles
26
- has_many :topics
27
- has_many :private_topics
28
- has_many :users, through: :roles, class_name: Thredded.user_class
29
-
30
- def self.find_by_slug(slug)
31
- begin
32
- friendly.find(slug)
33
- rescue ActiveRecord::RecordNotFound
34
- raise Thredded::Errors::MessageboardNotFound
35
- end
36
- end
37
-
38
- def self.default_scope
39
- where(closed: false).order('topics_count DESC')
40
- end
41
-
42
- def self.decorate
43
- all.map do |messageboard|
44
- MessageboardDecorator.new(messageboard)
45
- end
46
- end
47
-
48
- def preferences_for(user)
49
- @preferences_for ||=
50
- messageboard_preferences.where(user_id: user).first_or_create
51
- end
52
-
53
- def active_users
54
- Role
55
- .joins(:user)
56
- .includes(:user)
57
- .where(messageboard_id: self.id)
58
- .where('last_seen > ?', 5.minutes.ago)
59
- .order(:last_seen)
60
- .map(&:user)
61
- end
62
-
63
- def update_activity_for!(user)
64
- if role = roles.where(user_id: user).first
65
- role.update_attribute(:last_seen, Time.now.utc)
66
- end
67
- end
68
-
69
- def decorate
70
- MessageboardDecorator.new(self)
71
- end
72
-
73
- def add_member(user, as='member')
74
- roles.create(user_id: user.id, level: as)
75
- end
76
-
77
- def has_member?(user)
78
- roles.where(user_id: user.id).exists?
79
- end
80
-
81
- def member_is_a?(user, as)
82
- roles.where(user_id: user.id, level: as).exists?
83
- end
84
-
85
- def members_from_list(user_list)
86
- users.where('lower(name) in (?)', user_list.map(&:downcase))
87
- end
88
-
89
- def posting_for_anonymous?
90
- 'anonymous' == posting_permission
91
- end
92
-
93
- def posting_for_logged_in?
94
- 'logged_in' == posting_permission
95
- end
96
-
97
- def posting_for_members?
98
- 'members' == posting_permission
99
- end
100
-
101
- def public?
102
- 'public' == security
103
- end
104
-
105
- def restricted_to_logged_in?
106
- 'logged_in' == security
107
- end
108
-
109
- def restricted_to_private?
110
- 'private' == security
111
- end
112
-
113
- def to_param
114
- name.downcase
115
- end
116
- end
117
- end
@@ -1,14 +0,0 @@
1
- module Thredded
2
- class MessageboardPreference < ActiveRecord::Base
3
- belongs_to :user
4
- belongs_to :messageboard
5
-
6
- def self.for(user)
7
- where(user_id: user.id)
8
- end
9
-
10
- def self.in(messageboard)
11
- where(messageboard_id: messageboard.id)
12
- end
13
- end
14
- end
@@ -1,11 +0,0 @@
1
- module Thredded
2
- class NullPreference
3
- def notify_on_mention
4
- true
5
- end
6
-
7
- def notify_on_message
8
- true
9
- end
10
- end
11
- end
@@ -1,16 +0,0 @@
1
- module Thredded
2
- class NullTopic
3
- def updated_at
4
- Time.now
5
- end
6
-
7
- def user
8
- 'Anonymous User'
9
- end
10
-
11
- def last_user
12
- 'Anonymous User'
13
- end
14
- end
15
- end
16
-