App-Open-Source-per-iPhone-.../.github/osia_convert.rb

235 lines
5.0 KiB
Ruby
Raw Normal View History

2016-05-16 19:29:04 +02:00
require_relative 'osia_helper'
require 'date'
2016-05-11 16:22:10 +02:00
2016-05-13 17:50:39 +02:00
README = 'README.md'
2016-05-11 16:22:10 +02:00
2016-05-13 18:22:57 +02:00
ARCHIVE = 'ARCHIVE.md'
ARCHIVE_TAG = 'archive'
def apps_archived(apps)
a = apps.select {|a| a['tags'] != nil }.select {|b| b['tags'].include?ARCHIVE_TAG}
a.sort_by { |k, v| k['title'] }
end
2016-05-11 16:22:10 +02:00
def apps_for_cat(apps, id)
2016-05-13 18:22:57 +02:00
f = apps.select do |a|
tags = a['tags']
if tags.nil?
true
else
!(tags.include? ARCHIVE_TAG)
end
end
s = f.select do |a|
2016-05-11 17:07:03 +02:00
cat = a['category']
cat.class == Array ? cat.include?(id) : (cat == id)
end
2016-06-12 06:06:12 +02:00
s.sort_by { |k, v| k['title'].downcase }
2016-05-11 17:07:03 +02:00
end
def output_apps(apps)
2016-05-11 16:22:10 +02:00
o = ''
2016-05-11 17:07:03 +02:00
apps.each do |a|
2016-05-11 16:22:10 +02:00
name = a['title']
link = a['source']
itunes = a['itunes']
2016-05-11 17:19:04 +02:00
homepage = a['homepage']
2016-05-11 16:22:10 +02:00
desc = a['description']
tags = a['tags']
stars = a['stars']
lang = a['lang']
2016-07-28 17:15:37 +02:00
date_added = a['date_added']
screenshots = a['screenshots']
license = a['license']
2016-05-11 16:22:10 +02:00
o << "- #{name}"
if desc.nil?
o << ' '
else
o << ": #{desc} " if desc.size>0
end
2016-07-28 17:15:37 +02:00
unless itunes.nil?
o << "[` App Store`](#{itunes}) "
end
2016-05-11 16:22:10 +02:00
unless tags.nil?
2016-07-17 03:43:07 +02:00
o << '`Swift` ' if tags.include? 'swift'
2016-05-11 16:22:10 +02:00
end
unless lang.nil?
o << output_flag(lang)
end
unless stars.nil?
o << output_stars(stars)
end
o << "\n"
2016-07-28 17:15:37 +02:00
show_details = !homepage.nil? || !screenshots.nil? || !license.nil? || !date_added.nil?
if (!show_details)
o << " - #{link}\n"
else
details = " <details><summary>#{link}</summary>\n"
details_list = []
unless date_added.nil?
date = DateTime.parse(date_added)
formatted_date = date.strftime "%B %e, %Y"
details_list.push "Added #{formatted_date}"
end
2016-07-28 22:42:39 +02:00
unless license.nil?
license_display = license=='other'? "`#{license}`" : "[`#{license}`](http://choosealicense.com/licenses/#{license}/)"
details_list.push "License: #{license_display}"
2016-07-28 17:15:37 +02:00
end
unless homepage.nil?
details_list.push homepage
end
details << ' '
details << details_list[0]
2016-07-28 21:19:06 +02:00
details_list[1..-1].each { |x| details << "<br> #{x}" }
2016-07-28 17:15:37 +02:00
unless screenshots.nil?
screenshots.each_with_index do |s, i|
2016-07-28 21:19:06 +02:00
details << "<br> ![#{name} image #{i+1}](#{screenshots[i]})" unless screenshots.nil?
2016-07-28 17:15:37 +02:00
end
end
details << "\n </details>\n"
o << details
end
2016-05-11 16:22:10 +02:00
end
o
end
2016-05-16 19:29:04 +02:00
def output_flag(lang)
case lang
2016-05-31 16:22:29 +02:00
when 'ger'
'🇩🇪'
2016-05-16 19:29:04 +02:00
when 'jpn'
'🇯🇵'
when 'ltz'
'🇱🇺'
2016-05-20 17:28:20 +02:00
when 'nld'
'🇳🇱'
2016-05-16 19:29:04 +02:00
when 'por'
'🇵🇹'
2016-05-16 19:29:04 +02:00
when 'spa'
'🇪🇸'
when 'zho'
'🇨🇳'
else
''
end
end
def output_stars(number)
case number
when 100...200
'🔥'
when 200...500
'🔥🔥'
when 500...1000
'🔥🔥🔥'
when 1000...2000
'🔥🔥🔥🔥'
when 2000...100000
'🔥🔥🔥🔥🔥'
else
''
end
end
2016-05-13 17:50:39 +02:00
def write_readme(j)
t = j['title']
desc = j['description']
h = j['header']
f = j['footer']
cats = j['categories']
apps = j['projects']
2016-05-11 16:22:10 +02:00
2016-05-13 17:50:39 +02:00
date = DateTime.now
date_display = date.strftime "%B %e, %Y"
2016-05-11 16:22:10 +02:00
2016-05-13 17:50:39 +02:00
output = '# ' + t
output << "\n\n"
output << desc
output << "\n\nA collaborative list of **#{apps.count}** open-source `iOS`, `watchOS` and `tvOS` apps, your [contribution](https://github.com/dkhamsing/open-source-ios-apps/blob/master/.github/CONTRIBUTING.md) is welcome :smile: "
2016-07-28 17:54:35 +02:00
output << "(updated *#{date_display}*)."
2016-05-13 17:50:39 +02:00
output << "\n \nJump to \n \n"
2016-05-13 17:50:39 +02:00
cats.each do |c|
2016-06-06 18:00:38 +02:00
title = c['title']
m = title.match /\[.*?\]/
title = m[0].sub('[', '').sub(']', '') unless m.nil?
temp = "#{' ' unless c['parent']==nil }- [#{title}](\##{c['id']}) \n"
2016-05-13 17:50:39 +02:00
output << temp
end
2016-05-11 16:22:10 +02:00
2016-07-29 17:18:19 +02:00
output << "- [Thanks](#thanks)\n"
output << "- [Contact](#contact)\n"
2016-05-13 17:50:39 +02:00
output << "\n"
output << h
output << "\n"
2016-05-11 16:22:10 +02:00
2016-05-13 17:50:39 +02:00
cats.each do |c|
temp = "\n#\##{'#' unless c['parent']==nil } #{c['title']} \n \n"
2016-05-11 16:22:10 +02:00
2016-05-13 17:50:39 +02:00
d = c['description']
temp << "#{d}" unless d.nil?
2016-05-11 19:53:59 +02:00
2016-05-13 17:50:39 +02:00
temp << "[back to top](#readme) \n \n"
output << temp
2016-05-11 19:53:59 +02:00
2016-05-13 17:50:39 +02:00
cat_apps = apps_for_cat(apps, c['id'])
output << output_apps(cat_apps)
end
output << "\n"
output << f
2016-05-11 16:22:10 +02:00
2016-05-13 17:50:39 +02:00
File.open(README, 'w') { |f| f.write output }
puts "wrote #{README}"
2016-05-11 16:22:10 +02:00
end
2016-05-13 18:22:57 +02:00
def write_archive(j)
t = j['title']
desc = "This is an archive of the [main list](https://github.com/dkhamsing/open-source-ios-apps) for projects that are no longer maintained / old.\n\n"
f = "## Contact\n\n- [github.com/dkhamsing](https://github.com/dkhamsing)\n- [twitter.com/dkhamsing](https://twitter.com/dkhamsing)\n"
apps = j['projects']
archived = apps_archived apps
output = "\# #{t} Archive\n\n"
output << desc
archived.each do |a|
t = a['title']
s = a['source']
output << "- #{t} #{s}\n"
# output <<
end
output << "\n"
output << f
file = ARCHIVE
File.open(file, 'w') { |f| f.write output }
puts "wrote #{file}"
end
2016-05-16 19:29:04 +02:00
j = get_json
2016-05-11 16:22:10 +02:00
2016-05-13 17:50:39 +02:00
write_readme(j)
2016-05-13 18:22:57 +02:00
write_archive(j)