From 30aaf43b0d654e53504780d85e1c70b8dc50edc1 Mon Sep 17 00:00:00 2001 From: Zequez Date: Fri, 7 Aug 2015 10:57:21 -0300 Subject: [PATCH] Mod#authors it's officially un-needed! --- app/controllers/api/mods_controller.rb | 2 +- app/controllers/bookmarks_controller.rb | 2 +- app/controllers/mods_controller.rb | 1 - app/decorators/mod_decorator.rb | 28 +++---- app/models/mod.rb | 71 +--------------- lib/fake_data_generator.rb | 2 +- spec/controllers/api/mods_controller_spec.rb | 2 +- spec/decorators/mod_decorator_spec.rb | 88 ++++++++++---------- spec/models/mod_spec.rb | 17 ---- 9 files changed, 65 insertions(+), 148 deletions(-) diff --git a/app/controllers/api/mods_controller.rb b/app/controllers/api/mods_controller.rb index d0e1a87..75e6c4d 100644 --- a/app/controllers/api/mods_controller.rb +++ b/app/controllers/api/mods_controller.rb @@ -6,7 +6,7 @@ class API::ModsController < API::APIController def index @mods = Mod - .includes([:categories, :authors, versions: :files]) + .includes([:categories, :author, versions: :files]) .sort_by(:alpha) .filter_by_search_query(params[:q]) .filter_by_category(params[:category]) diff --git a/app/controllers/bookmarks_controller.rb b/app/controllers/bookmarks_controller.rb index d116df5..2331326 100644 --- a/app/controllers/bookmarks_controller.rb +++ b/app/controllers/bookmarks_controller.rb @@ -5,7 +5,7 @@ class BookmarksController < ApplicationController def index @mods = current_user .bookmarked_mods - .includes([:categories, :authors, :owner, :forum_post, versions: :files]) + .includes([:categories, :author, :owner, :forum_post, versions: :files]) .decorate end diff --git a/app/controllers/mods_controller.rb b/app/controllers/mods_controller.rb index d5d177e..4c96d05 100644 --- a/app/controllers/mods_controller.rb +++ b/app/controllers/mods_controller.rb @@ -64,7 +64,6 @@ class ModsController < ApplicationController :forum_subforum_url, :summary, :imgur, - :authors_list, :contact, :info_json_name, :additional_contributors, diff --git a/app/decorators/mod_decorator.rb b/app/decorators/mod_decorator.rb index ca711af..e1367d7 100644 --- a/app/decorators/mod_decorator.rb +++ b/app/decorators/mod_decorator.rb @@ -1,8 +1,6 @@ class ModDecorator < Draper::Decorator delegate :id, :name, :forum_url, :subforum_url, :additional_contributors - def authors_count; mod.authors.size end - def game_versions_string return na if mod.game_versions_string.blank? "v" + mod.game_versions_string @@ -57,19 +55,19 @@ class ModDecorator < Draper::Decorator h.link_to(mod.author.name, mod.author) end - def authors_links_list - return na if mod.authors.empty? - - mod.authors.map do |author, i| - link = h.link_to(author.name, author) - if mod.owner_id and (author.user_id == mod.owner_id) and mod.authors.size > 1 - maintainer = h.t('helpers.mods.maintainer') - link + " (#{maintainer})" - else - link - end - end.join(', ').html_safe - end + # def authors_links_list + # return na if mod.authors.empty? + # + # mod.authors.map do |author, i| + # link = h.link_to(author.name, author) + # if mod.owner_id and (author.user_id == mod.owner_id) and mod.authors.size > 1 + # maintainer = h.t('helpers.mods.maintainer') + # link + " (#{maintainer})" + # else + # link + # end + # end.join(', ').html_safe + # end def categories_links mod.categories.map{ |cat| category_tag_link(cat) }.join.html_safe diff --git a/app/models/mod.rb b/app/models/mod.rb index 3ad4669..3f99c3b 100644 --- a/app/models/mod.rb +++ b/app/models/mod.rb @@ -1,10 +1,3 @@ -# AutoHtml.add_filter(:simple_format_fix).with({}) do |text, html_options| -# require 'action_view' -# # text_array = text.match(//) - -# ActionView::Base.new.simple_format(text, {class: 'p'}, sanitize: false, wrapper_tag: 'div' ) -# end - class Mod < ActiveRecord::Base extend FriendlyId @@ -43,8 +36,8 @@ class Mod < ActiveRecord::Base has_many :game_versions, -> { uniq.sort_by_older_to_newer }, through: :mod_game_versions has_many :categories, through: :categories_mods has_many :categories_mods, dependent: :destroy - has_many :authors, ->{ includes(:authors_mods).order('authors_mods.sort_order') }, through: :authors_mods - has_many :authors_mods, dependent: :destroy + # has_many :authors, ->{ includes(:authors_mods).order('authors_mods.sort_order') }, through: :authors_mods + # has_many :authors_mods, dependent: :destroy # has_one :latest_version, -> { sort_by_newer_to_older.limit(1) }, class_name: 'ModVersion' # has_one :second_latest_version, -> { sort_by_newer_to_older.limit(1).offset(1) }, class_name: 'ModVersion' @@ -197,21 +190,6 @@ class Mod < ActiveRecord::Base end end - # find or generate users from #authors_list - before_validation do - if authors_list.present? - authors_names = authors_list.split(',') - .map(&:strip) - .reject(&:blank?) - .take(10) - .uniq{ |name| Author.normalize_friendly_id(name) } - - self.authors = @reordered_authors = authors_names.map do |name| - Author.find_by_slugged_name(name) || Author.new(name: name, forum_name: name) - end - end - end - # Find or generate author from #author_name or from #owner.name before_validation do if owner @@ -226,9 +204,9 @@ class Mod < ActiveRecord::Base end end - # Yes, I have to move the authors_list parser to another file + # Yes, I have to move the author_name parser to another file # and move this again to the header. But for now, we need to access - # author.first to generate the alternative slug, and friendly_id + # author to generate the alternative slug, and friendly_id # adds the slug generation also before_validation friendly_id :slug_candidates, use: [:slugged, :finders] @@ -238,33 +216,6 @@ class Mod < ActiveRecord::Base end end - # add the #authors errors to #authors_list - after_validation do - if authors_list.present? - authors.each do |author| - author.errors[:name].each do |error| - self.errors[:authors_list].push(author.name + ' ' + error) - end - end - - # We can't do this because errors[:authors] also holds - # the individual authors errors without any information - # about the user - # errors[:authors_list].concat errors[:authors] - end - end - - # Set the #sort_order of the #authors_mods - # We cannot use self.authors because it you cannot change - # the order of the association - after_save do - if @reordered_authors - @reordered_authors.each_with_index do |author, i| - authors_mods.where(author: author).update_all(sort_order: i) - end - end - end - ### Validations ################# @@ -284,15 +235,6 @@ class Mod < ActiveRecord::Base end end - # #authors.count limit - validate do - if authors.size > 8 - error_msg = I18n.t('activerecord.errors.models.mod.attributes.authors.too_many') - errors[:authors].push error_msg - errors[:authors_list].push error_msg if authors_list.present? - end - end - # Github URL validate do if github.present? and not extract_github_path(github) @@ -313,7 +255,6 @@ class Mod < ActiveRecord::Base attr_accessor :imgur_url attr_accessor :imgur_thumbnail attr_accessor :imgur_normal - attr_accessor :authors_list attr_accessor :author_name alias_attribute :github_path, :github alias_attribute :subforum_url, :forum_subforum_url @@ -381,10 +322,6 @@ class Mod < ActiveRecord::Base super(val.present? ? val : nil) end - def authors_list - @authors_list ||= authors.map(&:name).join(', ') - end - def author_name @author_name || (author && author.name) end diff --git a/lib/fake_data_generator.rb b/lib/fake_data_generator.rb index cbc0df2..367de27 100644 --- a/lib/fake_data_generator.rb +++ b/lib/fake_data_generator.rb @@ -78,7 +78,7 @@ class FakeDataGenerator github_url = Forgery(:lorem_ipsum).words(1, random: true) + '/' + Forgery(:lorem_ipsum).words(1, random: true) mod = Mod.create! name: Forgery(:lorem_ipsum).words(rand(3..6), random: true), info_json_name: Forgery(:lorem_ipsum).words(rand(1..2), random: true), - authors: authors.sample(rand(0..3)).uniq, + author: authors.sample, owner: [nil, nil].concat(users).sample, categories: categories.sample(rand(1..4)), github: rand > 50 ? nil : github_url, diff --git a/spec/controllers/api/mods_controller_spec.rb b/spec/controllers/api/mods_controller_spec.rb index 94365b5..3f80363 100644 --- a/spec/controllers/api/mods_controller_spec.rb +++ b/spec/controllers/api/mods_controller_spec.rb @@ -69,7 +69,7 @@ describe API::ModsController, type: :controller do end context 'from a specific author' do - + end end diff --git a/spec/decorators/mod_decorator_spec.rb b/spec/decorators/mod_decorator_spec.rb index 3f5446e..dd77cc3 100644 --- a/spec/decorators/mod_decorator_spec.rb +++ b/spec/decorators/mod_decorator_spec.rb @@ -15,50 +15,50 @@ describe ModDecorator do end end - describe '#authors_links_list' do - - it 'should return a comma separated authors list links' do - mod = create_decorated :mod, authors: 3.times.map{ |i| create :author, name: "Au#{i}" } - expect(mod.authors_links_list).to eq 'Au0, Au1, Au2' - end - - it 'should add the (maintainer) text if the author is also the owner' do - authors = 3.times.map{ |i| create :author, name: "Au#{i}" } - user = create :user - authors[1].update! user: user - mod = create_decorated :mod, authors: authors, owner: user - expect(mod.authors_links_list).to eq 'Au0, Au1 (maintainer), Au2' - end - - it 'should not add the (maintainer) text if there is only 1 author' do - user = create :user - author = create :author, name: "Au0", user: user - mod = create_decorated :mod, authors: [author], owner: user - expect(mod.authors_links_list).to eq 'Au0' - end - - it 'should return N/A if the mod has no authors associated' do - mod = create_decorated :mod, authors: [] - expect(mod.authors_links_list).to eq 'N/A' - end - - it 'should show them in the correct sorting order' do - authors = 3.times.map{ |i| create :author, name: "Au#{i}" } - mod = create :mod, name: 'SuperMod', authors: authors - mod.authors_mods[0].update_column :sort_order, 3 - mod.authors_mods[1].update_column :sort_order, 2 - mod.authors_mods[2].update_column :sort_order, 1 - mod.reload - expect(mod.decorate.authors_links_list).to eq 'Au2, Au1, Au0' - end - - it 'should not add maintainer if both the author user and the mod owner are nil' do - authors = 3.times.map{ |i| create :author, name: "Au#{i}" } - create :user - mod = create_decorated :mod, authors: authors, owner: nil - expect(mod.authors_links_list).to eq 'Au0, Au1, Au2' - end - end + # describe '#authors_links_list' do + # + # it 'should return a comma separated authors list links' do + # mod = create_decorated :mod, authors: 3.times.map{ |i| create :author, name: "Au#{i}" } + # expect(mod.authors_links_list).to eq 'Au0, Au1, Au2' + # end + # + # it 'should add the (maintainer) text if the author is also the owner' do + # authors = 3.times.map{ |i| create :author, name: "Au#{i}" } + # user = create :user + # authors[1].update! user: user + # mod = create_decorated :mod, authors: authors, owner: user + # expect(mod.authors_links_list).to eq 'Au0, Au1 (maintainer), Au2' + # end + # + # it 'should not add the (maintainer) text if there is only 1 author' do + # user = create :user + # author = create :author, name: "Au0", user: user + # mod = create_decorated :mod, authors: [author], owner: user + # expect(mod.authors_links_list).to eq 'Au0' + # end + # + # it 'should return N/A if the mod has no authors associated' do + # mod = create_decorated :mod, authors: [] + # expect(mod.authors_links_list).to eq 'N/A' + # end + # + # it 'should show them in the correct sorting order' do + # authors = 3.times.map{ |i| create :author, name: "Au#{i}" } + # mod = create :mod, name: 'SuperMod', authors: authors + # mod.authors_mods[0].update_column :sort_order, 3 + # mod.authors_mods[1].update_column :sort_order, 2 + # mod.authors_mods[2].update_column :sort_order, 1 + # mod.reload + # expect(mod.decorate.authors_links_list).to eq 'Au2, Au1, Au0' + # end + # + # it 'should not add maintainer if both the author user and the mod owner are nil' do + # authors = 3.times.map{ |i| create :author, name: "Au#{i}" } + # create :user + # mod = create_decorated :mod, authors: authors, owner: nil + # expect(mod.authors_links_list).to eq 'Au0, Au1, Au2' + # end + # end describe '#forum_link' do context 'only has forum post URL' do diff --git a/spec/models/mod_spec.rb b/spec/models/mod_spec.rb index 5b38a8d..62da2d3 100644 --- a/spec/models/mod_spec.rb +++ b/spec/models/mod_spec.rb @@ -57,10 +57,6 @@ describe Mod do # it { is_expected.to respond_to :tags } it { is_expected.to respond_to :favorites } it { is_expected.to respond_to :favorites_count } - it { is_expected.to respond_to :authors } - it { expect(mod.authors.build).to be_kind_of Author } - it { is_expected.to respond_to :authors_mods } - it { expect(mod.authors_mods.build).to be_kind_of AuthorsMod } it { is_expected.to respond_to :author } its(:build_author) { is_expected.to be_kind_of Author } @@ -141,19 +137,6 @@ describe Mod do expect(mod2.errors[:slug].size).to eq 1 end - it 'should be invalid with more than 8 authors' do - authors = 9.times.map{ create :author } - mod = build :mod, authors: authors - expect(mod).to be_invalid - expect(mod.errors[:authors].size).to eq 1 - end - - it 'should be valid with 8 authors' do - authors = 8.times.map{ create :author } - mod = build :mod, authors: authors - expect(mod).to be_valid - end - it 'should be invalid without #info_json_name' do mod = build :mod, info_json_name: '' expect(mod).to be_invalid