atlasq 0.3.0 → 0.4.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: a5c97590b1917e246a952dc34825aeb6b881c3d0903019662a50db84d44d1829
4
- data.tar.gz: bc4cfafe83e9578005e678e75f20815cb1e25d7861995b36733acc0cb5305660
3
+ metadata.gz: b6650dab0b4ef8c8f817c79eaeb02203d321ca79ccee4ee410e455cfdffe5c90
4
+ data.tar.gz: 6209c9628bae2509bf1f155b6cf4a4b4b27fd04dfd6c715b7fbdb5e6f677e529
5
5
  SHA512:
6
- metadata.gz: ac6e49c9dfe4505ce8f5a46fba1634e3a8bf78a3632557aed579026b8b4cfc496b979e538da89b7273b8abaf54a63874afca13c01856dca02a72c02fcde6965c
7
- data.tar.gz: d2a42ff688ff63879c1ada6fed26e8a7a8619499f95d6f10dc0c5385ad0f669acab32e1dc4577457d578cd6aeda3cc0de12c71e6daf16ce77a5ce73050f2d449
6
+ metadata.gz: 16d0a6b8321a21a6bf790fd056ea0135a751cd0cea96c0417a6e52679e65a28a9c6ac70fbc07b2e4ec2fd425953f813e4a3bf7754bcf60b87d3fb1de88e66c1b
7
+ data.tar.gz: 3f14ee8d172d031ef478f9dd7398d8df789216c32d4c0308ca03e5944ada1b4c3e5d699d1b70d581eb8d219383fd6c4948994559bcb2ab7780c5760529d8b5f8
@@ -0,0 +1 @@
1
+ {"ca":"(ca/cat) Catalan; Valencian","ar":"(ar/ara) Arabic","ps":"(ps/pus) Pushto; Pashto","uz":"(uz/uzb) Uzbek","tk":"(tk/tuk) Turkmen","en":"(en/eng) English","sq":"(sq/alb) Albanian","hy":"(hy/arm) Armenian","ru":"(ru/rus) Russian","pt":"(pt/por) Portuguese","es":"(es/spa) Spanish; Castilian","gn":"(gn/grn) Guarani","sm":"(sm/smo) Samoan","de":"(de/ger) German","nl":"(nl/dut) Dutch; Flemish","sv":"(sv/swe) Swedish","az":"(az/aze) Azerbaijani","bs":"(bs/bos) Bosnian","hr":"(hr/hrv) Croatian","sr":"(sr/srp) Serbian","bn":"(bn/ben) Bengali","fr":"(fr/fre) French","ff":"(ff/ful) Fulah","bg":"(bg/bul) Bulgarian","rn":"(rn/run) Rundi","ms":"(ms/may) Malay","ay":"(ay/aym) Aymara","qu":"(qu/que) Quechua","dz":"(dz/dzo) Dzongkha","tn":"(tn/tsn) Tswana","be":"(be/bel) Belarusian","ln":"(ln/lin) Lingala","kg":"(kg/kon) Kongo","sw":"(sw/swa) Swahili","lu":"(lu/lub) Luba-Katanga","sg":"(sg/sag) Sango","it":"(it/ita) Italian","zh":"(zh/chi) Chinese","el":"(el/gre) Greek, Modern (1453-)","tr":"(tr/tur) Turkish","cs":"(cs/cze) Czech","sk":"(sk/slo) Slovak","da":"(da/dan) Danish","et":"(et/est) Estonian","ti":"(ti/tir) Tigrinya","am":"(am/amh) Amharic","fi":"(fi/fin) Finnish","fj":"(fj/fij) Fijian","hi":"(hi/hin) Hindi","ur":"(ur/urd) Urdu","fo":"(fo/fao) Faroese","ka":"(ka/geo) Georgian","kl":"(kl/kal) Kalaallisut; Greenlandic","ch":"(ch/cha) Chamorro","ht":"(ht/hat) Haitian; Haitian Creole","hu":"(hu/hun) Hungarian","id":"(id/ind) Indonesian","ga":"(ga/gle) Irish","he":"(he/heb) Hebrew","gv":"(gv/glv) Manx","fa":"(fa/per) Persian","is":"(is/ice) Icelandic","ja":"(ja/jpn) Japanese","ky":"(ky/kir) Kirghiz; Kyrgyz","km":"(km/khm) Central Khmer","ko":"(ko/kor) Korean","kk":"(kk/kaz) Kazakh","lo":"(lo/lao) Lao","si":"(si/sin) Sinhala; Sinhalese","ta":"(ta/tam) Tamil","st":"(st/sot) Sotho, Southern","lt":"(lt/lit) Lithuanian","lb":"(lb/ltz) Luxembourgish; Letzeburgesch","lv":"(lv/lav) Latvian","ro":"(ro/rum) Romanian; Moldavian; Moldovan","mg":"(mg/mlg) Malagasy","mh":"(mh/mah) Marshallese","mk":"(mk/mac) Macedonian","my":"(my/bur) Burmese","mn":"(mn/mon) Mongolian","mt":"(mt/mlt) Maltese","dv":"(dv/div) Divehi; Dhivehi; Maldivian","ny":"(ny/nya) Chichewa; Chewa; Nyanja","af":"(af/afr) Afrikaans","nb":"(nb/nob) Bokmål, Norwegian; Norwegian Bokmål","nn":"(nn/nno) Norwegian Nynorsk; Nynorsk, Norwegian","ne":"(ne/nep) Nepali","na":"(na/nau) Nauru","tl":"(tl/tgl) Tagalog","pl":"(pl/pol) Polish","rw":"(rw/kin) Kinyarwanda","sl":"(sl/slv) Slovenian","no":"(no/nor) Norwegian","so":"(so/som) Somali","ss":"(ss/ssw) Swati","th":"(th/tha) Thai","tg":"(tg/tgk) Tajik","to":"(to/ton) Tonga (Tonga Islands)","uk":"(uk/ukr) Ukrainian","la":"(la/lat) Latin","vi":"(vi/vie) Vietnamese","bi":"(bi/bis) Bislama","nr":"(nr/nbl) Ndebele, South; South Ndebele","ts":"(ts/tso) Tsonga","ve":"(ve/ven) Venda","xh":"(xh/xho) Xhosa","zu":"(zu/zul) Zulu","sn":"(sn/sna) Shona","nd":"(nd/nde) Ndebele, North; North Ndebele"}
@@ -0,0 +1 @@
1
+ {"ca":["ad"],"ar":["ae","bh","dj","dz","eg","er","il","iq","jo","km","kw","lb","ly","ma","mr","om","ps","qa","sa","sd","so","ss","sy","td","tn","ye"],"ps":["af"],"uz":["af","uz"],"tk":["af","tm"],"en":["ag","ai","as","au","bb","bm","bq","bs","bw","bz","ca","cc","ck","cm","cx","dm","er","fj","fk","fm","gb","gd","gg","gh","gi","gm","gs","gu","gy","hk","hm","ie","im","in","io","je","jm","ke","ki","kn","ky","lc","lr","ls","mf","mh","mp","ms","mt","mu","mw","my","na","nf","ng","nr","nu","nz","pg","ph","pk","pn","pr","ps","pw","rw","sb","sc","sd","sg","sh","sl","ss","sx","sz","tc","tk","to","tt","tv","tz","ug","um","us","vc","vg","vi","vu","ws","za","zm","zw"],"sq":["al","me"],"hy":["am","az","cy"],"ru":["am","by","kg","kz","ru","tj","uz"],"pt":["ao","br","cv","gw","mo","mz","pt","st","tl"],"es":["ar","bo","bz","cl","co","cr","cu","do","ec","eh","es","gq","gt","gu","hn","mx","ni","pa","pe","pr","py","sv","uy","ve"],"gn":["ar","py"],"sm":["as","ws"],"de":["at","be","ch","de","li","lu"],"nl":["aw","be","bq","cw","mf","nl","sr","sx"],"sv":["ax","fi","se"],"az":["az"],"bs":["ba","me"],"hr":["ba","hr","me"],"sr":["ba","me","rs"],"bn":["bd"],"fr":["be","bf","bi","bj","bl","ca","cd","cf","cg","ch","ci","cm","dj","eh","fr","ga","gf","gg","gn","gp","gq","ht","je","km","lb","lu","mc","mf","mg","ml","mq","mr","nc","ne","pf","pm","re","rw","sc","sn","td","tf","tg","tn","vu","wf","yt"],"ff":["bf","gn"],"bg":["bg"],"rn":["bi"],"ms":["bn","cx","my","sg"],"ay":["bo"],"qu":["bo"],"dz":["bt"],"tn":["bw","za"],"be":["by"],"ln":["cd","cg"],"kg":["cd"],"sw":["cd","ke","tz","ug"],"lu":["cd"],"sg":["cf"],"it":["ch","it","sm","va"],"zh":["cn","cx","hk","mo","tw"],"el":["cy","gr"],"tr":["cy","tr"],"cs":["cz"],"sk":["cz","sk"],"da":["dk"],"et":["ee"],"ti":["er"],"am":["et"],"fi":["fi"],"fj":["fj"],"hi":["fj","in"],"ur":["fj","pk"],"fo":["fo"],"ka":["ge"],"kl":["gl"],"ch":["gu","mp"],"ht":["ht"],"hu":["hu"],"id":["id"],"ga":["ie"],"he":["il","ps"],"gv":["im"],"fa":["ir"],"is":["is"],"ja":["jp"],"ky":["kg"],"km":["kh"],"ko":["kp","kr"],"kk":["kz"],"lo":["la"],"si":["lk"],"ta":["lk","sg"],"st":["ls","za"],"lt":["lt"],"lb":["lu"],"lv":["lv"],"ro":["md","ro"],"mg":["mg"],"mh":["mh"],"mk":["mk"],"my":["mm"],"mn":["mn"],"mt":["mt"],"dv":["mv"],"ny":["mw"],"af":["na","za"],"nb":["no"],"nn":["no"],"ne":["np"],"na":["nr"],"tl":["ph"],"pl":["pl"],"rw":["rw"],"sl":["si"],"no":["sj"],"so":["so"],"ss":["sz","za"],"th":["th"],"tg":["tj"],"to":["to"],"uk":["ua"],"la":["va"],"vi":["vn"],"bi":["vu"],"nr":["za"],"ts":["za"],"ve":["za"],"xh":["za"],"zu":["za"],"sn":["zw"],"nd":["zw"]}
@@ -0,0 +1 @@
1
+ {"ca":"ca","cat":"ca","ar":"ar","ara":"ar","ps":"ps","pus":"ps","uz":"uz","uzb":"uz","tk":"tk","tuk":"tk","en":"en","eng":"en","sq":"sq","alb":"sq","hy":"hy","arm":"hy","ru":"ru","rus":"ru","pt":"pt","por":"pt","es":"es","spa":"es","gn":"gn","grn":"gn","sm":"sm","smo":"sm","de":"de","ger":"de","nl":"nl","dut":"nl","sv":"sv","swe":"sv","az":"az","aze":"az","bs":"bs","bos":"bs","hr":"hr","hrv":"hr","sr":"sr","srp":"sr","bn":"bn","ben":"bn","fr":"fr","fre":"fr","ff":"ff","ful":"ff","bg":"bg","bul":"bg","rn":"rn","run":"rn","ms":"ms","may":"ms","ay":"ay","aym":"ay","qu":"qu","que":"qu","dz":"dz","dzo":"dz","tn":"tn","tsn":"tn","be":"be","bel":"be","ln":"ln","lin":"ln","kg":"kg","kon":"kg","sw":"sw","swa":"sw","lu":"lu","lub":"lu","sg":"sg","sag":"sg","it":"it","ita":"it","zh":"zh","chi":"zh","el":"el","gre":"el","tr":"tr","tur":"tr","cs":"cs","cze":"cs","sk":"sk","slo":"sk","da":"da","dan":"da","et":"et","est":"et","ti":"ti","tir":"ti","am":"am","amh":"am","fi":"fi","fin":"fi","fj":"fj","fij":"fj","hi":"hi","hin":"hi","ur":"ur","urd":"ur","fo":"fo","fao":"fo","ka":"ka","geo":"ka","kl":"kl","kal":"kl","ch":"ch","cha":"ch","ht":"ht","hat":"ht","hu":"hu","hun":"hu","id":"id","ind":"id","ga":"ga","gle":"ga","he":"he","heb":"he","gv":"gv","glv":"gv","fa":"fa","per":"fa","is":"is","ice":"is","ja":"ja","jpn":"ja","ky":"ky","kir":"ky","km":"km","khm":"km","ko":"ko","kor":"ko","kk":"kk","kaz":"kk","lo":"lo","lao":"lo","si":"si","sin":"si","ta":"ta","tam":"ta","st":"st","sot":"st","lt":"lt","lit":"lt","lb":"lb","ltz":"lb","lv":"lv","lav":"lv","ro":"ro","rum":"ro","mg":"mg","mlg":"mg","mh":"mh","mah":"mh","mk":"mk","mac":"mk","my":"my","bur":"my","mn":"mn","mon":"mn","mt":"mt","mlt":"mt","dv":"dv","div":"dv","ny":"ny","nya":"ny","af":"af","afr":"af","nb":"nb","nob":"nb","nn":"nn","nno":"nn","ne":"ne","nep":"ne","na":"na","nau":"na","tl":"tl","tgl":"tl","pl":"pl","pol":"pl","rw":"rw","kin":"rw","sl":"sl","slv":"sl","no":"no","nor":"no","so":"so","som":"so","ss":"ss","ssw":"ss","th":"th","tha":"th","tg":"tg","tgk":"tg","to":"to","ton":"to","uk":"uk","ukr":"uk","la":"la","lat":"la","vi":"vi","vie":"vi","bi":"bi","bis":"bi","nr":"nr","nbl":"nr","ts":"ts","tso":"ts","ve":"ve","ven":"ve","xh":"xh","xho":"xh","zu":"zu","zul":"zu","sn":"sn","sna":"sn","nd":"nd","nde":"nd"}
@@ -0,0 +1 @@
1
+ {"catalan":["ca"],"valencian":["ca"],"valencien":["ca"],"arabic":["ar"],"arabe":["ar"],"pushto":["ps"],"pashto":["ps"],"pachto":["ps"],"uzbek":["uz"],"ouszbek":["uz"],"turkmen":["tk"],"turkmene":["tk"],"english":["en"],"anglais":["en"],"albanian":["sq"],"albanais":["sq"],"armenian":["hy"],"armenien":["hy"],"russian":["ru"],"russe":["ru"],"portuguese":["pt"],"portugais":["pt"],"spanish":["es"],"castilian":["es"],"espagnol":["es"],"castillan":["es"],"guarani":["gn"],"samoan":["sm"],"german":["de"],"allemand":["de"],"dutch":["nl"],"flemish":["nl"],"neerlandais":["nl"],"flamand":["nl"],"swedish":["sv"],"suedois":["sv"],"azerbaijani":["az"],"azeri":["az"],"bosnian":["bs"],"bosniaque":["bs"],"croatian":["hr"],"croate":["hr"],"serbian":["sr"],"serbe":["sr"],"bengali":["bn"],"french":["fr"],"francais":["fr"],"fulah":["ff"],"peul":["ff"],"bulgarian":["bg"],"bulgare":["bg"],"rundi":["rn"],"malay":["ms"],"malais":["ms"],"aymara":["ay"],"quechua":["qu"],"dzongkha":["dz"],"tswana":["tn"],"belarusian":["be"],"bielorusse":["be"],"lingala":["ln"],"kongo":["kg"],"swahili":["sw"],"luba-katanga":["lu"],"sango":["sg"],"italian":["it"],"italien":["it"],"chinese":["zh"],"chinois":["zh"],"greek":["el"],"modern":["el"],"1453-":["el"],"grec":["el"],"moderne":["el"],"apres":["el"],"1453":["el"],"turkish":["tr"],"turc":["tr"],"czech":["cs"],"tcheque":["cs"],"slovak":["sk"],"slovaque":["sk"],"danish":["da"],"danois":["da"],"estonian":["et"],"estonien":["et"],"tigrinya":["ti"],"tigrigna":["ti"],"amharic":["am"],"amharique":["am"],"finnish":["fi"],"finnois":["fi"],"fijian":["fj"],"fidjien":["fj"],"hindi":["hi"],"urdu":["ur"],"ourdou":["ur"],"faroese":["fo"],"feroien":["fo"],"georgian":["ka"],"georgien":["ka"],"kalaallisut":["kl"],"greenlandic":["kl"],"groenlandais":["kl"],"chamorro":["ch"],"haitian":["ht"],"creole":["ht"],"haitien":["ht"],"hungarian":["hu"],"hongrois":["hu"],"indonesian":["id"],"indonesien":["id"],"irish":["ga"],"irlandais":["ga"],"hebrew":["he"],"hebreu":["he"],"manx":["gv"],"mannois":["gv"],"persian":["fa"],"persan":["fa"],"icelandic":["is"],"islandais":["is"],"japanese":["ja"],"japonais":["ja"],"kirghiz":["ky"],"kyrgyz":["ky"],"central":["km"],"khmer":["km"],"korean":["ko"],"coreen":["ko"],"kazakh":["kk"],"lao":["lo"],"sinhala":["si"],"sinhalese":["si"],"singhalais":["si"],"tamil":["ta"],"tamoul":["ta"],"sotho":["st"],"southern":["st"],"du":["st","nr","nd"],"sud":["st","nr"],"lithuanian":["lt"],"lituanien":["lt"],"luxembourgish":["lb"],"letzeburgesch":["lb"],"luxembourgeois":["lb"],"latvian":["lv"],"letton":["lv"],"romanian":["ro"],"moldavian":["ro"],"moldovan":["ro"],"roumain":["ro"],"moldave":["ro"],"malagasy":["mg"],"malgache":["mg"],"marshallese":["mh"],"marshall":["mh"],"macedonian":["mk"],"macedonien":["mk"],"burmese":["my"],"birman":["my"],"mongolian":["mn"],"mongol":["mn"],"maltese":["mt"],"maltais":["mt"],"divehi":["dv"],"dhivehi":["dv"],"maldivian":["dv"],"maldivien":["dv"],"chichewa":["ny"],"chewa":["ny"],"nyanja":["ny"],"afrikaans":["af"],"bokmal":["nb"],"norwegian":["nb","nn","no"],"norvegien":["nb","nn","no"],"nynorsk":["nn"],"nepali":["ne"],"nepalais":["ne"],"nauru":["na"],"nauruan":["na"],"tagalog":["tl"],"polish":["pl"],"polonais":["pl"],"kinyarwanda":["rw"],"rwanda":["rw"],"slovenian":["sl"],"slovene":["sl"],"somali":["so"],"swati":["ss"],"thai":["th"],"tajik":["tg"],"tadjik":["tg"],"tonga":["to"],"islands":["to"],"tongan":["to"],"iles":["to"],"ukrainian":["uk"],"ukrainien":["uk"],"latin":["la"],"vietnamese":["vi"],"vietnamien":["vi"],"bislama":["bi"],"bichlamar":["bi"],"ndebele":["nr","nd"],"south":["nr"],"tsonga":["ts"],"venda":["ve"],"xhosa":["xh"],"zulu":["zu"],"zoulou":["zu"],"shona":["sn"],"north":["nd"],"nord":["nd"]}
data/lib/atlasq/cache.rb CHANGED
@@ -13,14 +13,11 @@ module Atlasq
13
13
  @get ||= {}
