conjugatefr 1.0.0 → 1.0.2

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
  SHA1:
3
- metadata.gz: a1ad90db94e0593104ac13b95934ca3dad75baad
4
- data.tar.gz: 4dee619f6237b8c630ae0842453edb700e5caa1c
3
+ metadata.gz: 87362c4221617c2625e90c78bda16876536213a7
4
+ data.tar.gz: 83c504e5139117a9ca1a7ca5c5ae7676ad4c14a6
5
5
  SHA512:
6
- metadata.gz: f5244c013d501d89cd5e2f94266d795b5188c7b361d361adb80cbf8951e6709faf32c33fb8e519c12a2d7989060b20d4529c87725f0ea76760fdd7fb0eca364a
7
- data.tar.gz: 55b6a637272e69fde927807252fe9d45213f094209f2dffe4e057a7c6931bc5b8dc31b5562847883392b2124fe6189af0c1c13a9b118bb1f8bff281afbb7d3de
6
+ metadata.gz: 271d9ea391997af2de123c736747babea7df9fbee0363bc7724ca2ead3a54fccd98d591517b359e25889c1efa22cf49a8748f7f8c51a2d19c8dd11f37afd6162
7
+ data.tar.gz: e6f2145bbcf1b1adb7064c769b576241f618efeab29298fa7d41c9c79e7b47bee07436cff142aca902bad4f2dc421fbcc6a5fa4d426efc75c5db71bf21f9c2ee
@@ -10,12 +10,10 @@ options = {
10
10
  "renderer" => "Human",
11
11
  }
12
12
 
13
- cfr = ConjugateFR.new
14
-
15
13
  OptionParser.new do |opts|
16
14
  opts.banner = "Usage: #{$0} [options] [verbs]"
17
15
  opts.program_name = "ConjugateFR"
18
- opts.version = "1.0.0"
16
+ opts.version = "1.0.1"
19
17
  opts.on "-R", "--require PATH", "Require PATH before running." do |path|
20
18
  require path
21
19
  end
@@ -51,5 +49,4 @@ unless renderer
51
49
  exit -1
52
50
  end
53
51
 
54
- cfr.setRenderer renderer
55
- cfr.go ARGV
52
+ conjugateFR ARGV, renderer
@@ -2,71 +2,77 @@ require 'open-uri'
2
2
  require 'nokogiri'
3
3
  require 'conjugatefr/renderers'
4
4
 
5
- class ConjugateFR
6
- def setRenderer (renderer)
7
- @renderer = renderer
8
- end
9
- def go (query)
10
- # cpwords - Copy/Pasted words list from the website.
11
- cpwords = "accroître acheter acquérir acquiescer
12
- alléger aller apercevoir appeler
13
- apprendre arguer arrêter asseoir
14
- astreindre avoir battre boire
15
- bouillir briller céder changer
16
- chanter circoncire commencer compléter
17
- conclure conduire confire confondre
18
- connaître construire coudre courir
19
- craindre créer croire croître
20
- cueillir défaillir déléguer dépecer
21
- devoir dire disséquer dissoudre
22
- distinguer distraire dormir écrire
23
- employer ennuyer enseigner entendre
24
- envoyer espérer essayer essuyer
25
- être faire falloir finir
26
- fuir geler grasseyer interdire
27
- interpeller jeter joindre lancer
28
- lever lire louer luire
29
- manger marquer maudire mener
30
- mentir mettre mordre moudre
31
- mouiller mourir mouvoir naître
32
- naviguer nettoyer nuire offrir
33
- oublier ouvrir pallier paraître
34
- partir payer peindre peler
35
- perdre peser plaire pleuvoir
36
- pourvoir pouvoir prendre prévoir
37
- prier promouvoir rapiécer recevoir
38
- régner remuer répandre répondre
39
- résoudre réveiller rire rompre
40
- savoir semer sentir servir
41
- signer sortir souffrir suffire
42
- suivre surseoir taire tenir
43
- tomber tordre traire travailler
44
- tressaillir vaincre valoir vendre
45
- venir vêtir vivre voir
46
- vouloir"
5
+ # Conjugates French Verbs
6
+ # @param query [Array] The query list. Can be null, in which presets are used.
7
+ # @param renderer [Renderer] The Renderer to use.
8
+ def conjugateFR (query, renderer)
9
+ # cpwords - Copy/Pasted words list from the website.
10
+ cpwords = "accroître acheter acquérir acquiescer
11
+ alléger aller apercevoir appeler
12
+ apprendre arguer arrêter asseoir
13
+ astreindre avoir battre boire
14
+ bouillir briller céder changer
15
+ chanter circoncire commencer compléter
16
+ conclure conduire confire confondre
17
+ connaître construire coudre courir
18
+ craindre créer croire croître
19
+ cueillir défaillir déléguer dépecer
20
+ devoir dire disséquer dissoudre
21
+ distinguer distraire dormir écrire
22
+ employer ennuyer enseigner entendre
23
+ envoyer espérer essayer essuyer
24
+ être faire falloir finir
25
+ fuir geler grasseyer interdire
26
+ interpeller jeter joindre lancer
27
+ lever lire louer luire
28
+ manger marquer maudire mener
29
+ mentir mettre mordre moudre
30
+ mouiller mourir mouvoir naître
31
+ naviguer nettoyer nuire offrir
32
+ oublier ouvrir pallier paraître
33
+ partir payer peindre peler
34
+ perdre peser plaire pleuvoir
35
+ pourvoir pouvoir prendre prévoir
36
+ prier promouvoir rapiécer recevoir
37
+ régner remuer répandre répondre
38
+ résoudre réveiller rire rompre
39
+ savoir semer sentir servir
40
+ signer sortir souffrir suffire
41
+ suivre surseoir taire tenir
42
+ tomber tordre traire travailler
43
+ tressaillir vaincre valoir vendre
44
+ venir vêtir vivre voir
45
+ vouloir"
47
46
 
