asker-tool 2.4.5 → 2.5.1

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: c936c3b95ba797cf9a1fd0652fa9b5d3154c11ebf1d1b62e3febf3a194581374
4
- data.tar.gz: 5e642c8e1ce5e0f700190c9b9caca1bdb13952a44cfe1d02837cb50cae3a8c5e
3
+ metadata.gz: ecd775d21f7d85f15daa5307be5947fc9d36d22dccd8448bf477c885ea639758
4
+ data.tar.gz: d145bb6b6ae9af56a917f9c98ccd8f33e09b0e9640c93382854d20c733714bd5
5
5
  SHA512:
6
- metadata.gz: b3433f6b80c5e89417580637175c9e11de2cfae9960b52d347deb39881e52dac34df53a53225cfc4f9766bc2b24a2717927e5ec139e0811557db1126062f96e3
7
- data.tar.gz: 97ebd51f2c232487dd51b39bb9083d23d9dba25e1c29da54c3817d4d7d04a15e2c4b99bd6ac03e1423945595f3b448b7603a9cbeef505e8f7b1c6e02e03b31ed
6
+ metadata.gz: 87f02c406e8a659bcad86e246982b1192aae902476939fb77e69f533fb648b7962054068a5084f06c0ac6f8cf8349bce8602e55f8e2f20d973f645801cbc6a09
7
+ data.tar.gz: b030b96ca377a1170961dbf1c6aa1026493756baea1e58a455e4bf454e13cb7af47a53f72807d66f2dbb8c0b93d12ff10881bda617897205f69fb0a977f83844
data/README.md CHANGED
@@ -11,7 +11,6 @@ ASKER helps trainers to create a huge amount of questions, from a definitions (_
11
11
 
12
12
  * Free Software [LICENSE](LICENSE).
13
13
  * Multiplatform.
14
- * [Ruby program](https://rubygems.org/gems/asker-tool)
15
14
 
16
15
  ## Installation
17
16
 
@@ -22,20 +21,14 @@ ASKER helps trainers to create a huge amount of questions, from a definitions (_
22
21
 
23
22
  ## Usage
24
23
 
25
- Steps:
26
-
27
- 1. Create an input file with your inputs (_conceptual map_).
28
- 1. Run _asker_ and get the results into `output` directory.
29
-
30
- Example: Running `asker` with our example input file as argument (`acdc.haml`):
31
-
32
- ```
24
+ 1. **Create input file** with your content (_conceptual map_). Examples at [Asker inputs folder](./docs/examples).
25
+ 2. **Run `asker PATH/TO/INPUT`**. Example: Create questions from ACDC input example file:
26
+ ```bash
33
27
  asker docs/examples/bands/acdc.haml
34
28
  ```
29
+ 3. Output files created into the `output` folder.
35
30
 
36
- * Output files created into the `output` folder.
37
- * More [example input files](./docs/examples).
38
- * More asker input files at [github/dvarrui/asker-inputs](https://github.com/dvarrui/asker-inputs) repository.
31
+ > More input examples at [dvarrui/asker-input](https://github.com/dvarrui/asker-inputs) repository.
39
32
 
40
33
  ## Documentation
41
34
 
@@ -43,6 +36,7 @@ asker docs/examples/bands/acdc.haml
43
36
  * [Videos](docs/videos.md)
44
37
  * [Inputs](docs/inputs/README.md)
45
38
  * [Usage](docs/usage.md)
39
+ * [Reference](docs/reference.md)
46
40
  * [Contributions](docs/contributions.md)
47
41
  * [Problem to solve](docs/idea.md)
48
42
  * [History](docs/history.md)
@@ -50,4 +44,3 @@ asker docs/examples/bands/acdc.haml
50
44
  ## Contact
51
45
 
52
46
  * **Email**: `teuton.software@protonmail.com`
53
- * **Twitter**: `@SoftwareTeuton`
@@ -5,7 +5,8 @@ require 'set'
5
5
  require_relative 'base_stage'
6
6
  require_relative '../question'
7
7
 
8
- # range d1-d4
8
+ ##
9
+ # range d1-d4: d1choice, d1none-misspelled, d1none
9
10
  class StageD < BaseStage
10
11
  def run
11
12
  # Stage D: process every definition, I mean every <def> tag
@@ -15,6 +16,7 @@ class StageD < BaseStage
15
16
  lang = concept.lang
16
17
  # for every <text> do this
17
18
  concept.texts.each do |t|
19
+ # s => concept name, none and neighbors
18
20
  s = Set.new [name(:raw), lang.text_for(:none)]
19
21
  concept.neighbors.each { |n| s.add n[:concept].name(:decorated) }
20
22
  a = s.to_a
@@ -81,13 +83,20 @@ class StageD < BaseStage
81
83
 
82
84
  # Question choice => true
83
85
  q = Question.new(:choice)
84
- q.name = "#{name(:id)}-#{num}-d2true"
86
+ q.name = "#{name(:id)}-#{num}-d2true-misspelled"
85
87
  q.text = random_image_for(name(:raw)) + lang.text_for(:d2, name(:raw), t)
86
88
  q.good = lang.text_for(:true)
87
89
  q.bads << lang.text_for(:misspelling)
88
90
  q.bads << lang.text_for(:false)
89
91
  questions << q
90
92
 
93
+ # Question boolean => true
94
+ q = Question.new(:boolean)
95
+ q.name = "#{name(:id)}-#{num}-d2true"
96
+ q.text = random_image_for(name(:raw)) + lang.text_for(:d2, name(:raw), t)
97
+ q.good = 'TRUE'
98
+ questions << q
99
+
91
100
  # Question choice => false
92
101
  if a.size > 1
93
102
  q = Question.new(:choice)
@@ -97,6 +106,13 @@ class StageD < BaseStage
97
106
  q.bads << lang.text_for(:misspelling)
98
107
  q.bads << lang.text_for(:true)
99
108
  questions << q
109
+
110
+ # Question boolean => false
111
+ q = Question.new(:boolean)
112
+ q.name = "#{name(:id)}-#{num}-d2false"
113
+ q.text = random_image_for(name(:raw)) + lang.text_for(:d2, a[1], t)
114
+ q.good = 'FALSE'
115
+ questions << q
100
116
  end
101
117
 
102
118
  # Question hidden name questions
@@ -130,10 +146,4 @@ class StageD < BaseStage
130
146
 
131
147
  questions
132
148
  end
133
- # rubocop:enable Lint/BooleanSymbol
134
- # rubocop:enable Metrics/MethodLength
135
- # rubocop:enable Metrics/AbcSize
136
- # rubocop:enable Metrics/BlockLength
137
- # rubocop:enable Metrics/CyclomaticComplexity
138
- # rubocop:enable Metrics/PerceivedComplexity
139
149
  end
@@ -3,11 +3,9 @@ require_relative 'concept_doc_exporter'
3
3
  require_relative 'data_gift_exporter'
4
4
  require_relative 'data_moodle_exporter'
5
5
 
6
- # Export Output data:
7
- # * Gift (ConceptAI, Code)
8
- # * YAML
9
- # * Doc (txt)
10
- # * Moodle XML (ConceptAI, Code)
6
+ ##
7
+ # Export Output data files
8
+ # * YAML, Doc (txt), Gift (ConceptAI, Code) and Moodle XML (ConceptAI, Code)
11
9
  module OutputFileExporter
12
10
  def self.export(data, project)
13
11
  config = Application.instance.config
@@ -1,4 +1,5 @@
1
1
  [global]
2
+ version = ">= 2.5.0"
2
3
  ; Connect Google and download find images URLs
3
4
  ; Accept yes|no
4
5
  internet = yes
@@ -4,13 +4,13 @@
4
4
  %names AC/DC, ACDC
5
5
  %tags rock, band, australia
6
6
  %def Australian rock band formed by Scottish-born brothers Malcolm and Angus Young
7
- %table{ fields: 'members'}
7
+ %table{ fields: 'members' }
8
8
  %row Bon Scott
9
9
  %row Angus Young
10
10
  %row Malcolm Young
11
11
  %row Phil Rudd
12
12
  %row Cliff Williams
13
- %table{ fields: 'attribute, value'}
13
+ %table{ fields: 'attribute, value' }
14
14
  %row
15
15
  %col Genres
16
16
  %col Hard rock blues rock rock and roll
@@ -20,7 +20,7 @@
20
20
  %row
21
21
  %col Formed in
22
22
  %col Sydney
23
- %table{ fields: 'Albums', sequence: 'Albums sorted by date'}
23
+ %table{ fields: 'Albums', sequence: 'Albums sorted by date' }
24
24
  %row Albums High Voltage
25
25
  %row Powerage
26
26
  %row Highway to Hell
@@ -12,9 +12,9 @@
12
12
  :f1: 'Els seguents elements son "<%=text2%>" del concepte <b><%=text1%></b>:<ul><li><%=text3%></li></ul>'
13
13
  :f2: "Els seguents elements son \"<%=text2%>\".<br/>Selecciona l'opció que no pertanyi al concepte <b><%=text1%></b>."
14
14
  :f3: 'Els seguents elements son "<%=text2%>" del concepte <b><%=text1%></b>:<br><p><%=text3%></p>(Coloca cada paraula a la seva posició correcta dins el text)'
15
- :i1: "<%=text1%><br/>Escull l'opció que millor es correspongui amb la imatge anterior.<br/>"
16
- :i2: '<%=text1%><br/>La imatge/text anterior correspo a <b><%=text2%></b>.'
17
- :i3: "<%=text1%><br/>Escriu l'opció <%=text2%>, que millor correspongui amb la imatge anterior.<br/>"
15
+ :i1: "<%=text1%><br/>Escull l'opció que millor es correspongui amb el fitxer anterior.<br/>"
16
+ :i2: '<%=text1%><br/>El fitxer anterior correspo a <b><%=text2%></b>.'
17
+ :i3: "<%=text1%><br/>Escriu l'opció <%=text2%>, que millor correspongui amb el fitxer imatge anterior.<br/>"
18
18
  :i4: '<%=text1%><br/>Definició: <i><%=text2%></i><br/><br/>(Coloca cada palabra en su posición correcta dentro del texto)'
19
19
  :s1: 'En relació al concepte <b><%=text1%></b>, ordena cada/les/els "<%=text2%>" per tal que es compleixi el criteri "<%=text3%>".<br/>'
20
20
  :t1table: "Concepte <b><%=text1%></b><br/><%=text2%>: [*]<br/><%=text3%>: \"<%=text4%>\"<br/>Escull l'opció correcta.<br/>"
@@ -12,9 +12,9 @@
12
12
  :f1: 'Die folgenden Elemente sind "<%=text2%>" des Begriffs <b><%=text1%></b>:<ul><li><%=text3%></li></ul>'
13
13
  :f2: 'Die folgenden Elemente sind "<%=text2%>".<br/>Wählen Sie die Antwortmöglichkeit aus, die nicht zum Begriff <b><%=text1%></b> passt.'
14
14
  :f3: 'Die folgenden Elemente sind "<%=text2%>" des Begriffs <b><%=text1%></b>:<br><p><%=text3%></p>(Setzen Sie die Wörter in die Lücken ein)'
15
- :i1: '<%=text1%><br/>EWählen Sie die Antwortmöglichkeit, die am besten zu dem gezeigten Bild passt.<br/>'
16
- :i2: '<%=text1%><br/>Das gezeigte Bild gehört zu <b><%=text2%></b>.'
17
- :i3: '<%=text1%><br/>Setzen Sie die Antwort ein <%=text2%>, qdie am besten zu dem gezeigten Bild passt.<br/>'
15
+ :i1: '<%=text1%><br/>EWählen Sie die Antwortmöglichkeit, die am besten zu dem gezeigten Datei passt.<br/>'
16
+ :i2: '<%=text1%><br/>Das gezeigte Datei gehört zu <b><%=text2%></b>.'
17
+ :i3: '<%=text1%><br/>Setzen Sie die Antwort ein <%=text2%>, qdie am besten zu dem gezeigten Datei passt.<br/>'
18
18
  :i4: '<%=text1%><br/>Bedeutung: <i><%=text2%></i><br/><br/>(Setzen Sie die Wörter in die Lücken ein)'
19
19
  :s1: 'Beziehen Sie sich auf den Begriff <b><%=text1%></b>, und ordnen Sie die "<%=text2%>" richtigen Lösungen zu "<%=text3%>".<br/>'
20
20
  :t1table: 'Begriff <b><%=text1%></b><br/><%=text2%>: [*]<br/><%=text3%>: "<%=text4%>"<br/>Wählen Sie die richtige Lösung aus.<br/>'
@@ -12,9 +12,9 @@
12
12
  :f1: 'The next items are "<%=text2%>" from <b><%=text1%></b> concept:<br/><ul><li><%=text3%></li></ul>'
13
13
  :f2: 'The next items are "<%=text2%>".<br/>Choose the option that not belongs concept <b><%=text1%></b>.'
14
14
  :f3: 'The next items are "<%=text2%>" from <b><%=text1%></b> concept:<br><p><%=text3%></p>(Put every word into the right position)'
15
- :i1: '<%=text1%><br/>Choose the best association for the previous image.<br/>'
16
- :i2: '<%=text1%><br/>The previous image/text corresponds to <b><%=text2%></b>.'
17
- :i3: '<%=text1%><br/>Write the best answer <%=text2%>, for the previous image.<br/>'
15
+ :i1: '<%=text1%><br/>Choose the best association for the previous file.<br/>'
16
+ :i2: '<%=text1%><br/>The previous file corresponds to <b><%=text2%></b>.'
17
+ :i3: '<%=text1%><br/>Write the best answer <%=text2%>, for the previous file.<br/>'
18
18
  :i4: '<%=text1%><br/>Definition:<br/> <i><%=text2%></i><br/><br/>(Put every word in the right text position)'
19
19
  :s1: "About <b><%=text1%></b> concept, sort every \"<%=text2%>\", so It is true that \"<%=text3%>\".<br/>"
20
20
  :t1table: '<b>Concept <%=text1%></b><br/><%=text2%>: [*]<br/><%=text3%>: "<%=text4%>"<br/>Choose the right answer.<br/>'
@@ -12,9 +12,9 @@
12
12
  :f1: 'Los siguientes elementos son "<%=text2%>" del concepto <b><%=text1%></b>:<ul><li><%=text3%></li></ul>'
13
13
  :f2: 'Los siguientes elementos son "<%=text2%>".<br/>Selecciona la opción que no pertenezca al concepto <b><%=text1%></b>.'
14
14
  :f3: 'Los siguientes elementos son "<%=text2%>" del concepto <b><%=text1%></b>:<br><p><%=text3%></p>(Coloca cada palabra en su posición correcta dentro del texto)'
15
- :i1: '<%=text1%><br/>Elige la opción que mejor se corresponda con la imagen anterior.<br/>'
16
- :i2: '<%=text1%><br/>La imagen/texto anterior corresponde a <b><%=text2%></b>.'
17
- :i3: '<%=text1%><br/>Escribe la opción <%=text2%>, que mejor corresponda con la imagen anterior.<br/>'
15
+ :i1: '<%=text1%><br/>Elige la opción que mejor se corresponda con el fichero anterior.<br/>'
16
+ :i2: '<%=text1%><br/>El fichero anterior corresponde a <b><%=text2%></b>.'
17
+ :i3: '<%=text1%><br/>Escribe la opción <%=text2%>, que mejor corresponda con el fichero anterior.<br/>'
18
18
  :i4: '<%=text1%><br/>Definición: <i><%=text2%></i><br/><br/>(Coloca cada palabra en su posición correcta dentro del texto)'
19
19
  :s1: 'En relación al concepto <b><%=text1%></b>, ordena cada/las/los "<%=text2%>" de modo que se cumpla el criterio "<%=text3%>".<br/>'
20
20
  :t1table: 'Concepto <b><%=text1%></b><br/><%=text2%>: [*]<br/><%=text3%>: "<%=text4%>"<br/>Elige la opción correcta.<br/>'
@@ -12,9 +12,9 @@
12
12
  :f1: 'Les éléments suivants sont "<%=text2%>" du concept <b><%=text1%></b>:<ul><li><%=text3%></li></ul>'
13
13
  :f2: "Les éléments suivants sont \"<%=text2%>\".<br/>Sélectionnez l'option qui n'appartient pas au concept <b><%=text1%></b>."
14
14
  :f3: 'Les éléments suivants sont "<%=text2%>" du concept <b><%=text1%></b>:<br><p><%=text3%></p>(Mettez chaque mot à la bonne position dans le texte)'
15
- :i1: "<%=text1%><br/>Choisissez l'option qui correspond le mieux à l'image précédente.<br/>"
16
- :i2: "<%=text1%><br/>L'image précédente correspond à <b><%=text2%></b>."
17
- :i3: "<%=text1%><br/>Écrivez l'option <%=text2%>, qui correspond le mieux à l'image précédente.<br/>"
15
+ :i1: "<%=text1%><br/>Choisissez l'option qui correspond le mieux à le fichier précédente.<br/>"
16
+ :i2: "<%=text1%><br/>Le fichier précédente correspond à <b><%=text2%></b>."
17
+ :i3: "<%=text1%><br/>Écrivez l'option <%=text2%>, qui correspond le mieux à le fichier précédente.<br/>"
18
18
  :i4: '<%=text1%><br/>Définition: <i><%=text2%></i><br/><br/>(Mettez chaque mot à la bonne position dans le texte)'
19
19
  :s1: "Par rapport au concept <b><%=text1%></b>, mettez dans l'ordre chaque \"<%=text2%>\" afin que le critère soit rempli \"<%=text3%>\".<br/>"
20
20
  :t1table: "Concept <b><%=text1%></b><br/><%=text2%>: [*]<br/><%=text3%>: \"<%=text4%>\"<br/>Choisissez l'option correcte.<br/>"
@@ -1,4 +1,3 @@
1
- # frozen_string_literal: true
2
1
 
3
2
  require 'base64'
4
3
 
@@ -11,32 +10,120 @@ module EmbeddedFile
11
10
  # @param value (String)
12
11
  # @param localdir (String) Input file base folder
13
12
  # @return Hash
14
- # rubocop:disable Metrics/MethodLength
15
- # rubocop:disable Metrics/AbcSize
16
13
  def self.load(value, localdir)
17
- # When filename is an URL
18
- if value.start_with?('https://') || value.start_with?('http://')
19
- return { text: "<img src=\"#{value}\" alt=\"image\" width=\"400\" height=\"300\">", file: :none }
14
+ return load_image(value, localdir) if is_image? value
15
+ return load_audio(value, localdir) if is_audio? value
16
+ return load_video(value, localdir) if is_video? value
17
+
18
+ if is_url? value
19
+ Logger.verbose Rainbow("[ERROR] Unkown URL type!: #{value}").red.bright
20
+ exit 1
21
+ end
22
+
23
+ filepath = File.join(localdir, value)
24
+ unless File.exist?(filepath)
25
+ Logger.verbose Rainbow("[ERROR] File does not exist!: #{filepath}").red.bright
26
+ # return { text: "URI error", file: :none, type: :unkown }
27
+ exit 1
28
+ end
29
+
30
+ # Suposse that filename is TEXT file
31
+ return { text: "<pre>#{File.read(filepath)}</pre>", file: :none, type: :text }
32
+ end
33
+
34
+ def self.is_audio?(filename)
35
+ extens = ['.mp3', '.ogg', '.wav']
36
+ extens.each {|ext| return true if filename.downcase.end_with?(ext) }
37
+ false
38
+ end
39
+
40
+ def self.is_image?(filename)
41
+ extens = ['.jpg', '.jpeg', '.png']
42
+ extens.each {|ext| return true if filename.downcase.end_with?(ext) }
43
+ false
44
+ end
45
+
46
+ def self.is_video?(filename)
47
+ extens = ['.mp4', '.ogv']
48
+ extens.each {|ext| return true if filename.downcase.end_with?(ext) }
49
+ false
50
+ end
51
+
52
+ def self.is_url?(value)
53
+ return true if value.start_with?('https://') || value.start_with?('http://')
54
+ false
55
+ end
56
+
57
+ def self.load_audio(value, localdir)
58
+ output = { text: :error, file: :none, type: :audio}
59
+
60
+ if is_url? value
61
+ output[:text] = "<audio src=\"#{value}\" controls></audio>"
62
+ output[:file] = :none
63
+ output[:type] = :url
64
+ return output
65
+ end
66
+
67
+ filepath = File.join(localdir, value)
68
+ unless File.exist?(filepath)
69
+ Logger.verbose Rainbow("[ERROR] Audio file no exists!: #{filepath}").red.bright
70
+ exit 1
71
+ end
72
+ output[:text] = '<audio controls><source src="@@PLUGINFILE@@/' + File.basename(filepath) \
73
+ + '">Your browser does not support the audio tag.</audio>'
74
+ output[:file] = '<file name="' + File.basename(filepath) \
75
+ + '" path="/" encoding="base64">' \
76
+ + Base64.strict_encode64(File.open(filepath, 'rb').read) + '</file>'
77
+ output[:type] = :audio
78
+ output
79
+ end
80
+
81
+ def self.load_image(value, localdir)
82
+ output = { text: :error, file: :none, type: :image}
83
+
84
+ if is_url? value
85
+ output[:text] = "<img src=\"#{value}\" alt=\"image\" width=\"400\" height=\"300\">"
86
+ output[:file] = :none
87
+ output[:type] = :url
88
+ return output
20
89
  end
21
90
 
22
91
  filepath = File.join(localdir, value)
23
92
  unless File.exist?(filepath)
24
- # When filename is unkown!
25
93
  Logger.verbose Rainbow("[ERROR] Unknown file! #{filepath}").red.bright
26
94
  exit 1
27
95
  end
28
- # When filename is PNG, JPG o JPEG
29
- if ['.png', '.jpg', '.jpeg'].include? File.extname(filepath)
30
- # converts image into base64 strings
31
- text = '<img src="@@PLUGINFILE@@/' + File.basename(filepath) \
32
- + '" alt="imagen" class="img-responsive atto_image_button_text-bottom">'
33
- data = '<file name="' + File.basename(filepath) + '" path="/" encoding="base64">' \
34
- + Base64.strict_encode64(File.open(filepath, 'rb').read) + '</file>'
35
- return { text: text, file: data }
96
+ output[:text] = '<img src="@@PLUGINFILE@@/' + File.basename(filepath) \
97
+ + '" alt="imagen" class="img-responsive atto_image_button_text-bottom">'
98
+ output[:file] = '<file name="' + File.basename(filepath) \
99
+ + '" path="/" encoding="base64">' \
100
+ + Base64.strict_encode64(File.open(filepath, 'rb').read) + '</file>'
101
+ output[:type] = :image
102
+ output
103
+ end
104
+
105
+ def self.load_video(value, localdir)
106
+ output = { text: :error, file: :none, type: :video}
107
+
108
+ if is_url? value
109
+ output[:text] = "<video controls width=\"400\" height=\"300\">" \
110
+ + "<source src=\"#{value}\"/></video>"
111
+ output[:file] = :none
112
+ output[:type] = :url
113
+ return output
114
+ end
115
+
116
+ filepath = File.join(localdir, value)
117
+ unless File.exist?(filepath)
118
+ Logger.verbose Rainbow("[ERROR] Unknown file! #{filepath}").red.bright
119
+ exit 1
36
120
  end
37
- # Suposse that filename is TXT file
38
- return { text: "<pre>#{File.read(filepath)}</pre>", file: :none } if File.exist?(filepath)
121
+ output[:text] = '<video controls><source src="@@PLUGINFILE@@/' + File.basename(filepath) \
122
+ + '"/>Your browser does not support the video tag.</video>'
123
+ output[:file] = '<file name="' + File.basename(filepath) \
124
+ + '" path="/" encoding="base64">' \
125
+ + Base64.strict_encode64(File.open(filepath, 'rb').read) + '</file>'
126
+ output[:type] = :video
127
+ output
39
128
  end
40
- # rubocop:enable Metrics/MethodLength
41
- # rubocop:enable Metrics/AbcSize
42
129
  end
data/lib/asker/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
2
  class Asker
3
- VERSION = '2.4.5'
3
+ VERSION = '2.5.1'
4
4
  NAME = 'asker'
5
5
  GEM = 'asker-tool'
6
6
  CONFIGFILE = 'asker.ini'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asker-tool
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.5
4
+ version: 2.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Vargas Ruiz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-16 00:00:00.000000000 Z
11
+ date: 2022-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: haml