14
14
  @get.fetch(full_name) do
15
15
  path = "#{CACHE_DIR}/#{full_name}"
16
+
16
17
  content = File.read(path)
18
+ content = JSON.parse(content) if full_name.end_with?(".json")
17
19
 
18
- case full_name
19
- when /\.json$/
20
- JSON.parse(content)
21
- else
22
- content
23
- end
20
+ @get[full_name] = content
24
21
  end
25
22
  end
26
23
  end
@@ -5,6 +5,7 @@ require_relative "base"
5
5
  module Atlasq
6
6
  module Command
7
7
  class Any < Base
8
+ # @return [String]
8
9
  def content
9
10
  search_terms.map do |term|
10
11
  if (country = Data.country(term))
@@ -14,6 +15,8 @@ module Atlasq
14
15
  Format.countries(country_codes, title: "Region: #{region_name}")
15
16
  elsif (currencies = Data.countries_by_currencies(term))
16
17
  Format.currencies(currencies)
18
+ elsif (languages = Data.countries_by_languages(term))
19
+ Format.languages(languages)
17
20
  else
18
21
  Atlasq.failed!
19
22
  "Unknown search term: #{term}"
@@ -61,6 +61,14 @@ module Atlasq
61
61
  3. symbol
62
62
  4. partial match on name
