chid 0.1.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.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +11 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +67 -0
  5. data/README.md +221 -0
  6. data/Rakefile +17 -0
  7. data/chid.gemspec +32 -0
  8. data/etc/img/stack.png +0 -0
  9. data/lib/chid.rb +100 -0
  10. data/lib/chid/chid_config.rb +127 -0
  11. data/lib/chid/currency_api.rb +69 -0
  12. data/lib/chid/github_api.rb +41 -0
  13. data/lib/chid/main.rb +112 -0
  14. data/lib/chid/news_api.rb +60 -0
  15. data/lib/chid/paginator.rb +57 -0
  16. data/lib/chid/stack_overflow_api.rb +35 -0
  17. data/lib/chid/version.rb +3 -0
  18. data/lib/chid/yandex_translate_api.rb +39 -0
  19. data/tasks/chid/config.rake +5 -0
  20. data/tasks/chid/init.rake +19 -0
  21. data/tasks/chid/start.rake +26 -0
  22. data/tasks/chid/update.rake +14 -0
  23. data/tasks/currency/convert.rake +9 -0
  24. data/tasks/currency/current.rake +11 -0
  25. data/tasks/currency/list.rake +10 -0
  26. data/tasks/github.rake +12 -0
  27. data/tasks/help.rake +8 -0
  28. data/tasks/install/node.rake +18 -0
  29. data/tasks/install/postgres.rake +18 -0
  30. data/tasks/install/rvm.rake +21 -0
  31. data/tasks/install/yadr_dotfiles.rake +26 -0
  32. data/tasks/news.rake +11 -0
  33. data/tasks/run/postgres.rake +12 -0
  34. data/tasks/stack_overflow.rake +20 -0
  35. data/tasks/tmux/config_windows.rake +21 -0
  36. data/tasks/tmux/new_session.rake +10 -0
  37. data/tasks/translate/yandex_list.rake +7 -0
  38. data/tasks/translate/yandex_translate.rake +8 -0
  39. data/tasks/update/os.rake +14 -0
  40. data/tasks/workstation/create.rake +23 -0
  41. data/tasks/workstation/destroy.rake +14 -0
  42. data/tasks/workstation/list.rake +10 -0
  43. data/tasks/workstation/open.rake +29 -0
  44. metadata +158 -0
