Skip to content

Commit a24c3f2

Browse files
committed
fix/Use unique slug for all languages
1 parent 4b0f727 commit a24c3f2

File tree

5 files changed

+134
-136
lines changed

5 files changed

+134
-136
lines changed

app/javascript/controllers/codemirror_controller.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export default class extends Controller {
2424
initializeCodeMirror() {
2525
this.codeMirror = CodeMirror.fromTextArea(this.mirrorTarget, {
2626
theme: 'one-light',
27-
mode: 'javascript',
27+
mode: "javascript",
2828
readOnly: this.readOnlyValue ? 'nocursor' : false
2929
});
3030

@@ -69,6 +69,6 @@ export default class extends Controller {
6969
modeFromId(modeId) {
7070
return this.modesValue.find(mode => {
7171
return Number(mode.id) === Number(modeId)
72-
}).slug
72+
}).mode
7373
}
7474
}

app/models/language.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
class Language < ApplicationRecord
2-
2+
validates_uniqueness_of :slug, :name
33
end

config/initializers/languages.rb

Lines changed: 127 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -1,125 +1,127 @@
1-
LANGUAGES = {
2-
'APL' => 'apl',
3-
'ASN.1' => 'asn.1',
4-
'Asterisk' => 'asterisk',
5-
'Brainfuck' => 'brainfuck',
6-
'C' => 'clike',
7-
'C++' => 'clike',
8-
'C#' => 'clike',
9-
'Clojure' => 'clojure',
10-
'CMake' => 'cmake',
11-
'COBOL' => 'cobol',
12-
'CoffeeScript' => 'coffeescript',
13-
'Common Lisp' => 'commonlisp',
14-
'Crystal' => 'crystal',
15-
'CSS' => 'css',
16-
'Cypher' => 'cypher',
17-
'D' => 'd',
18-
'Dart' => 'dart',
19-
'Diff' => 'diff',
20-
'Django' => 'django',
21-
'Dockerfile' => 'dockerfile',
22-
'DTD' => 'dtd',
23-
'Dylan' => 'dylan',
24-
'EBNF' => 'ebnf',
25-
'ECL' => 'ecl',
26-
'Eiffel' => 'eiffel',
27-
'Elm' => 'elm',
28-
'Erlang' => 'erlang',
29-
'Factor' => 'factor',
30-
'FCL' => 'fcl',
31-
'Forth' => 'forth',
32-
'Fortran' => 'fortran',
33-
'Gas' => 'gas',
34-
'Gherkin' => 'gherkin',
35-
'Go' => 'go',
36-
'Groovy' => 'groovy',
37-
'HAML' => 'haml',
38-
'Handlebars' => 'handlebars',
39-
'Haskell' => 'haskell',
40-
'Haxe' => 'haxe',
41-
'HTML' => 'xml',
42-
'HTML embedded' => 'htmlembedded',
43-
'HTML mixed mode' => 'htmlmixed',
44-
'HTTP' => 'http',
45-
'IDL' => 'idl',
46-
'Java' => 'clike',
47-
'JavaScript' => 'javascript',
48-
'Julia' => 'julia',
49-
'JSX' => 'jsx',
50-
'Kotlin' => 'clike',
51-
'LaTeX' => 'stex',
52-
'LESS' => 'css',
53-
'LiveScript' => 'livescript',
54-
'Lua' => 'lua',
55-
'Markdown (GitHub)' => 'markdown',
56-
'Mathematica' => 'mathematica',
57-
'mbox' => 'mbox',
58-
'mIRC' => 'mirc',
59-
'Modelica' => 'modelica',
60-
'MscGen' => 'mscgen',
61-
'MUMPS' => 'mumps',
62-
'Nginx' => 'nginx',
63-
'NSIS' => 'nsis',
64-
'N-Triples' => 'ntriples',
65-
'N-Quads' => 'ntriples',
66-
'Objective C' => 'clike',
67-
'Octave' => 'octave',
68-
'Oz' => 'oz',
69-
'Pascal' => 'pascal',
70-
'PEG.js' => 'pegjs',
71-
'Perl' => 'perl',
72-
'PHP' => 'php',
73-
'Pig Latin' => 'pig',
74-
'PowerShell' => 'powershell',
75-
'Properties files' => 'properties',
76-
'ProtoBuf' => 'protobuf',
77-
'Pug' => 'pug',
78-
'Puppet' => 'puppet',
79-
'Python' => 'python',
80-
'Q' => 'q',
81-
'R' => 'r',
82-
'RPM' => 'rpm',
83-
'reStructuredText' => 'rst',
84-
'Ruby' => 'ruby',
85-
'Rust' => 'rust',
86-
'SAS' => 'sas',
87-
'Sass' => 'sass',
88-
'Scheme' => 'scheme',
89-
'SCSS' => 'scss',
90-
'Shell' => 'shell',
91-
'Sieve' => 'sieve',
92-
'Slim' => 'slim',
93-
'Smalltalk' => 'smalltalk',
94-
'Smarty' => 'smarty',
95-
'Solr' => 'solr',
96-
'Soy' => 'soy',
97-
'SPARQL' => 'sparql',
98-
'SQL' => 'sql',
99-
'sTeX' => 'stex',
100-
'Swift' => 'swift',
101-
'Tcl' => 'tcl',
102-
'Textile' => 'textile',
103-
'Tiddlywiki' => 'tiddlywiki',
104-
'Tiki wiki' => 'tiki',
105-
'TOML' => 'toml',
106-
'Tornado' => 'tornado',
107-
'troff' => 'troff',
108-
'TTCN' => 'ttcn',
109-
'TTCN Configuration' => 'ttcn-cfg',
110-
'Turtle' => 'turtle',
111-
'Twig' => 'twig',
112-
'VB.NET' => 'vb',
113-
'VBScript' => 'vbscript',
114-
'Velocity' => 'velocity',
115-
'Verilog' => 'verilog',
116-
'VHDL' => 'vhdl',
117-
'Vue' => 'vue',
118-
'Web IDL' => 'webidl',
119-
'XML' => 'xml',
120-
'XQuery' => 'xquery',
121-
'Yacas' => 'yacas',
122-
'YAML' => 'yaml',
123-
'YAML Frontmatter' => 'yaml-frontmatter',
124-
'Z80' => 'z80'
125-
}.freeze
1+
LANGUAGES = [
2+
{ name: 'APL', mode: 'apl', slug: 'apl' },
3+
{ name: 'ASN.1', mode: 'asn.1', slug: 'asn1' },
4+
{ name: 'Asterisk', mode: 'asterisk', slug: 'asterisk' },
5+
{ name: 'Brainfuck', mode: 'brainfuck', slug: 'brainfuck' },
6+
{ name: 'C', mode: 'clike', slug: 'c' },
7+
{ name: 'C++', mode: 'clike', slug: 'cplusplus' },
8+
{ name: 'C#', mode: 'clike', slug: 'csharp' },
9+
{ name: 'Clojure', mode: 'clojure', slug: 'clojure' },
10+
{ name: 'CMake', mode: 'cmake', slug: 'cmake' },
11+
{ name: 'COBOL', mode: 'cobol', slug: 'cobol' },
12+
{ name: 'CoffeeScript', mode: 'coffeescript', slug: 'coffeescript' },
13+
{ name: 'Common Lisp', mode: 'commonlisp', slug: 'commonlisp' },
14+
{ name: 'Crystal', mode: 'crystal', slug: 'crystal' },
15+
{ name: 'CSS', mode: 'css', slug: 'css' },
16+
{ name: 'Cypher', mode: 'cypher', slug: 'cypher' },
17+
{ name: 'D', mode: 'd', slug: 'd' },
18+
{ name: 'Dart', mode: 'dart', slug: 'dart' },
19+
{ name: 'Diff', mode: 'diff', slug: 'diff' },
20+
{ name: 'Django', mode: 'django', slug: 'django' },
21+
{ name: 'Diff', mode: 'diff', slug: 'diff' },
22+
{ name: 'Dockerfile', mode: 'dockerfile', slug: 'dockerfile' },
23+
{ name: 'DTD', mode: 'dtd', slug: 'dtd' },
24+
{ name: 'Dylan', mode: 'dylan', slug: 'dylan' },
25+
{ name: 'EBNF', mode: 'ebnf', slug: 'ebnf' },
26+
{ name: 'ECL', mode: 'ecl', slug: 'ecl' },
27+
{ name: 'Eiffell', mode: 'eiffell', slug: 'eiffell' },
28+
{ name: 'Elm', mode: 'elm', slug: 'elm' },
29+
{ name: 'Erlang', mode: 'erlang', slug: 'erlang' },
30+
{ name: 'Factor', mode: 'factor', slug: 'factor' },
31+
{ name: 'FCL', mode: 'fcl', slug: 'fcl' },
32+
{ name: 'Forth', mode: 'forth', slug: 'forth' },
33+
{ name: 'Fortran', mode: 'fortran', slug: 'fortran' },
34+
{ name: 'Gas', mode: 'gas', slug: 'gas' },
35+
{ name: 'Gherkin', mode: 'gherkin', slug: 'gherkin' },
36+
{ name: 'Go', mode: 'go', slug: 'go' },
37+
{ name: 'Groovy', mode: 'groovy', slug: 'groovy' },
38+
{ name: 'HAML', mode: 'haml', slug: 'haml' },
39+
{ name: 'Handlebars', mode: 'handlebars', slug: 'handlebars' },
40+
{ name: 'Haskell', mode: 'haskell', slug: 'haskell' },
41+
{ name: 'Haxe', mode: 'haxe', slug: 'haxe' },
42+
{ name: 'HTML', mode: 'xml', slug: 'html' },
43+
{ name: 'HTML embedded', mode: 'htmlembedded', slug: 'htmlembedded' },
44+
{ name: 'HTML mixed mode', mode: 'htmlmixed', slug: 'htmlmixed' },
45+
{ name: 'HTTP', mode: 'http', slug: 'http' },
46+
{ name: 'IDL', mode: 'idl', slug: 'idl' },
47+
{ name: 'Java', mode: 'clike', slug: 'java' },
48+
{ name: 'JavaScript', mode: 'javascript', slug: 'javascript' },
49+
{ name: 'Julia', mode: 'julia', slug: 'julia' },
50+
{ name: 'Kotlin', mode: 'clike', slug: 'kotlin' },
51+
{ name: 'LaTeX', mode: 'stex', slug: 'latex' },
52+
{ name: 'LESS', mode: 'css', slug: 'less' },
53+
{ name: 'LiveScript', mode: 'livescript', slug: 'livescript' },
54+
{ name: 'Lua', mode: 'lua', slug: 'lua' },
55+
{ name: 'Markdown', mode: 'markdown', slug: 'markdown' },
56+
{ name: 'Mathematica', mode: 'mathematica', slug: 'mathematica' },
57+
{ name: 'mbox', mode: 'mbox', slug: 'mbox' },
58+
{ name: 'mIRC', mode: 'mirc', slug: 'mirc' },
59+
{ name: 'Modelica', mode: 'modelica', slug: 'modelica' },
60+
{ name: 'MscGen', mode: 'mscgen', slug: 'mscgen' },
61+
{ name: 'MUMPS', mode: 'mumps', slug: 'mumps' },
62+
{ name: 'Nginx', mode: 'nginx', slug: 'nginx' },
63+
{ name: 'NSIS', mode: 'nsis', slug: 'nsis' },
64+
{ name: 'N-Triples', mode: 'ntriples', slug: 'ntriples' },
65+
{ name: 'N-Quads', mode: 'ntriples', slug: 'nquads' },
66+
{ name: 'Objective C', mode: 'clike', slug: 'objectivec' },
67+
{ name: 'Octave', mode: 'octave', slug: 'octave' },
68+
{ name: 'Oz', mode: 'oz', slug: 'oz' },
69+
{ name: 'Pascal', mode: 'pascal', slug: 'pascal' },
70+
{ name: 'PEG.js', mode: 'pegjs', slug: 'pegjs' },
71+
{ name: 'Perl', mode: 'perl', slug: 'perl' },
72+
{ name: 'PHP', mode: 'php', slug: 'php' },
73+
{ name: 'Pig Latin', mode: 'pig', slug: 'pig' },
74+
{ name: 'PowerShell', mode: 'powershell', slug: 'powershell' },
75+
{ name: 'Properties Files', mode: 'properties', slug: 'properties' },
76+
{ name: 'ProtoBuf', mode: 'protobuf', slug: 'protobuf' },
77+
{ name: 'Pug', mode: 'pug', slug: 'pug' },
78+
{ name: 'Puppet', mode: 'puppet', slug: 'puppet' },
79+
{ name: 'Python', mode: 'python', slug: 'python' },
80+
{ name: 'Q', mode: 'q', slug: 'q' },
81+
{ name: 'R', mode: 'r', slug: 'r' },
82+
{ name: 'RPM', mode: 'rpm', slug: 'rpm' },
83+
{ name: 'React', mode: 'jsx', slug: 'jsx' },
84+
{ name: 'reStructuredText', mode: 'rst', slug: 'rst' },
85+
{ name: 'Ruby', mode: 'ruby', slug: 'ruby' },
86+
{ name: 'Ruby - ERB', mode: 'htmlembedded', slug: 'rubyerb' },
87+
{ name: 'Rust', mode: 'rust', slug: 'rust' },
88+
{ name: 'SAS', mode: 'sas', slug: 'sas' },
89+
{ name: 'SASS', mode: 'sass', slug: 'sass' },
90+
{ name: 'Scheme', mode: 'scheme', slug: 'scheme' },
91+
{ name: 'SCSS', mode: 'scss', slug: 'scss' },
92+
{ name: 'Shell', mode: 'shell', slug: 'shell' },
93+
{ name: 'Sieve', mode: 'sieve', slug: 'sieve' },
94+
{ name: 'Slim', mode: 'slim', slug: 'slim' },
95+
{ name: 'Smalltalk', mode: 'smalltalk', slug: 'smalltalk' },
96+
{ name: 'Smarty', mode: 'smarty', slug: 'smarty' },
97+
{ name: 'Solr', mode: 'solr', slug: 'solr' },
98+
{ name: 'Soy', mode: 'soy', slug: 'soy' },
99+
{ name: 'SPARQL', mode: 'sparql', slug: 'sparql' },
100+
{ name: 'SQL', mode: 'sql', slug: 'sql' },
101+
{ name: 'sTeX', mode: 'stex', slug: 'stex' },
102+
{ name: 'Swift', mode: 'swift', slug: 'swift' },
103+
{ name: 'Tcl', mode: 'tcl', slug: 'tcl' },
104+
{ name: 'Textile', mode: 'textile', slug: 'textile' },
105+
{ name: 'Tiddlywiki', mode: 'tiddlywiki', slug: 'tiddlywiki' },
106+
{ name: 'Tiki Wiki', mode: 'tiki', slug: 'tiki' },
107+
{ name: 'TOML', mode: 'toml', slug: 'toml' },
108+
{ name: 'Tornado', mode: 'tornado', slug: 'tornado' },
109+
{ name: 'troff', mode: 'troff', slug: 'troff' },
110+
{ name: 'TTCN', mode: 'ttcn', slug: 'ttcn' },
111+
{ name: 'TTCN Configuration', mode: 'ttcn-cfg', slug: 'ttcn-cfg' },
112+
{ name: 'Turtle', mode: 'turtle', slug: 'turtle' },
113+
{ name: 'Twig', mode: 'twig', slug: 'twig' },
114+
{ name: 'VB.NET', mode: 'vb', slug: 'vb' },
115+
{ name: 'VBScript', mode: 'vbscript', slug: 'vbscript' },
116+
{ name: 'Velocity', mode: 'velocity', slug: 'velocity' },
117+
{ name: 'Verilog', mode: 'verilog', slug: 'verilog' },
118+
{ name: 'VHDL', mode: 'vhdl', slug: 'vhdl' },
119+
{ name: 'Vue', mode: 'vue', slug: 'vue' },
120+
{ name: 'Web IDL', mode: 'webidl', slug: 'webidl' },
121+
{ name: 'XML', mode: 'xml', slug: 'xml' },
122+
{ name: 'XQuery', mode: 'xquery', slug: 'xquery' },
123+
{ name: 'Yacas', mode: 'yacas', slug: 'yacas' },
124+
{ name: 'YAML', mode: 'yaml', slug: 'yaml' },
125+
{ name: 'YAML Frontmatter', mode: 'yaml-frontmatter', slug: 'yaml-frontmatter' },
126+
{ name: 'Z80', mode: 'z80', slug: 'z80' }
127+
].freeze

db/migrate/20210215163203_recreate_languages.rb

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,14 @@ def up
33
create_table :languages do |t|
44
t.string :name, null: false
55
t.string :slug, null: false
6+
t.string :mode, null: false
67

78
t.timestamps
89
end
910

1011
Language.transaction do
11-
LANGUAGES.each do |name, slug|
12-
lang = Language.find_by_slug(slug)
13-
14-
if lang
15-
lang.update!(name: name)
16-
else
17-
Language.create!(name: name, slug: slug)
18-
end
12+
LANGUAGES.each do |attrs|
13+
Language.create!(attrs)
1914
end
2015
end
2116

db/schema.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
create_table "languages", force: :cascade do |t|
6666
t.string "name", null: false
6767
t.string "slug", null: false
68+
t.string "mode", null: false
6869
t.datetime "created_at", precision: 6, null: false
6970
t.datetime "updated_at", precision: 6, null: false
7071
end

0 commit comments

Comments
 (0)