63
63
 
64
+ -l/--language
65
+ : Display all countries by language
66
+ -l/--language [query ...]
67
+ : Search for countries by the following criteria
68
+ 1. alpha2 (ISO639 standard 2 letter code)
69
+ 2. alpha3 (ISO639 standard 3 letter code)
70
+ 3. partial match on name in English or French
71
+
64
72
  -h/--help
65
73
  : Display this page
66
74
 
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module Atlasq
6
+ module Command
7
+ class Language < Base
8
+ # @return [String]
9
+ def content
10
+ if search_terms.empty?
11
+ languages = Data.all_languages
12
+ Format.languages(languages)
13
+ else
14
+ search_terms.map do |term|
15
+ if (languages = Data.countries_by_languages(term))
16
+ Format.languages(languages)
17
+ elsif (currency_codes = PartialMatch.languages(term)).any?
18
+ languages = Data.countries_by_languages(currency_codes)
19
+ Format.languages(languages, partial_match: true)
20
+ else
21
+ Atlasq.failed!
22
+ "Unknown language: #{term}"
23
+ end
24
+ end.join("\n\n")
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -5,6 +5,7 @@ require_relative "base"
5
5
  module Atlasq
6
6
  module Command
7
7
  class Money < Base
8
+ # @return [String]
8
9
  def content