48
- # Generate word arrays from above list.
49
- words = cpwords.gsub(/[ \t\n]+/, " ").split " "
47
+ # Generate word arrays from above list.
48
+ words = cpwords.gsub(/[ \t\n]+/, " ").split " "
50
49
 
51
- toqry = if query.empty?
52
- words
53
- else
54
- query
55
- end
50
+ # Fall back to presets
51
+ toqry = if query.empty?
52
+ words
53
+ else
54
+ query
55
+ end
56
56
 
57
- toqry_filtered = toqry.map { |word| word.gsub(/[êé]/, "e").gsub /î/, "i" }
57
+ # Filter out all of the accented words.
58
+ toqry_filtered = toqry.map { |word| word.gsub(/[êé]/, "e").gsub /î/, "i" }
58
59
 
59
- @renderer.pre
60
+ # Render pre-word content.
61
+ renderer.pre
60
62
 
61
- toqry_filtered.each_with_index do |word, index|
62
- open "http://conjf.cactus2000.de/showverb.en.php?verb=#{word}" do |page|
63
- doc = Nokogiri::HTML page
64
- arr = doc.css("td [width='50%']").css("div").to_s.gsub(/.*?<div>/im, "").split("<br>")
65
- arr.pop
66
- @renderer.word toqry[index], arr
67
- end
68
- end
63
+ # Query each word.
64
+ toqry_filtered.each_with_index do |word, index|
65
+ open "http://conjf.cactus2000.de/showverb.en.php?verb=#{word}" do |page|
66
+ # Split the conjugations into an array.
67
+ doc = Nokogiri::HTML page
68
+ arr = doc.css("td [width='50%']").css("div").to_s.gsub(/.*?<div>/im, "").split("<br>")
69
+ arr.pop
69
70
 
70
- @renderer.post
71
+ # Render this word.
72
+ renderer.word toqry[index], arr
73
+ end
71
74
  end
75
+
76
+ # Render post-word content.
77
+ renderer.post
72
78
  end
@@ -1,13 +1,29 @@
1
1
  # Ruby ConjugateFR Renderers - Part of Ruby ConjugateFR.
2
2
  # I, htmlguy, hereby release this work into the public domain.
3
3
 
4
+ # Renders conjugated french verbs.
5
+ # (see conjugateFR)
4
6
  class Renderer
7
+ # Prints content to go before the conjugations.
5
8
  def pre; end
9
+ # Prints a verb and it's conjugations.
10
+ # @param name [String] The verb.
11
+ # @param words [Array] An array of conjugations.
6
12
  def word (name, words); end
13
+ # Prints content to go after the conjugations.
7
14
  def post; end
15
+ # The description of this renderer.
16
+ # For example: +Renders in the example format.+
17
+ # @return [String] the description.
8
18
  def description; ""; end
9
19
  end
10
20
 
21
+ # A renderer in a human-readable format.
22
+ # Output looks like:
23
+ # == someverb ==
24
+ # someconjugation
25
+ # someconjugation
26
+ # etc...
11
27
  class HumanRenderer < Renderer
12
28
  def word (name, words)
13
29
  puts "\n == #{name} == "
