├── README.md ├── contributing.md ├── create_dummy.rb └── dummy.rb /README.md: -------------------------------------------------------------------------------- 1 | # Awesome Rails Gem zh-CN [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome) 2 | Awesome Rails Gem 中文版 3 | 4 | 熟悉大牛们写的 gem,不用重复造轮子,将更多的精力放到更有意义的事情上。 5 | 6 | * [目录](#目录) 7 | * [用户](#用户) 8 | * [模型](#模型) 9 | * [插件](#插件) 10 | * [API](#api) 11 | * [邮件](#邮件) 12 | * [文件上传](#文件上传) 13 | * [搜索](#搜索) 14 | * [定时任务](#定时任务) 15 | * [视图](#视图) 16 | * [环境变量](#环境变量) 17 | * [后台管理](#后台管理) 18 | * [日志](#日志) 19 | * [调试](#调试) 20 | * [代码风格](#代码风格) 21 | * [测试](#测试) 22 | * [安全](#安全) 23 | * [生产](#生产) 24 | * [错误日志](#错误日志) 25 | * [资源管道](#资源管道) 26 | 27 | ## 用户 28 | 29 | ### 认证 30 | * [Devise](https://github.com/plataformatec/devise/) - 用于快速构建用户功能,如:注册,登陆,个人设置,找回密码... 31 | * [Knock](https://github.com/nsarno/knock) - 符合 JWT (JSON Web Token) 规范的认证 API 32 | * [Clearance](https://github.com/thoughtbot/clearance) - 基于邮箱密码认证 33 | * [Devise token auth](https://github.com/lynndylanhurley/devise_token_auth) - 基于 Token 认证的 JSON API 34 | 35 | ### 授权 36 | * [Pundit](https://github.com/elabs/pundit) - Pundit 提供一系列方法来扩展 Ruby 的基本类和面相对象的设计模式,用以构建简单、强壮、可伸缩的认证系统 37 | * [cancancan](https://github.com/CanCanCommunity/cancancan) - 扩展 CanCan,可以规定某个用户拥有哪些资源,所有权限都定义在一个单独的地方( Ability 类) 38 | * [rolify](https://github.com/RolifyCommunity/rolify) - 角色管理 39 | * [acl9](https://github.com/be9/acl9/) - 基于角色的认证系统,并且提供简洁的 DSL 40 | 41 | 42 | ### Omniauth 43 | * [omniauth-facebook](https://github.com/mkdynamic/omniauth-facebook) 44 | * [omniauth-google-oauth2](https://github.com/zquestz/omniauth-google-oauth2) 45 | * [omniauth-weibo-oauth2](https://github.com/beenhero/omniauth-weibo-oauth2) 46 | * [omniauth-twitter](https://github.com/arunagw/omniauth-twitter) 47 | * [omniauth-github](https://github.com/intridea/omniauth-github) 48 | * [omniauth-linkedin-oauth2](https://github.com/decioferreira/omniauth-linkedin-oauth2) 49 | 50 | ## 模型 51 | * [Enumerize](https://github.com/brainspec/enumerize) - 适用枚举类型的属性,支持 i18n 、activerecord、mongoid,并可以集成到 Simple Form 52 | * [counter_culture](https://github.com/magnusvk/counter_culture) - 计数缓存 53 | * [custom_counter_cache](https://github.com/cedric/custom_counter_cache) - 简单的自定义技术缓存,可以在 model间共用 54 | * [Sequenced](https://github.com/djreimer/sequenced) - 管理 排序性 id 的 gem 55 | * [FriendlyId](https://github.com/norman/friendly_id) - URL 友好的 ID 56 | * [AASM](https://github.com/aasm/aasm) - 状态机 57 | * [PaperTrail](https://github.com/airblade/paper_trail) - 记录版本、审计用的,记录数据的变化 58 | * [paranoia](https://github.com/rubysherpas/paranoia) - 假删除 59 | * [Validates](https://github.com/kaize/validates) - 提供一系列有用的自定义验证,包括Email, Url, Slug, Money, Ip, AssociationLength, AbsolutePath, UriComponent, Color, Ean 60 | * [globalize](https://github.com/globalize/globalize) - 数据翻译中的 i18n 库 61 | * [deep_cloneable](https://github.com/moiristo/deep_cloneable) - 深度拷贝、支持关系拷贝、可选拷贝 62 | * [social_shares](https://github.com/Timrael/social_shares) - 检查 url 在社交网络中的共享次数 63 | * [public_activity](https://github.com/chaps-io/public_activity) - 活动追踪,类似 github的 Public Activity 64 | * [goldiloader](https://github.com/salsify/goldiloader) - activerecode 预加载,用来减少数据库查询次数 65 | * Tagging 66 | * [ActsAsTaggableOn](https://github.com/mbleigh/acts-as-taggable-on) - 打标记 67 | * [closure_tree](https://github.com/mceachen/closure_tree) - 多层级标记 68 | 69 | ## 插件 70 | * [Spreadsheet](https://github.com/zdavatz/spreadsheet) - 读写 Spreadsheet 文档 71 | * [Chartkick](https://github.com/ankane/chartkick) - 用一行 ruby 代码创建漂亮的 js 图表 72 | * [kaminari](https://github.com/amatsuda/kaminari) - 很火的分页插件 73 | * [CKEditor](https://github.com/galetahub/ckeditor) - 所见即所得编辑器 74 | * [HTML::Pipeline](https://github.com/jch/html-pipeline) - html 处理器 75 | * [Slack Notifier](https://github.com/stevenosloan/slack-notifier) 给 slack 发通知 76 | * [Rails ERD](https://github.com/voormedia/rails-erd) - 生成实体关系图 77 | * [Parity](https://github.com/thoughtbot/parity) - 为 heroku 提供 shell 命令 78 | * [Airbrussh](https://github.com/mattbrictson/airbrussh) - 美化 SSHKit 和 Capistrano 的输出内容 79 | 80 | ## API 81 | * [Grape](https://github.com/ruby-grape/grape) - 提供 REST-ful APIs 82 | * [ActiveModel::Serializers](https://github.com/rails-api/active_model_serializers) - 通过配置方便生成 JSON 83 | * [Jbuilder](https://github.com/rails/jbuilder) - 提供 DSL 来定义 JSON 结构 84 | * [rest-client](https://github.com/rest-client/rest-client) - HTTP 和 REST 客户端 85 | * [has_scope](https://github.com/plataformatec/has_scope) - 在 controller 中使用named scopes 86 | * Documentation 87 | * [Grape Swagger](https://github.com/ruby-grape/grape-swagger) - 为 Grape API 自动生成文档 88 | * [Grape Swagger UI](https://github.com/swagger-api/swagger-ui) - Grape Swagger 的界面 89 | * [apiary](https://apiary.io/) - [收费]团队协作工具,一起设计、原型、文档和测试 API 90 | * [apiblueprint](https://apiblueprint.org) - API 文档 91 | 92 | ## 邮件 93 | * [letter_opener](https://github.com/ryanb/letter_opener) - 在浏览器中预览邮件,而不用真实的发送 94 | 95 | ## 文件上传 96 | * [Carrierwave](https://github.com/carrierwaveuploader/carrierwave) - 为 Rails, Sinatra 等框架负责文件上传,很流行 97 | * [carrierwave_backgrounder](https://github.com/lardawge/carrierwave_backgrounder) - 分流图片处理、并且在后台存储,用 Delayed Job, Resque, Sidekiq 等 98 | * [CarrierWave Crop](https://github.com/kirtithorat/carrierwave-crop/) - 裁剪上传的图片 99 | * [CarrierWave ImageOptimizer](https://github.com/jtescher/carrierwave-imageoptimizer) - 优化上传的图片 100 | * [remotipart](https://github.com/JangoSteve/remotipart) - Rails jQuery 上传控件 101 | * [MiniMagick](https://github.com/minimagick/minimagick) - ImageMagick/GraphicsMagick 的 ruby 包装 102 | * [fog](https://github.com/fog/fog) - 云服务管理 103 | * [refile](https://github.com/refile/refile) - 流行的上传库 104 | * [Paperclip](https://github.com/thoughtbot/paperclip) - ActiveRecord 附件管理 105 | * [Dragonfly](http://markevans.github.io/dragonfly) - on-the-fly 上传工具 106 | 107 | ## 搜索 108 | * [ransack](https://github.com/activerecord-hackery/ransack) - 可以创建简单或复杂的搜索表单 109 | * [elasticsearch-rails](https://github.com/elastic/elasticsearch-rails) - 集成 Elasticsearch 110 | * [Chewy](https://github.com/toptal/chewy) - 高度集成 Elasticsearch 111 | * [Chewy_Kiqqer](https://github.com/averell23/chewy_kiqqer) - [不再维护] 112 | * [pg_search](https://github.com/Casecommons/pg_search) - 充分利用 postgres 的优势 113 | * [sunspot](https://github.com/sunspot/sunspot) - 与 Solr 集成 114 | * [searchkick](https://github.com/ankane/searchkick) - 集成 Elasticsearch 115 | 116 | ## 定时任务 117 | * [Whenever](https://github.com/javan/whenever) - 定时任务 118 | * [Resque](https://github.com/resque/resque) - 基于 Redis 的后台延时处理任务 119 | * [Rufus-Scheduler](https://github.com/jmettraux/rufus-scheduler) - 又一个定时任务 120 | * [Delayed Job](https://github.com/collectiveidea/delayed_job) - 基于数据库的后台延时处理任务 121 | * [Sidekiq](https://github.com/mperham/sidekiq) - 后台延时处理任务 122 | * [sidetiq](https://github.com/tobiassvn/sidetiq) - Sidekiq 的循环任务 123 | * [sidekiq-cron](https://github.com/ondrejbartas/sidekiq-cron) - Sidekiq 的又一个循环任务 124 | * [sidekiq-scheduler](https://github.com/Moove-it/sidekiq-scheduler) - Sidekiq 的又一个循环任务 125 | * [Sucker Punch](https://github.com/brandonhilkert/sucker_punch) - 后台延时处理任务,不需要额外进程 126 | 127 | ## 视图 128 | * [formtastic](https://github.com/justinfrench/formtastic) - 创建表单的 DSL 129 | * [Simple Form](https://github.com/plataformatec/simple_form) - 更加灵活的表单 DSL 130 | * [Nested Form](https://github.com/ryanb/nested_form) - 级联的表单 DSL,兼容 Simple Form 131 | * [meta-tags](https://github.com/kpumuk/meta-tags) - SEO 相关的库 132 | * [active_link_to](https://github.com/comfy/active_link_to) - 根据当前 url 自动加 active 样式 133 | * [cells](https://github.com/apotonick/cells) - 把公用的 UI 写到 view models 134 | * [i18n Country Code Select](https://github.com/onomojo/i18n_country_select) - 国家代码列表 135 | * [Subdivision Select](https://github.com/cllns/subdivision_select) - 二级下拉列表,包括国家、省 136 | * [cocoon](https://github.com/nathanvda/cocoon) - 级联的表单 DSL 137 | 138 | ## 环境变量 139 | * [Config](https://github.com/railsconfig/config) - 多环境的 YAML 配置文件 140 | * [Figaro](https://github.com/laserlemon/figaro) - 针对 heroku 的配置办法 141 | * [dotenv](https://github.com/bkeepers/dotenv) - 将环境变量写到 .env 文件中 142 | * [opsworks-dotenv](https://github.com/mikamai/opsworks-dotenv) - 用 OpsWorks, Chef 和 Dotenv 配置环境变量 143 | 144 | ## 后台管理 145 | * [ActiveAdmin](http://activeadmin.info) - 后台管理框架 146 | - [active_skin](https://github.com/rstgroup/active_skin): 为 ActiveAdmin 制作的皮肤 147 | * [RailsAdmin](https://github.com/sferik/rails_admin) - 后台管理 148 | * [Typus](https://github.com/typus/typus) - 管理界面,让受信任用户管理数据 149 | * [administrate](https://github.com/thoughtbot/administrate) - 灵活的后台管理 150 | 151 | ## 日志 152 | * [Impressionist](https://github.com/charlotte-ruby/impressionist) - 记录页面访问情况,还可以为一个访问记录几次 153 | * [Ahoy](https://github.com/ankane/ahoy) - 记录访问情况,和事件 154 | * [Lograge](https://github.com/roidrage/lograge) - 改变 rails 默认的日志,使变得更好 155 | 156 | ## 调试 157 | * [byebug](https://github.com/deivid-rodriguez/byebug) - 简单易用,不依赖其他代码 158 | * [pry-byebug](https://github.com/deivid-rodriguez/pry-byebug) - 集成 Pry 与 byebug 159 | * [pry-rails](https://github.com/rweng/pry-rails) - 使用 pry 打开 rails console 160 | * [awesome_print](https://github.com/michaeldv/awesome_print) - 将 ruby 对象打印的更加漂亮 161 | * [web-console](https://github.com/rails/web-console) - 把 console 加到 rails 中 162 | * [spring](https://github.com/rails/spring) - rails 预加载 163 | * [rails-footnotes](https://github.com/josevalim/rails-footnotes) - 将调试信息显示到脚注 164 | * [g](https://github.com/jugyo/g) - [不更新] 165 | * [terminal-notifier](https://github.com/julienXX/terminal-notifier) - 发送 Mac OS X 通知 166 | * [letter_opener](https://github.com/ryanb/letter_opener) - 在浏览器中预览邮件,而不用真实的发送 167 | * [Better Errors](https://github.com/charliesome/better_errors) - 替代原生的错误页面,更加漂亮有用 168 | * [RailsPanel](https://github.com/dejan/rails_panel) - Chrome 扩展,在浏览器上更好的显示 rails 日志 169 | 170 | ## 代码风格 171 | * [RuboCop](https://github.com/bbatsov/rubocop) - 代码分析,遵循很多代码规范 172 | * [Rails Best Practice](https://github.com/railsbp/rails_best_practices) - 检查代码质量 173 | * [Metric Fu]( https://github.com/metricfu/metric_fu) - 检查代码质量 174 | * [Pronto](https://github.com/mmozuras/pronto) - 自动检查变化的代码,与 github 集成 175 | 176 | ## 测试 177 | * [rspec-rails](https://github.com/rspec/rspec-rails) - 测试框架 178 | * [Capybara](https://github.com/jnicklas/capybara) -模拟真实用户交互 测试 Web 应用,有这些驱动: 179 | - [capybara-webkit](https://github.com/thoughtbot/capybara-webkit) - 使用 QtWebkit 的 webkit 180 | - [selenium-webdriver](https://github.com/vertis/selenium-webdriver) - webdriver 支持 181 | - [poltergeist](https://github.com/teampoltergeist/poltergeist) - headless WebKit browser,使用 PhantomJS 182 | - [page-object](https://github.com/cheezy/page-object) - 创建灵活的页面对象来做 web 测试 183 | * [factory_girl](https://github.com/thoughtbot/factory_girl) - 专门用来构造模拟测试数据的,完美替代Fixture的工具 184 | * [factory_girl_rails](https://github.com/thoughtbot/factory_girl_rails) - factory_girl 集成到 Rails 185 | * [factory_factory_girl](https://github.com/st0012/factory_factory_girl) - 根据命名规则,生成 factory 文件 186 | * [Database Cleaner](https://github.com/DatabaseCleaner/database_cleaner) - 一系列清理数据库的策略 187 | * [shoulda-matchers](https://github.com/thoughtbot/shoulda-matchers) - 提供很多 matchers 来测试 Rails 的函数 188 | * [ResponseCodeMatchers](https://github.com/r7kamura/response_code_matchers) - rspec matchers 匹配 http 返回值 189 | * [SimpleCov](https://github.com/colszowka/simplecov) - 代码测试覆盖分析工具 190 | * [Timecop](https://github.com/travisjeffery/timecop) - 用来测试时间相关,可以冻结时间、时间旅行 191 | * [VCR](https://github.com/vcr/vcr) - 记录 http 的返回内容,并在以后的测试中快速准确的重现 192 | 193 | ### 安全 194 | * [brakeman](https://github.com/presidentbeef/brakeman) - 静态分析工具,检查程序的安全缺陷 195 | * [bundle-audit](https://github.com/rubysec/bundler-audit) - 检查 Bundle 的补丁等级,包括易受攻击版本和不安全的 gem 源等 196 | * [Secure Headers](https://github.com/twitter/secureheaders) - 自动设置安全相关的 headers 197 | 198 | ## 生产 199 | * [Capistrano](https://github.com/capistrano/capistrano) - 远程服务器部署工具 200 | * [Slowpoke](https://github.com/ankane/slowpoke) - Rack::Timeout 的升级版 201 | * [Rack Attack](https://github.com/kickstarter/rack-attack) - 防止恶意攻击、限制访问频率 202 | * [Responders](https://github.com/plataformatec/responders) - 一系列 responders 203 | * [production_rails](https://github.com/ankane/production_rails) - Rails Best practices,一系列 Gem 204 | * [Mina](https://github.com/mina-deploy/mina) - 快速部署、服务器自动化工具 205 | 206 | ## 错误日志 207 | * [Rollbar](https://github.com/rollbar/rollbar-gem) - 记录错误日志并汇总到 Rollbar 208 | * [Airbrake](https://github.com/airbrake/airbrake) - 与 Airbrake 集成 209 | * [Errbit](https://github.com/errbit/errbit) - 兼容 Airbrake,开源 210 | 211 | ## 资源管道 212 | * [Alaska](https://github.com/mavenlink/alaska) - ExecJS 运行时保持与 nodejs 连接,加速 coffeescript 的编译和部署 213 | 214 | ## 贡献 215 | 216 | 欢迎大家贡献代码,请先阅读 [贡献指南](contributing.md) 。 217 | 218 | -------------------------------------------------------------------------------- /contributing.md: -------------------------------------------------------------------------------- 1 | # Contribution Guidelines 2 | 3 | * Use the following format: `[LIBRARY](LINK) - DESCRIPTION.` 4 | * The link should be the name of the Gem for Rails. 5 | * Add one link per Pull-Request. 6 | * Keep descriptions concise, clear and simple, and end them with a period / stop. 7 | * New categories, or improvements to the existing ones are also welcome. 8 | * Make sure your text editor is set to remove trailing whitespace. 9 | 10 | ## Quality standard 11 | 12 | To stay on the list, projects should follow these quality standards: 13 | 14 | * Generally useful to the community. 15 | * Actively maintained (even if that just means take care of open issues). 16 | * Stable. 17 | * Documented. 18 | * Tests. -------------------------------------------------------------------------------- /create_dummy.rb: -------------------------------------------------------------------------------- 1 | # The goal is to make github repo as ruby category 2 | readme_line_count = File.foreach("README.md").inject(0) {|c, line| c+1} 3 | fp = File.open("dummy.rb", "w") 4 | 5 | (1..readme_line_count*2).each { |num| fp.puts("puts \"#{num}\"") } 6 | 7 | fp.close 8 | -------------------------------------------------------------------------------- /dummy.rb: -------------------------------------------------------------------------------- 1 | puts "1" 2 | puts "2" 3 | puts "3" 4 | puts "4" 5 | puts "5" 6 | puts "6" 7 | puts "7" 8 | puts "8" 9 | puts "9" 10 | puts "10" 11 | puts "11" 12 | puts "12" 13 | puts "13" 14 | puts "14" 15 | puts "15" 16 | puts "16" 17 | puts "17" 18 | puts "18" 19 | puts "19" 20 | puts "20" 21 | puts "21" 22 | puts "22" 23 | puts "23" 24 | puts "24" 25 | puts "25" 26 | puts "26" 27 | puts "27" 28 | puts "28" 29 | puts "29" 30 | puts "30" 31 | puts "31" 32 | puts "32" 33 | puts "33" 34 | puts "34" 35 | puts "35" 36 | puts "36" 37 | puts "37" 38 | puts "38" 39 | puts "39" 40 | puts "40" 41 | puts "41" 42 | puts "42" 43 | puts "43" 44 | puts "44" 45 | puts "45" 46 | puts "46" 47 | puts "47" 48 | puts "48" 49 | puts "49" 50 | puts "50" 51 | puts "51" 52 | puts "52" 53 | puts "53" 54 | puts "54" 55 | puts "55" 56 | puts "56" 57 | puts "57" 58 | puts "58" 59 | puts "59" 60 | puts "60" 61 | puts "61" 62 | puts "62" 63 | puts "63" 64 | puts "64" 65 | puts "65" 66 | puts "66" 67 | puts "67" 68 | puts "68" 69 | puts "69" 70 | puts "70" 71 | puts "71" 72 | puts "72" 73 | puts "73" 74 | puts "74" 75 | puts "75" 76 | puts "76" 77 | puts "77" 78 | puts "78" 79 | puts "79" 80 | puts "80" 81 | puts "81" 82 | puts "82" 83 | puts "83" 84 | puts "84" 85 | puts "85" 86 | puts "86" 87 | puts "87" 88 | puts "88" 89 | puts "89" 90 | puts "90" 91 | puts "91" 92 | puts "92" 93 | puts "93" 94 | puts "94" 95 | puts "95" 96 | puts "96" 97 | puts "97" 98 | puts "98" 99 | puts "99" 100 | puts "100" 101 | puts "101" 102 | puts "102" 103 | puts "103" 104 | puts "104" 105 | puts "105" 106 | puts "106" 107 | puts "107" 108 | puts "108" 109 | puts "109" 110 | puts "110" 111 | puts "111" 112 | puts "112" 113 | puts "113" 114 | puts "114" 115 | puts "115" 116 | puts "116" 117 | puts "117" 118 | puts "118" 119 | puts "119" 120 | puts "120" 121 | puts "121" 122 | puts "122" 123 | puts "123" 124 | puts "124" 125 | puts "125" 126 | puts "126" 127 | puts "127" 128 | puts "128" 129 | puts "129" 130 | puts "130" 131 | puts "131" 132 | puts "132" 133 | puts "133" 134 | puts "134" 135 | puts "135" 136 | puts "136" 137 | puts "137" 138 | puts "138" 139 | puts "139" 140 | puts "140" 141 | puts "141" 142 | puts "142" 143 | puts "143" 144 | puts "144" 145 | puts "145" 146 | puts "146" 147 | puts "147" 148 | puts "148" 149 | puts "149" 150 | puts "150" 151 | puts "151" 152 | puts "152" 153 | puts "153" 154 | puts "154" 155 | puts "155" 156 | puts "156" 157 | puts "157" 158 | puts "158" 159 | puts "159" 160 | puts "160" 161 | puts "161" 162 | puts "162" 163 | puts "163" 164 | puts "164" 165 | puts "165" 166 | puts "166" 167 | puts "167" 168 | puts "168" 169 | puts "169" 170 | puts "170" 171 | puts "171" 172 | puts "172" 173 | puts "173" 174 | puts "174" 175 | puts "175" 176 | puts "176" 177 | puts "177" 178 | puts "178" 179 | puts "179" 180 | puts "180" 181 | puts "181" 182 | puts "182" 183 | puts "183" 184 | puts "184" 185 | puts "185" 186 | puts "186" 187 | puts "187" 188 | puts "188" 189 | puts "189" 190 | puts "190" 191 | puts "191" 192 | puts "192" 193 | puts "193" 194 | puts "194" 195 | puts "195" 196 | puts "196" 197 | puts "197" 198 | puts "198" 199 | puts "199" 200 | puts "200" 201 | puts "201" 202 | puts "202" 203 | puts "203" 204 | puts "204" 205 | puts "205" 206 | puts "206" 207 | puts "207" 208 | puts "208" 209 | puts "209" 210 | puts "210" 211 | puts "211" 212 | puts "212" 213 | puts "213" 214 | puts "214" 215 | puts "215" 216 | puts "216" 217 | puts "217" 218 | puts "218" 219 | puts "219" 220 | puts "220" 221 | puts "221" 222 | puts "222" 223 | puts "223" 224 | puts "224" 225 | puts "225" 226 | puts "226" 227 | puts "227" 228 | puts "228" 229 | puts "229" 230 | puts "230" 231 | puts "231" 232 | puts "232" 233 | puts "233" 234 | puts "234" 235 | puts "235" 236 | puts "236" 237 | puts "237" 238 | puts "238" 239 | puts "239" 240 | puts "240" 241 | puts "241" 242 | puts "242" 243 | puts "243" 244 | puts "244" 245 | puts "245" 246 | puts "246" 247 | puts "247" 248 | puts "248" 249 | puts "249" 250 | puts "250" 251 | puts "251" 252 | puts "252" 253 | puts "253" 254 | puts "254" 255 | puts "255" 256 | puts "256" 257 | puts "257" 258 | puts "258" 259 | puts "259" 260 | puts "260" 261 | puts "261" 262 | puts "262" 263 | puts "263" 264 | puts "264" 265 | puts "265" 266 | puts "266" 267 | puts "267" 268 | puts "268" 269 | puts "269" 270 | puts "270" 271 | puts "271" 272 | puts "272" 273 | puts "273" 274 | puts "274" 275 | puts "275" 276 | puts "276" 277 | puts "277" 278 | puts "278" 279 | puts "279" 280 | puts "280" 281 | puts "281" 282 | puts "282" 283 | puts "283" 284 | puts "284" 285 | puts "285" 286 | puts "286" 287 | puts "287" 288 | puts "288" 289 | puts "289" 290 | puts "290" 291 | puts "291" 292 | puts "292" 293 | puts "293" 294 | puts "294" 295 | puts "295" 296 | puts "296" 297 | puts "297" 298 | puts "298" 299 | puts "299" 300 | puts "300" 301 | puts "301" 302 | puts "302" 303 | puts "303" 304 | puts "304" 305 | puts "305" 306 | puts "306" 307 | puts "307" 308 | puts "308" 309 | puts "309" 310 | puts "310" 311 | puts "311" 312 | puts "312" 313 | puts "313" 314 | puts "314" 315 | puts "315" 316 | puts "316" 317 | puts "317" 318 | puts "318" 319 | puts "319" 320 | puts "320" 321 | puts "321" 322 | puts "322" 323 | puts "323" 324 | puts "324" 325 | puts "325" 326 | puts "326" 327 | puts "327" 328 | puts "328" 329 | puts "329" 330 | puts "330" 331 | puts "331" 332 | puts "332" 333 | puts "333" 334 | puts "334" 335 | puts "335" 336 | puts "336" 337 | puts "337" 338 | puts "338" 339 | puts "339" 340 | puts "340" 341 | puts "341" 342 | puts "342" 343 | puts "343" 344 | puts "344" 345 | puts "345" 346 | puts "346" 347 | puts "347" 348 | puts "348" 349 | puts "349" 350 | puts "350" 351 | puts "351" 352 | puts "352" 353 | puts "353" 354 | puts "354" 355 | puts "355" 356 | puts "356" 357 | puts "357" 358 | puts "358" 359 | puts "359" 360 | puts "360" 361 | puts "361" 362 | puts "362" 363 | puts "363" 364 | puts "364" 365 | puts "365" 366 | puts "366" 367 | puts "367" 368 | puts "368" 369 | puts "369" 370 | puts "370" 371 | puts "371" 372 | puts "372" 373 | puts "373" 374 | puts "374" 375 | puts "375" 376 | puts "376" 377 | puts "377" 378 | puts "378" 379 | puts "379" 380 | puts "380" 381 | puts "381" 382 | puts "382" 383 | puts "383" 384 | puts "384" 385 | puts "385" 386 | puts "386" 387 | puts "387" 388 | puts "388" 389 | puts "389" 390 | puts "390" 391 | puts "391" 392 | puts "392" 393 | puts "393" 394 | puts "394" 395 | puts "395" 396 | puts "396" 397 | puts "397" 398 | puts "398" 399 | puts "399" 400 | puts "400" 401 | puts "401" 402 | puts "402" 403 | puts "403" 404 | puts "404" 405 | puts "405" 406 | puts "406" 407 | puts "407" 408 | puts "408" 409 | puts "409" 410 | puts "410" 411 | puts "411" 412 | puts "412" 413 | puts "413" 414 | puts "414" 415 | puts "415" 416 | puts "416" 417 | puts "417" 418 | puts "418" 419 | puts "419" 420 | puts "420" 421 | puts "421" 422 | puts "422" 423 | puts "423" 424 | puts "424" 425 | puts "425" 426 | puts "426" 427 | puts "427" 428 | puts "428" 429 | puts "429" 430 | puts "430" 431 | puts "431" 432 | puts "432" 433 | puts "433" 434 | puts "434" 435 | puts "435" 436 | puts "436" 437 | puts "437" 438 | puts "438" 439 | puts "439" 440 | puts "440" 441 | puts "441" 442 | puts "442" 443 | puts "443" 444 | puts "444" 445 | puts "445" 446 | puts "446" 447 | puts "447" 448 | puts "448" 449 | puts "449" 450 | puts "450" 451 | puts "451" 452 | puts "452" 453 | puts "453" 454 | puts "454" 455 | puts "455" 456 | puts "456" 457 | puts "457" 458 | puts "458" 459 | puts "459" 460 | puts "460" 461 | puts "461" 462 | puts "462" 463 | puts "463" 464 | puts "464" 465 | puts "465" 466 | puts "466" 467 | puts "467" 468 | puts "468" 469 | puts "469" 470 | puts "470" 471 | puts "471" 472 | puts "472" 473 | puts "473" 474 | puts "474" 475 | puts "475" 476 | puts "476" 477 | puts "477" 478 | puts "478" 479 | puts "479" 480 | puts "480" 481 | puts "481" 482 | puts "482" 483 | puts "483" 484 | puts "484" 485 | puts "485" 486 | puts "486" 487 | puts "487" 488 | puts "488" 489 | puts "489" 490 | puts "490" 491 | puts "491" 492 | puts "492" 493 | puts "493" 494 | puts "494" 495 | puts "495" 496 | puts "496" 497 | puts "497" 498 | puts "498" 499 | puts "499" 500 | puts "500" 501 | puts "501" 502 | puts "502" 503 | puts "503" 504 | puts "504" 505 | puts "505" 506 | puts "506" 507 | puts "507" 508 | puts "508" 509 | puts "509" 510 | puts "510" 511 | puts "511" 512 | puts "512" 513 | puts "513" 514 | puts "514" 515 | puts "515" 516 | puts "516" 517 | puts "517" 518 | puts "518" 519 | puts "519" 520 | puts "520" 521 | puts "521" 522 | puts "522" 523 | puts "523" 524 | puts "524" 525 | puts "525" 526 | puts "526" 527 | puts "527" 528 | puts "528" 529 | puts "529" 530 | puts "530" 531 | puts "531" 532 | puts "532" 533 | puts "533" 534 | puts "534" 535 | puts "535" 536 | puts "536" 537 | puts "537" 538 | puts "538" 539 | puts "539" 540 | puts "540" 541 | puts "541" 542 | puts "542" 543 | puts "543" 544 | puts "544" 545 | puts "545" 546 | puts "546" 547 | puts "547" 548 | puts "548" 549 | puts "549" 550 | puts "550" 551 | puts "551" 552 | puts "552" 553 | puts "553" 554 | puts "554" 555 | puts "555" 556 | puts "556" 557 | puts "557" 558 | puts "558" 559 | puts "559" 560 | puts "560" 561 | puts "561" 562 | puts "562" 563 | puts "563" 564 | puts "564" 565 | puts "565" 566 | puts "566" 567 | puts "567" 568 | puts "568" 569 | puts "569" 570 | puts "570" 571 | puts "571" 572 | puts "572" 573 | puts "573" 574 | puts "574" 575 | puts "575" 576 | puts "576" 577 | puts "577" 578 | puts "578" 579 | puts "579" 580 | puts "580" 581 | puts "581" 582 | puts "582" 583 | puts "583" 584 | puts "584" 585 | puts "585" 586 | puts "586" 587 | puts "587" 588 | puts "588" 589 | puts "589" 590 | puts "590" 591 | puts "591" 592 | puts "592" 593 | puts "593" 594 | puts "594" 595 | puts "595" 596 | puts "596" 597 | puts "597" 598 | puts "598" 599 | puts "599" 600 | puts "600" 601 | puts "601" 602 | puts "602" 603 | puts "603" 604 | puts "604" 605 | puts "605" 606 | puts "606" 607 | puts "607" 608 | puts "608" 609 | puts "609" 610 | puts "610" 611 | puts "611" 612 | puts "612" 613 | puts "613" 614 | puts "614" 615 | puts "615" 616 | puts "616" 617 | puts "617" 618 | puts "618" 619 | puts "619" 620 | puts "620" 621 | puts "621" 622 | puts "622" 623 | puts "623" 624 | puts "624" 625 | puts "625" 626 | puts "626" 627 | puts "627" 628 | puts "628" 629 | puts "629" 630 | puts "630" 631 | puts "631" 632 | puts "632" 633 | puts "633" 634 | puts "634" 635 | puts "635" 636 | puts "636" 637 | puts "637" 638 | puts "638" 639 | puts "639" 640 | puts "640" 641 | puts "641" 642 | puts "642" 643 | puts "643" 644 | puts "644" 645 | puts "645" 646 | puts "646" 647 | puts "647" 648 | puts "648" 649 | puts "649" 650 | puts "650" 651 | puts "651" 652 | puts "652" 653 | puts "653" 654 | puts "654" 655 | puts "655" 656 | puts "656" 657 | puts "657" 658 | puts "658" 659 | puts "659" 660 | puts "660" 661 | puts "661" 662 | puts "662" 663 | puts "663" 664 | puts "664" 665 | puts "665" 666 | puts "666" 667 | puts "667" 668 | puts "668" 669 | puts "669" 670 | puts "670" 671 | puts "671" 672 | puts "672" 673 | puts "673" 674 | puts "674" 675 | puts "675" 676 | puts "676" 677 | puts "677" 678 | puts "678" 679 | puts "679" 680 | puts "680" 681 | puts "681" 682 | puts "682" 683 | puts "683" 684 | puts "684" 685 | puts "685" 686 | puts "686" 687 | puts "687" 688 | puts "688" 689 | puts "689" 690 | puts "690" 691 | puts "691" 692 | puts "692" 693 | puts "693" 694 | puts "694" 695 | puts "695" 696 | puts "696" 697 | puts "697" 698 | puts "698" 699 | puts "699" 700 | puts "700" 701 | puts "701" 702 | puts "702" 703 | puts "703" 704 | puts "704" 705 | puts "705" 706 | puts "706" 707 | puts "707" 708 | puts "708" 709 | puts "709" 710 | puts "710" 711 | puts "711" 712 | puts "712" 713 | puts "713" 714 | puts "714" 715 | puts "715" 716 | puts "716" 717 | puts "717" 718 | puts "718" 719 | puts "719" 720 | puts "720" 721 | puts "721" 722 | puts "722" 723 | puts "723" 724 | puts "724" 725 | puts "725" 726 | puts "726" 727 | puts "727" 728 | puts "728" 729 | puts "729" 730 | puts "730" 731 | puts "731" 732 | puts "732" 733 | puts "733" 734 | puts "734" 735 | puts "735" 736 | puts "736" 737 | puts "737" 738 | puts "738" 739 | puts "739" 740 | puts "740" 741 | puts "741" 742 | puts "742" 743 | puts "743" 744 | puts "744" 745 | puts "745" 746 | puts "746" 747 | puts "747" 748 | puts "748" 749 | puts "749" 750 | puts "750" 751 | puts "751" 752 | puts "752" 753 | puts "753" 754 | puts "754" 755 | puts "755" 756 | puts "756" 757 | puts "757" 758 | puts "758" 759 | puts "759" 760 | puts "760" 761 | puts "761" 762 | puts "762" 763 | puts "763" 764 | puts "764" 765 | puts "765" 766 | puts "766" 767 | puts "767" 768 | puts "768" 769 | puts "769" 770 | puts "770" 771 | puts "771" 772 | puts "772" 773 | puts "773" 774 | puts "774" 775 | puts "775" 776 | puts "776" 777 | puts "777" 778 | puts "778" 779 | puts "779" 780 | puts "780" 781 | puts "781" 782 | puts "782" 783 | puts "783" 784 | puts "784" 785 | puts "785" 786 | puts "786" 787 | puts "787" 788 | puts "788" 789 | puts "789" 790 | puts "790" 791 | puts "791" 792 | puts "792" 793 | puts "793" 794 | puts "794" 795 | puts "795" 796 | puts "796" 797 | puts "797" 798 | puts "798" 799 | puts "799" 800 | puts "800" 801 | puts "801" 802 | puts "802" 803 | puts "803" 804 | puts "804" 805 | puts "805" 806 | puts "806" 807 | puts "807" 808 | puts "808" 809 | puts "809" 810 | puts "810" 811 | puts "811" 812 | puts "812" 813 | puts "813" 814 | puts "814" 815 | puts "815" 816 | puts "816" 817 | puts "817" 818 | puts "818" 819 | puts "819" 820 | puts "820" 821 | puts "821" 822 | puts "822" 823 | puts "823" 824 | puts "824" 825 | --------------------------------------------------------------------------------