9
10
  if search_terms.empty?
10
11
  currencies = Data.all_currencies
@@ -5,6 +5,7 @@ require_relative "base"
5
5
  module Atlasq
6
6
  module Command
7
7
  class Region < Base
8
+ # @return [String]
8
9
  def content
9
10
  if search_terms.empty?
10
11
  subregions = Data.all_subregions
@@ -4,6 +4,7 @@ module Atlasq
4
4
  module Command
5
5
  autoload :Any, "atlasq/command/any"
6
6
  autoload :Country, "atlasq/command/country"
7
+ autoload :Language, "atlasq/command/language"
7
8
  autoload :Region, "atlasq/command/region"
8
9
  autoload :Money, "atlasq/command/money"
9
10
  autoload :Version, "atlasq/command/version"
@@ -14,6 +15,8 @@ module Atlasq
14
15
  # @param args [Array<String>]
15
16
  Options = Struct.new(:command, :args, keyword_init: true)
16
17
 
18
+ # @param args [Array<String>] command line arguments
19
+ # @return [Atlasq::Command::Options]
17
20
  def self.parse(args)
18
21
  command = parse_command(args.first)
19
22
  args.shift unless command.to_s == "Atlasq::Command::Any"
@@ -22,10 +25,14 @@ module Atlasq
22
25
  Options.new(command: command, args: args).freeze
