coursemology-polyglot 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 18dfdfb70a8b0da1b79ad451c39655ba0b75cee8
4
- data.tar.gz: c8c11dd4a6bf7d6914e31b83f1ded4199259daed
3
+ metadata.gz: 6e207a9e893f8bf92b666be1b4d6cd3417cb329e
4
+ data.tar.gz: ccb93478f60bbfe16fea0b6f0152a680ee011b57
5
5
  SHA512:
6
- metadata.gz: 6f75172ab29ce6276ccd62ce90f212e731b39e65da79fcd884cea6ad7a4b6689901663a0e5a3e9f568173e4a1e229b9657cf90d13bd1b27f51b2a5fbaf897052
7
- data.tar.gz: 47edb7a66faaaed79e9ff5a88a0d3db12d93c0c646fc3dbd994c1aeea098baba933f725f3ee0b11dd56c18154deec0f44cf2ecca2c399ba039ff5372fa5bff2c
6
+ metadata.gz: ddc6057c0d2df965a5ccb5f09ca76ece3c0f8a0f4c9b742e46eeaa217e8d662473c98cc39659aaaa522d72abd03294a16a9c96bc2e64af10617473459562e1d6
7
+ data.tar.gz: a2443ad850d1c4d2cdb4c041b5cb1404efe6a1187ec84b361097361af83c6a66140e8ebaf412bf3dcd76971f7848538593aabf78aaa70b27f17a47263d617978
data/.gitignore CHANGED
@@ -1,17 +1,17 @@
1
- # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2
- #
3
- # If you find yourself ignoring temporary files generated by your text editor
4
- # or operating system, you probably want to add a global ignore instead:
5
- # git config --global core.excludesfile '~/.gitignore_global'
6
-
7
- # Ignore bundler config and gems.
8
- /.bundle
9
- /vendor/bundle
10
- /Gemfile.lock
11
-
12
- # Ignore generated code coverage information
13
- /spec/coverage/*
14
- /coverage/*
15
-
16
- # Ignore RSpec state
17
- /spec/examples.txt
1
+ # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile '~/.gitignore_global'
6
+
7
+ # Ignore bundler config and gems.
8
+ /.bundle
9
+ /vendor/bundle
10
+ /Gemfile.lock
11
+
12
+ # Ignore generated code coverage information
13
+ /spec/coverage/*
14
+ /coverage/*
15
+
16
+ # Ignore RSpec state
17
+ /spec/examples.txt
data/.hound.yml CHANGED
@@ -1,8 +1,8 @@
1
- ruby:
2
- config_file: .rubocop.yml
3
-
4
- java_script:
5
- config_file: .jshintrc
6
-
7
- scss:
8
- config_file: .scss-lint.yml
1
+ ruby:
2
+ config_file: .rubocop.yml
3
+
4
+ java_script:
5
+ config_file: .jshintrc
6
+
7
+ scss:
8
+ config_file: .scss-lint.yml
@@ -1,9 +1,9 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="RUBY_MODULE" version="4">
3
- <component name="NewModuleRootManager" inherit-compiler-output="true">
4
- <exclude-output />
5
- <content url="file://$MODULE_DIR$" />
6
- <orderEntry type="inheritedJdk" />
7
- <orderEntry type="sourceFolder" forTests="false" />
8
- </component>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="RUBY_MODULE" version="4">
3
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
4
+ <exclude-output />
5
+ <content url="file://$MODULE_DIR$" />
6
+ <orderEntry type="inheritedJdk" />
7
+ <orderEntry type="sourceFolder" forTests="false" />
8
+ </component>
9
9
  </module>
data/.rspec CHANGED
@@ -1,2 +1,2 @@
1
- --color
2
- --require spec_helper
1
+ --color
2
+ --require spec_helper
@@ -1,109 +1,109 @@
1
- Style/CollectionMethods:
2
- Enabled: true
3
- PreferredMethods:
4
- reduce:
5
- inject: 'reduce'
6
- find:
7
- detect: 'find'
8
-
9
- Style/FileName:
10
- Enabled: true
11
-
12
- Style/GuardClause:
13
- Enabled: true
14
-
15
- Style/IfUnlessModifier:
16
- Enabled: true
17
-
18
- Style/PercentLiteralDelimiters:
19
- Enabled: true
20
-
21
- Style/SignalException:
22
- Enabled: true
23
-
24
- Style/SingleLineBlockParams:
25
- Enabled: true
26
-
27
- Style/SingleLineMethods:
28
- Enabled: true
29
-
30
- Style/TrailingCommaInArguments:
31
- Enabled: true
32
-
33
- Style/TrailingCommaInLiteral:
34
- Enabled: true
35
-
36
- Metrics/AbcSize:
37
- Enabled: true
38
-
39
- Metrics/ClassLength:
40
- Enabled: true
41
-
42
- Metrics/ModuleLength:
43
- Enabled: true
44
-
45
- Metrics/CyclomaticComplexity:
46
- Enabled: true
47
-
48
- Metrics/MethodLength:
49
- Enabled: true
50
-
51
- Metrics/ParameterLists:
52
- Enabled: true
53
-
54
- Metrics/PerceivedComplexity:
55
- Enabled: true
56
-
57
- Lint/AssignmentInCondition:
58
- Enabled: true
59
-
60
- Style/AccessorMethodName:
61
- Enabled: true
62
-
63
- Style/Alias:
64
- Enabled: true
65
- EnforcedStyle: prefer_alias_method
66
-
67
- Style/Documentation:
68
- Enabled: true
69
-
70
- Style/DoubleNegation:
71
- Enabled: true
72
-
73
- Style/EachWithObject:
74
- Enabled: true
75
-
76
- Style/EmptyLiteral:
77
- Enabled: true
78
-
79
- Style/ModuleFunction:
80
- Enabled: true
81
-
82
- Style/OneLineConditional:
83
- Enabled: true
84
-
85
- Style/PerlBackrefs:
86
- Enabled: true
87
-
88
- Style/SpecialGlobalVars:
89
- Enabled: true
90
-
91
- Style/VariableInterpolation:
92
- Enabled: true
93
-
94
- Style/WhenThen:
95
- Enabled: true
96
-
97
- Lint/EachWithObjectArgument:
98
- Enabled: true
99
-
100
- Lint/HandleExceptions:
101
- Enabled: true
102
-
103
- Lint/LiteralInCondition:
104
- Description: Checks of literals used in conditions.
105
- Enabled: true
106
-
107
- Lint/LiteralInInterpolation:
108
- Description: Checks for literals used in interpolation.
109
- Enabled: true
1
+ Style/CollectionMethods:
2
+ Enabled: true
3
+ PreferredMethods:
4
+ reduce:
5
+ inject: 'reduce'
6
+ find:
7
+ detect: 'find'
8
+
9
+ Style/FileName:
10
+ Enabled: true
11
+
12
+ Style/GuardClause:
13
+ Enabled: true
14
+
15
+ Style/IfUnlessModifier:
16
+ Enabled: true
17
+
18
+ Style/PercentLiteralDelimiters:
19
+ Enabled: true
20
+
21
+ Style/SignalException:
22
+ Enabled: true
23
+
24
+ Style/SingleLineBlockParams:
25
+ Enabled: true
26
+
27
+ Style/SingleLineMethods:
28
+ Enabled: true
29
+
30
+ Style/TrailingCommaInArguments:
31
+ Enabled: true
32
+
33
+ Style/TrailingCommaInLiteral:
34
+ Enabled: true
35
+
36
+ Metrics/AbcSize:
37
+ Enabled: true
38
+
39
+ Metrics/ClassLength:
40
+ Enabled: true
41
+
42
+ Metrics/ModuleLength:
43
+ Enabled: true
44
+
45
+ Metrics/CyclomaticComplexity:
46
+ Enabled: true
47
+
48
+ Metrics/MethodLength:
49
+ Enabled: true
50
+
51
+ Metrics/ParameterLists:
52
+ Enabled: true
53
+
54
+ Metrics/PerceivedComplexity:
55
+ Enabled: true
56
+
57
+ Lint/AssignmentInCondition:
58
+ Enabled: true
59
+
60
+ Style/AccessorMethodName:
61
+ Enabled: true
62
+
63
+ Style/Alias:
64
+ Enabled: true
65
+ EnforcedStyle: prefer_alias_method
66
+
67
+ Style/Documentation:
68
+ Enabled: true
69
+
70
+ Style/DoubleNegation:
71
+ Enabled: true
72
+
73
+ Style/EachWithObject:
74
+ Enabled: true
75
+
76
+ Style/EmptyLiteral:
77
+ Enabled: true
78
+
79
+ Style/ModuleFunction:
80
+ Enabled: true
81
+
82
+ Style/OneLineConditional:
83
+ Enabled: true
84
+
85
+ Style/PerlBackrefs:
86
+ Enabled: true
87
+
88
+ Style/SpecialGlobalVars:
89
+ Enabled: true
90
+
91
+ Style/VariableInterpolation:
92
+ Enabled: true
93
+
94
+ Style/WhenThen:
95
+ Enabled: true
96
+
97
+ Lint/EachWithObjectArgument:
98
+ Enabled: true
99
+
100
+ Lint/HandleExceptions:
101
+ Enabled: true
102
+
103
+ Lint/LiteralInCondition:
104
+ Description: Checks of literals used in conditions.
105
+ Enabled: true
106
+
107
+ Lint/LiteralInInterpolation:
108
+ Description: Checks for literals used in interpolation.
109
+ Enabled: true
@@ -1,46 +1,46 @@
1
- inherit_from:
2
- - .rubocop.unhound.yml
3
-
4
- AllCops:
5
- Include:
6
- - '**/Gemfile'
7
- - '**/Rakefile'
8
- Exclude:
9
- - 'vendor/bundle/**/*'
10
- TargetRubyVersion: 2.1
11
-
12
- Metrics/LineLength:
13
- Max: 100
14
-
15
- Style/ClassAndModuleChildren:
16
- EnforcedStyle: compact
17
-
18
- Style/DotPosition:
19
- EnforcedStyle: trailing
20
-
21
- Style/Documentation:
22
- Enabled: false
23
-
24
- Style/IndentHash:
25
- EnforcedStyle: consistent
26
-
27
- Style/IfUnlessModifier:
28
- MaxLineLength: 100
29
-
30
- Style/ParallelAssignment:
31
- Enabled: false
32
-
33
- Style/StringLiterals:
34
- EnforcedStyle: single_quotes
35
-
36
- Style/WhileUntilModifier:
37
- MaxLineLength: 100
38
-
39
- Style/WordArray:
40
- Enabled: false
41
-
42
- Style/RegexpLiteral:
43
- AllowInnerSlashes: true
44
-
45
- Style/ClassAndModuleChildren:
46
- EnforcedStyle: compact
1
+ inherit_from:
2
+ - .rubocop.unhound.yml
3
+
4
+ AllCops:
5
+ Include:
6
+ - '**/Gemfile'
7
+ - '**/Rakefile'
8
+ Exclude:
9
+ - 'vendor/bundle/**/*'
10
+ TargetRubyVersion: 2.1
11
+
12
+ Metrics/LineLength:
13
+ Max: 100
14
+
15
+ Style/ClassAndModuleChildren:
16
+ EnforcedStyle: compact
17
+
18
+ Style/DotPosition:
19
+ EnforcedStyle: trailing
20
+
21
+ Style/Documentation:
22
+ Enabled: false
23
+
24
+ Style/IndentHash:
25
+ EnforcedStyle: consistent
26
+
27
+ Style/IfUnlessModifier:
28
+ MaxLineLength: 100
29
+
30
+ Style/ParallelAssignment:
31
+ Enabled: false
32
+
33
+ Style/StringLiterals:
34
+ EnforcedStyle: single_quotes
35
+
36
+ Style/WhileUntilModifier:
37
+ MaxLineLength: 100
38
+
39
+ Style/WordArray:
40
+ Enabled: false
41
+
42
+ Style/RegexpLiteral:
43
+ AllowInnerSlashes: true
44
+
45
+ Style/ClassAndModuleChildren:
46
+ EnforcedStyle: compact
@@ -1,15 +1,15 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.1.8
5
- - 2.2.4
6
- - 2.3.0
7
- - ruby-head
8
- matrix:
9
- allow_failures:
10
- - rvm: ruby-head
11
- bundler_args: "--jobs=3 --retry=3"
12
- cache: bundler
13
-
14
- before_install:
15
- - gem update bundler
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.1.8
5
+ - 2.2.4
6
+ - 2.3.0
7
+ - ruby-head
8
+ matrix:
9
+ allow_failures:
10
+ - rvm: ruby-head
11
+ bundler_args: "--jobs=3 --retry=3"
12
+ cache: bundler
13
+
14
+ before_install:
15
+ - gem update bundler
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in coursemology-polyglot.gemspec
4
- gemspec
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in coursemology-polyglot.gemspec
4
+ gemspec
data/README.md CHANGED
@@ -1,32 +1,32 @@
1
- # Coursemology Polyglot [![Build Status](https://travis-ci.org/Coursemology/polyglot.svg?branch=master)](https://travis-ci.org/Coursemology/polyglot)
2
- [![Code Climate](https://codeclimate.com/github/Coursemology/polyglot/badges/gpa.svg)](https://codeclimate.com/github/Coursemology/polyglot) [![Coverage Status](https://coveralls.io/repos/Coursemology/polyglot/badge.svg?branch=master&service=github)](https://coveralls.io/github/Coursemology/polyglot?branch=master) [![Security](https://hakiri.io/github/Coursemology/polyglot/master.svg)](https://hakiri.io/github/Coursemology/polyglot/master) [![Inline docs](http://inch-ci.org/github/coursemology/polyglot.svg?branch=master)](http://inch-ci.org/github/coursemology/polyglot) [![Gem Version](https://badge.fury.io/rb/coursemology-polyglot.svg)](https://badge.fury.io/rb/coursemology-polyglot)
3
-
4
- This is the library common between the web application and the evaluator for determining the
5
- programming languages supported in Coursemology.
6
-
7
- ## Usage
8
- ### With Rails
9
- The library works with Railties, so there is no special configuration.
10
-
11
- The gem provides a JavaScript asset which can be used to require all Ace modes that are needed by
12
- all concrete languages. In your application manifest, include this:
13
-
14
- ```javascript
15
- //= require coursemology/polyglot/ace-modes
16
- ```
17
-
18
- Ensure that Ace is found within the `ace` directory (i.e. `ace/mode-python.js` etc.)
19
-
20
- ### Without Rails
21
- In your `Gemfile`:
22
- ```ruby
23
- gem 'coursemology-polyglot'
24
- ```
25
-
26
- Then, in your application:
27
- ```ruby
28
- Coursemology::Polyglot.eager_load!
29
- ```
30
-
31
- The Polyglot library needs to be eager loaded so that it knows which languages are defined.
32
- Otherwise, the list of `concrete_languages` will be empty.
1
+ # Coursemology Polyglot [![Build Status](https://travis-ci.org/Coursemology/polyglot.svg?branch=master)](https://travis-ci.org/Coursemology/polyglot)
2
+ [![Code Climate](https://codeclimate.com/github/Coursemology/polyglot/badges/gpa.svg)](https://codeclimate.com/github/Coursemology/polyglot) [![Coverage Status](https://coveralls.io/repos/Coursemology/polyglot/badge.svg?branch=master&service=github)](https://coveralls.io/github/Coursemology/polyglot?branch=master) [![Security](https://hakiri.io/github/Coursemology/polyglot/master.svg)](https://hakiri.io/github/Coursemology/polyglot/master) [![Inline docs](http://inch-ci.org/github/coursemology/polyglot.svg?branch=master)](http://inch-ci.org/github/coursemology/polyglot) [![Gem Version](https://badge.fury.io/rb/coursemology-polyglot.svg)](https://badge.fury.io/rb/coursemology-polyglot)
3
+
4
+ This is the library common between the web application and the evaluator for determining the
5
+ programming languages supported in Coursemology.
6
+
7
+ ## Usage
8
+ ### With Rails
9
+ The library works with Railties, so there is no special configuration.
10
+
11
+ The gem provides a JavaScript asset which can be used to require all Ace modes that are needed by
12
+ all concrete languages. In your application manifest, include this:
13
+
14
+ ```javascript
15
+ //= require coursemology/polyglot/ace-modes
16
+ ```
17
+
18
+ Ensure that Ace is found within the `ace` directory (i.e. `ace/mode-python.js` etc.)
19
+
20
+ ### Without Rails
21
+ In your `Gemfile`:
22
+ ```ruby
23
+ gem 'coursemology-polyglot'
24
+ ```
25
+
26
+ Then, in your application:
27
+ ```ruby
28
+ Coursemology::Polyglot.eager_load!
29
+ ```
30
+
31
+ The Polyglot library needs to be eager loaded so that it knows which languages are defined.
32
+ Otherwise, the list of `concrete_languages` will be empty.
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task default: :spec
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -1,5 +1,5 @@
1
- <%
2
- Coursemology::Polyglot::Language.concrete_languages.map(&:ace_mode).uniq.each do |ace_mode|
3
- require_asset "ace/mode-#{ace_mode}"
4
- end
5
- %>
1
+ <%
2
+ Coursemology::Polyglot::Language.concrete_languages.map(&:ace_mode).uniq.each do |ace_mode|
3
+ require_asset "ace/mode-#{ace_mode}"
4
+ end
5
+ %>
@@ -1,36 +1,36 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'coursemology/polyglot/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = 'coursemology-polyglot'
8
- spec.version = Coursemology::Polyglot::VERSION
9
- spec.authors = ['Joel Low']
10
- spec.email = ['joel@joelsplace.sg']
11
- spec.license = 'MIT'
12
-
13
- spec.summary = 'Coursemology polyglot definitions'
14
- spec.description = <<-DESC
15
- Common definitions shared between the web application and the evaluator for determining the
16
- programming languages supported in Coursemology.
17
- DESC
18
- spec.homepage = 'https://github.com/Coursemology/polyglot'
19
- spec.files = `git ls-files -z`.split("\x0").
20
- reject { |f| f.match(/^(test|spec|features)\//) }
21
- spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
22
- spec.require_paths = ['lib']
23
-
24
- spec.add_development_dependency 'bundler'
25
- spec.add_development_dependency 'rake'
26
- spec.add_development_dependency 'rspec'
27
- spec.add_development_dependency 'simplecov'
28
- spec.add_development_dependency 'coveralls'
29
- spec.add_development_dependency 'codeclimate-test-reporter'
30
-
31
- spec.add_dependency 'activesupport', '~> 4.2.0', '>= 4.2.2'
32
-
33
- # For autoloading in Rails applications, as well as the Ace modes inclusion. Keep this as the
34
- # same as ActiveSupport version.
35
- spec.add_development_dependency 'railties', '~> 4.2.0', '>= 4.2.2'
36
- end
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'coursemology/polyglot/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'coursemology-polyglot'
8
+ spec.version = Coursemology::Polyglot::VERSION
9
+ spec.authors = ['Joel Low']
10
+ spec.email = ['joel@joelsplace.sg']
11
+ spec.license = 'MIT'
12
+
13
+ spec.summary = 'Coursemology polyglot definitions'
14
+ spec.description = <<-DESC
15
+ Common definitions shared between the web application and the evaluator for determining the
16
+ programming languages supported in Coursemology.
17
+ DESC
18
+ spec.homepage = 'https://github.com/Coursemology/polyglot'
19
+ spec.files = `git ls-files -z`.split("\x0").
20
+ reject { |f| f.match(/^(test|spec|features)\//) }
21
+ spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
22
+ spec.require_paths = ['lib']
23
+
24
+ spec.add_development_dependency 'bundler'
25
+ spec.add_development_dependency 'rake'
26
+ spec.add_development_dependency 'rspec'
27
+ spec.add_development_dependency 'simplecov'
28
+ spec.add_development_dependency 'coveralls'
29
+ spec.add_development_dependency 'codeclimate-test-reporter'
30
+
31
+ spec.add_dependency 'activesupport', '~> 4.2.0', '>= 4.2.2'
32
+
33
+ # For autoloading in Rails applications, as well as the Ace modes inclusion. Keep this as the
34
+ # same as ActiveSupport version.
35
+ spec.add_development_dependency 'railties', '~> 4.2.0', '>= 4.2.2'
36
+ end
@@ -1,18 +1,18 @@
1
- # frozen_string_literal: true
2
- require 'active_support/all'
3
- require 'coursemology/polyglot/version'
4
- require 'coursemology/polyglot/engine' if defined?(Rails)
5
-
6
- module Coursemology::Polyglot
7
- extend ActiveSupport::Autoload
8
-
9
- eager_autoload do
10
- autoload :Language
11
- autoload :ConcreteLanguage
12
- end
13
-
14
- def self.eager_load!
15
- super
16
- Coursemology::Polyglot::Language.eager_load!
17
- end
18
- end
1
+ # frozen_string_literal: true
2
+ require 'active_support/all'
3
+ require 'coursemology/polyglot/version'
4
+ require 'coursemology/polyglot/engine' if defined?(Rails)
5
+
6
+ module Coursemology::Polyglot
7
+ extend ActiveSupport::Autoload
8
+
9
+ eager_autoload do
10
+ autoload :Language
11
+ autoload :ConcreteLanguage
12
+ end
13
+
14
+ def self.eager_load!
15
+ super
16
+ Coursemology::Polyglot::Language.eager_load!
17
+ end
18
+ end
@@ -1,10 +1,10 @@
1
- # frozen_string_literal: true
2
- # This module is included when a Language can be directly used by the user.
3
- #
4
- # This is deliberately defined so that consumers of this library can inject methods into all
5
- # concrete languages.
6
- module Coursemology::Polyglot::ConcreteLanguage
7
- extend ActiveSupport::Autoload
8
-
9
- autoload :ClassMethods
10
- end
1
+ # frozen_string_literal: true
2
+ # This module is included when a Language can be directly used by the user.
3
+ #
4
+ # This is deliberately defined so that consumers of this library can inject methods into all
5
+ # concrete languages.
6
+ module Coursemology::Polyglot::ConcreteLanguage
7
+ extend ActiveSupport::Autoload
8
+
9
+ autoload :ClassMethods
10
+ end
@@ -1,30 +1,30 @@
1
- # frozen_string_literal: true
2
- # This module is extended by the language's singleton class when the Language can be directly used
3
- # by the user.
4
- #
5
- # This is deliberately defined so that consumers of this library can inject methods into all
6
- # concrete languages' classes.
7
- module Coursemology::Polyglot::ConcreteLanguage::ClassMethods
8
- # The default algorithm for translating a language to a corresponding Docker image name.
9
- #
10
- # This will:
11
- # 1. Strip the +Coursemology::Polyglot::Language+ prefix.
12
- # 2. Underscore the name.
13
- # 3. Replace *n*Point*n* strings with dots (e.g. Python2Point7 to Python2.7).
14
- # 4. Replace slashes with dashes.
15
- def docker_image
16
- # Remove the Coursemology::Polyglot::Language prefix
17
- class_name = name
18
- class_name = class_name.sub(/^Coursemology::Polyglot::Language::/, '')
19
-
20
- # Use the underscored name
21
- class_name = class_name.underscore
22
-
23
- # Replace the "_point" string with a decimal
24
- class_name.gsub!(/(?<=[\d])_point(?=[\d])/, '.')
25
-
26
- # Replace slashes with dashes
27
- class_name.tr!('/', '-')
28
- class_name
29
- end
30
- end
1
+ # frozen_string_literal: true
2
+ # This module is extended by the language's singleton class when the Language can be directly used
3
+ # by the user.
4
+ #
5
+ # This is deliberately defined so that consumers of this library can inject methods into all
6
+ # concrete languages' classes.
7
+ module Coursemology::Polyglot::ConcreteLanguage::ClassMethods
8
+ # The default algorithm for translating a language to a corresponding Docker image name.
9
+ #
10
+ # This will:
11
+ # 1. Strip the +Coursemology::Polyglot::Language+ prefix.
12
+ # 2. Underscore the name.
13
+ # 3. Replace *n*Point*n* strings with dots (e.g. Python2Point7 to Python2.7).
14
+ # 4. Replace slashes with dashes.
15
+ def docker_image
16
+ # Remove the Coursemology::Polyglot::Language prefix
17
+ class_name = name
18
+ class_name = class_name.sub(/^Coursemology::Polyglot::Language::/, '')
19
+
20
+ # Use the underscored name
21
+ class_name = class_name.underscore
22
+
23
+ # Replace the "_point" string with a decimal
24
+ class_name.gsub!(/(?<=[\d])_point(?=[\d])/, '.')
25
+
26
+ # Replace slashes with dashes
27
+ class_name.tr!('/', '-')
28
+ class_name
29
+ end
30
+ end
@@ -1,24 +1,24 @@
1
- # frozen_string_literal: true
2
- class Coursemology::Polyglot::Engine < Rails::Engine
3
- def self.eager_load!
4
- super
5
- Coursemology::Polyglot.eager_load!
6
- end
7
-
8
- # :nocov:
9
- # These are Railties callbacks, which we can't trigger in specs specifically.
10
- def self.initialize_engine(_)
11
- Coursemology::Polyglot::Language.eager_load!
12
- end
13
-
14
- def self.after_initialize(_)
15
- return if !Coursemology::Polyglot::Language.connected? ||
16
- !Coursemology::Polyglot::Language.table_exists?
17
-
18
- Coursemology::Polyglot::Language.load_languages
19
- end
20
- # :nocov:
21
-
22
- initializer('coursemology.polyglot', &method(:initialize_engine))
23
- config.after_initialize(&method(:after_initialize))
24
- end
1
+ # frozen_string_literal: true
2
+ class Coursemology::Polyglot::Engine < Rails::Engine
3
+ def self.eager_load!
4
+ super
5
+ Coursemology::Polyglot.eager_load!
6
+ end
7
+
8
+ # :nocov:
9
+ # These are Railties callbacks, which we can't trigger in specs specifically.
10
+ def self.initialize_engine(_)
11
+ Coursemology::Polyglot::Language.eager_load!
12
+ end
13
+
14
+ def self.after_initialize(_)
15
+ return if !Coursemology::Polyglot::Language.connected? ||
16
+ !Coursemology::Polyglot::Language.table_exists?
17
+
18
+ Coursemology::Polyglot::Language.load_languages
19
+ end
20
+ # :nocov:
21
+
22
+ initializer('coursemology.polyglot', &method(:initialize_engine))
23
+ config.after_initialize(&method(:after_initialize))
24
+ end
@@ -1,109 +1,109 @@
1
- # frozen_string_literal: true
2
- if defined?(ActiveRecord)
3
- # :nocov:
4
- # TODO: This is for compatibility with the Web application. A future refactoring might be able
5
- # to remove this dependency.
6
- class Coursemology::Polyglot::Language < ActiveRecord::Base; end
7
- # :nocov:
8
- else
9
- class Coursemology::Polyglot::Language; end
10
- end
11
-
12
- # An abstract language. This is a class which can represent a family of languages. Languages become
13
- # concrete and can be used when that language includes +Coursemology::Polyglot::ConcreteLanguage+.
14
- #
15
- # Languages define their own scripts and stylesheets needed to syntax highlight code.
16
- #
17
- # Each subclass represents a language ancestry, such as differing language versions (see the Python
18
- # language definition.) Derived languages can be defined at runtime to utilise the syntax
19
- # highlighting capabilities of the root language, while requiring a separate runtime environment to
20
- # run programs written in the derived language.
21
- #
22
- # Do *NOT* remove languages after they have been defined because the types specified in this
23
- # library can have references stored in code (e.g. in a database)
24
- class Coursemology::Polyglot::Language
25
- extend ActiveSupport::Autoload
26
-
27
- eager_autoload do
28
- autoload :Python
29
- autoload :JavaScript
30
- end
31
-
32
- # Marks the current class as a concrete language.
33
- #
34
- # Concrete languages can be instantiated and used.
35
- #
36
- # @param [String] display_name The display name for the language
37
- # @param [String] docker_image The Docker image to use for the given language. This defaults to
38
- # the string generated by +Coursemology::Polyglot::ConcreteLanguage.docker_image+.
39
- def self.concrete_language(display_name, docker_image: nil)
40
- include Coursemology::Polyglot::ConcreteLanguage
41
- extend Coursemology::Polyglot::ConcreteLanguage::ClassMethods
42
-
43
- concrete_class_methods = Module.new do
44
- define_method(:display_name) { display_name }
45
- define_method(:docker_image) { docker_image } if docker_image
46
- end
47
-
48
- extend concrete_class_methods
49
- end
50
- private_class_method :concrete_language
51
-
52
- # Determines the concrete language subclasses of this language.
53
- #
54
- # @return [Array<Class>]
55
- def self.concrete_languages
56
- descendants.select do |klass|
57
- klass.ancestors.include?(Coursemology::Polyglot::ConcreteLanguage)
58
- end
59
- end
60
-
61
- # The name of the lexer or mode to use with a given library. This is inherited by classes.
62
- #
63
- # @param [String|nil] default The default lexer/mode to use for each library.
64
- # @param [String] rouge The overridden lexer to use for Rouge. This is optional and will
65
- # default to +default+
66
- # @param [String] ace The overridden mode to use for Ace. This is optional and will
67
- # default to +default+
68
- # @raise [ArgumentError] When no default is specified and the Rouge lexer or Ace mode is not
69
- # specified.
70
- def self.syntax_highlighter(default = nil, rouge: default, ace: default)
71
- fail ArgumentError unless rouge && ace
72
-
73
- syntax_highlighter_class_methods = Module.new do
74
- define_method(:rouge_lexer) { rouge }
75
- define_method(:ace_mode) { ace }
76
- end
77
- extend syntax_highlighter_class_methods
78
-
79
- syntax_highlighter_instance_methods = Module.new do
80
- delegate :rouge_lexer, :ace_mode, to: :class
81
- end
82
- include syntax_highlighter_instance_methods
83
- end
84
- private_class_method :syntax_highlighter
85
-
86
- # Gets the display name of the language.
87
- #
88
- # @abstract
89
- # @return [String]
90
- def self.display_name
91
- fail NotImplementedError
92
- end
93
-
94
- # The Rouge lexer to use with this language.
95
- #
96
- # @abstract
97
- # @return [String]
98
- def self.rouge_lexer
99
- fail NotImplementedError
100
- end
101
-
102
- # The Ace mode to use with this language.
103
- #
104
- # @abstract
105
- # @return [String]
106
- def self.ace_mode
107
- fail NotImplementedError
108
- end
109
- end
1
+ # frozen_string_literal: true
2
+ if defined?(ActiveRecord)
3
+ # :nocov:
4
+ # TODO: This is for compatibility with the Web application. A future refactoring might be able
5
+ # to remove this dependency.
6
+ class Coursemology::Polyglot::Language < ActiveRecord::Base; end
7
+ # :nocov:
8
+ else
9
+ class Coursemology::Polyglot::Language; end
10
+ end
11
+
12
+ # An abstract language. This is a class which can represent a family of languages. Languages become
13
+ # concrete and can be used when that language includes +Coursemology::Polyglot::ConcreteLanguage+.
14
+ #
15
+ # Languages define their own scripts and stylesheets needed to syntax highlight code.
16
+ #
17
+ # Each subclass represents a language ancestry, such as differing language versions (see the Python
18
+ # language definition.) Derived languages can be defined at runtime to utilise the syntax
19
+ # highlighting capabilities of the root language, while requiring a separate runtime environment to
20
+ # run programs written in the derived language.
21
+ #
22
+ # Do *NOT* remove languages after they have been defined because the types specified in this
23
+ # library can have references stored in code (e.g. in a database)
24
+ class Coursemology::Polyglot::Language
25
+ extend ActiveSupport::Autoload
26
+
27
+ eager_autoload do
28
+ autoload :Python
29
+ autoload :JavaScript
30
+ end
31
+
32
+ # Marks the current class as a concrete language.
33
+ #
34
+ # Concrete languages can be instantiated and used.
35
+ #
36
+ # @param [String] display_name The display name for the language
37
+ # @param [String] docker_image The Docker image to use for the given language. This defaults to
38
+ # the string generated by +Coursemology::Polyglot::ConcreteLanguage.docker_image+.
39
+ def self.concrete_language(display_name, docker_image: nil)
40
+ include Coursemology::Polyglot::ConcreteLanguage
41
+ extend Coursemology::Polyglot::ConcreteLanguage::ClassMethods
42
+
43
+ concrete_class_methods = Module.new do
44
+ define_method(:display_name) { display_name }
45
+ define_method(:docker_image) { docker_image } if docker_image
46
+ end
47
+
48
+ extend concrete_class_methods
49
+ end
50
+ private_class_method :concrete_language
51
+
52
+ # Determines the concrete language subclasses of this language.
53
+ #
54
+ # @return [Array<Class>]
55
+ def self.concrete_languages
56
+ descendants.select do |klass|
57
+ klass.ancestors.include?(Coursemology::Polyglot::ConcreteLanguage)
58
+ end
59
+ end
60
+
61
+ # The name of the lexer or mode to use with a given library. This is inherited by classes.
62
+ #
63
+ # @param [String|nil] default The default lexer/mode to use for each library.
64
+ # @param [String] rouge The overridden lexer to use for Rouge. This is optional and will
65
+ # default to +default+
66
+ # @param [String] ace The overridden mode to use for Ace. This is optional and will
67
+ # default to +default+
68
+ # @raise [ArgumentError] When no default is specified and the Rouge lexer or Ace mode is not
69
+ # specified.
70
+ def self.syntax_highlighter(default = nil, rouge: default, ace: default)
71
+ fail ArgumentError unless rouge && ace
72
+
73
+ syntax_highlighter_class_methods = Module.new do
74
+ define_method(:rouge_lexer) { rouge }
75
+ define_method(:ace_mode) { ace }
76
+ end
77
+ extend syntax_highlighter_class_methods
78
+
79
+ syntax_highlighter_instance_methods = Module.new do
80
+ delegate :rouge_lexer, :ace_mode, to: :class
81
+ end
82
+ include syntax_highlighter_instance_methods
83
+ end
84
+ private_class_method :syntax_highlighter
85
+
86
+ # Gets the display name of the language.
87
+ #
88
+ # @abstract
89
+ # @return [String]
90
+ def self.display_name
91
+ fail NotImplementedError
92
+ end
93
+
94
+ # The Rouge lexer to use with this language.
95
+ #
96
+ # @abstract
97
+ # @return [String]
98
+ def self.rouge_lexer
99
+ fail NotImplementedError
100
+ end
101
+
102
+ # The Ace mode to use with this language.
103
+ #
104
+ # @abstract
105
+ # @return [String]
106
+ def self.ace_mode
107
+ fail NotImplementedError
108
+ end
109
+ end
@@ -1,4 +1,4 @@
1
- class Coursemology::Polyglot::Language::JavaScript < Coursemology::Polyglot::Language
2
- syntax_highlighter 'javascript'
3
- concrete_language 'javascript', docker_image: 'javascript'
4
- end
1
+ class Coursemology::Polyglot::Language::JavaScript < Coursemology::Polyglot::Language
2
+ syntax_highlighter 'javascript'
3
+ concrete_language 'JavaScript', docker_image: 'javascript'
4
+ end
@@ -1,12 +1,12 @@
1
- # frozen_string_literal: true
2
- class Coursemology::Polyglot::Language::Python < Coursemology::Polyglot::Language
3
- syntax_highlighter 'python'
4
-
5
- class Python2Point7 < Coursemology::Polyglot::Language::Python
6
- concrete_language 'Python 2.7', docker_image: 'python:2.7'
7
- end
8
-
9
- class Python3Point4 < Coursemology::Polyglot::Language::Python
10
- concrete_language 'Python 3.4', docker_image: 'python:3.4'
11
- end
12
- end
1
+ # frozen_string_literal: true
2
+ class Coursemology::Polyglot::Language::Python < Coursemology::Polyglot::Language
3
+ syntax_highlighter 'python'
4
+
5
+ class Python2Point7 < Coursemology::Polyglot::Language::Python
6
+ concrete_language 'Python 2.7', docker_image: 'python:2.7'
7
+ end
8
+
9
+ class Python3Point4 < Coursemology::Polyglot::Language::Python
10
+ concrete_language 'Python 3.4', docker_image: 'python:3.4'
11
+ end
12
+ end
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
- module Coursemology; end
3
- module Coursemology::Polyglot
4
- VERSION = '0.2.2'.freeze
5
- end
1
+ # frozen_string_literal: true
2
+ module Coursemology; end
3
+ module Coursemology::Polyglot
4
+ VERSION = '0.2.3'.freeze
5
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coursemology-polyglot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Low
@@ -188,3 +188,4 @@ signing_key:
188
188
  specification_version: 4
189
189
  summary: Coursemology polyglot definitions
190
190
  test_files: []
191
+ has_rdoc: