mumukit-sync 0.2.1 → 0.3.0

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
  SHA256:
3
- metadata.gz: 380186a77555510417026bf6aabd063a83bea1f64182819b121df078c0a1b436
4
- data.tar.gz: '09b3c4a045fdc53fd19546ce228744308e1949c306ab9e96af7d280b95cad36d'
3
+ metadata.gz: 292bb83cfe620088d9ee13efcc8a839aafc2337813de75f1d5cffb09c6e2cebb
4
+ data.tar.gz: 384b5cebfec6360b4af095963853016f8410cccfc6edff81d9477eada820c70c
5
5
  SHA512:
6
- metadata.gz: cfde552120a8a206ea26977d98b17a95e654193f495299daf271bfc953fcec355c0fda02f2d0b46e2f7dfb1a446c694c8ae00691972b09363a485d128ce26204
7
- data.tar.gz: 6d3dbc5dced89107a7256d6180b89e36dee7acfa81d8293502584d523fbd6a383f7619271f0c63e2b0b0d90901d00594106155cbd8f1ffd993963828a810e43b
6
+ metadata.gz: 549c13c8f22fb061d9a229f8d7ae484eddc9e01c9dc22d2d6ac2f082da0143db4c0460f459fa91f4221b1c7849cc33cc2f3b385ed45dbdfa9cf5c3c6cd6558e2
7
+ data.tar.gz: 7feb1370691b2a0d0158d24d7e4586c3d360b93bf2960bc3720640403f7e83f4eefff84735be79c335f3a6674ddba13d702d9745b6c4094c4bc836a1b6c4be14
@@ -1,7 +1,7 @@
1
1
  module Mumukit::Sync::Inflator
2
2
  class Exercise
3
3
  def inflate!(key, resource_h)
4
- return unless key.kind == :guide
4
+ return unless key.kind.like? :guide
5
5
  resource_h[:exercises]&.each do |it|
6
6
  language = it.dig(:language, :name) || resource_h.dig(:language, :name)
7
7
  inflate_exercise! it, language, resource_h
@@ -1,6 +1,6 @@
1
1
  class Mumukit::Sync::Store::Base
2
2
  def read_resource(sync_key)
3
- post_transform sync_key.kind, pre_transform(sync_key.kind, do_read(sync_key)).deep_symbolize_keys
3
+ transform_after_symbolize sync_key.kind, transform_before_symbolize(sync_key.kind, do_read(sync_key)).deep_symbolize_keys
4
4
  end
5
5
 
6
6
  private
@@ -8,11 +8,11 @@ class Mumukit::Sync::Store::Base
8
8
  # We are assuming rails-like models, that can be whitelisted,
9
9
  # and that resource-hashes resemble the model structure.
10
10
  # The store must ensure that only valid hashes are read
11
- def pre_transform(key, json)
12
- Mumukit::Sync.constantize(key).whitelist_attributes(json, relations: true)
11
+ def transform_before_symbolize(key, json)
12
+ key.as_module.whitelist_attributes(json, relations: true)
13
13
  end
14
14
 
15
- def post_transform(_key, json)
15
+ def transform_after_symbolize(_key, json)
16
16
  json
17
17
  end
18
18
  end
@@ -4,7 +4,7 @@ module Mumukit::Sync::Store
4
4
  ## from Bibliotheca API
5
5
  class Bibliotheca < Mumukit::Sync::Store::Base
6
6
  include Mumukit::Sync::Store::WithWrappedLanguage
7
- include Mumukit::Sync::Store::WithIdFiltering
7
+ include Mumukit::Sync::Store::WithFilteredId
8
8
 
9
9
  def initialize(bibliotheca_bridge)
10
10
  @bibliotheca_bridge = bibliotheca_bridge
@@ -14,7 +14,7 @@ module Mumukit::Sync::Store
14
14
  end
15
15
 
16
16
  def read_resource(sync_key)
17
- return unless sync_key.kind == :guide
17
+ return unless sync_key.kind.like? :guide
18
18
 
19
19
  Mumukit::Sync::Store::Github::GuideImport.new(
20
20
  bot: @bot,
@@ -23,7 +23,7 @@ module Mumukit::Sync::Store
23
23
  end
24
24
 
25
25
  def write_resource!(sync_key, resource_h)
26
- return unless sync_key.kind == :guide
26
+ return unless sync_key.kind.like? :guide
27
27
 
28
28
  Mumukit::Sync::Store::Github::GuideExport.new(
29
29
  slug: sync_key.id,
@@ -12,7 +12,7 @@ module Mumukit::Sync::Store
12
12
  end
13
13
 
14
14
  def do_read(sync_key)
15
- return unless sync_key.kind == :language
15
+ return unless sync_key.kind.like? :language
16
16
  # the only difference between an `importable_info`
17
17
  # and a `resource_h` is the way `runner_url` is named
18
18
  Mumukit::Bridge::Runner.new(sync_key.id)
@@ -0,0 +1,5 @@
1
+ module Mumukit::Sync::Store::WithFilteredId
2
+ def transform_before_symbolize(key, json)
3
+ super.tap { |it| it.indifferent_delete(:id) }
4
+ end
5
+ end
@@ -1,6 +1,6 @@
1
1
  module Mumukit::Sync::Store::WithWrappedLanguage
2
- def post_transform(key, json)
3
- if key == :guide
2
+ def transform_after_symbolize(key, json)
3
+ if key.like? :guide
4
4
  guide = json.dup
5
5
  wrap_language! guide
6
6
  guide[:exercises].each { |exercise| wrap_language! exercise }
@@ -12,5 +12,5 @@ require_relative './store/github'
12
12
  require_relative './store/json'
13
13
  require_relative './store/thesaurus'
14
14
  require_relative './store/with_wrapped_language'
15
- require_relative './store/with_id_filtering'
15
+ require_relative './store/with_filtered_id'
16
16
  require_relative './store/bibliotheca'
@@ -12,7 +12,7 @@ module Mumukit::Sync
12
12
  def initialize(store, inflators = [], resource_classifier = nil)
13
13
  @store = store
14
14
  @inflators = inflators
15
- @resource_classifier ||= proc { |kind| Mumukit::Sync.constantize(kind) }
15
+ @resource_classifier ||= proc { |kind| kind.as_module }
16
16
  end
17
17
 
18
18
  def sync_keys_matching(id_regex = nil)
@@ -1,5 +1,5 @@
1
1
  module Mumukit
2
2
  module Sync
3
- VERSION = '0.2.1'
3
+ VERSION = '0.3.0'
4
4
  end
5
5
  end
data/lib/mumukit/sync.rb CHANGED
@@ -6,18 +6,16 @@ require "mumukit/sync/version"
6
6
 
7
7
  module Mumukit
8
8
  module Sync
9
- ## Creates a sync key, composed of a `kind` and `id`
9
+
10
+ # Creates a sync key, composed of a `kind` and `id`
11
+ #
12
+ # kind: string|symbol|class
13
+ # id: object
14
+ #
15
+ # Warning: in order to test the `kind`, always use the `like?` message
10
16
  def self.key(kind, id)
11
17
  struct kind: kind, id: id
12
18
  end
13
-
14
- def self.constantize(kind)
15
- classify(kind).constantize
16
- end
17
-
18
- def self.classify(kind)
19
- kind.to_s.classify
20
- end
21
19
  end
22
20
  end
23
21
 
data/mumukit-sync.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_dependency 'mumukit-core', '~> 1.11'
24
+ spec.add_dependency 'mumukit-core', '~> 1.12'
25
25
  spec.add_dependency 'mumukit-bridge', '~> 3.5'
26
26
  spec.add_dependency 'mumukit-auth', '~> 7.0'
27
27
 
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.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franco Bulgarelli
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-23 00:00:00.000000000 Z
11
+ date: 2018-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mumukit-core
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.11'
19
+ version: '1.12'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.11'
26
+ version: '1.12'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mumukit-bridge
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -170,7 +170,7 @@ files:
170
170
  - lib/mumukit/sync/store/json.rb
171
171
  - lib/mumukit/sync/store/null.rb
172
172
  - lib/mumukit/sync/store/thesaurus.rb
173
- - lib/mumukit/sync/store/with_id_filtering.rb
173
+ - lib/mumukit/sync/store/with_filtered_id.rb
174
174
  - lib/mumukit/sync/store/with_wrapped_language.rb
175
175
  - lib/mumukit/sync/syncer.rb
176
176
  - lib/mumukit/sync/version.rb
@@ -1,5 +0,0 @@
1
- module Mumukit::Sync::Store::WithIdFiltering
2
- def pre_transform(key, json)
3
- super.tap { |it| it.indifferent_delete(:id) }
4
- end
5
- end