mumukit-sync 0.4.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e0bdc140990239269aee542470c932aeabba4dc74da7fddb574fefd51e3a58c1
4
- data.tar.gz: 75befb01b2eae5d5e75cf96175e7b67041b35ae87f22cc38838574f8800ba1bd
3
+ metadata.gz: 0102ab26b66d5d60837761fcfb2c6a825a21eb979bf308d24237734e455b9a25
4
+ data.tar.gz: f5adc5a86ba384688c2610abe89e487cffe9d0ff3baec050de31bfcd081458a1
5
5
  SHA512:
6
- metadata.gz: b7c3176f4f3b6bc05515c788da77463aea89ae7779939357821d5de0cdb0f6b4efebf0c0345a29f48cdbb793b0d8c175ee3209d1995803f816a29e30b613d7d7
7
- data.tar.gz: 40f5ff3a7e9ed53fd9c8eedcdfb0bce89b103f52f17b174a81c09513e80f9c1d742ab6a640957eed42f7bf1d638f4b0c91f390e0c504352dbe428a5f4f89c909
6
+ metadata.gz: dd2a9fa89aa730a9930f47eb0f6ff1ecb3895c058f7f53b2587e3d5c604ce57f2ff562495de7cd6928630d1b44ec80cad49f9ae518f3656902926ec860e31c19
7
+ data.tar.gz: b3a2a54683be79f4212a5f74f889842f63f776b67ba41c9304b6b50e33314ff0b999675822fd6d38b7c96363c67207c774a2ee0453b0895376ae6a6772595bee
@@ -0,0 +1,31 @@
1
+ name: Test and deploy
2
+
3
+ on:
4
+ - push
5
+ - workflow_dispatch
6
+
7
+ jobs:
8
+ test_and_deploy:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v2
12
+ - name: Set up Ruby
13
+ uses: ruby/setup-ruby@21351ecc0a7c196081abca5dc55b08f085efe09a
14
+ with:
15
+ ruby-version: 2.6.3
16
+ bundler: 2.1.4
17
+ bundler-cache: true
18
+ - name: Run tests
19
+ run: bundle exec rake
20
+ - name: Deploy
21
+ if: ${{ startsWith(github.ref, 'refs/tags/v') }}
22
+ run: |
23
+ mkdir -p $HOME/.gem
24
+ touch $HOME/.gem/credentials
25
+ chmod 0600 $HOME/.gem/credentials
26
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
27
+ gem build *.gemspec
28
+ gem push *.gem
29
+ env:
30
+ GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
31
+
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.3
@@ -53,6 +53,8 @@ class Mumukit::Sync::Store::Github
53
53
  def create!(slug, private)
54
54
  octokit.create_repository(slug.repository, organization: slug.organization)
55
55
  try_set_private!(slug) if private
56
+ rescue Octokit::Forbidden => e
57
+ raise raise Mumukit::Sync::SyncError, "Mumuki is not allowed to create repositories in organization #{slug.organization}"
56
58
  end
57
59
 
58
60
  def try_set_private!(slug)
@@ -62,7 +64,7 @@ class Mumukit::Sync::Store::Github
62
64
  end
63
65
 
64
66
  def writable_github_url_for(slug)
65
- "https://#{token}:@github.com/#{slug}"
67
+ "https://#{name}:#{token}@github.com/#{slug}"
66
68
  end
67
69
 
68
70
  def octokit
@@ -1,5 +1,7 @@
1
1
  class Mumukit::Sync::Store::Github
2
2
  class ExerciseBuilder < OpenStruct
3
+ include Mumukit::Sync::Store::Github::WithSchema
4
+
3
5
  def locale
4
6
  meta['locale']
5
7
  end
@@ -9,11 +11,11 @@ class Mumukit::Sync::Store::Github
9
11
  end
10
12
 
11
13
  def build_simple_fields
12
- Mumukit::Sync::Store::Github::Schema::Exercise.simple_fields.map { |field| [field.reverse_name, self.send(field.reverse_name)] }.to_h
14
+ build_fields_h(exercise_schema.simple_fields) { |field| self.send(field.reverse_name) }
13
15
  end
14
16
 
15
17
  def build_metadata
16
- Mumukit::Sync::Store::Github::Schema::Exercise.metadata_fields.map { |field| [field.reverse_name, meta[field.name.to_s]] }.to_h
18
+ build_fields_h(exercise_schema.metadata_fields) { |field| meta[field.name.to_s] }
17
19
  end
18
20
  end
19
21
  end
@@ -1,5 +1,7 @@
1
1
  class Mumukit::Sync::Store::Github
2
2
  class GuideBuilder < OpenStruct
3
+ include Mumukit::Sync::Store::Github::WithSchema
4
+
3
5
  attr_writer :exercises
4
6
 
5
7
  def initialize(slug)
@@ -19,27 +21,24 @@ class Mumukit::Sync::Store::Github
19
21
  self.exercises << exercise
20
22
  end
21
23
 
24
+ def locale
25
+ meta['locale']
26
+ end
27
+
28
+ def language
29
+ meta['language']
30
+ end
31
+
22
32
  private
23
33
 
24
34
  def build_json
25
- raise Mumukit::Sync::SyncError, "Missing guide language" if language[:name].blank?
26
-
27
- {name: name,
28
- description: description,
29
- corollary: corollary,
30
- language: language,
31
- locale: locale,
32
- type: type,
33
- extra: extra,
34
- beta: beta,
35
- authors: authors,
36
- collaborators: collaborators,
37
- teacher_info: teacher_info,
38
- id_format: id_format,
39
- slug: slug,
40
- expectations: expectations.to_a,
41
- exercises: exercises.sort_by { |e| order.position_for(e[:id]) }}
35
+ raise Mumukit::Sync::SyncError, "Missing guide language" if language.blank?
36
+ file = build_fields_h(guide_schema.file_fields) { |field| self[field.reverse_name] }
37
+ metadata = build_fields_h(guide_schema.metadata_fields) { |field| self.meta[field.name.to_s] }
38
+ file.merge(metadata).merge(
39
+ expectations: expectations.to_a,
40
+ slug: slug,
41
+ exercises: exercises.sort_by { |e| order.position_for(e[:id]) }).compact
42
42
  end
43
-
44
43
  end
45
44
  end
@@ -1,5 +1,6 @@
1
1
  class Mumukit::Sync::Store::Github
2
2
  class GuideExport < Mumukit::Sync::Store::Github::Operation
3
+ include Mumukit::Sync::Store::Github::WithSchema
3
4
 
4
5
  attr_accessor :guide_resource_h, :bot, :author_email
5
6
 
@@ -39,7 +40,7 @@ class Mumukit::Sync::Store::Github
39
40
  end
40
41
 
41
42
  def clear_repo(local_repo)
42
- local_repo.remove Mumukit::Sync::Store::Github::Schema::Guide.file_patterns
43
+ local_repo.remove guide_schema.file_patterns
43
44
  rescue Git::GitExecuteError => e
44
45
  puts 'Nothing to clean, repo seems to be empty'
45
46
  end
@@ -1,6 +1,7 @@
1
1
  class Mumukit::Sync::Store::Github
2
2
  class GuideReader
3
3
  include Mumukit::Sync::Store::Github::WithFileReading
4
+ include Mumukit::Sync::Store::Github::WithSchema
4
5
 
5
6
  attr_reader :dir
6
7
 
@@ -13,7 +14,7 @@ class Mumukit::Sync::Store::Github
13
14
  builder = GuideBuilder.new(@slug)
14
15
 
15
16
  read_guide_meta! builder
16
- Mumukit::Sync::Store::Github::Schema::Guide.file_fields.each do |it|
17
+ guide_schema.file_fields.each do |it|
17
18
  value = it.read_field_file 'guide', dir
18
19
  builder[it.reverse_name] = value
19
20
  end
@@ -33,24 +34,18 @@ class Mumukit::Sync::Store::Github
33
34
 
34
35
  def read_guide_meta!(builder)
35
36
  meta = read_meta! 'guide', dir
37
+ meta['language'] &&= { name: meta['language'] }
38
+ read_legacy! meta
36
39
 
37
- builder.language = { name: meta['language'] }
38
- builder.locale = meta['locale']
40
+ builder.meta = meta
39
41
 
40
- read! 'name', builder, meta
41
- read! 'id_format', builder, meta
42
- read! 'type', builder, meta
43
- read! 'beta', builder, meta
44
- read! 'teacher_info', builder, meta
45
-
46
- read_legacy! builder, meta
47
42
 
48
43
  builder.order = Mumukit::Sync::Store::Github::Ordering.from meta['order']
49
44
  end
50
45
 
51
- def read_legacy!(builder, meta)
52
- builder.id_format ||= meta['original_id_format']
53
- builder.type ||= meta['learning'] ? 'learning' : 'practice'
46
+ def read_legacy!(meta)
47
+ meta['id_format'] ||= meta['original_id_format']
48
+ meta['type'] ||= meta['learning'] ? 'learning' : 'practice'
54
49
  end
55
50
 
56
51
  def read!(key, builder, meta)
@@ -74,7 +69,7 @@ class Mumukit::Sync::Store::Github
74
69
  builder.id = id
75
70
  builder.name = meta['name'] || name
76
71
 
77
- Mumukit::Sync::Store::Github::Schema::Exercise.file_fields.each do |it|
72
+ exercise_schema.file_fields.each do |it|
78
73
  value = it.read_field_file "exercise #{name}", root
79
74
  builder[it.reverse_name] = value
80
75
  end
@@ -1,5 +1,7 @@
1
1
  class Mumukit::Sync::Store::Github
2
2
  class GuideWriter
3
+ include Mumukit::Sync::Store::Github::WithSchema
4
+
3
5
  attr_accessor :dir
4
6
 
5
7
  def initialize(dir)
@@ -26,8 +28,8 @@ class Mumukit::Sync::Store::Github
26
28
  end
27
29
  write_licenses!(guide)
28
30
 
29
- write_metadata_fields! dir, Mumukit::Sync::Store::Github::Schema::Guide, guide
30
- write_file_fields! dir, Mumukit::Sync::Store::Github::Schema::Guide, guide, guide[:language]
31
+ write_metadata_fields! dir, guide_schema, guide
32
+ write_file_fields! dir, guide_schema, guide, guide[:language]
31
33
  end
32
34
 
33
35
  def format_id(guide, exercise)
@@ -39,8 +41,8 @@ class Mumukit::Sync::Store::Github
39
41
 
40
42
  FileUtils.mkdir_p dirname
41
43
 
42
- write_metadata_fields! dirname, Mumukit::Sync::Store::Github::Schema::Exercise, e
43
- write_file_fields! dirname, Mumukit::Sync::Store::Github::Schema::Exercise, e, (e[:language] || guide[:language])
44
+ write_metadata_fields! dirname, exercise_schema, e
45
+ write_file_fields! dirname, exercise_schema, e, (e[:language] || guide[:language])
44
46
  end
45
47
 
46
48
  def write_licenses!(guide)
@@ -129,6 +129,3 @@ class Mumukit::Sync::Store::Github
129
129
  end
130
130
  end
131
131
  end
132
-
133
- require_relative './schema/exercise'
134
- require_relative './schema/guide'
@@ -3,6 +3,8 @@ module Mumukit::Sync::Store
3
3
  ## This Store enables importing and exporting content
4
4
  ## from and to Github
5
5
  class Github
6
+ extend Mumukit::Core::Configurable
7
+
6
8
  def initialize(bot, author_email = nil, web_hook_base_url = nil)
7
9
  @bot = bot
8
10
  @author_email = author_email || bot.email
@@ -32,11 +34,16 @@ module Mumukit::Sync::Store
32
34
  web_hook_base_url: @web_hook_base_url,
33
35
  bot: @bot).run!
34
36
  end
37
+
38
+ def self.defaults
39
+ struct
40
+ end
35
41
  end
36
42
  end
37
43
 
38
44
  require 'mumukit/auth'
39
45
 
46
+ require_relative './with_schema'
40
47
  require_relative './github/bot'
41
48
  require_relative './github/git_lib'
42
49
  require_relative './github/with_file_reading'