@@ -0,0 +1,35 @@
1
+ class StackOverflowApi
2
+
3
+ Question = Struct.new(:title, :creation_date, :link) do
4
+ def summary
5
+ published_at = creation_date.nil? ? 'unkown' : creation_date.strftime("%B %d, %Y")
6
+ print "\n"
7
+ print "--- #{title} ---".blue
8
+ print "\n"
9
+ print " Posted #{published_at} by ".brown
10
+ print "\n"
11
+ print " Link: "
12
+ print "#{link}".cyan.underline
13
+ print "\n"
14
+ end
15
+ end
16
+
17
+ def self.questions(search)
18
+ uri = URI("https://api.stackexchange.com/2.2/search/advanced?order=desc&sort=activity&site=stackoverflow&q=#{search}")
19
+ response = HTTP.get(uri)
20
+ body_decoded = decode_body(response.body.to_s)
21
+ json_news = JSON.parse(body_decoded)
22
+
23
+ json_news[ 'items' ].collect do |i|
24
+ Question.new(i['title'], Time.at(i[ 'creation_date' ]), i['link'])
25
+ end
26
+
27
+ end
28
+
29
+ private
30
+ def self.decode_body(body_str)
31
+ gz = Zlib::GzipReader.new(StringIO.new(body_str))
32
+ gz.read
33
+ end
34
+
35
+ end
@@ -0,0 +1,3 @@
1
+ module Chid
2
+ VERSION = "0.1.2"
3
+ end
@@ -0,0 +1,39 @@
1
+ class YandexTranslateApi
2
+ API_TOKEN = 'trnsl.1.1.20170318T165136Z.005f29f713d3e410.1d52e55d7e9a3f125e38645215a101e743b16b98'
3
+
4
+ def self.translate(options = {})
5
+ text = options.fetch(:text, "")
6
+ from = options.fetch(:from, :en).to_sym
7
+ to = options.fetch(:to, :pt).to_sym
8
+
9
+ uri = URI("https://translate.yandex.net/api/v1.5/tr.json/translate?lang=#{from}-#{to}&key=#{API_TOKEN}&text=#{text}")
10
+
11
+ response = HTTP.get(uri)
12
+ json = JSON.parse response
13
+ json['text'].first
14
+ end
15
+
16
+ def self.list
17
+ puts "Language Code Language Code".green
18
+ puts "Azerbaijan az Maltese mt"
19
+ puts "Albanian sq Macedonian mk"
20
+ puts "Amharic am Maori mi"
21
+ puts "English en Marathi mr"
22
+ puts "Armenian hy Mongolian mn"
23
+ puts "Afrikaans af German de"
24
+ puts "Bashkir ba Norwegian no"
25
+ puts "Bulgarian bg Persian fa"
26
+ puts "Bosnian bs Polish pl"
27
+ puts "Welsh cy Portuguese pt"
28
+ puts "Vietnamese vi Russian ru"
29
+ puts "Italian it Telugu te"
30
+ puts "Spanish es Udmurt udm"
31
+ puts "Chinese zh French fr"
32
+ puts "Xhosa xh Croatian hr"
33
+ puts "Latin la Czech cs"
34
+ puts "Latvian lv Swedish sv"
35
+ puts "Lithuanian lt Scottish gd"
36
+ puts "Luxembourgish lb Estonian et"
37
+ end
38
+
39
+ end
@@ -0,0 +1,5 @@
1
+ desc 'Open the .chid.config file'
2
+ task :chid_config do
3
+ puts "\nOpening the .chid.config..."
4
+ system("vim #{@chid_config.chid_config_path}")
5
+ end
@@ -0,0 +1,19 @@
1
+ desc 'Initial configuration for Chid app'
2
+ task :init do
3
+ print "Chid is an assistant to help your day-to-day life.\n\n"
4
+ print "You can use it as "
5
+ print "a terminal App ".green
6
+ print "or through "
7
+ print "Rake Tasks".green
8
+ print", having a greater interaction with it.\n\n"
9
+
10
+ print "To initialize the app you can run the command: "
11
+ print "$ rake\n".blue
12
+ print "Or the command: "
13
+ print "$ chid\n".blue
14
+ print "But the command "
15
+ print "$ chid ".blue
16
+ print "will work after you reload your profile\n"
17
+
18
+ @chid_config.configure
19
+ end
@@ -0,0 +1,26 @@
1
+ desc 'Start the Chid app'
2
+ task :chid do
3
+ prompt = TTY::Prompt.new(help_color: :green)
4
+ confirm_install = -> (action, &block) {
5
+ matched = /^install:(.*)/.match(action)
6
+ return block.() unless matched
7
+
8
+ action_name = matched.captures.first
9
+ if prompt.yes?("Can I install the #{action_name}?")
10
+ block.()
11
+ else
12
+ puts "\nNo problem. What do you need?"
13
+ end
14
+ }
15
+
16
+ Main.new(@chid_config).init do |action, args|
17
+ rake_task = Rake::Task[action]
18
+ task_args = Rake::TaskArguments.new(rake_task.arg_names, args)
19
+
20
+ confirm_install.(action) do
21
+ rake_task.execute(task_args)
22
+ end
23
+
24
+ puts "\nDone! What else?"
25
+ end
26
+ end
@@ -0,0 +1,14 @@
1
+ desc 'Update Chid'
2
+ task :update do
3
+ puts 'Updating Chid...'
4
+ path = "#{@chid_config.chid_rake_path}"
5
+ Dir.chdir path do |p|
6
+ system('git pull --rebase')
7
+ end
8
+
9
+ @chid_config.configure
10
+
11
+ puts "\nChid updated successfully"
12
+ end
13
+
14
+
@@ -0,0 +1,9 @@
1
+ namespace :currency do
2
+
3
+ desc 'You can convert an amount between types. Eg.: convert 10 USD to BRL'
4
+ task :convert, [:amount, :from, :to] do |t, args|
5
+ amount = CurrencyApi.convert(args)
6
+ puts "The converted #{args[:from]} to #{args[:to]} is: #{amount}"
7
+ end
8
+
9
+ end
@@ -0,0 +1,11 @@
1
+ namespace :currency do
2
+
3
+ desc 'Get the current conversion for USD to BRL'
4
+ task :current do
5
+ currency = CurrencyApi.convert()
6
+ puts "USD is #{currency} BRL"
7
+ end
8
+
9
+ end
10
+
11
+
@@ -0,0 +1,10 @@
1
+ namespace :currency do
2
+
3
+ desc 'Show all types of currencies'
4
+ task :list do
5
+ types = CurrencyApi::SOURCES
6
+ puts "Types available:\n\n"
7
+ types.each { |k, v| puts "#{k} => #{v}"}
8
+ end
9
+
10
+ end
@@ -0,0 +1,12 @@
1
+ desc 'List all repositories'
2
+ task :github, [:search] do |t, args|
3
+ search_expression = args[:search]
4
+
5
+ repositories = GitHubApi.repositories(search_expression)
6
+
7
+ Paginator.new(repositories).paginate do |repository|
8
+ repository.summary
9
+ end
10
+ end
11
+
12
+
@@ -0,0 +1,8 @@
1
+ desc 'Show all tasks availabe'
2
+ task :help do
3
+ Dir.chdir @chid_config.chid_rake_path
4
+ system("rake -T")
5
+ puts "\nTell me what you need"
6
+ end
7
+
8
+
@@ -0,0 +1,18 @@
1
+ namespace :install do
2
+
3
+ desc 'Install Node'
4
+ task :node do
5
+ puts "\nInstalling the Node..."
6
+
7
+ @chid_config.on_linux do
8
+ system('sudo apt-get install nodejs')
9
+ end
10
+
11
+ @chid_config.on_osx do
12
+ system('brew install node')
13
+ end
14
+
15
+ puts "\nNode installed successfully"
16
+ end
17
+
18
+ end
@@ -0,0 +1,18 @@
1
+ namespace :install do
2
+
3
+ desc 'Install Postgres'
4
+ task :postgres do
5
+ puts "\nInstalling the Postgres..."
6
+
7
+ @chid_config.on_linux do
8
+ system('sudo apt-get install postgresql postgresql-contrib')
9
+ end
10
+
11
+ @chid_config.on_osx do
12
+ system('brew install postgres')
13
+ end
14
+
15
+ puts "\nPostgres installed successfully"
16
+ end
17
+
18
+ end
@@ -0,0 +1,21 @@
1
+ namespace :install do
2
+
3
+ desc 'Install RVM'
4
+ task :rvm do
5
+ puts "\nInstalling the RVM..."
6
+
7
+ @chid_config.on_linux do
8
+ system('sudo apt-add-repository -y ppa:rael-gc/rvm')
9
+ system('sudo apt-get update')
10
+ system('sudo apt-get install curl')
11
+ system('sudo apt-get install rvm')
12
+ end
13
+
14
+ @chid_config.on_osx do
15
+ system('\curl -sSL https://get.rvm.io | bash')
16
+ end
17
+
18
+ puts "\nRVM installed successfully"
19
+ end
20
+
21
+ end
@@ -0,0 +1,26 @@
1
+ namespace :install do
2
+
3
+ desc 'Install YADR Dotfiles'
4
+ task :dotfiles do
5
+ puts "\nInstalling the YADR Dotfiles..."
6
+ @chid_config.on_linux do
7
+ system('sudo apt-get update')
8
+ system('sudo apt-get install curl')
9
+ system('sudo apt-get install zsh')
10
+ system('sudo apt-get install git-core')
11
+ end
12
+
13
+ system('sh -c "`curl -fsSL https://raw.githubusercontent.com/skwp/dotfiles/master/install.sh`"')
14
+
15
+ puts 'Updating YARD...'
16
+ path = "#{@chid_config.home_path}/.yadr"
17
+ Dir.chdir path
18
+ system('git pull --rebase')
19
+ system('rake update')
20
+
21
+ puts "\nYARD Dotfiles installed successfully"
22
+ end
23
+
24
+ end
25
+
26
+
@@ -0,0 +1,11 @@
1
+ desc 'List all news'
2
+ task :news do
3
+ articles = NewsApi.articles
4
+
5
+ Paginator.new(articles).paginate do |article|
6
+ article.summary
7
+ end
8
+
9
+ end
10
+
11
+
@@ -0,0 +1,12 @@
1
+ namespace :run do
2
+
3
+ desc 'Start Postgres'
4
+ task :postgres do
5
+ @chid_config.on_osx do
6
+ system('postgres -D /usr/local/var/postgres')
7
+ end
8
+ end
9
+
10
+ end
11
+
12
+
@@ -0,0 +1,20 @@
1
+ desc 'Search questions in StackOverflow'
2
+ task :stack, [:search] do |t, args|
3
+
4
+ search_param = args[:search]
5
+
6
+ unless search_param
7
+ print "Tell me, what do you want to search?\n".blue
8
+ print "> "
9
+ search_param = STDIN.gets.strip
10
+ end
11
+
12
+ questions = StackOverflowApi.questions(search_param)
13
+
14
+ Paginator.new(questions).paginate do |question|
15
+ question.summary
16
+ end
17
+
18
+ end
19
+
20
+
@@ -0,0 +1,21 @@
1
+ desc 'Configure default windows for development'
2
+ task :tmux_config, [:name] do |t, args|
3
+ name = args.fetch(:name, 'development')
4
+ if name == 'development'
5
+ system("tmux rename-window bash")
6
+ system("tmux new-window -n app")
7
+ system("tmux new-window -n server")
8
+ elsif name == 'stant-api'
9
+ system("tmux rename-window app")
10
+ system("tmux new-window -n tests")
11
+ system("tmux new-window -n server")
12
+ system("tmux new-window -n bash")
13
+ elsif name == 'stant-traceability'
14
+ system("tmux rename-window ios-traceability")
15
+ system("tmux new-window -n ios-infrastructure")
16
+ system("tmux new-window -n ios-core")
17
+ system("tmux new-window -n bash")
18
+ end
19
+ end
20
+
21
+
@@ -0,0 +1,10 @@
1
+ desc 'Open or Create the new session for development key'
2
+ task :tmux, [:name] do |t, args|
3
+ name = args.fetch(:name, 'development')
4
+ session = system("tmux attach -t #{name}")
5
+ unless session
6
+ system("tmux new -s #{name}")
7
+ end
8
+ end
9
+
10
+
@@ -0,0 +1,7 @@
1
+ namespace :translate do
2
+ desc 'Yandex translate list'
3
+ task :yandex_list do
4
+ puts "All options availale are:".blue
5
+ YandexTranslateApi.list
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ namespace :translate do
2
+ desc 'Yandex translate'
3
+ task :yandex_translate, [:text, :from, :to] do |t, args|
4
+ puts "Translating..."
5
+ text = YandexTranslateApi.translate(args)
6
+ puts "#{text}".green
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ namespace :update do
2
+
3
+ desc 'Update os'
4
+ task :os do
5
+ @chid_config.on_linux do
6
+ system('sudo apt-get update && sudo apt-get -y upgrade')
7
+ end
8
+
9
+ @chid_config.on_osx do
10
+ puts "Sorry I can't update the OSx"
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,23 @@
1
+ namespace :workstation do
2
+
3
+ desc 'Create a new workstation'
4
+ task :create do
5
+ prompt = TTY::Prompt.new
6
+
7
+ puts 'Tell me the name of the new Workstation'
8
+ print "> "
9
+ workstation_name = STDIN.gets.strip
10
+
11
+ @chid_config.on_osx do
12
+ choices = %x{ls /Applications}.strip
13
+ choices = choices
14
+ .gsub(/\n/, ' - ')
15
+ .gsub('.app', '')
16
+ .split(' - ')
17
+ result = prompt.multi_select('Select all apps for that workstation?', choices)
18
+ @chid_config.create_workstation(workstation_name, result)
19
+ puts "\n#{workstation_name} Workstation was created!"
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,14 @@
1
+ namespace :workstation do
2
+
3
+ desc 'Destroy workstations'
4
+ task :destroy do
5
+ prompt = TTY::Prompt.new
6
+ workstations = @chid_config.all_workstations
7
+ choices = workstations.keys
8
+ result = prompt.multi_select('Select all workstations to destroy', choices)
9
+
10
+ @chid_config.destroy_workstations(result)
11
+ puts "\nWorkstations removed!"
12
+ end
13
+
14
+ end