23
26
  end
24
27
 
28
+ # @param command [String]
29
+ # @return [Atlasq::Command::Base]
25
30
  def self.parse_command(command)
26
31
  case command
27
32
  when "-c", "--country", "--countries"
28
33
  Country
34
+ when "-l", "--language", "--languages"
35
+ Language
29
36
  when "-r", "--region", "--regions"
30
37
  Region
31
38
  when "-m", "--money"
data/lib/atlasq/data.rb CHANGED
@@ -52,5 +52,26 @@ module Atlasq
52
52
  def self.all_currencies
53
53
  Cache.get("search_index/countries_by_currency.json")
54
54
  end
55
+
56
+ # @param terms [String, Array<String>] search terms
57
+ # @return [Hash<String, Array<String>>] ISO639 2 letter language code to ISO3166 2 letter country codes
58
+ def self.countries_by_languages(terms)
59
+ terms = Array(terms)
60
+ languages = Cache
61
+ .get("search_index/direct_match_language.json")
62
+ .values_at(*terms)
63
+ .compact
64
+
65
+ return if languages.empty?
66
+
67
+ Cache
68
+ .get("search_index/countries_by_language.json")
69
+ .slice(*languages)
70
+ end
71
+
72
+ # @return [Hash<String, Array<String>>] ISO639 2 letter language code to ISO3166 2 letter country codes
73
+ def self.all_languages
74
+ Cache.get("search_index/countries_by_language.json")
75
+ end
55
76
  end