@@ -0,0 +1,14 @@
1
+ module Mumukit::Sync::Store::Github::WithSchema
2
+ def exercise_schema
3
+ Mumukit::Sync::Store::Github.config.exercise_schema
4
+ end
5
+
6
+ def guide_schema
7
+ Mumukit::Sync::Store::Github.config.guide_schema
8
+ end
9
+
10
+ def build_fields_h(fields)
11
+ fields.map { |field| [field.reverse_name, yield(field)] }.to_h
12
+ end
13
+ end
14
+
@@ -1,5 +1,3 @@
1
- require 'mumukit/bridge'
2
-
3
1
  module Mumukit::Sync
4
2
  module Store
5
3
  def self.non_discoverable!
@@ -17,7 +15,5 @@ require_relative './store/base'
17
15
  require_relative './store/null'
18
16
  require_relative './store/github'
19
17
  require_relative './store/json'
20
- require_relative './store/thesaurus'
21
18
  require_relative './store/with_wrapped_language'
22
19
  require_relative './store/with_filtered_id'
23
- require_relative './store/bibliotheca'
@@ -1,5 +1,5 @@
1
1
  module Mumukit
2
2
  module Sync
3
- VERSION = '0.4.1'
3
+ VERSION = '1.0.3'
4
4
  end
5
5
  end
data/mumukit-sync.gemspec CHANGED
@@ -22,13 +22,15 @@ Gem::Specification.new do |spec|
22
22
  spec.require_paths = ["lib"]
23
23
 
24
24
  spec.add_dependency 'mumukit-core', '~> 1.13'
25
- spec.add_dependency 'mumukit-bridge', '~> 3.5'
26
25
  spec.add_dependency 'mumukit-auth', '~> 7.0'
27
26
 
28
27
  spec.add_dependency 'git', '~> 1.5'
29
28
  spec.add_dependency 'octokit', '~> 4.1'
29
+ spec.add_dependency 'faraday', '1.8.0' # This is needed until these are fixed:
30
+ # - https://github.com/octokit/octokit.rb/issues/1384
31
+ # - https://github.com/lostisland/faraday/issues/1369#issuecomment-1006806342
30
32
 
31
- spec.add_development_dependency "bundler", "~> 1.16"
32
- spec.add_development_dependency "rake", "~> 10.0"
33
- spec.add_development_dependency "rspec", "~> 3.0"
33
+ spec.add_development_dependency 'bundler', '~> 2.0'
34
+ spec.add_development_dependency 'rake', '~> 12.3'
35
+ spec.add_development_dependency 'rspec', '~> 3.0'
34
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mumukit-sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franco Bulgarelli
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-20 00:00:00.000000000 Z
11
+ date: 2022-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mumukit-core
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.13'
27
- - !ruby/object:Gem::Dependency
28
- name: mumukit-bridge
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '3.5'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '3.5'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: mumukit-auth
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -80,34 +66,48 @@ dependencies:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
68
  version: '4.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: faraday
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.8.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 1.8.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bundler
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1.16'
89
+ version: '2.0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '1.16'
96
+ version: '2.0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '10.0'
103
+ version: '12.3'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '10.0'
110
+ version: '12.3'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -129,9 +129,10 @@ executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
+ - ".github/workflows/test_and_deploy.yml"
132
133
  - ".gitignore"
133
134
  - ".rspec"
134
- - ".travis.yml"
135
+ - ".ruby-version"
135
136
  - CODE_OF_CONDUCT.md
136
137
  - Gemfile
137
138
  - LICENSE.txt
@@ -147,7 +148,6 @@ files:
147
148
  - lib/mumukit/sync/inflator/single_choice.rb
148
149
  - lib/mumukit/sync/store.rb
149
150
  - lib/mumukit/sync/store/base.rb
150
- - lib/mumukit/sync/store/bibliotheca.rb
151
151
  - lib/mumukit/sync/store/github.rb
152
152
  - lib/mumukit/sync/store/github/bot.rb
153
153
  - lib/mumukit/sync/store/github/exercise_builder.rb
@@ -163,13 +163,11 @@ files:
163
163
  - lib/mumukit/sync/store/github/operation.rb
164
164
  - lib/mumukit/sync/store/github/ordering.rb
165
165
  - lib/mumukit/sync/store/github/schema.rb