@@ -18,6 +34,9 @@ class HumanRenderer < Renderer
18
34
  def description; "Renders in a nice, human-readable format."; end
19
35
  end
20
36
 
37
+ # A renderer template for rendering in a delimitered table format.
38
+ # (see CSVRenderer)
39
+ # (see TSVRenderer)
21
40
  class DelimitedTableRenderer < Renderer
22
41
  def initialize; @s = ""; end
23
42
  def pre
@@ -32,16 +51,29 @@ class DelimitedTableRenderer < Renderer
32
51
  end
33
52
  end
34
53
 
54
+ # A renderer in the comma-separated value format.
55
+ # Output looks like:
56
+ # Word,Je,Tu,Il/Elle/On,Nous,Vous,Ils/Elles
57
+ # someverb,conj1,conj2,conj3,conj4,conj5,conj6
35
58
  class CSVRenderer < DelimitedTableRenderer
36
59
  def initialize; @s = ","; end
37
60
  def description; "Renders in the Comma Separated Value (CSV) format."; end
38
61
  end
39
62
 
63
+ # A renderer in the tab-separated value format.
64
+ # Output looks like (w/ 4-space tab):
65
+ # Word Je Tu Il/Elle/On Nous Vous Ils/Elles
66
+ # someverb conj1 conj2 conj3 conj4 conj5 conj6
40
67
  class TSVRenderer < DelimitedTableRenderer
41
68
  def initialize; @s = "\t"; end
42
69
  def description; "Renders in the Tab Separated Value (TSV) format."; end
43
70
  end
44
71
 
72
+ # A renderer in the markdown table syntax.
73
+ # Output looks like:
74
+ # |Word|Je|Tu|Il/Elle/On|Nous|Vous|Ils/Elles
75
+ # |---|---|---|---|---|---|---
76
+ # |someverb|conj1|conj2|conj3|conj4|conj5|conj6
45
77
  class MDTableRenderer < Renderer
46
78
  def pre
47
79
  puts "|Word|Je|Tu|Il/Elle/On|Nous|Vous|Ils/Elles"
@@ -57,6 +89,7 @@ class MDTableRenderer < Renderer
57
89
  def description; "Renders in Markdown's table syntax."; end
58
90
  end
59
91
 
92
+ # Renders verbs in the form of a count of how many there are.
60
93
  class CounterRenderer < Renderer
61
94
  def initialize; @count = 0; end
62
95
  def word (name, words)
@@ -68,6 +101,9 @@ class CounterRenderer < Renderer
68
101
  def description; "Renders out a count of how many words are listed."; end
69
102
  end
70
103
 
104
+ # A global list of renderers, with each one assigned to it's human-readable
105
+ # name.
106
+ # Used for programs like the CLI.
71
107
  $renderers = {
72
108
  "Human" => HumanRenderer.new,
73
109
  "CSV" => CSVRenderer.new,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: conjugatefr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - htmlguy
@@ -10,7 +10,23 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2015-09-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: A simple program to conjugate french verbs.
13
+ description: "\n A simple program and library to conjugate french verbs.\n Parses
14
+ responses to requests to an online reference site.\n\n == Executable\n ConjugateFR
15
+ comes with the executable binary +conjugatefr+.\n To view information about it's
16
+ supported arguments, run\n conjugatefr --help\n\n == Custom Renderers\n To make
17
+ a custom renderer, just type\n require conjugatefr/renderer\n and then make a
18
+ class that extends +Renderer+.\n An example is as follows:\n\n require 'conjugatefr/renderer'\n
19
+ \ class ExampleRenderer < Renderer\n def pre\n puts \"This goes before
20
+ the words.\"\n end\n def word (name, words)\n print \"#{name}:\"\n
21
+ \ words.each do |word|\n print \" #{word}\"\n end\n end\n
22
+ \ def post\n puts \"This goes after the words.\"\n end\n def
23
+ description; \"Renders an example format.\"; end\n end\n # Add to the Renderers
24
+ list (For CLI and other programs that use it.)\n $renderers[\"Example\"] = ExampleRenderer.new\n
25
+ \ To try this out, save it as +erend.rb+ and then run:\n conjugatefr -R ./erend.rb
26
+ -r Example\n It will produce the output:\n This goes before the words.\n someword:
27
+ someconjugation etc etc\n ... (more words will be here)\n This goes after
28
+ the words.\n\n == The Library\n The library can be included with +require conjugatefr+.
29
+ It includes the\n +ConjugateFR+ class.\n "
14
30
  email: htmlguy@pdum.xyz
15
31
  executables:
16
32
  - conjugatefr