56
77
  end
data/lib/atlasq/format.rb CHANGED
@@ -141,10 +141,41 @@ module Atlasq
141
141
  end
142
142
  end
143
143
 
144
+ # @param currency_code [String]
145
+ # @return [String]
144
146
  def self.one_line_currency(currency_code)
145
147
  Cache
146
148
  .get("formatted_output/one_line_currency.json")
147
149
  .fetch(currency_code)
148
150
  end
151
+
152
+ # @param languages [Hash<String, Array<String>>] 2 letter ISO639 language code to ISO3166 2 letter country codes
153
+ # @param partial_match [Boolean] defaults to false
154
+ # @return [String]
155
+ def self.languages(languages, partial_match: false)
156
+ languages = languages.to_h do |language, countries|
157
+ [
158
+ Format.one_line_language(language),
159
+ countries.map(&Format.method(:one_line_country)),
160
+ ]
161
+ end
162
+
163
+ if !partial_match && languages.size == 1
164
+ title, elements = languages.first
165
+ title = "Language: #{title}"
166
+ Format.brief_template(title: title, elements: elements)
167
+ else
168
+ title = partial_match ? "Languages (Partial Match)" : "Languages"
169
+ Format.brief_template(title: title, elements: languages)
170
+ end
171
+ end
172
+
173
+ # @param language [String] 2 letter ISO639 language code
174
+ # @return [String]
175
+ def self.one_line_language(language)
176
+ Cache
177
+ .get("formatted_output/one_line_language.json")
178
+ .fetch(language)
179
+ end
149
180
  end