166
- - lib/mumukit/sync/store/github/schema/exercise.rb
167
- - lib/mumukit/sync/store/github/schema/guide.rb
168
166
  - lib/mumukit/sync/store/github/with_file_reading.rb
169
167
  - lib/mumukit/sync/store/json.rb
170
168
  - lib/mumukit/sync/store/null.rb
171
- - lib/mumukit/sync/store/thesaurus.rb
172
169
  - lib/mumukit/sync/store/with_filtered_id.rb
170
+ - lib/mumukit/sync/store/with_schema.rb
173
171
  - lib/mumukit/sync/store/with_wrapped_language.rb
174
172
  - lib/mumukit/sync/syncer.rb
175
173
  - lib/mumukit/sync/version.rb
data/.travis.yml DELETED
@@ -1,12 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.3.1
4
- before_install: gem install bundler -v 1.10.6
5
- deploy:
6
- provider: rubygems
7
- api_key:
8
- secure: f0boGHzgJp2bzHbxBEZAEgJ7hO8Iv5Ays6HHfm5nOphg+SMKkmqGpEPPCwbCiiw4ZQ5KyAbxjLvclMzDknpku3v13fXtVlVWyGMH+vpHZnKmgsPWzJ29XTEEzC1FNc1WYEtxhXaCQ9W8xB00j4ahukmVRJOTt+TD0hRsaRXtY0T7HC9JQQkT1x52qf3rhxRM1dgfRJdorB545xAxpyHx1Psy0kCSx+mVRlF0pETRvAy84X6Igjyvc2ovgGKbpRVeA1e5TsWrKjNoBbeKXDBzdND4hDpa9dyshgO33edo4qN4RWh+WPdQTeu8opv8sBOA7sH/Dzx20nII8DDeSPon9jYa7B8DBb1m/DnjjhTmka96n3WBbSeXSCEWGs+KgQO6OBNIR0gghOl3P380ocMLN9nWCNFwTBc/zUY6AsoQyV2hQI5rivTldJOAClEvDGDzZFl2bTRyic4jcn8U/USS7M3Rp3/s4si8km6s0Oy8FLtfnOINznM6quQiDjaXgI5acxx18AncQeqV4nmWxnEALI1i96McJvj3ONZOpzRlp2t1A3Qx5AdbypP9IKgHuBHGSq9W+oifuSN7xRh6Q/yuoWRgo39pdw075LhnUQgX8MVevVU4kGVwGPslirMQb5prf3lvLEQrZhAcGGgrq/vST1ZGesViFwV53LvM3nZGnRs=
9
- gem: mumukit-sync
10
- on:
11
- tags: true
12
- repo: mumuki/mumukit-sync
@@ -1,29 +0,0 @@
1
- module Mumukit::Sync::Store
2
-
3
- ## This Store enables importing content
4
- ## from Bibliotheca API
5
- class Bibliotheca < Mumukit::Sync::Store::Base
6
- include Mumukit::Sync::Store::WithWrappedLanguage
7
- include Mumukit::Sync::Store::WithFilteredId
8
-
9
- def initialize(bibliotheca_bridge)
10
- @bibliotheca_bridge = bibliotheca_bridge
11
- end
12
-
13
- def sync_keys
14
- %w(guide topic book).flat_map do |kind|
15
- @bibliotheca_bridge
16
- .send(kind.as_variable_name.pluralize)
17
- .map { |it| Mumukit::Sync.key kind, it['slug'] }
18
- end
19
- end
20
-
21
- def do_read(sync_key)
22
- @bibliotheca_bridge.send(sync_key.kind.as_variable_name, sync_key.id)
23
- end
24
-
25
- def write_resource!(*)
26
- Mumukit::Sync::Store.read_only!
27
- end
28
- end
29
- end
@@ -1,37 +0,0 @@
1
- module Mumukit::Sync::Store::Github::Schema::Exercise
2
- extend Mumukit::Sync::Store::Github::Schema
3
-
4
- def self.fields_schema
5
- [
6
- {name: :id, kind: :special},
7
- {name: :name, kind: :special},
8
-
9
- {name: :tags, kind: :metadata, reverse: :tag_list, transform: with { |it| it.to_a }},
10
- {name: :layout, kind: :metadata},
11
- {name: :editor, kind: :metadata},
12
-
13
- {name: :type, kind: :metadata},
14
- {name: :extra_visible, kind: :metadata},
15
- {name: :language, kind: :metadata, transform: name },
16
- {name: :teacher_info, kind: :metadata},
17
- {name: :manual_evaluation, kind: :metadata},
18
- {name: :choices, kind: :metadata},
19
-
20
- {name: :expectations, kind: :file, extension: 'yml', transform: yaml_list('expectations')},
21
- {name: :assistance_rules, kind: :file, extension: 'yml', transform: yaml_list('rules')},
22
- {name: :randomizations, kind: :file, extension: 'yml', transform: yaml_hash},
23
-
24
- {name: :goal, kind: :metadata},
25
- {name: :test, kind: :file, extension: :test},
26
- {name: :extra, kind: :file, extension: :code},
27
- {name: :default, kind: :file, extension: :code, reverse: :default_content},
28
-
29
- {name: :description, kind: :file, extension: 'md', required: true},
30
- {name: :hint, kind: :file, extension: 'md'},
31
- {name: :corollary, kind: :file, extension: 'md'},
32
- {name: :initial_state, kind: :file, extension: 'md'},
33
- {name: :final_state, kind: :file, extension: 'md'},
34
- {name: :free_form_editor_source, kind: :file, extension: 'html'}
35
- ]
36
- end
37
- end
@@ -1,34 +0,0 @@
1
- module Mumukit::Sync::Store::Github::Schema::Guide
2
- extend Mumukit::Sync::Store::Github::Schema
3
-
4
- def self.fields_schema
5
- [
6
- {name: :exercises, kind: :special},
7
- {name: :id, kind: :special},
8
- {name: :slug, kind: :special},
9
-
10
- {name: :name, kind: :metadata},
11
- {name: :locale, kind: :metadata},
12
- {name: :type, kind: :metadata},
13
- {name: :beta, kind: :metadata},
14
- {name: :teacher_info, kind: :metadata},
15
- {name: :language, kind: :metadata, transform: name },
16
- {name: :id_format, kind: :metadata},
17
- {name: :order, kind: :metadata, transform: with { |it| it.map { |e| e[:id] } }, reverse: :exercises},
18
- {name: :private, kind: :metadata},
19
-
20
- {name: :expectations, kind: :file, extension: 'yml', transform: yaml_list('expectations')},
21
- {name: :description, kind: :file, extension: 'md', required: true},
22
- {name: :corollary, kind: :file, extension: 'md'},
23
- {name: :sources, kind: :file, extension: 'md'},
24
- {name: :learn_more, kind: :file, extension: 'md'},
25
- {name: :extra, kind: :file, extension: :code},
26
- {name: :AUTHORS, kind: :file, extension: 'txt', reverse: :authors},
27
- {name: :COLLABORATORS, kind: :file, extension: 'txt', reverse: :collaborators}
28
- ]
29
- end
30
-
31
- def self.fixed_file_patterns
32
- %w(LICENSE.txt README.md COPYRIGHT.txt meta.yml *_*/*)
33
- end
34
- end
@@ -1,27 +0,0 @@
1
- module Mumukit::Sync::Store
2
-
3
- ## This Store enables importing languages
4
- ## from Thesaurus API
5
- class Thesaurus < Mumukit::Sync::Store::Base
6
- def initialize(thesaurus_bridge)
7
- @thesaurus_bridge = thesaurus_bridge
8
- end
9
-
10
- def sync_keys
11
- @thesaurus_bridge.runners.map { |it| Mumukit::Sync.key(:language, it) }
12
- end
13
-
14
- def do_read(sync_key)
15
- return unless sync_key.kind.like? :language
16
- # the only difference between an `importable_info`
17
- # and a `resource_h` is the way `runner_url` is named
18
- Mumukit::Bridge::Runner.new(sync_key.id)
19
- .importable_info
20
- .replace_key(:test_runner_url, :runner_url)
21
- end
22
-
23
- def write_resource!(*)
24
- Mumukit::Sync::Store.read_only!
25
- end
26
- end
27
- end