diff options
author | Zeger-Jan van de Weg <zegerjan@gitlab.com> | 2016-04-06 23:13:06 +0300 |
---|---|---|
committer | Zeger-Jan van de Weg <zegerjan@gitlab.com> | 2016-04-06 23:13:06 +0300 |
commit | 8b90502857fbc0a5e957f58c7e46554f3e14cc24 (patch) | |
tree | 4eb9c4c6ce27e6ee703465542bc3ed2b519768a9 | |
parent | 339bf652c2330c43e95f565fa218c9c25e20f0c5 (diff) |
Rename Emoji Award to Emoji Award
To make this work lib/award_emoji had to be namespaced under Gitlab,
over private channels DouweM mentioned this could later maybe combined
with the model
20 files changed, 152 insertions, 141 deletions
diff --git a/app/assets/javascripts/lib/emoji_aliases.js.coffee.erb b/app/assets/javascripts/lib/emoji_aliases.js.coffee.erb index 66f640a3cb7..97be65116e2 100644 --- a/app/assets/javascripts/lib/emoji_aliases.js.coffee.erb +++ b/app/assets/javascripts/lib/emoji_aliases.js.coffee.erb @@ -1,2 +1,2 @@ window.emojiAliases = -> - JSON.parse('<%= AwardEmoji.aliases.to_json %>') + JSON.parse('<%= Gitlab::AwardEmoji.aliases.to_json %>') diff --git a/app/controllers/concerns/toggle_emoji_award.rb b/app/controllers/concerns/toggle_award_emoji.rb index 4ad9cbece21..561a84762f2 100644 --- a/app/controllers/concerns/toggle_emoji_award.rb +++ b/app/controllers/concerns/toggle_award_emoji.rb @@ -1,13 +1,13 @@ -module ToggleEmojiAward +module ToggleAwardEmoji extend ActiveSupport::Concern included do - before_action :authenticate_user!, only: [:toggle_emoji_award] + before_action :authenticate_user!, only: [:toggle_award_emoji] end - def toggle_emoji_award + def toggle_award_emoji name = params.require(:name) - CreateEmojiAwardService.new(project, current_user).execute(awardable, name) + CreateAwardEmojiService.new(project, current_user).execute(awardable, name) render json: { ok: true } end diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 2ad6a71951c..0f7b8c39060 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -1,5 +1,5 @@ class Projects::IssuesController < Projects::ApplicationController - include ToggleEmojiAward + include ToggleAwardEmoji include ToggleSubscriptionAction include IssuableActions diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 4a939872ed6..1134f586060 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -1,5 +1,5 @@ class Projects::MergeRequestsController < Projects::ApplicationController - include ToggleEmojiAward + include ToggleAwardEmoji include ToggleSubscriptionAction include DiffHelper include IssuableActions diff --git a/app/controllers/projects/notes_controller.rb b/app/controllers/projects/notes_controller.rb index e5aa1b2a55b..2d3763b7f9e 100644 --- a/app/controllers/projects/notes_controller.rb +++ b/app/controllers/projects/notes_controller.rb @@ -1,5 +1,5 @@ class Projects::NotesController < Projects::ApplicationController - include ToggleEmojiAward + include ToggleAwardEmoji # Authorize before_action :authorize_read_note! @@ -22,7 +22,7 @@ class Projects::NotesController < Projects::ApplicationController end def create - @note = Notes::CreateService.new(project, current_user, note_params.merge(create_emoji_awards: true)).execute + @note = Notes::CreateService.new(project, current_user, note_params.merge(create_award_emoji: true)).execute respond_to do |format| format.json { render json: note_json(@note) } @@ -122,13 +122,13 @@ class Projects::NotesController < Projects::ApplicationController discussion_html: note_to_discussion_html(note), discussion_with_diff_html: note_to_discussion_with_diff_html(note) } - elsif note.emoji_award? - emoji_award = note.emoji_award + elsif note.award_emoji? + create_award_emoj = note.award_emoji { - valid: emoji_award.valid?, + valid: award_emoji.valid?, award: true, - id: emoji_award.id, - name: emoji_award.name + id: award_emoji.id, + name: award_emoji.name } else { diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 62f53664db3..6e9524576de 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -138,7 +138,7 @@ class ProjectsController < Projects::ApplicationController participants = ::Projects::ParticipantsService.new(@project, current_user).execute(note_type, note_id) @suggestions = { - emojis: AwardEmoji.urls, + emojis: Gitlab::AwardEmoji.urls, issues: autocomplete.issues, mergerequests: autocomplete.merge_requests, members: participants diff --git a/app/models/emoji_award.rb b/app/models/award_emoji.rb index 309f34e2e3c..9a382c30896 100644 --- a/app/models/emoji_award.rb +++ b/app/models/award_emoji.rb @@ -1,4 +1,4 @@ -class EmojiAward < ActiveRecord::Base +class AwardEmoji < ActiveRecord::Base DOWNVOTE_NAME = "thumbsdown".freeze UPVOTE_NAME = "thumbsup".freeze diff --git a/app/models/concerns/awardable.rb b/app/models/concerns/awardable.rb index cd1fb229f53..b17bf689a2d 100644 --- a/app/models/concerns/awardable.rb +++ b/app/models/concerns/awardable.rb @@ -2,25 +2,25 @@ module Awardable extend ActiveSupport::Concern included do - has_many :emoji_awards, as: :awardable, dependent: :destroy + has_many :award_emoji, as: :awardable, dependent: :destroy if self < Participable - participant :emoji_awards + participant :award_emoji end end module ClassMethods def order_upvotes_desc - order_votes_desc(EmojiAward::UPVOTE_NAME) + order_votes_desc(AwardEmoji::UPVOTE_NAME) end def order_downvotes_desc - order_votes_desc(EmojiAward::DOWNVOTE_NAME) + order_votes_desc(AwardEmoji::DOWNVOTE_NAME) end def order_votes_desc(emoji_name) awardable_table = self.arel_table - awards_table = EmojiAward.arel_table + awards_table = AwardEmoji.arel_table join_clause = awardable_table.join(awards_table, Arel::Nodes::OuterJoin).on( awards_table[:awardable_id].eq(awardable_table[:id]).and( @@ -30,27 +30,27 @@ module Awardable ) ).join_sources - joins(join_clause).group(awardable_table[:id]).reorder("COUNT(emoji_awards.id) DESC") + joins(join_clause).group(awardable_table[:id]).reorder("COUNT(award_emoji.id) DESC") end end def grouped_awards(with_thumbs = true) - awards = emoji_awards.group_by(&:name) + awards = award_emoji.group_by(&:name) if with_thumbs - awards[EmojiAward::UPVOTE_NAME] ||= EmojiAward.none - awards[EmojiAward::DOWNVOTE_NAME] ||= EmojiAward.none + awards[AwardEmoji::UPVOTE_NAME] ||= AwardEmoji.none + awards[AwardEmoji::DOWNVOTE_NAME] ||= AwardEmoji.none end awards end def downvotes - emoji_awards.where(name: EmojiAward::DOWNVOTE_NAME).count + award_emoji.where(name: AwardEmoji::DOWNVOTE_NAME).count end def upvotes - emoji_awards.where(name: EmojiAward::UPVOTE_NAME).count + award_emoji.where(name: AwardEmoji::UPVOTE_NAME).count end def emoji_awardable? @@ -58,24 +58,24 @@ module Awardable end def awarded_emoji?(emoji_name, current_user) - emoji_awards.where(name: emoji_name, user: current_user).exists? + award_emoji.where(name: emoji_name, user: current_user).exists? end - def award_emoji(emoji_name, current_user) + def add_award_emoji(emoji_name, current_user) return unless emoji_awardable? - emoji_awards.create(name: emoji_name, user: current_user) + award_emoji.create(name: emoji_name, user: current_user) end - def remove_emoji_award(emoji_name, current_user) - emoji_awards.where(name: emoji_name, user: current_user).destroy_all + def remove_award_emoji(emoji_name, current_user) + award_emoji.where(name: emoji_name, user: current_user).destroy_all end - def toggle_emoji_award(emoji_name, current_user) + def toggle_award_emoji(emoji_name, current_user) if awarded_emoji?(emoji_name, current_user) remove_emoji_award(emoji_name, current_user) else - award_emoji(emoji_name, current_user) + add_award_emoji(emoji_name, current_user) end end end diff --git a/app/models/note.rb b/app/models/note.rb index f613cb81c63..37ef2b0a793 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -27,7 +27,7 @@ class Note < ActiveRecord::Base include Mentionable include Awardable - attr_accessor :emoji_award + attr_accessor :award_emoji default_value_for :system, false @@ -347,7 +347,7 @@ class Note < ActiveRecord::Base emoji_awards_supported? && contains_only_emoji? end - def create_emoji_award + def create_award_emoji self.emoji_award = self.noteable.award_emoji(emoji_award_name, self.author) end @@ -373,7 +373,7 @@ class Note < ActiveRecord::Base def emoji_award_name original_name = note.match(Banzai::Filter::EmojiFilter.emoji_pattern)[1] - AwardEmoji.normalize_emoji_name(original_name) + Gitlab::AwardEmoji.normalize_emoji_name(original_name) end def contains_only_emoji? diff --git a/app/services/create_emoji_award_service.rb b/app/services/create_award_emoji_service.rb index 41dbb5b9f31..8bb2c6d715b 100644 --- a/app/services/create_emoji_award_service.rb +++ b/app/services/create_award_emoji_service.rb @@ -1,14 +1,14 @@ require_relative 'base_service' -class CreateEmojiAwardService < BaseService +class CreateAwardEmojiService < BaseService # For an award emoji being posted we should: # - Mark the TODO as done for this issuable (skip on snippets) # - Save the award emoji - def execute(awardable, item) + def execute(awardable, emoji) issuable = to_issuable(awardable) todo_service.award_emoji(issuable, current_user) if issuable - awardable.toggle_emoji_award(item, current_user) + awardable.toggle_award_emoji(emoji, current_user) end private diff --git a/app/services/notes/create_service.rb b/app/services/notes/create_service.rb index 5cdf25333b0..a5083bcd2d0 100644 --- a/app/services/notes/create_service.rb +++ b/app/services/notes/create_service.rb @@ -1,15 +1,15 @@ module Notes class CreateService < BaseService def execute - create_emoji_awards = params.delete(:create_emoji_awards) + create_award_emoji = params.delete(:create_award_emoji) note = project.notes.new(params) note.author = current_user note.system = false - if create_emoji_awards && note.emoji_award? - note.create_emoji_award + if create_award_emoji && note.emoji_award? + note.create_award_emoji return note end diff --git a/app/views/emoji_awards/_awards_block.html.haml b/app/views/emoji_awards/_awards_block.html.haml index 1b840d88752..22ab96f6112 100644 --- a/app/views/emoji_awards/_awards_block.html.haml +++ b/app/views/emoji_awards/_awards_block.html.haml @@ -1,5 +1,5 @@ - grouped_emojis = awardable.grouped_awards(inline) -.awards.js-awards-block{ class: ("hidden" if !inline && grouped_emojis.size == 0), data: { award_url: url_for([:toggle_emoji_award, @project.namespace.becomes(Namespace), @project, awardable]) } } +.awards.js-awards-block{ class: ("hidden" if !inline && grouped_emojis.size == 0), data: { award_url: url_for([:toggle_award_emoji, @project.namespace.becomes(Namespace), @project, awardable]) } } - awards_sort(grouped_emojis).each do |emoji, awards| %button.btn.award-control.js-emoji-btn.has-tooltip{ type: "button", class: (award_active_class(awards, current_user)), title: award_user_list(awards, current_user), data: { placement: "bottom" } } = emoji_icon(emoji) diff --git a/app/views/emojis/index.html.haml b/app/views/emojis/index.html.haml index 3443a8e2307..97401a2e618 100644 --- a/app/views/emojis/index.html.haml +++ b/app/views/emojis/index.html.haml @@ -1,9 +1,9 @@ .emoji-menu .emoji-menu-content = text_field_tag :emoji_search, "", class: "emoji-search search-input form-control" - - AwardEmoji.emoji_by_category.each do |category, emojis| + - Gitlab::AwardEmoji.emoji_by_category.each do |category, emojis| %h5.emoji-menu-title - = AwardEmoji::CATEGORIES[category] + = Gitlab::AwardEmoji::CATEGORIES[category] %ul.clearfix.emoji-menu-list - emojis.each do |emoji| %li.pull-left.text-center.emoji-menu-list-item diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index 9e8b0131f8f..0af616cdad6 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -8,3 +8,7 @@ # inflect.irregular 'person', 'people' # inflect.uncountable %w( fish sheep ) # end + +ActiveSupport::Inflector.inflections do |inflect| + inflect.uncountable %w(award_emoji) +end diff --git a/config/routes.rb b/config/routes.rb index 235e73f2e98..1f7343bfc91 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -634,7 +634,7 @@ Rails.application.routes.draw do post :cancel_merge_when_build_succeeds get :ci_status post :toggle_subscription - post :toggle_emoji_award + post :toggle_award_emoji post :remove_wip end @@ -699,7 +699,7 @@ Rails.application.routes.draw do resources :issues, constraints: { id: /\d+/ } do member do post :toggle_subscription - post :toggle_emoji_award + post :toggle_award_emoji end collection do post :bulk_update @@ -726,7 +726,7 @@ Rails.application.routes.draw do resources :notes, only: [:index, :create, :destroy, :update], constraints: { id: /\d+/ } do member do delete :delete_attachment - post :toggle_emoji_award + post :toggle_award_emoji end end diff --git a/db/migrate/20160406185700_rename_emoji_award_to_award_emoji.rb b/db/migrate/20160406185700_rename_emoji_award_to_award_emoji.rb new file mode 100644 index 00000000000..8d729167df0 --- /dev/null +++ b/db/migrate/20160406185700_rename_emoji_award_to_award_emoji.rb @@ -0,0 +1,5 @@ +class RenameEmojiAwardToAwardEmoji < ActiveRecord::Migration + def change + rename_table :emoji_awards, :award_emoji + end +end diff --git a/db/schema.rb b/db/schema.rb index b071a1d8c65..e4b0103cb50 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160331133914) do +ActiveRecord::Schema.define(version: 20160406185700) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -44,7 +44,6 @@ ActiveRecord::Schema.define(version: 20160331133914) do t.datetime "updated_at" t.string "home_page_url" t.integer "default_branch_protection", default: 2 - t.boolean "twitter_sharing_enabled", default: true t.text "restricted_visibility_levels" t.boolean "version_check_enabled", default: true t.integer "max_attachment_size", default: 10, null: false @@ -71,11 +70,11 @@ ActiveRecord::Schema.define(version: 20160331133914) do t.string "recaptcha_site_key" t.string "recaptcha_private_key" t.integer "metrics_port", default: 8089 + t.boolean "akismet_enabled", default: false + t.string "akismet_api_key" t.integer "metrics_sample_interval", default: 15 t.boolean "sentry_enabled", default: false t.string "sentry_dsn" - t.boolean "akismet_enabled", default: false - t.string "akismet_api_key" t.boolean "email_author_in_body", default: false t.integer "default_group_visibility" end @@ -94,6 +93,19 @@ ActiveRecord::Schema.define(version: 20160331133914) do add_index "audit_events", ["entity_id", "entity_type"], name: "index_audit_events_on_entity_id_and_entity_type", using: :btree add_index "audit_events", ["type"], name: "index_audit_events_on_type", using: :btree + create_table "award_emoji", force: :cascade do |t| + t.string "name" + t.integer "user_id" + t.integer "awardable_id" + t.string "awardable_type" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "award_emoji", ["awardable_id"], name: "index_award_emoji_on_awardable_id", using: :btree + add_index "award_emoji", ["awardable_type"], name: "index_award_emoji_on_awardable_type", using: :btree + add_index "award_emoji", ["user_id"], name: "index_award_emoji_on_user_id", using: :btree + create_table "broadcast_messages", force: :cascade do |t| t.text "message", null: false t.datetime "starts_at" @@ -364,19 +376,6 @@ ActiveRecord::Schema.define(version: 20160331133914) do add_index "emails", ["email"], name: "index_emails_on_email", unique: true, using: :btree add_index "emails", ["user_id"], name: "index_emails_on_user_id", using: :btree - create_table "emoji_awards", force: :cascade do |t| - t.string "name" - t.integer "user_id" - t.integer "awardable_id" - t.string "awardable_type" - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "emoji_awards", ["awardable_id"], name: "index_emoji_awards_on_awardable_id", using: :btree - add_index "emoji_awards", ["awardable_type"], name: "index_emoji_awards_on_awardable_type", using: :btree - add_index "emoji_awards", ["user_id"], name: "index_emoji_awards_on_user_id", using: :btree - create_table "events", force: :cascade do |t| t.string "target_type" t.integer "target_id" @@ -430,9 +429,9 @@ ActiveRecord::Schema.define(version: 20160331133914) do t.string "state" t.integer "iid" t.integer "updated_by_id" - t.integer "moved_to_id" t.boolean "confidential", default: false t.datetime "deleted_at" + t.integer "moved_to_id" end add_index "issues", ["assignee_id"], name: "index_issues_on_assignee_id", using: :btree @@ -756,6 +755,7 @@ ActiveRecord::Schema.define(version: 20160331133914) do add_index "projects", ["namespace_id"], name: "index_projects_on_namespace_id", using: :btree add_index "projects", ["path"], name: "index_projects_on_path", using: :btree add_index "projects", ["path"], name: "index_projects_on_path_trigram", using: :gin, opclasses: {"path"=>"gin_trgm_ops"} + add_index "projects", ["pending_delete"], name: "index_projects_on_pending_delete", using: :btree add_index "projects", ["runners_token"], name: "index_projects_on_runners_token", using: :btree add_index "projects", ["star_count"], name: "index_projects_on_star_count", using: :btree add_index "projects", ["visibility_level"], name: "index_projects_on_visibility_level", using: :btree @@ -797,9 +797,9 @@ ActiveRecord::Schema.define(version: 20160331133914) do t.string "type" t.string "title" t.integer "project_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.boolean "active", null: false + t.datetime "created_at" + t.datetime "updated_at" + t.boolean "active", default: false, null: false t.text "properties" t.boolean "template", default: false t.boolean "push_events", default: true diff --git a/lib/award_emoji.rb b/lib/award_emoji.rb deleted file mode 100644 index 7c9d7ccfee0..00000000000 --- a/lib/award_emoji.rb +++ /dev/null @@ -1,70 +0,0 @@ -class AwardEmoji - CATEGORIES = { - other: "Other", - objects: "Objects", - places: "Places", - travel_places: "Travel", - emoticons: "Emoticons", - objects_symbols: "Symbols", - nature: "Nature", - celebration: "Celebration", - people: "People", - activity: "Activity", - flags: "Flags", - food_drink: "Food" - }.with_indifferent_access - - def self.normalize_emoji_name(name) - aliases[name] || name - end - - def self.emoji_by_category - unless @emoji_by_category - @emoji_by_category = {} - - emojis.each do |emoji_name, data| - data["name"] = emoji_name - - @emoji_by_category[data["category"]] ||= [] - @emoji_by_category[data["category"]] << data - end - - @emoji_by_category = @emoji_by_category.sort.to_h - end - - @emoji_by_category - end - - def self.emojis - @emojis ||= begin - json_path = File.join(Rails.root, 'fixtures', 'emojis', 'index.json' ) - JSON.parse(File.read(json_path)) - end - end - - def self.aliases - @aliases ||= begin - json_path = File.join(Rails.root, 'fixtures', 'emojis', 'aliases.json' ) - JSON.parse(File.read(json_path)) - end - end - - # Returns an Array of Emoji names and their asset URLs. - def self.urls - @urls ||= begin - path = File.join(Rails.root, 'fixtures', 'emojis', 'digests.json') - prefix = Gitlab::Application.config.assets.prefix - digest = Gitlab::Application.config.assets.digest - - JSON.parse(File.read(path)).map do |hash| - if digest - fname = "#{hash['unicode']}-#{hash['digest']}" - else - fname = hash['unicode'] - end - - { name: hash['name'], path: "#{prefix}/#{fname}.png" } - end - end - end -end diff --git a/lib/gitlab/award_emoji.rb b/lib/gitlab/award_emoji.rb new file mode 100644 index 00000000000..0adcafd795c --- /dev/null +++ b/lib/gitlab/award_emoji.rb @@ -0,0 +1,72 @@ +module Gitlab + class AwardEmoji + CATEGORIES = { + other: "Other", + objects: "Objects", + places: "Places", + travel_places: "Travel", + emoticons: "Emoticons", + objects_symbols: "Symbols", + nature: "Nature", + celebration: "Celebration", + people: "People", + activity: "Activity", + flags: "Flags", + food_drink: "Food" + }.with_indifferent_access + + def self.normalize_emoji_name(name) + aliases[name] || name + end + + def self.emoji_by_category + unless @emoji_by_category + @emoji_by_category = {} + + emojis.each do |emoji_name, data| + data["name"] = emoji_name + + @emoji_by_category[data["category"]] ||= [] + @emoji_by_category[data["category"]] << data + end + + @emoji_by_category = @emoji_by_category.sort.to_h + end + + @emoji_by_category + end + + def self.emojis + @emojis ||= begin + json_path = File.join(Rails.root, 'fixtures', 'emojis', 'index.json' ) + JSON.parse(File.read(json_path)) + end + end + + def self.aliases + @aliases ||= begin + json_path = File.join(Rails.root, 'fixtures', 'emojis', 'aliases.json' ) + JSON.parse(File.read(json_path)) + end + end + + # Returns an Array of Emoji names and their asset URLs. + def self.urls + @urls ||= begin + path = File.join(Rails.root, 'fixtures', 'emojis', 'digests.json') + prefix = Gitlab::Application.config.assets.prefix + digest = Gitlab::Application.config.assets.digest + + JSON.parse(File.read(path)).map do |hash| + if digest + fname = "#{hash['unicode']}-#{hash['digest']}" + else + fname = hash['unicode'] + end + + { name: hash['name'], path: "#{prefix}/#{fname}.png" } + end + end + end + end +end diff --git a/lib/tasks/gemojione.rake b/lib/tasks/gemojione.rake index 7ec00a898fd..481285f80cc 100644 --- a/lib/tasks/gemojione.rake +++ b/lib/tasks/gemojione.rake @@ -6,7 +6,7 @@ namespace :gemojione do dir = Gemojione.index.images_path - digests = AwardEmoji.emojis.map do |name, emoji_hash| + digests = Gitlab::AwardEmoji.emojis.map do |name, emoji_hash| fpath = File.join(dir, "#{emoji_hash['unicode']}.png") digest = Digest::SHA256.file(fpath).hexdigest |