{ "cells": [ { "cell_type": "markdown", "metadata": { "toc": "true" }, "source": [ "# Table of Contents\n", "

1  repl
2  比較
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# repl\n", "read execute print loop\n", "\n", "```ruby\n", "require 'optparse'\n", "\n", "opt = OptionParser.new\n", "opt.on('-a', '--add', 'add an item') { puts 'Added' }\n", "opt.on('-d', '--del', 'delete an item') { puts 'Deleted' }\n", "opt.parse(ARGV)\n", "```\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#!/usr/bin/ruby \n", "require 'optparse'\n", "\n", "options = {:name => nil}\n", "\n", "parser = OptionParser.new do|opts|\n", " opts.on('-n', '--name name', 'Give your own name') do |name|\n", " options[:name] = name;\n", " end\n", "\n", " opts.on('-h', '--help', 'Displays Help') do\n", " puts opts\n", " exit\n", " end\n", "end\n", "\n", "parser.parse!\n", "\n", "sayHello = 'Hello ' + options[:name]\n", "\n", "puts sayHello" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Could not find command \"kernel\".\n" ] } ], "source": [ "require 'thor'\n", "\n", "class MyCLI < Thor\n", " desc \"hello NAME\", \"say hello to NAME\"\n", " def hello(name)\n", " puts \"Hello #{name}\"\n", " end\n", "end\n", "\n", "\n", "MyCLI.start(ARGV)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "ename": "LoadError", "evalue": "cannot load such file -- hanami/cli", "output_type": "error", "traceback": [ "\u001b[31mLoadError\u001b[0m: cannot load such file -- hanami/cli", "\u001b[37m/usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:55:in `require'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:55:in `require'\u001b[0m", "\u001b[37m(pry):28:in `
'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:355:in `eval'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:355:in `evaluate_ruby'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:323:in `handle_line'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:243:in `block (2 levels) in eval'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:242:in `catch'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:242:in `block in eval'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:241:in `catch'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:241:in `eval'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/iruby-0.3/lib/iruby/backend.rb:66:in `eval'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run'\u001b[0m", "\u001b[37m/usr/local/lib/ruby/gems/2.2.0/gems/iruby-0.3/bin/iruby:5:in `'\u001b[0m", "\u001b[37m/usr/local/bin/iruby:23:in `load'\u001b[0m", "\u001b[37m/usr/local/bin/iruby:23:in `
'\u001b[0m" ] } ], "source": [ "#!/usr/bin/env ruby \n", "require \"bundler/setup\"\n", "require 'hanami/cli'\n", "\n", "module Foo\n", " module CLI\n", " module Commands\n", " extend Hanami::CLI::Registry\n", "\n", " class Greet < Hanami::CLI::Command\n", "\targument :name, required: true, desc: \"The name of the person to greet\"\n", "\n", "\tdef call(name:, **)\n", " result = \"Hello #{name}\"\n", "\n", " puts result\n", "\tend\n", " end\n", "\n", " register \"hello\", Greet\n", " end\n", " end\n", "end\n", "\n", "Hanami::CLI.new(Foo::CLI::Commands).call" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 比較\n", ".コード量においてはthorが最も少なく簡潔で分かりやすい.\n", "\n", ".optparse及びhanamiではヘルプを自作する必要があるが,thorではその必要がなくruby thor.rbとだけ入力するとヘルプを表示する.\n", "\n", ".ruby optparse.rbと入力するとエラーが表示されるが,ruby hanami.rbでは使用可能なコマンドの一覧が表示される.\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Ruby 2.2.2", "language": "ruby", "name": "ruby" }, "language_info": { "file_extension": ".rb", "mimetype": "application/x-ruby", "name": "ruby", "version": "2.2.2" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "toc": { "colors": { "hover_highlight": "#DAA520", "navigate_num": "#000000", "navigate_text": "#333333", "running_highlight": "#FF0000", "selected_highlight": "#FFD700", "sidebar_border": "#EEEEEE", "wrapper_background": "#FFFFFF" }, "moveMenuLeft": true, "nav_menu": { "height": "47px", "width": "252px" }, "navigate_menu": true, "number_sections": true, "sideBar": true, "threshold": 4, "toc_cell": true, "toc_section_display": "block", "toc_window_display": true, "widenNotebook": false } }, "nbformat": 4, "nbformat_minor": 2 }