150
181
  end
@@ -15,5 +15,12 @@ module Atlasq
15
15
  @currencies ||= Util::WordMap.new(index: Cache.get("search_index/partial_match_currency.json"))
16
16
  @currencies.search(term)
17
17
  end
18
+
19
+ # @param term [String]
20
+ # @return [Array<String>] 2 letter language codes (ISO639)
21
+ def self.languages(term)
22
+ @languages ||= Util::WordMap.new(index: Cache.get("search_index/partial_match_language.json"))
23
+ @languages.search(term)
24
+ end
18
25
  end
19
26
  end
data/lib/atlasq/shell.rb CHANGED
@@ -4,6 +4,7 @@ module Atlasq
4
4
  module Shell
5
5
  SKIP_PAGER = %i[usage version].freeze
6
6
 
7
+ # @param [Array<String>] command line arguments
7
8
  def self.start!(args = ARGV)
8
9
  warn "DEBUG: args: #{args}" if DEBUG
9
10
  options = Command.parse(args)
@@ -24,6 +25,9 @@ module Atlasq
24
25
 
25
26
  DEFAULT_SHELL_HEIGHT = 24
26
27
 
28
+ # @param options [Atlasq::Command::Options]
29
+ # @param content [String]
30
+ # @return [Boolean]
27
31
  def self.use_pager?(options, content)
28
32
  $stdout.tty? &&
29
33
  options.command.to_pager? &&
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Atlasq
4
- VERSION = "0.3.0"
4
+ VERSION = "0.4.0"
5
5
  end
data/lib/atlasq.rb CHANGED
@@ -18,6 +18,7 @@ module Atlasq
18
18
  @failed = true
19
19
  end
20
20
 
21
+ # @return [Boolean]
21
22
  def self.failed?
22
23
  !!@failed
23
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: atlasq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Robell
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-31 00:00:00.000000000 Z
11
+ date: 2024-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tty-pager
@@ -38,14 +38,18 @@ files:
38
38
  - cache/formatted_output/multiline_country.json
39
39
  - cache/formatted_output/one_line_country.json
40
40
  - cache/formatted_output/one_line_currency.json
41
+ - cache/formatted_output/one_line_language.json
41
42
  - cache/list/all_countries.json
42
43
  - cache/list/all_subregions.json
43
44
  - cache/search_index/countries_by_currency.json
45
+ - cache/search_index/countries_by_language.json
44
46
  - cache/search_index/countries_by_region.json
45
47
  - cache/search_index/direct_match_country.json
46
48
  - cache/search_index/direct_match_currency.json
49
+ - cache/search_index/direct_match_language.json
47
50
  - cache/search_index/partial_match_country.json
48
51
  - cache/search_index/partial_match_currency.json
52
+ - cache/search_index/partial_match_language.json
49
53
  - exe/atlasq
50
54
  - lib/atlasq.rb
51
55
  - lib/atlasq/cache.rb
@@ -54,6 +58,7 @@ files:
54
58
  - lib/atlasq/command/base.rb
55
59
  - lib/atlasq/command/country.rb
56
60
  - lib/atlasq/command/help.rb
61
+ - lib/atlasq/command/language.rb
57
62
  - lib/atlasq/command/money.rb
58
63
  - lib/atlasq/command/region.rb
59
64
  - lib/atlasq/command/usage.rb