Ruby
made by https://0x3d.site
GitHub - vifreefly/kimuraframework: Kimurai is a modern web scraping framework written in Ruby which works out of box with Headless Chromium/Firefox, PhantomJS, or simple HTTP requests and allows to scrape and interact with JavaScript rendered websitesKimurai is a modern web scraping framework written in Ruby which works out of box with Headless Chromium/Firefox, PhantomJS, or simple HTTP requests and allows to scrape and interact with JavaScrip...
Visit Site
GitHub - vifreefly/kimuraframework: Kimurai is a modern web scraping framework written in Ruby which works out of box with Headless Chromium/Firefox, PhantomJS, or simple HTTP requests and allows to scrape and interact with JavaScript rendered websites
Kimurai
UPD. I will soon have a time to work on issues for current 1.4 version and also plan to release new 2.0 version with https://github.com/twalpole/apparition engine.
Kimurai is a modern web scraping framework written in Ruby which works out of box with Headless Chromium/Firefox, PhantomJS, or simple HTTP requests and allows to scrape and interact with JavaScript rendered websites.
Kimurai based on well-known Capybara and Nokogiri gems, so you don't have to learn anything new. Lets see:
# github_spider.rb
require 'kimurai'
class GithubSpider < Kimurai::Base
@name = "github_spider"
@engine = :selenium_chrome
@start_urls = ["https://github.com/search?q=Ruby%20Web%20Scraping"]
@config = {
user_agent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36",
before_request: { delay: 4..7 }
}
def parse(response, url:, data: {})
response.xpath("//ul[@class='repo-list']/div//h3/a").each do |a|
request_to :parse_repo_page, url: absolute_url(a[:href], base: url)
end
if next_page = response.at_xpath("//a[@class='next_page']")
request_to :parse, url: absolute_url(next_page[:href], base: url)
end
end
def parse_repo_page(response, url:, data: {})
item = {}
item[:owner] = response.xpath("//h1//a[@rel='author']").text
item[:repo_name] = response.xpath("//h1/strong[@itemprop='name']/a").text
item[:repo_url] = url
item[:description] = response.xpath("//span[@itemprop='about']").text.squish
item[:tags] = response.xpath("//div[@id='topics-list-container']/div/a").map { |a| a.text.squish }
item[:watch_count] = response.xpath("//ul[@class='pagehead-actions']/li[contains(., 'Watch')]/a[2]").text.squish
item[:star_count] = response.xpath("//ul[@class='pagehead-actions']/li[contains(., 'Star')]/a[2]").text.squish
item[:fork_count] = response.xpath("//ul[@class='pagehead-actions']/li[contains(., 'Fork')]/a[2]").text.squish
item[:last_commit] = response.xpath("//span[@itemprop='dateModified']/*").text
save_to "results.json", item, format: :pretty_json
end
end
GithubSpider.crawl!
I, [2018-08-22 13:08:03 +0400#15477] [M: 47377500980720] INFO -- github_spider: Spider: started: github_spider
D, [2018-08-22 13:08:03 +0400#15477] [M: 47377500980720] DEBUG -- github_spider: BrowserBuilder (selenium_chrome): created browser instance
D, [2018-08-22 13:08:03 +0400#15477] [M: 47377500980720] DEBUG -- github_spider: BrowserBuilder (selenium_chrome): enabled `browser before_request delay`
D, [2018-08-22 13:08:03 +0400#15477] [M: 47377500980720] DEBUG -- github_spider: Browser: sleep 7 seconds before request...
D, [2018-08-22 13:08:10 +0400#15477] [M: 47377500980720] DEBUG -- github_spider: BrowserBuilder (selenium_chrome): enabled custom user-agent
D, [2018-08-22 13:08:10 +0400#15477] [M: 47377500980720] DEBUG -- github_spider: BrowserBuilder (selenium_chrome): enabled native headless_mode
I, [2018-08-22 13:08:10 +0400#15477] [M: 47377500980720] INFO -- github_spider: Browser: started get request to: https://github.com/search?q=Ruby%20Web%20Scraping
I, [2018-08-22 13:08:26 +0400#15477] [M: 47377500980720] INFO -- github_spider: Browser: finished get request to: https://github.com/search?q=Ruby%20Web%20Scraping
I, [2018-08-22 13:08:26 +0400#15477] [M: 47377500980720] INFO -- github_spider: Info: visits: requests: 1, responses: 1
D, [2018-08-22 13:08:27 +0400#15477] [M: 47377500980720] DEBUG -- github_spider: Browser: driver.current_memory: 107968
D, [2018-08-22 13:08:27 +0400#15477] [M: 47377500980720] DEBUG -- github_spider: Browser: sleep 5 seconds before request...
I, [2018-08-22 13:08:32 +0400#15477] [M: 47377500980720] INFO -- github_spider: Browser: started get request to: https://github.com/lorien/awesome-web-scraping
I, [2018-08-22 13:08:33 +0400#15477] [M: 47377500980720] INFO -- github_spider: Browser: finished get request to: https://github.com/lorien/awesome-web-scraping
I, [2018-08-22 13:08:33 +0400#15477] [M: 47377500980720] INFO -- github_spider: Info: visits: requests: 2, responses: 2
D, [2018-08-22 13:08:33 +0400#15477] [M: 47377500980720] DEBUG -- github_spider: Browser: driver.current_memory: 212542
D, [2018-08-22 13:08:33 +0400#15477] [M: 47377500980720] DEBUG -- github_spider: Browser: sleep 4 seconds before request...
I, [2018-08-22 13:08:37 +0400#15477] [M: 47377500980720] INFO -- github_spider: Browser: started get request to: https://github.com/jaimeiniesta/metainspector
...
I, [2018-08-22 13:23:07 +0400#15477] [M: 47377500980720] INFO -- github_spider: Browser: started get request to: https://github.com/preston/idclight
I, [2018-08-22 13:23:08 +0400#15477] [M: 47377500980720] INFO -- github_spider: Browser: finished get request to: https://github.com/preston/idclight
I, [2018-08-22 13:23:08 +0400#15477] [M: 47377500980720] INFO -- github_spider: Info: visits: requests: 140, responses: 140
D, [2018-08-22 13:23:08 +0400#15477] [M: 47377500980720] DEBUG -- github_spider: Browser: driver.current_memory: 204198
I, [2018-08-22 13:23:08 +0400#15477] [M: 47377500980720] INFO -- github_spider: Browser: driver selenium_chrome has been destroyed
I, [2018-08-22 13:23:08 +0400#15477] [M: 47377500980720] INFO -- github_spider: Spider: stopped: {:spider_name=>"github_spider", :status=>:completed, :environment=>"development", :start_time=>2018-08-22 13:08:03 +0400, :stop_time=>2018-08-22 13:23:08 +0400, :running_time=>"15m, 5s", :visits=>{:requests=>140, :responses=>140}, :error=>nil}
[
{
"owner": "lorien",
"repo_name": "awesome-web-scraping",
"repo_url": "https://github.com/lorien/awesome-web-scraping",
"description": "List of libraries, tools and APIs for web scraping and data processing.",
"tags": [
"awesome",
"awesome-list",
"web-scraping",
"data-processing",
"python",
"javascript",
"php",
"ruby"
],
"watch_count": "159",
"star_count": "2,423",
"fork_count": "358",
"last_commit": "4 days ago",
"position": 1
},
...
{
"owner": "preston",
"repo_name": "idclight",
"repo_url": "https://github.com/preston/idclight",
"description": "A Ruby gem for accessing the freely available IDClight (IDConverter Light) web service, which convert between different types of gene IDs such as Hugo and Entrez. Queries are screen scraped from http://idclight.bioinfo.cnio.es.",
"tags": [
],
"watch_count": "6",
"star_count": "1",
"fork_count": "0",
"last_commit": "on Apr 12, 2012",
"position": 127
}
]
Okay, that was easy. How about javascript rendered websites with dynamic HTML? Lets scrape a page with infinite scroll:
# infinite_scroll_spider.rb
require 'kimurai'
class InfiniteScrollSpider < Kimurai::Base
@name = "infinite_scroll_spider"
@engine = :selenium_chrome
@start_urls = ["https://infinite-scroll.com/demo/full-page/"]
def parse(response, url:, data: {})
posts_headers_path = "//article/h2"
count = response.xpath(posts_headers_path).count
loop do
browser.execute_script("window.scrollBy(0,10000)") ; sleep 2
response = browser.current_response
new_count = response.xpath(posts_headers_path).count
if count == new_count
logger.info "> Pagination is done" and break
else
count = new_count
logger.info "> Continue scrolling, current count is #{count}..."
end
end
posts_headers = response.xpath(posts_headers_path).map(&:text)
logger.info "> All posts from page: #{posts_headers.join('; ')}"
end
end
InfiniteScrollSpider.crawl!
I, [2018-08-22 13:32:57 +0400#23356] [M: 47375890851320] INFO -- infinite_scroll_spider: Spider: started: infinite_scroll_spider
D, [2018-08-22 13:32:57 +0400#23356] [M: 47375890851320] DEBUG -- infinite_scroll_spider: BrowserBuilder (selenium_chrome): created browser instance
D, [2018-08-22 13:32:57 +0400#23356] [M: 47375890851320] DEBUG -- infinite_scroll_spider: BrowserBuilder (selenium_chrome): enabled native headless_mode
I, [2018-08-22 13:32:57 +0400#23356] [M: 47375890851320] INFO -- infinite_scroll_spider: Browser: started get request to: https://infinite-scroll.com/demo/full-page/
I, [2018-08-22 13:33:03 +0400#23356] [M: 47375890851320] INFO -- infinite_scroll_spider: Browser: finished get request to: https://infinite-scroll.com/demo/full-page/
I, [2018-08-22 13:33:03 +0400#23356] [M: 47375890851320] INFO -- infinite_scroll_spider: Info: visits: requests: 1, responses: 1
D, [2018-08-22 13:33:03 +0400#23356] [M: 47375890851320] DEBUG -- infinite_scroll_spider: Browser: driver.current_memory: 95463
I, [2018-08-22 13:33:05 +0400#23356] [M: 47375890851320] INFO -- infinite_scroll_spider: > Continue scrolling, current count is 5...
I, [2018-08-22 13:33:18 +0400#23356] [M: 47375890851320] INFO -- infinite_scroll_spider: > Continue scrolling, current count is 9...
I, [2018-08-22 13:33:20 +0400#23356] [M: 47375890851320] INFO -- infinite_scroll_spider: > Continue scrolling, current count is 11...
I, [2018-08-22 13:33:26 +0400#23356] [M: 47375890851320] INFO -- infinite_scroll_spider: > Continue scrolling, current count is 13...
I, [2018-08-22 13:33:28 +0400#23356] [M: 47375890851320] INFO -- infinite_scroll_spider: > Continue scrolling, current count is 15...
I, [2018-08-22 13:33:30 +0400#23356] [M: 47375890851320] INFO -- infinite_scroll_spider: > Pagination is done
I, [2018-08-22 13:33:30 +0400#23356] [M: 47375890851320] INFO -- infinite_scroll_spider: > All posts from page: 1a - Infinite Scroll full page demo; 1b - RGB Schemes logo in Computer Arts; 2a - RGB Schemes logo; 2b - Masonry gets horizontalOrder; 2c - Every vector 2016; 3a - Logo Pizza delivered; 3b - Some CodePens; 3c - 365daysofmusic.com; 3d - Holograms; 4a - Huebee: 1-click color picker; 4b - Word is Flickity is good; Flickity v2 released: groupCells, adaptiveHeight, parallax; New tech gets chatter; Isotope v3 released: stagger in, IE8 out; Packery v2 released
I, [2018-08-22 13:33:30 +0400#23356] [M: 47375890851320] INFO -- infinite_scroll_spider: Browser: driver selenium_chrome has been destroyed
I, [2018-08-22 13:33:30 +0400#23356] [M: 47375890851320] INFO -- infinite_scroll_spider: Spider: stopped: {:spider_name=>"infinite_scroll_spider", :status=>:completed, :environment=>"development", :start_time=>2018-08-22 13:32:57 +0400, :stop_time=>2018-08-22 13:33:30 +0400, :running_time=>"33s", :visits=>{:requests=>1, :responses=>1}, :error=>nil}
Features
- Scrape javascript rendered websites out of box
- Supported engines: Headless Chrome, Headless Firefox, PhantomJS or simple HTTP requests (mechanize gem)
- Write spider code once, and use it with any supported engine later
- All the power of Capybara: use methods like
click_on
,fill_in
,select
,choose
,set
,go_back
, etc. to interact with web pages - Rich configuration: set default headers, cookies, delay between requests, enable proxy/user-agents rotation
- Built-in helpers to make scraping easy, like save_to (save items to JSON, JSON lines, or CSV formats) or unique? to skip duplicates
- Automatically handle requests errors
- Automatically restart browsers when reaching memory limit (memory control) or requests limit
- Easily schedule spiders within cron using Whenever (no need to know cron syntax)
- Parallel scraping using simple method
in_parallel
- Two modes: use single file for a simple spider, or generate Scrapy-like project
- Convenient development mode with console, colorized logger and debugger (Pry, Byebug)
- Automated server environment setup (for ubuntu 18.04) and deploy using commands
kimurai setup
andkimurai deploy
(Ansible under the hood) - Command-line runner to run all project spiders one by one or in parallel
Table of Contents
- Kimurai
- Features
- Table of Contents
- Installation
- Getting to Know
- Interactive console
- Available engines
- Minimum required spider structure
- Method arguments response, url and data
- browser object
- request_to method
- save_to helper
- Skip duplicates
- Handle request errors
- Logging custom events
- open_spider and close_spider callbacks
- KIMURAI_ENV
- Parallel crawling using in_parallel
- Active Support included
- Schedule spiders using Cron
- Configuration options
- Using Kimurai inside existing Ruby application
- Automated sever setup and deployment
- Spider @config
- Project mode
- Chat Support and Feedback
- License
Installation
Kimurai requires Ruby version >= 2.5.0
. Supported platforms: Linux
and Mac OS X
.
- If your system doesn't have appropriate Ruby version, install it:
# Install required packages for ruby-build
sudo apt update
sudo apt install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libreadline6-dev libyaml-dev libxml2-dev libxslt1-dev libcurl4-openssl-dev libffi-dev
# Install rbenv and ruby-build
cd && git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL
# Install latest Ruby
rbenv install 2.5.3
rbenv global 2.5.3
gem install bundler
# Install homebrew if you don't have it https://brew.sh/
# Install rbenv and ruby-build:
brew install rbenv ruby-build
# Add rbenv to bash so that it loads every time you open a terminal
echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile
source ~/.bash_profile
# Install latest Ruby
rbenv install 2.5.3
rbenv global 2.5.3
gem install bundler
-
Install Kimurai gem:
$ gem install kimurai
-
Install browsers with webdrivers:
Note: for Ubuntu 16.04-18.04 there is available automatic installation using setup
command:
$ kimurai setup localhost --local --ask-sudo
It works using Ansible so you need to install it first: $ sudo apt install ansible
. You can check using playbooks here.
If you chose automatic installation, you can skip following and go to "Getting To Know" part. In case if you want to install everything manually:
# Install basic tools
sudo apt install -q -y unzip wget tar openssl
# Install xvfb (for virtual_display headless mode, in additional to native)
sudo apt install -q -y xvfb
# Install chromium-browser and firefox
sudo apt install -q -y chromium-browser firefox
# Instal chromedriver (2.44 version)
# All versions located here https://sites.google.com/a/chromium.org/chromedriver/downloads
cd /tmp && wget https://chromedriver.storage.googleapis.com/2.44/chromedriver_linux64.zip
sudo unzip chromedriver_linux64.zip -d /usr/local/bin
rm -f chromedriver_linux64.zip
# Install geckodriver (0.23.0 version)
# All versions located here https://github.com/mozilla/geckodriver/releases/
cd /tmp && wget https://github.com/mozilla/geckodriver/releases/download/v0.23.0/geckodriver-v0.23.0-linux64.tar.gz
sudo tar -xvzf geckodriver-v0.23.0-linux64.tar.gz -C /usr/local/bin
rm -f geckodriver-v0.23.0-linux64.tar.gz
# Install PhantomJS (2.1.1)
# All versions located here http://phantomjs.org/download.html
sudo apt install -q -y chrpath libxft-dev libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev
cd /tmp && wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
tar -xvjf phantomjs-2.1.1-linux-x86_64.tar.bz2
sudo mv phantomjs-2.1.1-linux-x86_64 /usr/local/lib
sudo ln -s /usr/local/lib/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin
rm -f phantomjs-2.1.1-linux-x86_64.tar.bz2
# Install chrome and firefox
brew cask install google-chrome firefox
# Install chromedriver (latest)
brew cask install chromedriver
# Install geckodriver (latest)
brew install geckodriver
# Install PhantomJS (latest)
brew install phantomjs
Also, if you want to save scraped items to the database (using ActiveRecord, Sequel or MongoDB Ruby Driver/Mongoid), you need to install database clients/servers:
SQlite: $ sudo apt -q -y install libsqlite3-dev sqlite3
.
If you want to connect to a remote database, you don't need database server on a local machine (only client):
# Install MySQL client
sudo apt -q -y install mysql-client libmysqlclient-dev
# Install Postgres client
sudo apt install -q -y postgresql-client libpq-dev
# Install MongoDB client
sudo apt install -q -y mongodb-clients
But if you want to save items to a local database, database server required as well:
# Install MySQL client and server
sudo apt -q -y install mysql-server mysql-client libmysqlclient-dev
# Install Postgres client and server
sudo apt install -q -y postgresql postgresql-contrib libpq-dev
# Install MongoDB client and server
# version 4.0 (check here https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/)
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
# for 16.04:
# echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
# for 18.04:
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
sudo apt update
sudo apt install -q -y mongodb-org
sudo service mongod start
SQlite: $ brew install sqlite3
# Install MySQL client and server
brew install mysql
# Start server if you need it: brew services start mysql
# Install Postgres client and server
brew install postgresql
# Start server if you need it: brew services start postgresql
# Install MongoDB client and server
brew install mongodb
# Start server if you need it: brew services start mongodb
Getting to Know
Interactive console
Before you get to know all Kimurai features, there is $ kimurai console
command which is an interactive console where you can try and debug your scraping code very quickly, without having to run any spider (yes, it's like Scrapy shell).
$ kimurai console --engine selenium_chrome --url https://github.com/vifreefly/kimuraframework
$ kimurai console --engine selenium_chrome --url https://github.com/vifreefly/kimuraframework
D, [2018-08-22 13:42:32 +0400#26079] [M: 47461994677760] DEBUG -- : BrowserBuilder (selenium_chrome): created browser instance
D, [2018-08-22 13:42:32 +0400#26079] [M: 47461994677760] DEBUG -- : BrowserBuilder (selenium_chrome): enabled native headless_mode
I, [2018-08-22 13:42:32 +0400#26079] [M: 47461994677760] INFO -- : Browser: started get request to: https://github.com/vifreefly/kimuraframework
I, [2018-08-22 13:42:35 +0400#26079] [M: 47461994677760] INFO -- : Browser: finished get request to: https://github.com/vifreefly/kimuraframework
D, [2018-08-22 13:42:35 +0400#26079] [M: 47461994677760] DEBUG -- : Browser: driver.current_memory: 201701
From: /home/victor/code/kimurai/lib/kimurai/base.rb @ line 189 Kimurai::Base#console:
188: def console(response = nil, url: nil, data: {})
=> 189: binding.pry
190: end
[1] pry(#<Kimurai::Base>)> response.xpath("//title").text
=> "GitHub - vifreefly/kimuraframework: Modern web scraping framework written in Ruby which works out of box with Headless Chromium/Firefox, PhantomJS, or simple HTTP requests and allows to scrape and interact with JavaScript rendered websites"
[2] pry(#<Kimurai::Base>)> ls
Kimurai::Base#methods: browser console logger request_to save_to unique?
instance variables: @browser @config @engine @logger @pipelines
locals: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_ data response url
[3] pry(#<Kimurai::Base>)> ls response
Nokogiri::XML::PP::Node#methods: inspect pretty_print
Nokogiri::XML::Searchable#methods: % / at at_css at_xpath css search xpath
Enumerable#methods:
all? collect drop each_with_index find_all grep_v lazy member? none? reject slice_when take_while without
any? collect_concat drop_while each_with_object find_index group_by many? min one? reverse_each sort to_a zip
as_json count each_cons entries first include? map min_by partition select sort_by to_h
chunk cycle each_entry exclude? flat_map index_by max minmax pluck slice_after sum to_set
chunk_while detect each_slice find grep inject max_by minmax_by reduce slice_before take uniq
Nokogiri::XML::Node#methods:
<=> append_class classes document? has_attribute? matches? node_name= processing_instruction? to_str
== attr comment? each html? name= node_type read_only? to_xhtml
> attribute content elem? inner_html namespace= parent= remove traverse
[] attribute_nodes content= element? inner_html= namespace_scopes parse remove_attribute unlink
[]= attribute_with_ns create_external_subset element_children inner_text namespaced_key? path remove_class values
accept before create_internal_subset elements internal_subset native_content= pointer_id replace write_html_to
add_class blank? css_path encode_special_chars key? next prepend_child set_attribute write_to
add_next_sibling cdata? decorate! external_subset keys next= previous text write_xhtml_to
add_previous_sibling child delete first_element_child lang next_element previous= text? write_xml_to
after children description fragment? lang= next_sibling previous_element to_html xml?
ancestors children= do_xinclude get_attribute last_element_child node_name previous_sibling to_s
Nokogiri::XML::Document#methods:
<< canonicalize collect_namespaces create_comment create_entity decorate document encoding errors name remove_namespaces! root= to_java url version
add_child clone create_cdata create_element create_text_node decorators dup encoding= errors= namespaces root slop! to_xml validate
Nokogiri::HTML::Document#methods: fragment meta_encoding meta_encoding= serialize title title= type
instance variables: @decorators @errors @node_cache
[4] pry(#<Kimurai::Base>)> exit
I, [2018-08-22 13:43:47 +0400#26079] [M: 47461994677760] INFO -- : Browser: driver selenium_chrome has been destroyed
$
CLI options:
--engine
(optional) engine to use. Default ismechanize
--url
(optional) url to process. If url omitted,response
andurl
objects inside the console will benil
(use browser object to navigate to any webpage).
Available engines
Kimurai has support for following engines and mostly can switch between them without need to rewrite any code:
:mechanize
- pure Ruby fake http browser. Mechanize can't render javascript and don't know what DOM is it. It only can parse original HTML code of a page. Because of it, mechanize much faster, takes much less memory and in general much more stable than any real browser. Use mechanize if you can do it, and the website doesn't use javascript to render any meaningful parts of its structure. Still, because mechanize trying to mimic a real browser, it supports almost all Capybara's methods to interact with a web page (filling forms, clicking buttons, checkboxes, etc).:poltergeist_phantomjs
- PhantomJS headless browser, can render javascript. In general, PhantomJS still faster than Headless Chrome (and Headless Firefox). PhantomJS has memory leakage, but Kimurai has memory control feature so you shouldn't consider it as a problem. Also, some websites can recognize PhantomJS and block access to them. Like mechanize (and unlike selenium engines):poltergeist_phantomjs
can freely rotate proxies and change headers on the fly (see config section).:selenium_chrome
Chrome in headless mode driven by selenium. Modern headless browser solution with proper javascript rendering.:selenium_firefox
Firefox in headless mode driven by selenium. Usually takes more memory than other drivers, but sometimes can be useful.
Tip: add HEADLESS=false
ENV variable before command ($ HEADLESS=false ruby spider.rb
) to run browser in normal (not headless) mode and see it's window (only for selenium-like engines). It works for console command as well.
Minimum required spider structure
You can manually create a spider file, or use generator instead:
$ kimurai generate spider simple_spider
require 'kimurai'
class SimpleSpider < Kimurai::Base
@name = "simple_spider"
@engine = :selenium_chrome
@start_urls = ["https://example.com/"]
def parse(response, url:, data: {})
end
end
SimpleSpider.crawl!
Where:
@name
name of a spider. You can omit name if use single-file spider@engine
engine for a spider@start_urls
array of start urls to process one by one insideparse
method- Method
parse
is the start method, should be always present in spider class
Method arguments response
, url
and data
def parse(response, url:, data: {})
end
response
(Nokogiri::HTML::Document object) Contains parsed HTML code of a processed webpageurl
(String) url of a processed webpagedata
(Hash) uses to pass data between requests
Imagine that there is a product page which doesn't contain product category. Category name present only on category page with pagination. This is the case where we can use data
to pass category name from parse
to parse_product
method:
class ProductsSpider < Kimurai::Base
@engine = :selenium_chrome
@start_urls = ["https://example-shop.com/example-product-category"]
def parse(response, url:, data: {})
category_name = response.xpath("//path/to/category/name").text
response.xpath("//path/to/products/urls").each do |product_url|
# Merge category_name with current data hash and pass it next to parse_product method
request_to(:parse_product, url: product_url[:href], data: data.merge(category_name: category_name))
end
# ...
end
def parse_product(response, url:, data: {})
item = {}
# Assign item's category_name from data[:category_name]
item[:category_name] = data[:category_name]
# ...
end
end
You can query response
using XPath or CSS selectors. Check Nokogiri tutorials to understand how to work with response
:
- Parsing HTML with Nokogiri - ruby.bastardsbook.com
- HOWTO parse HTML with Ruby & Nokogiri - readysteadycode.com
- Class: Nokogiri::HTML::Document (documentation) - rubydoc.info
browser
object
From any spider instance method there is available browser
object, which is Capybara::Session object and uses to process requests and get page response (current_response
method). Usually you don't need to touch it directly, because there is response
(see above) which contains page response after it was loaded.
But if you need to interact with a page (like filling form fields, clicking elements, checkboxes, etc) browser
is ready for you:
class GoogleSpider < Kimurai::Base
@name = "google_spider"
@engine = :selenium_chrome
@start_urls = ["https://www.google.com/"]
def parse(response, url:, data: {})
browser.fill_in "q", with: "Kimurai web scraping framework"
browser.click_button "Google Search"
# Update response to current response after interaction with a browser
response = browser.current_response
# Collect results
results = response.xpath("//div[@class='g']//h3/a").map do |a|
{ title: a.text, url: a[:href] }
end
# ...
end
end
Check out Capybara cheat sheets where you can see all available methods to interact with browser:
- UI Testing with RSpec and Capybara [cheat sheet] - cheatrags.com
- Capybara Cheatsheet PDF - thoughtbot.com
- Class: Capybara::Session (documentation) - rubydoc.info
request_to
method
For making requests to a particular method there is request_to
. It requires minimum two arguments: :method_name
and url:
. An optional argument is data:
(see above what for is it). Example:
class Spider < Kimurai::Base
@engine = :selenium_chrome
@start_urls = ["https://example.com/"]
def parse(response, url:, data: {})
# Process request to `parse_product` method with `https://example.com/some_product` url:
request_to :parse_product, url: "https://example.com/some_product"
end
def parse_product(response, url:, data: {})
puts "From page https://example.com/some_product !"
end
end
Under the hood request_to
simply call #visit (browser.visit(url)
) and then required method with arguments:
def request_to(handler, url:, data: {})
request_data = { url: url, data: data }
browser.visit(url)
public_send(handler, browser.current_response, request_data)
end
request_to
just makes things simpler, and without it we could do something like:
class Spider < Kimurai::Base
@engine = :selenium_chrome
@start_urls = ["https://example.com/"]
def parse(response, url:, data: {})
url_to_process = "https://example.com/some_product"
browser.visit(url_to_process)
parse_product(browser.current_response, url: url_to_process)
end
def parse_product(response, url:, data: {})
puts "From page https://example.com/some_product !"
end
end
save_to
helper
Sometimes all that you need is to simply save scraped data to a file format, like JSON or CSV. You can use save_to
for it:
class ProductsSpider < Kimurai::Base
@engine = :selenium_chrome
@start_urls = ["https://example-shop.com/"]
# ...
def parse_product(response, url:, data: {})
item = {}
item[:title] = response.xpath("//title/path").text
item[:description] = response.xpath("//desc/path").text.squish
item[:price] = response.xpath("//price/path").text[/\d+/]&.to_f
# Add each new item to the `scraped_products.json` file:
save_to "scraped_products.json", item, format: :json
end
end
Supported formats:
:json
JSON:pretty_json
"pretty" JSON (JSON.pretty_generate
):jsonlines
JSON Lines:csv
CSV
Note: save_to
requires data (item to save) to be a Hash
.
By default save_to
add position key to an item hash. You can disable it with position: false
: save_to "scraped_products.json", item, format: :json, position: false
.
How helper works:
Until spider stops, each new item will be appended to a file. At the next run, helper will clear the content of a file first, and then start again appending items to it.
If you don't want file to be cleared before each run, add option
append: true
:save_to "scraped_products.json", item, format: :json, append: true
Skip duplicates
It's pretty common when websites have duplicated pages. For example when an e-commerce shop has the same products in different categories. To skip duplicates, there is simple unique?
helper:
class ProductsSpider < Kimurai::Base
@engine = :selenium_chrome
@start_urls = ["https://example-shop.com/"]
def parse(response, url:, data: {})
response.xpath("//categories/path").each do |category|
request_to :parse_category, url: category[:href]
end
end
# Check products for uniqueness using product url inside of parse_category:
def parse_category(response, url:, data: {})
response.xpath("//products/path").each do |product|
# Skip url if it's not unique:
next unless unique?(:product_url, product[:href])
# Otherwise process it:
request_to :parse_product, url: product[:href]
end
end
# Or/and check products for uniqueness using product sku inside of parse_product:
def parse_product(response, url:, data: {})
item = {}
item[:sku] = response.xpath("//product/sku/path").text.strip.upcase
# Don't save product and return from method if there is already saved item with the same sku:
return unless unique?(:sku, item[:sku])
# ...
save_to "results.json", item, format: :json
end
end
unique?
helper works pretty simple:
# Check string "http://example.com" in scope `url` for a first time:
unique?(:url, "http://example.com")
# => true
# Try again:
unique?(:url, "http://example.com")
# => false
To check something for uniqueness, you need to provide a scope:
# `product_url` scope
unique?(:product_url, "http://example.com/product_1")
# `id` scope
unique?(:id, 324234232)
# `custom` scope
unique?(:custom, "Lorem Ipsum")
Automatically skip all duplicated requests urls
It is possible to automatically skip all already visited urls while calling request_to
method, using @config option skip_duplicate_requests: true
. With this option, all already visited urls will be automatically skipped. Also check the @config for an additional options of this setting.
storage
object
unique?
method it's just an alias for storage#unique?
. Storage has several methods:
#all
- display storage hash where keys are existing scopes.#include?(scope, value)
- returntrue
if value in the scope exists, andfalse
if not#add(scope, value)
- add value to the scope#unique?(scope, value)
- method already described above, will returnfalse
if value in the scope exists, or returntrue
+ add value to the scope if value in the scope not exists.#clear!
- reset the whole storage by deleting all values from all scopes.
Handle request errors
It is quite common that some pages of crawling website can return different response code than 200 ok
. In such cases, method request_to
(or browser.visit
) can raise an exception. Kimurai provides skip_request_errors
and retry_request_errors
config options to handle such errors:
skip_request_errors
You can automatically skip some of errors while requesting a page using skip_request_errors
config option. If raised error matches one of the errors in the list, then this error will be caught, and request will be skipped. It is a good idea to skip errors like NotFound(404), etc.
Format for the option: array where elements are error classes or/and hashes. You can use hash format for more flexibility:
@config = {
skip_request_errors: [{ error: RuntimeError, message: "404 => Net::HTTPNotFound" }]
}
In this case, provided message:
will be compared with a full error message using String#include?
. Also you can use regex instead: { error: RuntimeError, message: /404|403/ }
.
retry_request_errors
You can automatically retry some of errors with a few attempts while requesting a page using retry_request_errors
config option. If raised error matches one of the errors in the list, then this error will be caught and the request will be processed again within a delay.
There are 3 attempts: first: delay 15 sec, second: delay 30 sec, third: delay 45 sec. If after 3 attempts there is still an exception, then the exception will be raised. It is a good idea to try to retry errros like ReadTimeout
, HTTPBadGateway
, etc.
Format for the option: same like for skip_request_errors
option.
If you would like to skip (not raise) error after all retries gone, you can specify skip_on_failure: true
option:
@config = {
retry_request_errors: [{ error: RuntimeError, skip_on_failure: true }]
}
Logging custom events
It is possible to save custom messages to the run_info hash using add_event('Some message')
method. This feature helps you to keep track on important things which happened during crawling without checking the whole spider log (in case if you're logging these messages using logger
). Example:
def parse_product(response, url:, data: {})
unless response.at_xpath("//path/to/add_to_card_button")
add_event("Product is sold") and return
end
# ...
end
...
I, [2018-11-28 22:20:19 +0400#7402] [M: 47156576560640] INFO -- example_spider: Spider: new event (scope: custom): Product is sold
...
I, [2018-11-28 22:20:19 +0400#7402] [M: 47156576560640] INFO -- example_spider: Spider: stopped: {:events=>{:custom=>{"Product is sold"=>1}}}
open_spider
and close_spider
callbacks
You can define .open_spider
and .close_spider
callbacks (class methods) to perform some action before spider started or after spider has been stopped:
require 'kimurai'
class ExampleSpider < Kimurai::Base
@name = "example_spider"
@engine = :selenium_chrome
@start_urls = ["https://example.com/"]
def self.open_spider
logger.info "> Starting..."
end
def self.close_spider
logger.info "> Stopped!"
end
def parse(response, url:, data: {})
logger.info "> Scraping..."
end
end
ExampleSpider.crawl!
I, [2018-08-22 14:26:32 +0400#6001] [M: 46996522083840] INFO -- example_spider: Spider: started: example_spider
I, [2018-08-22 14:26:32 +0400#6001] [M: 46996522083840] INFO -- example_spider: > Starting...
D, [2018-08-22 14:26:32 +0400#6001] [M: 46996522083840] DEBUG -- example_spider: BrowserBuilder (selenium_chrome): created browser instance
D, [2018-08-22 14:26:32 +0400#6001] [M: 46996522083840] DEBUG -- example_spider: BrowserBuilder (selenium_chrome): enabled native headless_mode
I, [2018-08-22 14:26:32 +0400#6001] [M: 46996522083840] INFO -- example_spider: Browser: started get request to: https://example.com/
I, [2018-08-22 14:26:34 +0400#6001] [M: 46996522083840] INFO -- example_spider: Browser: finished get request to: https://example.com/
I, [2018-08-22 14:26:34 +0400#6001] [M: 46996522083840] INFO -- example_spider: Info: visits: requests: 1, responses: 1
D, [2018-08-22 14:26:34 +0400#6001] [M: 46996522083840] DEBUG -- example_spider: Browser: driver.current_memory: 82415
I, [2018-08-22 14:26:34 +0400#6001] [M: 46996522083840] INFO -- example_spider: > Scraping...
I, [2018-08-22 14:26:34 +0400#6001] [M: 46996522083840] INFO -- example_spider: Browser: driver selenium_chrome has been destroyed
I, [2018-08-22 14:26:34 +0400#6001] [M: 46996522083840] INFO -- example_spider: > Stopped!
I, [2018-08-22 14:26:34 +0400#6001] [M: 46996522083840] INFO -- example_spider: Spider: stopped: {:spider_name=>"example_spider", :status=>:completed, :environment=>"development", :start_time=>2018-08-22 14:26:32 +0400, :stop_time=>2018-08-22 14:26:34 +0400, :running_time=>"1s", :visits=>{:requests=>1, :responses=>1}, :error=>nil}
Inside open_spider
and close_spider
class methods there is available run_info
method which contains useful information about spider state:
11: def self.open_spider
=> 12: binding.pry
13: end
[1] pry(example_spider)> run_info
=> {
:spider_name=>"example_spider",
:status=>:running,
:environment=>"development",
:start_time=>2018-08-05 23:32:00 +0400,
:stop_time=>nil,
:running_time=>nil,
:visits=>{:requests=>0, :responses=>0},
:error=>nil
}
Inside close_spider
, run_info
will be updated:
15: def self.close_spider
=> 16: binding.pry
17: end
[1] pry(example_spider)> run_info
=> {
:spider_name=>"example_spider",
:status=>:completed,
:environment=>"development",
:start_time=>2018-08-05 23:32:00 +0400,
:stop_time=>2018-08-05 23:32:06 +0400,
:running_time=>6.214,
:visits=>{:requests=>1, :responses=>1},
:error=>nil
}
run_info[:status]
helps to determine if spider was finished successfully or failed (possible values: :completed
, :failed
):
class ExampleSpider < Kimurai::Base
@name = "example_spider"
@engine = :selenium_chrome
@start_urls = ["https://example.com/"]
def self.close_spider
puts ">>> run info: #{run_info}"
end
def parse(response, url:, data: {})
logger.info "> Scraping..."
# Let's try to strip nil:
nil.strip
end
end
I, [2018-08-22 14:34:24 +0400#8459] [M: 47020523644400] INFO -- example_spider: Spider: started: example_spider
D, [2018-08-22 14:34:25 +0400#8459] [M: 47020523644400] DEBUG -- example_spider: BrowserBuilder (selenium_chrome): created browser instance
D, [2018-08-22 14:34:25 +0400#8459] [M: 47020523644400] DEBUG -- example_spider: BrowserBuilder (selenium_chrome): enabled native headless_mode
I, [2018-08-22 14:34:25 +0400#8459] [M: 47020523644400] INFO -- example_spider: Browser: started get request to: https://example.com/
I, [2018-08-22 14:34:26 +0400#8459] [M: 47020523644400] INFO -- example_spider: Browser: finished get request to: https://example.com/
I, [2018-08-22 14:34:26 +0400#8459] [M: 47020523644400] INFO -- example_spider: Info: visits: requests: 1, responses: 1
D, [2018-08-22 14:34:26 +0400#8459] [M: 47020523644400] DEBUG -- example_spider: Browser: driver.current_memory: 83351
I, [2018-08-22 14:34:26 +0400#8459] [M: 47020523644400] INFO -- example_spider: > Scraping...
I, [2018-08-22 14:34:26 +0400#8459] [M: 47020523644400] INFO -- example_spider: Browser: driver selenium_chrome has been destroyed
>>> run info: {:spider_name=>"example_spider", :status=>:failed, :environment=>"development", :start_time=>2018-08-22 14:34:24 +0400, :stop_time=>2018-08-22 14:34:26 +0400, :running_time=>2.01, :visits=>{:requests=>1, :responses=>1}, :error=>"#<NoMethodError: undefined method `strip' for nil:NilClass>"}
F, [2018-08-22 14:34:26 +0400#8459] [M: 47020523644400] FATAL -- example_spider: Spider: stopped: {:spider_name=>"example_spider", :status=>:failed, :environment=>"development", :start_time=>2018-08-22 14:34:24 +0400, :stop_time=>2018-08-22 14:34:26 +0400, :running_time=>"2s", :visits=>{:requests=>1, :responses=>1}, :error=>"#<NoMethodError: undefined method `strip' for nil:NilClass>"}
Traceback (most recent call last):
6: from example_spider.rb:19:in `<main>'
5: from /home/victor/code/kimurai/lib/kimurai/base.rb:127:in `crawl!'
4: from /home/victor/code/kimurai/lib/kimurai/base.rb:127:in `each'
3: from /home/victor/code/kimurai/lib/kimurai/base.rb:128:in `block in crawl!'
2: from /home/victor/code/kimurai/lib/kimurai/base.rb:185:in `request_to'
1: from /home/victor/code/kimurai/lib/kimurai/base.rb:185:in `public_send'
example_spider.rb:15:in `parse': undefined method `strip' for nil:NilClass (NoMethodError)
Usage example: if spider finished successfully, send JSON file with scraped items to a remote FTP location, otherwise (if spider failed), skip incompleted results and send email/notification to slack about it:
Also you can use additional methods completed?
or failed?
class Spider < Kimurai::Base
@engine = :selenium_chrome
@start_urls = ["https://example.com/"]
def self.close_spider
if completed?
send_file_to_ftp("results.json")
else
send_error_notification(run_info[:error])
end
end
def self.send_file_to_ftp(file_path)
# ...
end
def self.send_error_notification(error)
# ...
end
# ...
def parse_item(response, url:, data: {})
item = {}
# ...
save_to "results.json", item, format: :json
end
end
KIMURAI_ENV
Kimurai has environments, default is development
. To provide custom environment pass KIMURAI_ENV
ENV variable before command: $ KIMURAI_ENV=production ruby spider.rb
. To access current environment there is Kimurai.env
method.
Usage example:
class Spider < Kimurai::Base
@engine = :selenium_chrome
@start_urls = ["https://example.com/"]
def self.close_spider
if failed? && Kimurai.env == "production"
send_error_notification(run_info[:error])
else
# Do nothing
end
end
# ...
end
Parallel crawling using in_parallel
Kimurai can process web pages concurrently in one single line: in_parallel(:parse_product, urls, threads: 3)
, where :parse_product
is a method to process, urls
is array of urls to crawl and threads:
is a number of threads:
# amazon_spider.rb
require 'kimurai'
class AmazonSpider < Kimurai::Base
@name = "amazon_spider"
@engine = :mechanize
@start_urls = ["https://www.amazon.com/"]
def parse(response, url:, data: {})
browser.fill_in "field-keywords", with: "Web Scraping Books"
browser.click_on "Go"
# Walk through pagination and collect products urls:
urls = []
loop do
response = browser.current_response
response.xpath("//li//a[contains(@class, 's-access-detail-page')]").each do |a|
urls << a[:href].sub(/ref=.+/, "")
end
browser.find(:xpath, "//a[@id='pagnNextLink']", wait: 1).click rescue break
end
# Process all collected urls concurrently within 3 threads:
in_parallel(:parse_book_page, urls, threads: 3)
end
def parse_book_page(response, url:, data: {})
item = {}
item[:title] = response.xpath("//h1/span[@id]").text.squish
item[:url] = url
item[:price] = response.xpath("(//span[contains(@class, 'a-color-price')])[1]").text.squish.presence
item[:publisher] = response.xpath("//h2[text()='Product details']/following::b[text()='Publisher:']/following-sibling::text()[1]").text.squish.presence
save_to "books.json", item, format: :pretty_json
end
end
AmazonSpider.crawl!
I, [2018-08-22 14:48:37 +0400#13033] [M: 46982297486840] INFO -- amazon_spider: Spider: started: amazon_spider
D, [2018-08-22 14:48:37 +0400#13033] [M: 46982297486840] DEBUG -- amazon_spider: BrowserBuilder (mechanize): created browser instance
I, [2018-08-22 14:48:37 +0400#13033] [M: 46982297486840] INFO -- amazon_spider: Browser: started get request to: https://www.amazon.com/
I, [2018-08-22 14:48:38 +0400#13033] [M: 46982297486840] INFO -- amazon_spider: Browser: finished get request to: https://www.amazon.com/
I, [2018-08-22 14:48:38 +0400#13033] [M: 46982297486840] INFO -- amazon_spider: Info: visits: requests: 1, responses: 1
I, [2018-08-22 14:48:43 +0400#13033] [M: 46982297486840] INFO -- amazon_spider: Spider: in_parallel: starting processing 52 urls within 3 threads
D, [2018-08-22 14:48:43 +0400#13033] [C: 46982320219020] DEBUG -- amazon_spider: BrowserBuilder (mechanize): created browser instance
I, [2018-08-22 14:48:43 +0400#13033] [C: 46982320219020] INFO -- amazon_spider: Browser: started get request to: https://www.amazon.com/Practical-Web-Scraping-Data-Science/dp/1484235819/
D, [2018-08-22 14:48:44 +0400#13033] [C: 46982320189640] DEBUG -- amazon_spider: BrowserBuilder (mechanize): created browser instance
I, [2018-08-22 14:48:44 +0400#13033] [C: 46982320189640] INFO -- amazon_spider: Browser: started get request to: https://www.amazon.com/Python-Web-Scraping-Cookbook-scraping/dp/1787285219/
D, [2018-08-22 14:48:44 +0400#13033] [C: 46982319187320] DEBUG -- amazon_spider: BrowserBuilder (mechanize): created browser instance
I, [2018-08-22 14:48:44 +0400#13033] [C: 46982319187320] INFO -- amazon_spider: Browser: started get request to: https://www.amazon.com/Scraping-Python-Community-Experience-Distilled/dp/1782164367/
I, [2018-08-22 14:48:45 +0400#13033] [C: 46982320219020] INFO -- amazon_spider: Browser: finished get request to: https://www.amazon.com/Practical-Web-Scraping-Data-Science/dp/1484235819/
I, [2018-08-22 14:48:45 +0400#13033] [C: 46982320219020] INFO -- amazon_spider: Info: visits: requests: 4, responses: 2
I, [2018-08-22 14:48:45 +0400#13033] [C: 46982320219020] INFO -- amazon_spider: Browser: started get request to: https://www.amazon.com/Web-Scraping-Python-Collecting-Modern/dp/1491910291/
I, [2018-08-22 14:48:46 +0400#13033] [C: 46982320189640] INFO -- amazon_spider: Browser: finished get request to: https://www.amazon.com/Python-Web-Scraping-Cookbook-scraping/dp/1787285219/
I, [2018-08-22 14:48:46 +0400#13033] [C: 46982320189640] INFO -- amazon_spider: Info: visits: requests: 5, responses: 3
I, [2018-08-22 14:48:46 +0400#13033] [C: 46982320189640] INFO -- amazon_spider: Browser: started get request to: https://www.amazon.com/Web-Scraping-Python-Collecting-Modern/dp/1491985577/
I, [2018-08-22 14:48:46 +0400#13033] [C: 46982319187320] INFO -- amazon_spider: Browser: finished get request to: https://www.amazon.com/Scraping-Python-Community-Experience-Distilled/dp/1782164367/
I, [2018-08-22 14:48:46 +0400#13033] [C: 46982319187320] INFO -- amazon_spider: Info: visits: requests: 6, responses: 4
I, [2018-08-22 14:48:46 +0400#13033] [C: 46982319187320] INFO -- amazon_spider: Browser: started get request to: https://www.amazon.com/Web-Scraping-Excel-Effective-Scrapes-ebook/dp/B01CMMJGZ8/
...
I, [2018-08-22 14:49:10 +0400#13033] [C: 46982320219020] INFO -- amazon_spider: Info: visits: requests: 51, responses: 49
I, [2018-08-22 14:49:10 +0400#13033] [C: 46982320219020] INFO -- amazon_spider: Browser: driver mechanize has been destroyed
I, [2018-08-22 14:49:11 +0400#13033] [C: 46982320189640] INFO -- amazon_spider: Browser: finished get request to: https://www.amazon.com/Scraping-Ice-Life-Bill-Rayburn-ebook/dp/B00C0NF1L8/
I, [2018-08-22 14:49:11 +0400#13033] [C: 46982320189640] INFO -- amazon_spider: Info: visits: requests: 51, responses: 50
I, [2018-08-22 14:49:11 +0400#13033] [C: 46982320189640] INFO -- amazon_spider: Browser: started get request to: https://www.amazon.com/Instant-Scraping-Jacob-Ward-2013-07-26/dp/B01FJ1G3G4/
I, [2018-08-22 14:49:11 +0400#13033] [C: 46982319187320] INFO -- amazon_spider: Browser: finished get request to: https://www.amazon.com/Php-architects-Guide-Scraping-Author/dp/B010DTKYY4/
I, [2018-08-22 14:49:11 +0400#13033] [C: 46982319187320] INFO -- amazon_spider: Info: visits: requests: 52, responses: 51
I, [2018-08-22 14:49:11 +0400#13033] [C: 46982319187320] INFO -- amazon_spider: Browser: started get request to: https://www.amazon.com/Ship-Tracking-Maritime-Domain-Awareness/dp/B001J5MTOK/
I, [2018-08-22 14:49:12 +0400#13033] [C: 46982320189640] INFO -- amazon_spider: Browser: finished get request to: https://www.amazon.com/Instant-Scraping-Jacob-Ward-2013-07-26/dp/B01FJ1G3G4/
I, [2018-08-22 14:49:12 +0400#13033] [C: 46982320189640] INFO -- amazon_spider: Info: visits: requests: 53, responses: 52
I, [2018-08-22 14:49:12 +0400#13033] [C: 46982320189640] INFO -- amazon_spider: Browser: driver mechanize has been destroyed
I, [2018-08-22 14:49:12 +0400#13033] [C: 46982319187320] INFO -- amazon_spider: Browser: finished get request to: https://www.amazon.com/Ship-Tracking-Maritime-Domain-Awareness/dp/B001J5MTOK/
I, [2018-08-22 14:49:12 +0400#13033] [C: 46982319187320] INFO -- amazon_spider: Info: visits: requests: 53, responses: 53
I, [2018-08-22 14:49:12 +0400#13033] [C: 46982319187320] INFO -- amazon_spider: Browser: driver mechanize has been destroyed
I, [2018-08-22 14:49:12 +0400#13033] [M: 46982297486840] INFO -- amazon_spider: Spider: in_parallel: stopped processing 52 urls within 3 threads, total time: 29s
I, [2018-08-22 14:49:12 +0400#13033] [M: 46982297486840] INFO -- amazon_spider: Browser: driver mechanize has been destroyed
I, [2018-08-22 14:49:12 +0400#13033] [M: 46982297486840] INFO -- amazon_spider: Spider: stopped: {:spider_name=>"amazon_spider", :status=>:completed, :environment=>"development", :start_time=>2018-08-22 14:48:37 +0400, :stop_time=>2018-08-22 14:49:12 +0400, :running_time=>"35s", :visits=>{:requests=>53, :responses=>53}, :error=>nil}
[
{
"title": "Web Scraping with Python: Collecting More Data from the Modern Web2nd Edition",
"url": "https://www.amazon.com/Web-Scraping-Python-Collecting-Modern/dp/1491985577/",
"price": "$26.94",
"publisher": "O'Reilly Media; 2 edition (April 14, 2018)",
"position": 1
},
{
"title": "Python Web Scraping Cookbook: Over 90 proven recipes to get you scraping with Python, micro services, Docker and AWS",
"url": "https://www.amazon.com/Python-Web-Scraping-Cookbook-scraping/dp/1787285219/",
"price": "$39.99",
"publisher": "Packt Publishing - ebooks Account (February 9, 2018)",
"position": 2
},
{
"title": "Web Scraping with Python: Collecting Data from the Modern Web1st Edition",
"url": "https://www.amazon.com/Web-Scraping-Python-Collecting-Modern/dp/1491910291/",
"price": "$15.75",
"publisher": "O'Reilly Media; 1 edition (July 24, 2015)",
"position": 3
},
...
{
"title": "Instant Web Scraping with Java by Ryan Mitchell (2013-08-26)",
"url": "https://www.amazon.com/Instant-Scraping-Java-Mitchell-2013-08-26/dp/B01FEM76X2/",
"price": "$35.82",
"publisher": "Packt Publishing (2013-08-26) (1896)",
"position": 52
}
]
Note that save_to and unique? helpers are thread-safe (protected by Mutex) and can be freely used inside threads.
in_parallel
can take additional options:
data:
pass with urls custom data hash:in_parallel(:method, urls, threads: 3, data: { category: "Scraping" })
delay:
set delay between requests:in_parallel(:method, urls, threads: 3, delay: 2)
. Delay can beInteger
,Float
orRange
(2..5
). In case of a Range, delay number will be chosen randomly for each request:rand (2..5) # => 3
engine:
set custom engine than a default one:in_parallel(:method, urls, threads: 3, engine: :poltergeist_phantomjs)
config:
pass custom options to config (see config section)
Active Support included
You can use all the power of familiar Rails core-ext methods for scraping inside Kimurai. Especially take a look at squish, truncate_words, titleize, remove, present? and presence.
Schedule spiders using Cron
- Inside spider directory generate Whenever config:
$ kimurai generate schedule
.
### Settings ###
require 'tzinfo'
# Export current PATH to the cron
env :PATH, ENV["PATH"]
# Use 24 hour format when using `at:` option
set :chronic_options, hours24: true
# Use local_to_utc helper to setup execution time using your local timezone instead
# of server's timezone (which is probably and should be UTC, to check run `$ timedatectl`).
# Also maybe you'll want to set same timezone in kimurai as well (use `Kimurai.configuration.time_zone =` for that),
# to have spiders logs in a specific time zone format.
# Example usage of helper:
# every 1.day, at: local_to_utc("7:00", zone: "Europe/Moscow") do
# crawl "google_spider.com", output: "log/google_spider.com.log"
# end
def local_to_utc(time_string, zone:)
TZInfo::Timezone.get(zone).local_to_utc(Time.parse(time_string))
end
# Note: by default Whenever exports cron commands with :environment == "production".
# Note: Whenever can only append log data to a log file (>>). If you want
# to overwrite (>) log file before each run, pass lambda:
# crawl "google_spider.com", output: -> { "> log/google_spider.com.log 2>&1" }
# Project job types
job_type :crawl, "cd :path && KIMURAI_ENV=:environment bundle exec kimurai crawl :task :output"
job_type :runner, "cd :path && KIMURAI_ENV=:environment bundle exec kimurai runner --jobs :task :output"
# Single file job type
job_type :single, "cd :path && KIMURAI_ENV=:environment ruby :task :output"
# Single with bundle exec
job_type :single_bundle, "cd :path && KIMURAI_ENV=:environment bundle exec ruby :task :output"
### Schedule ###
# Usage (check examples here https://github.com/javan/whenever#example-schedulerb-file):
# every 1.day do
# Example to schedule a single spider in the project:
# crawl "google_spider.com", output: "log/google_spider.com.log"
# Example to schedule all spiders in the project using runner. Each spider will write
# it's own output to the `log/spider_name.log` file (handled by a runner itself).
# Runner output will be written to log/runner.log file.
# Argument number it's a count of concurrent jobs:
# runner 3, output:"log/runner.log"
# Example to schedule single spider (without project):
# single "single_spider.rb", output: "single_spider.log"
# end
### How to set a cron schedule ###
# Run: `$ whenever --update-crontab --load-file config/schedule.rb`.
# If you don't have whenever command, install the gem: `$ gem install whenever`.
### How to cancel a schedule ###
# Run: `$ whenever --clear-crontab --load-file config/schedule.rb`.
- Add at the bottom of
schedule.rb
following code:
every 1.day, at: "7:00" do
single "example_spider.rb", output: "example_spider.log"
end
- Run:
$ whenever --update-crontab --load-file schedule.rb
. Done!
You can check Whenever examples here. To cancel schedule, run: $ whenever --clear-crontab --load-file schedule.rb
.
Configuration options
You can configure several options using configure
block:
Kimurai.configure do |config|
# Default logger has colored mode in development.
# If you would like to disable it, set `colorize_logger` to false.
# config.colorize_logger = false
# Logger level for default logger:
# config.log_level = :info
# Custom logger:
# config.logger = Logger.new(STDOUT)
# Custom time zone (for logs):
# config.time_zone = "UTC"
# config.time_zone = "Europe/Moscow"
# Provide custom chrome binary path (default is any available chrome/chromium in the PATH):
# config.selenium_chrome_path = "/usr/bin/chromium-browser"
# Provide custom selenium chromedriver path (default is "/usr/local/bin/chromedriver"):
# config.chromedriver_path = "~/.local/bin/chromedriver"
end
Using Kimurai inside existing Ruby application
You can integrate Kimurai spiders (which are just Ruby classes) to an existing Ruby application like Rails or Sinatra, and run them using background jobs (for example). Check the following info to understand the running process of spiders:
.crawl!
method
.crawl!
(class method) performs a full run of a particular spider. This method will return run_info if run was successful, or an exception if something went wrong.
class ExampleSpider < Kimurai::Base
@name = "example_spider"
@engine = :mechanize
@start_urls = ["https://example.com/"]
def parse(response, url:, data: {})
title = response.xpath("//title").text.squish
end
end
ExampleSpider.crawl!
# => { :spider_name => "example_spider", :status => :completed, :environment => "development", :start_time => 2018-08-22 18:20:16 +0400, :stop_time => 2018-08-22 18:20:17 +0400, :running_time => 1.216, :visits => { :requests => 1, :responses => 1 }, :items => { :sent => 0, :processed => 0 }, :error => nil }
You can't .crawl!
spider in different thread if it still running (because spider instances store some shared data in the @run_info
class variable while crawl
ing):
2.times do |i|
Thread.new { p i, ExampleSpider.crawl! }
end # =>
# 1
# false
# 0
# {:spider_name=>"example_spider", :status=>:completed, :environment=>"development", :start_time=>2018-08-22 18:49:22 +0400, :stop_time=>2018-08-22 18:49:23 +0400, :running_time=>0.801, :visits=>{:requests=>1, :responses=>1}, :items=>{:sent=>0, :processed=>0}, :error=>nil}
So what if you're don't care about stats and just want to process request to a particular spider method and get the returning value from this method? Use .parse!
instead:
.parse!(:method_name, url:)
method
.parse!
(class method) creates a new spider instance and performs a request to given method with a given url. Value from the method will be returned back:
class ExampleSpider < Kimurai::Base
@name = "example_spider"
@engine = :mechanize
@start_urls = ["https://example.com/"]
def parse(response, url:, data: {})
title = response.xpath("//title").text.squish
end
end
ExampleSpider.parse!(:parse, url: "https://example.com/")
# => "Example Domain"
Like .crawl!
, .parse!
method takes care of a browser instance and kills it (browser.destroy_driver!
) before returning the value. Unlike .crawl!
, .parse!
method can be called from different threads at the same time:
urls = ["https://www.google.com/", "https://www.reddit.com/", "https://en.wikipedia.org/"]
urls.each do |url|
Thread.new { p ExampleSpider.parse!(:parse, url: url) }
end # =>
# "Google"
# "Wikipedia, the free encyclopedia"
# "reddit: the front page of the internetHotHot"
Keep in mind, that save_to and unique? helpers are not thread-safe while using .parse!
method.
Kimurai.list
and Kimurai.find_by_name()
class GoogleSpider < Kimurai::Base
@name = "google_spider"
end
class RedditSpider < Kimurai::Base
@name = "reddit_spider"
end
class WikipediaSpider < Kimurai::Base
@name = "wikipedia_spider"
end
# To get the list of all available spider classes:
Kimurai.list
# => {"google_spider"=>GoogleSpider, "reddit_spider"=>RedditSpider, "wikipedia_spider"=>WikipediaSpider}
# To find a particular spider class by it's name:
Kimurai.find_by_name("reddit_spider")
# => RedditSpider
Automated sever setup and deployment
EXPERIMENTAL
Setup
You can automatically setup required environment for Kimurai on the remote server (currently there is only Ubuntu Server 18.04 support) using $ kimurai setup
command. setup
will perform installation of: latest Ruby with Rbenv, browsers with webdrivers and in additional databases clients (only clients) for MySQL, Postgres and MongoDB (so you can connect to a remote database from ruby).
To perform remote server setup, Ansible is required on the desktop machine (to install: Ubuntu:
$ sudo apt install ansible
, Mac OS X:$ brew install ansible
)
It's recommended to use regular user to setup the server, not
root
. To create a new user, login to the server$ ssh root@your_server_ip
, type$ adduser username
to create a user, and$ gpasswd -a username sudo
to add new user to a sudo group.
Example:
$ kimurai setup [email protected] --ask-sudo --ssh-key-path path/to/private_key
CLI options:
--ask-sudo
pass this option to ask sudo (user) password for system-wide installation of packages (apt install
)--ssh-key-path path/to/private_key
authorization on the server using private ssh key. You can omit it if required key already added to keychain on your desktop (Ansible uses SSH agent forwarding)--ask-auth-pass
authorization on the server using user password, alternative option to--ssh-key-path
.-p port_number
custom port for ssh connection (-p 2222
)
You can check setup playbook here
Deploy
After successful setup
you can deploy a spider to the remote server using $ kimurai deploy
command. On each deploy there are performing several tasks: 1) pull repo from a remote origin to ~/repo_name
user directory 2) run bundle install
3) Update crontab whenever --update-crontab
(to update spider schedule from schedule.rb file).
Before deploy
make sure that inside spider directory you have: 1) git repository with remote origin (bitbucket, github, etc.) 2) Gemfile
3) schedule.rb inside subfolder config
(config/schedule.rb
).
Example:
$ kimurai deploy [email protected] --ssh-key-path path/to/private_key --repo-key-path path/to/repo_private_key
CLI options: same like for setup command (except --ask-sudo
), plus
--repo-url
provide custom repo url (--repo-url [email protected]:username/repo_name.git
), otherwise currentorigin/master
will be taken (output from$ git remote get-url origin
)--repo-key-path
if git repository is private, authorization is required to pull the code on the remote server. Use this option to provide a private repository SSH key. You can omit it if required key already added to keychain on your desktop (same like with--ssh-key-path
option)
You can check deploy playbook here
Spider @config
Using @config
you can set several options for a spider, like proxy, user-agent, default cookies/headers, delay between requests, browser memory control and so on:
class Spider < Kimurai::Base
USER_AGENTS = ["Chrome", "Firefox", "Safari", "Opera"]
PROXIES = ["2.3.4.5:8080:http:username:password", "3.4.5.6:3128:http", "1.2.3.4:3000:socks5"]
@engine = :poltergeist_phantomjs
@start_urls = ["https://example.com/"]
@config = {
headers: { "custom_header" => "custom_value" },
cookies: [{ name: "cookie_name", value: "cookie_value", domain: ".example.com" }],
user_agent: -> { USER_AGENTS.sample },
proxy: -> { PROXIES.sample },
window_size: [1366, 768],
disable_images: true,
restart_if: {
# Restart browser if provided memory limit (in kilobytes) is exceeded:
memory_limit: 350_000
},
before_request: {
# Change user agent before each request:
change_user_agent: true,
# Change proxy before each request:
change_proxy: true,
# Clear all cookies and set default cookies (if provided) before each request:
clear_and_set_cookies: true,
# Process delay before each request:
delay: 1..3
}
}
def parse(response, url:, data: {})
# ...
end
end
All available @config
options
@config = {
# Custom headers, format: hash. Example: { "some header" => "some value", "another header" => "another value" }
# Works only for :mechanize and :poltergeist_phantomjs engines (Selenium doesn't allow to set/get headers)
headers: {},
# Custom User Agent, format: string or lambda.
# Use lambda if you want to rotate user agents before each run:
# user_agent: -> { ARRAY_OF_USER_AGENTS.sample }
# Works for all engines
user_agent: "Mozilla/5.0 Firefox/61.0",
# Custom cookies, format: array of hashes.
# Format for a single cookie: { name: "cookie name", value: "cookie value", domain: ".example.com" }
# Works for all engines
cookies: [],
# Proxy, format: string or lambda. Format of a proxy string: "ip:port:protocol:user:password"
# `protocol` can be http or socks5. User and password are optional.
# Use lambda if you want to rotate proxies before each run:
# proxy: -> { ARRAY_OF_PROXIES.sample }
# Works for all engines, but keep in mind that Selenium drivers doesn't support proxies
# with authorization. Also, Mechanize doesn't support socks5 proxy format (only http)
proxy: "3.4.5.6:3128:http:user:pass",
# If enabled, browser will ignore any https errors. It's handy while using a proxy
# with self-signed SSL cert (for example Crawlera or Mitmproxy)
# Also, it will allow to visit webpages with expires SSL certificate.
# Works for all engines
ignore_ssl_errors: true,
# Custom window size, works for all engines
window_size: [1366, 768],
# Skip images downloading if true, works for all engines
disable_images: true,
# Selenium engines only: headless mode, `:native` or `:virtual_display` (default is :native)
# Although native mode has a better performance, virtual display mode
# sometimes can be useful. For example, some websites can detect (and block)
# headless chrome, so you can use virtual_display mode instead
headless_mode: :native,
# This option tells the browser not to use a proxy for the provided list of domains or IP addresses.
# Format: array of strings. Works only for :selenium_firefox and selenium_chrome
proxy_bypass_list: [],
# Option to provide custom SSL certificate. Works only for :poltergeist_phantomjs and :mechanize
ssl_cert_path: "path/to/ssl_cert",
# Inject some JavaScript code to the browser.
# Format: array of strings, where each string is a path to JS file.
# Works only for poltergeist_phantomjs engine (Selenium doesn't support JS code injection)
extensions: ["lib/code_to_inject.js"],
# Automatically skip duplicated (already visited) urls when using `request_to` method.
# Possible values: `true` or `hash` with options.
# In case of `true`, all visited urls will be added to the storage's scope `:requests_urls`
# and if url already contains in this scope, request will be skipped.
# You can configure this setting by providing additional options as hash:
# `skip_duplicate_requests: { scope: :custom_scope, check_only: true }`, where:
# `scope:` - use custom scope than `:requests_urls`
# `check_only:` - if true, then scope will be only checked for url, url will not
# be added to the scope if scope doesn't contains it.
# works for all drivers
skip_duplicate_requests: true,
# Automatically skip provided errors while requesting a page.
# If raised error matches one of the errors in the list, then this error will be caught,
# and request will be skipped.
# It is a good idea to skip errors like NotFound(404), etc.
# Format: array where elements are error classes or/and hashes. You can use hash format
# for more flexibility: `{ error: "RuntimeError", message: "404 => Net::HTTPNotFound" }`.
# Provided `message:` will be compared with a full error message using `String#include?`. Also
# you can use regex instead: `{ error: "RuntimeError", message: /404|403/ }`.
skip_request_errors: [{ error: RuntimeError, message: "404 => Net::HTTPNotFound" }],
# Automatically retry provided errors with a few attempts while requesting a page.
# If raised error matches one of the errors in the list, then this error will be caught
# and the request will be processed again within a delay. There are 3 attempts:
# first: delay 15 sec, second: delay 30 sec, third: delay 45 sec.
# If after 3 attempts there is still an exception, then the exception will be raised.
# It is a good idea to try to retry errros like `ReadTimeout`, `HTTPBadGateway`, etc.
# Format: same like for `skip_request_errors` option.
retry_request_errors: [Net::ReadTimeout],
# Handle page encoding while parsing html response using Nokogiri. There are two modes:
# Auto (`:auto`) (try to fetch correct encoding from <meta http-equiv="Content-Type"> or <meta charset> tags)
# Set required encoding manually, example: `encoding: "GB2312"` (Set required encoding manually)
# Default this option is unset.
encoding: nil,
# Restart browser if one of the options is true:
restart_if: {
# Restart browser if provided memory limit (in kilobytes) is exceeded (works for all engines)
memory_limit: 350_000,
# Restart browser if provided requests limit is exceeded (works for all engines)
requests_limit: 100
},
# Perform several actions before each request:
before_request: {
# Change proxy before each request. The `proxy:` option above should be presented
# and has lambda format. Works only for poltergeist and mechanize engines
# (Selenium doesn't support proxy rotation).
change_proxy: true,
# Change user agent before each request. The `user_agent:` option above should be presented
# and has lambda format. Works only for poltergeist and mechanize engines
# (selenium doesn't support to get/set headers).
change_user_agent: true,
# Clear all cookies before each request, works for all engines
clear_cookies: true,
# If you want to clear all cookies + set custom cookies (`cookies:` option above should be presented)
# use this option instead (works for all engines)
clear_and_set_cookies: true,
# Global option to set delay between requests.
# Delay can be `Integer`, `Float` or `Range` (`2..5`). In case of a range,
# delay number will be chosen randomly for each request: `rand (2..5) # => 3`
delay: 1..3
}
}
As you can see, most of the options are universal for any engine.
@config
settings inheritance
Settings can be inherited:
class ApplicationSpider < Kimurai::Base
@engine = :poltergeist_phantomjs
@config = {
user_agent: "Firefox",
disable_images: true,
restart_if: { memory_limit: 350_000 },
before_request: { delay: 1..2 }
}
end
class CustomSpider < ApplicationSpider
@name = "custom_spider"
@start_urls = ["https://example.com/"]
@config = {
before_request: { delay: 4..6 }
}
def parse(response, url:, data: {})
# ...
end
end
Here, @config
of CustomSpider
will be deep merged with ApplicationSpider
config, so CustomSpider
will keep all inherited options with only delay
updated.
Project mode
Kimurai can work in project mode (Like Scrapy). To generate a new project, run: $ kimurai generate project web_spiders
(where web_spiders
is a name of project).
Structure of the project:
.
├── config/
│ ├── initializers/
│ ├── application.rb
│ ├── automation.yml
│ ├── boot.rb
│ └── schedule.rb
├── spiders/
│ └── application_spider.rb
├── db/
├── helpers/
│ └── application_helper.rb
├── lib/
├── log/
├── pipelines/
│ ├── validator.rb
│ └── saver.rb
├── tmp/
├── .env
├── Gemfile
├── Gemfile.lock
└── README.md
config/
folder for configutation filesconfig/initializers
Rails-like initializers to load custom code at start of frameworkconfig/application.rb
configuration settings for Kimurai (Kimurai.configure do
block)config/automation.yml
specify some settings for setup and deployconfig/boot.rb
loads framework and projectconfig/schedule.rb
Cron schedule for spiders
spiders/
folder for spidersspiders/application_spider.rb
Base parent class for all spiders
db/
store here all database files (sqlite
,json
,csv
, etc.)helpers/
Rails-like helpers for spidershelpers/application_helper.rb
all methods inside ApplicationHelper module will be available for all spiders
lib/
put here custom Ruby codelog/
folder for logspipelines/
folder for Scrapy-like pipelines. One file = one pipelinepipelines/validator.rb
example pipeline to validate itempipelines/saver.rb
example pipeline to save item
tmp/
folder for temp. files.env
file to store ENV variables for project and load them using DotenvGemfile
dependency fileReadme.md
example project readme
Generate new spider
To generate a new spider in the project, run:
$ kimurai generate spider example_spider
create spiders/example_spider.rb
Command will generate a new spider class inherited from ApplicationSpider
:
class ExampleSpider < ApplicationSpider
@name = "example_spider"
@start_urls = []
@config = {}
def parse(response, url:, data: {})
end
end
Crawl
To run a particular spider in the project, run: $ bundle exec kimurai crawl example_spider
. Don't forget to add bundle exec
before command to load required environment.
List
To list all project spiders, run: $ bundle exec kimurai list
Parse
For project spiders you can use $ kimurai parse
command which helps to debug spiders:
$ bundle exec kimurai parse example_spider parse_product --url https://example-shop.com/product-1
where example_spider
is a spider to run, parse_product
is a spider method to process and --url
is url to open inside processing method.
Pipelines, send_item
method
You can use item pipelines to organize and store in one place item processing logic for all project spiders (also check Scrapy description of pipelines).
Imagine if you have three spiders where each of them crawls different e-commerce shop and saves only shoe positions. For each spider, you want to save items only with "shoe" category, unique sku, valid title/price and with existing images. To avoid code duplication between spiders, use pipelines:
pipelines/validator.rb
class Validator < Kimurai::Pipeline
def process_item(item, options: {})
# Here you can validate item and raise `DropItemError`
# if one of the validations failed. Examples:
# Drop item if it's category is not "shoe":
if item[:category] != "shoe"
raise DropItemError, "Wrong item category"
end
# Check item sku for uniqueness using buit-in unique? helper:
unless unique?(:sku, item[:sku])
raise DropItemError, "Item sku is not unique"
end
# Drop item if title length shorter than 5 symbols:
if item[:title].size < 5
raise DropItemError, "Item title is short"
end
# Drop item if price is not present
unless item[:price].present?
raise DropItemError, "item price is not present"
end
# Drop item if it doesn't contains any images:
unless item[:images].present?
raise DropItemError, "Item images are not present"
end
# Pass item to the next pipeline (if it wasn't dropped):
item
end
end
pipelines/saver.rb
class Saver < Kimurai::Pipeline
def process_item(item, options: {})
# Here you can save item to the database, send it to a remote API or
# simply save item to a file format using `save_to` helper:
# To get the name of current spider: `spider.class.name`
save_to "db/#{spider.class.name}.json", item, format: :json
item
end
end
spiders/application_spider.rb
class ApplicationSpider < Kimurai::Base
@engine = :selenium_chrome
# Define pipelines (by order) for all spiders:
@pipelines = [:validator, :saver]
end
spiders/shop_spider_1.rb
class ShopSpiderOne < ApplicationSpider
@name = "shop_spider_1"
@start_urls = ["https://shop-1.com"]
# ...
def parse_product(response, url:, data: {})
# ...
# Send item to pipelines:
send_item item
end
end
spiders/shop_spider_2.rb
class ShopSpiderTwo < ApplicationSpider
@name = "shop_spider_2"
@start_urls = ["https://shop-2.com"]
def parse_product(response, url:, data: {})
# ...
# Send item to pipelines:
send_item item
end
end
spiders/shop_spider_3.rb
class ShopSpiderThree < ApplicationSpider
@name = "shop_spider_3"
@start_urls = ["https://shop-3.com"]
def parse_product(response, url:, data: {})
# ...
# Send item to pipelines:
send_item item
end
end
When you start using pipelines, there are stats for items appears:
pipelines/validator.rb
class Validator < Kimurai::Pipeline
def process_item(item, options: {})
if item[:star_count] < 10
raise DropItemError, "Repository doesn't have enough stars"
end
item
end
end
spiders/github_spider.rb
class GithubSpider < ApplicationSpider
@name = "github_spider"
@engine = :selenium_chrome
@pipelines = [:validator]
@start_urls = ["https://github.com/search?q=Ruby%20Web%20Scraping"]
@config = {
user_agent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36",
before_request: { delay: 4..7 }
}
def parse(response, url:, data: {})
response.xpath("//ul[@class='repo-list']/div//h3/a").each do |a|
request_to :parse_repo_page, url: absolute_url(a[:href], base: url)
end
if next_page = response.at_xpath("//a[@class='next_page']")
request_to :parse, url: absolute_url(next_page[:href], base: url)
end
end
def parse_repo_page(response, url:, data: {})
item = {}
item[:owner] = response.xpath("//h1//a[@rel='author']").text
item[:repo_name] = response.xpath("//h1/strong[@itemprop='name']/a").text
item[:repo_url] = url
item[:description] = response.xpath("//span[@itemprop='about']").text.squish
item[:tags] = response.xpath("//div[@id='topics-list-container']/div/a").map { |a| a.text.squish }
item[:watch_count] = response.xpath("//ul[@class='pagehead-actions']/li[contains(., 'Watch')]/a[2]").text.squish.delete(",").to_i
item[:star_count] = response.xpath("//ul[@class='pagehead-actions']/li[contains(., 'Star')]/a[2]").text.squish.delete(",").to_i
item[:fork_count] = response.xpath("//ul[@class='pagehead-actions']/li[contains(., 'Fork')]/a[2]").text.squish.delete(",").to_i
item[:last_commit] = response.xpath("//span[@itemprop='dateModified']/*").text
send_item item
end
end
$ bundle exec kimurai crawl github_spider
I, [2018-08-22 15:56:35 +0400#1358] [M: 47347279209980] INFO -- github_spider: Spider: started: github_spider
D, [2018-08-22 15:56:35 +0400#1358] [M: 47347279209980] DEBUG -- github_spider: BrowserBuilder (selenium_chrome): created browser instance
I, [2018-08-22 15:56:40 +0400#1358] [M: 47347279209980] INFO -- github_spider: Browser: started get request to: https://github.com/search?q=Ruby%20Web%20Scraping
I, [2018-08-22 15:56:44 +0400#1358] [M: 47347279209980] INFO -- github_spider: Browser: finished get request to: https://github.com/search?q=Ruby%20Web%20Scraping
I, [2018-08-22 15:56:44 +0400#1358] [M: 47347279209980] INFO -- github_spider: Info: visits: requests: 1, responses: 1
D, [2018-08-22 15:56:44 +0400#1358] [M: 47347279209980] DEBUG -- github_spider: Browser: driver.current_memory: 116182
D, [2018-08-22 15:56:44 +0400#1358] [M: 47347279209980] DEBUG -- github_spider: Browser: sleep 5 seconds before request...
I, [2018-08-22 15:56:49 +0400#1358] [M: 47347279209980] INFO -- github_spider: Browser: started get request to: https://github.com/lorien/awesome-web-scraping
I, [2018-08-22 15:56:50 +0400#1358] [M: 47347279209980] INFO -- github_spider: Browser: finished get request to: https://github.com/lorien/awesome-web-scraping
I, [2018-08-22 15:56:50 +0400#1358] [M: 47347279209980] INFO -- github_spider: Info: visits: requests: 2, responses: 2
D, [2018-08-22 15:56:50 +0400#1358] [M: 47347279209980] DEBUG -- github_spider: Browser: driver.current_memory: 217432
D, [2018-08-22 15:56:50 +0400#1358] [M: 47347279209980] DEBUG -- github_spider: Pipeline: starting processing item through 1 pipeline...
I, [2018-08-22 15:56:50 +0400#1358] [M: 47347279209980] INFO -- github_spider: Pipeline: processed: {"owner":"lorien","repo_name":"awesome-web-scraping","repo_url":"https://github.com/lorien/awesome-web-scraping","description":"List of libraries, tools and APIs for web scraping and data processing.","tags":["awesome","awesome-list","web-scraping","data-processing","python","javascript","php","ruby"],"watch_count":159,"star_count":2423,"fork_count":358,"last_commit":"4 days ago"}
I, [2018-08-22 15:56:50 +0400#1358] [M: 47347279209980] INFO -- github_spider: Info: items: sent: 1, processed: 1
D, [2018-08-22 15:56:50 +0400#1358] [M: 47347279209980] DEBUG -- github_spider: Browser: sleep 6 seconds before request...
...
I, [2018-08-22 16:11:50 +0400#1358] [M: 47347279209980] INFO -- github_spider: Browser: started get request to: https://github.com/preston/idclight
I, [2018-08-22 16:11:51 +0400#1358] [M: 47347279209980] INFO -- github_spider: Browser: finished get request to: https://github.com/preston/idclight
I, [2018-08-22 16:11:51 +0400#1358] [M: 47347279209980] INFO -- github_spider: Info: visits: requests: 140, responses: 140
D, [2018-08-22 16:11:51 +0400#1358] [M: 47347279209980] DEBUG -- github_spider: Browser: driver.current_memory: 211713
D, [2018-08-22 16:11:51 +0400#1358] [M: 47347279209980] DEBUG -- github_spider: Pipeline: starting processing item through 1 pipeline...
E, [2018-08-22 16:11:51 +0400#1358] [M: 47347279209980] ERROR -- github_spider: Pipeline: dropped: #<Kimurai::Pipeline::DropItemError: Repository doesn't have enough stars>, item: {:owner=>"preston", :repo_name=>"idclight", :repo_url=>"https://github.com/preston/idclight", :description=>"A Ruby gem for accessing the freely available IDClight (IDConverter Light) web service, which convert between different types of gene IDs such as Hugo and Entrez. Queries are screen scraped from http://idclight.bioinfo.cnio.es.", :tags=>[], :watch_count=>6, :star_count=>1, :fork_count=>0, :last_commit=>"on Apr 12, 2012"}
I, [2018-08-22 16:11:51 +0400#1358] [M: 47347279209980] INFO -- github_spider: Info: items: sent: 127, processed: 12
I, [2018-08-22 16:11:51 +0400#1358] [M: 47347279209980] INFO -- github_spider: Browser: driver selenium_chrome has been destroyed
I, [2018-08-22 16:11:51 +0400#1358] [M: 47347279209980] INFO -- github_spider: Spider: stopped: {:spider_name=>"github_spider", :status=>:completed, :environment=>"development", :start_time=>2018-08-22 15:56:35 +0400, :stop_time=>2018-08-22 16:11:51 +0400, :running_time=>"15m, 16s", :visits=>{:requests=>140, :responses=>140}, :items=>{:sent=>127, :processed=>12}, :error=>nil}
Also, you can pass custom options to pipeline from a particular spider if you want to change pipeline behavior for this spider:
spiders/custom_spider.rb
class CustomSpider < ApplicationSpider
@name = "custom_spider"
@start_urls = ["https://example.com"]
@pipelines = [:validator]
# ...
def parse_item(response, url:, data: {})
# ...
# Pass custom option `skip_uniq_checking` for Validator pipeline:
send_item item, validator: { skip_uniq_checking: true }
end
end
pipelines/validator.rb
class Validator < Kimurai::Pipeline
def process_item(item, options: {})
# Do not check item sku for uniqueness if options[:skip_uniq_checking] is true
if options[:skip_uniq_checking] != true
raise DropItemError, "Item sku is not unique" unless unique?(:sku, item[:sku])
end
end
end
Runner
You can run project spiders one by one or in parallel using $ kimurai runner
command:
$ bundle exec kimurai list
custom_spider
example_spider
github_spider
$ bundle exec kimurai runner -j 3
>>> Runner: started: {:id=>1533727423, :status=>:processing, :start_time=>2018-08-08 15:23:43 +0400, :stop_time=>nil, :environment=>"development", :concurrent_jobs=>3, :spiders=>["custom_spider", "github_spider", "example_spider"]}
> Runner: started spider: custom_spider, index: 0
> Runner: started spider: github_spider, index: 1
> Runner: started spider: example_spider, index: 2
< Runner: stopped spider: custom_spider, index: 0
< Runner: stopped spider: example_spider, index: 2
< Runner: stopped spider: github_spider, index: 1
<<< Runner: stopped: {:id=>1533727423, :status=>:completed, :start_time=>2018-08-08 15:23:43 +0400, :stop_time=>2018-08-08 15:25:11 +0400, :environment=>"development", :concurrent_jobs=>3, :spiders=>["custom_spider", "github_spider", "example_spider"]}
Each spider runs in a separate process. Spiders logs available at log/
folder. Pass -j
option to specify how many spiders should be processed at the same time (default is 1).
You can provide additional arguments like --include
or --exclude
to specify which spiders to run:
# Run only custom_spider and example_spider:
$ bundle exec kimurai runner --include custom_spider example_spider
# Run all except github_spider:
$ bundle exec kimurai runner --exclude github_spider
Runner callbacks
You can perform custom actions before runner starts and after runner stops using config.runner_at_start_callback
and config.runner_at_stop_callback
. Check config/application.rb to see example.
Chat Support and Feedback
Will be updated
License
The gem is available as open source under the terms of the MIT License.
More Resourcesto explore the angular.
mail [email protected] to add your project or resources here 🔥.
- 1A modern, responsive admin framework for Ruby on Rails
https://github.com/TrestleAdmin/trestle
A modern, responsive admin framework for Ruby on Rails - TrestleAdmin/trestle
- 2⚡️ Vite.js in Ruby, bringing joy to your JavaScript experience
https://github.com/elmassimo/vite_ruby
⚡️ Vite.js in Ruby, bringing joy to your JavaScript experience - ElMassimo/vite_ruby
- 3Rails Assets
https://rails-assets.org
The solution to assets management in Rails.
- 4Avo
https://avohq.io/rails-admin
Ruby on Rails Admin Panel Framework
- 5Blazing fast deployer and server automation tool
https://github.com/mina-deploy/mina
Blazing fast deployer and server automation tool. Contribute to mina-deploy/mina development by creating an account on GitHub.
- 6Action caching for Action Pack (removed from core in Rails 4.0)
https://github.com/rails/actionpack-action_caching
Action caching for Action Pack (removed from core in Rails 4.0) - rails/actionpack-action_caching
- 7Awesome Ruby | LibHunt
https://ruby.libhunt.com
Your go-to Ruby Toolbox. A collection of awesome Ruby gems, tools, frameworks and software. 1319 projects organized into 137 categories.
- 8Authorization framework for Ruby/Rails applications
https://github.com/palkan/action_policy
Authorization framework for Ruby/Rails applications - palkan/action_policy
- 9Friendly English-like interface for your command line. Don't remember a command? Ask Betty.
https://github.com/pickhardt/betty
Friendly English-like interface for your command line. Don't remember a command? Ask Betty. - pickhardt/betty
- 10:-1: Less.js For Rails
https://github.com/metaskills/less-rails
:-1: :train: Less.js For Rails. Contribute to metaskills/less-rails development by creating an account on GitHub.
- 11A ruby gem for creating navigations (with multiple levels) for your Rails, Sinatra or Padrino applications. Render your navigation as html list, link list or breadcrumbs.
https://github.com/codeplant/simple-navigation
A ruby gem for creating navigations (with multiple levels) for your Rails, Sinatra or Padrino applications. Render your navigation as html list, link list or breadcrumbs. - codeplant/simple-naviga...
- 12A make-like build utility for Ruby.
https://github.com/ruby/rake
A make-like build utility for Ruby. Contribute to ruby/rake development by creating an account on GitHub.
- 13An authentication system generator for Rails applications.
https://github.com/lazaronixon/authentication-zero
An authentication system generator for Rails applications. - GitHub - lazaronixon/authentication-zero: An authentication system generator for Rails applications.
- 14:newspaper: Pooled active support compliant caching with redis
https://github.com/sorentwo/readthis
:newspaper: Pooled active support compliant caching with redis - sorentwo/readthis
- 15🥞 The thin API stack.
https://github.com/crepe/crepe
🥞 The thin API stack. Contribute to crepe/crepe development by creating an account on GitHub.
- 16STDOUT text formatting
https://github.com/geemus/formatador
STDOUT text formatting. Contribute to geemus/formatador development by creating an account on GitHub.
- 17The authorization Gem for Ruby on Rails.
https://github.com/CanCanCommunity/cancancan
The authorization Gem for Ruby on Rails. Contribute to CanCanCommunity/cancancan development by creating an account on GitHub.
- 18General purpose Command Line Interface (CLI) framework for Ruby
https://github.com/dry-rb/dry-cli
General purpose Command Line Interface (CLI) framework for Ruby - dry-rb/dry-cli
- 19The Ruby Toolbox - Know your options!
https://www.ruby-toolbox.com
Explore and compare open source Ruby libraries
- 20Bundler-like DSL + rake tasks for Bower on Rails
https://github.com/rharriso/bower-rails
Bundler-like DSL + rake tasks for Bower on Rails. Contribute to rharriso/bower-rails development by creating an account on GitHub.
- 21Easy Akismet and TypePad AntiSpam integration for Rails
https://github.com/joshfrench/rakismet
Easy Akismet and TypePad AntiSpam integration for Rails - joshfrench/rakismet
- 22Bundler for Sprockets
https://github.com/torba-rb/torba
Bundler for Sprockets. Contribute to torba-rb/torba development by creating an account on GitHub.
- 23A set of Rack middleware and cache helpers that implement various caching strategies.
https://github.com/artsy/garner
A set of Rack middleware and cache helpers that implement various caching strategies. - artsy/garner
- 24Text-based logic question captcha's for Rails 🚫🤖
https://github.com/matthutchinson/acts_as_textcaptcha
Text-based logic question captcha's for Rails 🚫🤖. Contribute to matthutchinson/acts_as_textcaptcha development by creating an account on GitHub.
- 25Autoprefixer for Ruby and Ruby on Rails
https://github.com/ai/autoprefixer-rails
Autoprefixer for Ruby and Ruby on Rails. Contribute to ai/autoprefixer-rails development by creating an account on GitHub.
- 26A slice of functional programming to chain ruby services and blocks, thus providing a new approach to flow control. Make them flow!
https://github.com/apneadiving/waterfall
A slice of functional programming to chain ruby services and blocks, thus providing a new approach to flow control. Make them flow! - apneadiving/waterfall
- 27Multi-role and whitelist based authorization gem for Rails (and not only Rails!)
https://github.com/chaps-io/access-granted
Multi-role and whitelist based authorization gem for Rails (and not only Rails!) - chaps-io/access-granted
- 28MidiSmtpServer - brief profile
https://4commerce-technologies-ag.github.io/midi-smtp-server/
The highly customizable ruby SMTP-Server and SMTP-Service library with builtin support for AUTH and SSL/STARTTLS, 8BITMIME and SMTPUTF8, IPv4 and IPv6 and additional features. Whatever purpose of operation is given, if SMTP processing is required, you can choose MidiSmtpServer.
- 29a Ruby command-line application framework
https://github.com/mdub/clamp
a Ruby command-line application framework. Contribute to mdub/clamp development by creating an account on GitHub.
- 30A Rails engine that helps you put together a super-flexible admin dashboard.
https://github.com/thoughtbot/administrate
A Rails engine that helps you put together a super-flexible admin dashboard. - thoughtbot/administrate
- 31Expose libstemmer_c to Ruby
https://github.com/aurelian/ruby-stemmer
Expose libstemmer_c to Ruby. Contribute to aurelian/ruby-stemmer development by creating an account on GitHub.
- 32A dead simple API wrapper
https://github.com/inf0rmer/blanket
A dead simple API wrapper. Contribute to inf0rmer/blanket development by creating an account on GitHub.
- 33OmniAuth is a flexible authentication system utilizing Rack middleware.
https://github.com/omniauth/omniauth
OmniAuth is a flexible authentication system utilizing Rack middleware. - omniauth/omniauth
- 34Command line for your projects
https://github.com/DannyBen/runfile
Command line for your projects. Contribute to DannyBen/runfile development by creating an account on GitHub.
- 35Save time and headaches, and create a more easily maintainable set of pages, with ActiveScaffold. ActiveScaffold handles all your CRUD (create, read, update, delete) user interface needs, leaving you more time to focus on more challenging (and interesting!) problems.
https://github.com/activescaffold/active_scaffold
Save time and headaches, and create a more easily maintainable set of pages, with ActiveScaffold. ActiveScaffold handles all your CRUD (create, read, update, delete) user interface needs, leaving y...
- 36Sunzi: Server configuration automation for minimalists
https://github.com/kenn/sunzi
Sunzi: Server configuration automation for minimalists - kenn/sunzi
- 37First-party email analytics for Rails
https://github.com/ankane/ahoy_email
First-party email analytics for Rails. Contribute to ankane/ahoy_email development by creating an account on GitHub.
- 38brain-dead simple parallel processing for ruby
https://github.com/ahoward/forkoff
brain-dead simple parallel processing for ruby. Contribute to ahoward/forkoff development by creating an account on GitHub.
- 39Jbuilder: generate JSON objects with a Builder-style DSL
https://github.com/rails/jbuilder
Jbuilder: generate JSON objects with a Builder-style DSL - rails/jbuilder
- 40Make highcharts a la ruby , works in rails 5.X / 4.X / 3.X, and other ruby web frameworks
https://github.com/michelson/lazy_high_charts
Make highcharts a la ruby , works in rails 5.X / 4.X / 3.X, and other ruby web frameworks - michelson/lazy_high_charts
- 41Ruby string class extension. It add some methods to set color, background color and text effect on console easier using ANSI escape sequences.
https://github.com/fazibear/colorize
Ruby string class extension. It add some methods to set color, background color and text effect on console easier using ANSI escape sequences. - fazibear/colorize
- 42Ruby in your shell!
https://github.com/tombenner/ru
Ruby in your shell! Contribute to tombenner/ru development by creating an account on GitHub.
- 43A simple, Git-powered wiki with a local frontend and support for many kinds of markup and content.
https://github.com/gollum/gollum
A simple, Git-powered wiki with a local frontend and support for many kinds of markup and content. - gollum/gollum
- 44Doorkeeper is an OAuth 2 provider for Ruby on Rails / Grape.
https://github.com/doorkeeper-gem/doorkeeper
Doorkeeper is an OAuth 2 provider for Ruby on Rails / Grape. - doorkeeper-gem/doorkeeper
- 45A tiny, HAL-compliant JSON presenter for your Ruby APIs.
https://github.com/crepe/jsonite
A tiny, HAL-compliant JSON presenter for your Ruby APIs. - crepe/jsonite
- 46An opinionated toolkit for writing excellent APIs in Ruby.
https://github.com/interagent/pliny
An opinionated toolkit for writing excellent APIs in Ruby. - interagent/pliny
- 47Ensures presence and type of your app's ENV-variables (mirror)
https://github.com/eval/envied
Ensures presence and type of your app's ENV-variables (mirror) - eval/envied
- 48Easy to use and read action and content based authorizations.
https://github.com/elorest/petergate
Easy to use and read action and content based authorizations. - elorest/petergate
- 49:zap: Don't make your Rubies go fast. Make them go fasterer ™.
https://github.com/DamirSvrtan/fasterer
:zap: Don't make your Rubies go fast. Make them go fasterer ™. :zap: - GitHub - DamirSvrtan/fasterer: :zap: Don't make your Rubies go fast. Make them go fasterer ™.
- 50Pretty print your Ruby objects with style -- in full color and with proper indentation
https://github.com/awesome-print/awesome_print
Pretty print your Ruby objects with style -- in full color and with proper indentation - awesome-print/awesome_print
- 51Compose your business logic into commands that sanitize and validate input.
https://github.com/cypriss/mutations
Compose your business logic into commands that sanitize and validate input. - cypriss/mutations
- 52ActiveModel::Serializer implementation and Rails hooks
https://github.com/rails-api/active_model_serializers
ActiveModel::Serializer implementation and Rails hooks - rails-api/active_model_serializers
- 53A micro library providing Ruby objects with Publish-Subscribe capabilities
https://github.com/krisleech/wisper
A micro library providing Ruby objects with Publish-Subscribe capabilities - krisleech/wisper
- 54A simple ruby authentication solution.
https://github.com/binarylogic/authlogic
A simple ruby authentication solution. Contribute to binarylogic/authlogic development by creating an account on GitHub.
- 55Speedy Rails JSON serialization with built-in caching
https://github.com/codenoble/cache-crispies
Speedy Rails JSON serialization with built-in caching - codenoble/cache-crispies
- 56Date and time formatting for humans.
https://github.com/jeremyw/stamp
Date and time formatting for humans. Contribute to jeremyw/stamp development by creating an account on GitHub.
- 57Yet another role-based authorization system for Rails
https://github.com/be9/acl9
Yet another role-based authorization system for Rails - be9/acl9
- 58lol_dba is a small package of rake tasks that scan your application models and displays a list of columns that probably should be indexed. Also, it can generate .sql migration scripts.
https://github.com/plentz/lol_dba
lol_dba is a small package of rake tasks that scan your application models and displays a list of columns that probably should be indexed. Also, it can generate .sql migration scripts. - plentz/lol...
- 59Polyglot workflows without leaving the comfort of your technology stack.
https://github.com/automaticmode/active_workflow
Polyglot workflows without leaving the comfort of your technology stack. - automaticmode/active_workflow
- 60CMS for Rails. For Reals.
https://github.com/wearefine/fae
CMS for Rails. For Reals. Contribute to wearefine/fae development by creating an account on GitHub.
- 61ComfortableMexicanSofa is a powerful Ruby on Rails 5.2+ CMS (Content Management System) Engine
https://github.com/comfy/comfortable-mexican-sofa
ComfortableMexicanSofa is a powerful Ruby on Rails 5.2+ CMS (Content Management System) Engine - comfy/comfortable-mexican-sofa
- 62Ruby's Most Advanced Authentication Framework
https://github.com/jeremyevans/rodauth
Ruby's Most Advanced Authentication Framework. Contribute to jeremyevans/rodauth development by creating an account on GitHub.
- 63Rails 4/5 task to dump your data to db/seeds.rb
https://github.com/rroblak/seed_dump
Rails 4/5 task to dump your data to db/seeds.rb. Contribute to rroblak/seed_dump development by creating an account on GitHub.
- 64First-party, privacy-focused traffic analytics for Ruby on Rails applications.
https://github.com/BaseSecrete/active_analytics
First-party, privacy-focused traffic analytics for Ruby on Rails applications. - BaseSecrete/active_analytics
- 65The complete solution for Ruby command-line executables
https://github.com/commander-rb/commander
The complete solution for Ruby command-line executables - commander-rb/commander
- 66Google Analytics Reporting API Client for Ruby
https://github.com/tpitale/legato
Google Analytics Reporting API Client for Ruby. Contribute to tpitale/legato development by creating an account on GitHub.
- 67IdentityCache is a blob level caching solution to plug into Active Record. Don't #find, #fetch!
https://github.com/Shopify/identity_cache
IdentityCache is a blob level caching solution to plug into Active Record. Don't #find, #fetch! - Shopify/identity_cache
- 68Trilogy is a client library for MySQL-compatible database servers, designed for performance, flexibility, and ease of embedding.
https://github.com/trilogy-libraries/trilogy
Trilogy is a client library for MySQL-compatible database servers, designed for performance, flexibility, and ease of embedding. - trilogy-libraries/trilogy
- 69🚫 Stop saying "you forgot to …" in code review (in Ruby)
https://github.com/danger/danger
🚫 Stop saying "you forgot to …" in code review (in Ruby) - danger/danger
- 70Synchronises Assets between Rails and S3
https://github.com/AssetSync/asset_sync
Synchronises Assets between Rails and S3. Contribute to AssetSync/asset_sync development by creating an account on GitHub.
- 71Simple, powerful, first-party analytics for Rails
https://github.com/ankane/ahoy
Simple, powerful, first-party analytics for Rails. Contribute to ankane/ahoy development by creating an account on GitHub.
- 72Use Webpack to manage app-like JavaScript modules in Rails
https://github.com/shakacode/shakapacker
Use Webpack to manage app-like JavaScript modules in Rails - shakacode/shakapacker
- 73Rack-based asset packaging system
https://github.com/rails/sprockets
Rack-based asset packaging system. Contribute to rails/sprockets development by creating an account on GitHub.
- 74Tracking made easy: Don’t fool around with adding tracking and analytics partials to your app and concentrate on the things that matter.
https://github.com/railslove/rack-tracker
Tracking made easy: Don’t fool around with adding tracking and analytics partials to your app and concentrate on the things that matter. - railslove/rack-tracker
- 75The Ruby cloud services library.
https://github.com/fog/fog
The Ruby cloud services library. Contribute to fog/fog development by creating an account on GitHub.
- 76Ruby/ProgressBar is a text progress bar library for Ruby.
https://github.com/jfelchner/ruby-progressbar
Ruby/ProgressBar is a text progress bar library for Ruby. - jfelchner/ruby-progressbar
- 77Interactor provides a common interface for performing complex user interactions.
https://github.com/collectiveidea/interactor
Interactor provides a common interface for performing complex user interactions. - collectiveidea/interactor
- 78A resource-focused Rails library for developing JSON:API compliant servers.
https://github.com/cerebris/jsonapi-resources
A resource-focused Rails library for developing JSON:API compliant servers. - cerebris/jsonapi-resources
- 79Flexible authentication solution for Rails with Warden.
https://github.com/heartcombo/devise
Flexible authentication solution for Rails with Warden. - heartcombo/devise
- 80A fast JSON:API serializer for Ruby (fork of Netflix/fast_jsonapi)
https://github.com/jsonapi-serializer/jsonapi-serializer
A fast JSON:API serializer for Ruby (fork of Netflix/fast_jsonapi) - jsonapi-serializer/jsonapi-serializer
- 81Build JSON API-compliant APIs on Rails with no (or less) learning curve.
https://github.com/tiagopog/jsonapi-utils
Build JSON API-compliant APIs on Rails with no (or less) learning curve. - tiagopog/jsonapi-utils
- 82A Ruby gem that beautifies the terminal's ls command, with color and font-awesome icons. :tada:
https://github.com/athityakumar/colorls
A Ruby gem that beautifies the terminal's ls command, with color and font-awesome icons. :tada: - athityakumar/colorls
- 83Scope-based authorization for Ruby on Rails.
https://github.com/makandra/consul
Scope-based authorization for Ruby on Rails. Contribute to makandra/consul development by creating an account on GitHub.
- 84Truemail - configurable framework agnostic plain Ruby email validator. Verify email via Regex, DNS and SMTP
https://truemail-rb.org/truemail-gem
Configurable framework agnostic plain Ruby email validator. Truemail documentation. Verify email via Regex, DNS and SMTP
- 85A Lightweight Sass Tool Set
https://github.com/thoughtbot/bourbon
A Lightweight Sass Tool Set. Contribute to thoughtbot/bourbon development by creating an account on GitHub.
- 86a class factory and dsl for generating command line programs real quick
https://github.com/ahoward/main
a class factory and dsl for generating command line programs real quick - ahoward/main
- 87Ruby gem for ANSI terminal colors 🎨︎ VERY FAST
https://github.com/janlelis/paint
Ruby gem for ANSI terminal colors 🎨︎ VERY FAST. Contribute to janlelis/paint development by creating an account on GitHub.
- 88Create encapsulated systems of objects and focus on their interactions
https://github.com/saturnflyer/surrounded
Create encapsulated systems of objects and focus on their interactions - saturnflyer/surrounded
- 89Rails authentication with email & password.
https://github.com/thoughtbot/clearance
Rails authentication with email & password. Contribute to thoughtbot/clearance development by creating an account on GitHub.
- 90Run shell commands safely, even with user-supplied values
https://github.com/thoughtbot/terrapin
Run shell commands safely, even with user-supplied values - thoughtbot/terrapin
- 91A PostgreSQL client library for Ruby
https://github.com/ged/ruby-pg
A PostgreSQL client library for Ruby. Contribute to ged/ruby-pg development by creating an account on GitHub.
- 92The wise choice for Ruby memoization
https://github.com/panorama-ed/memo_wise
The wise choice for Ruby memoization. Contribute to panorama-ed/memo_wise development by creating an account on GitHub.
- 93A gem. For Emoji. For everyone. ❤
https://github.com/wpeterson/emoji
A gem. For Emoji. For everyone. ❤. Contribute to wpeterson/emoji development by creating an account on GitHub.
- 94Vagrant by HashiCorp
http://www.vagrantup.com
Vagrant enables users to create and configure lightweight, reproducible, and portable development environments.
- 95🍯 Unobtrusive and flexible spam protection for Rails apps
https://github.com/markets/invisible_captcha
🍯 Unobtrusive and flexible spam protection for Rails apps - markets/invisible_captcha
- 96Magical Authentication
https://github.com/Sorcery/sorcery
Magical Authentication. Contribute to Sorcery/sorcery development by creating an account on GitHub.
- 97makes creating API responses in Rails easy and fun
https://github.com/fabrik42/acts_as_api
makes creating API responses in Rails easy and fun - fabrik42/acts_as_api
- 98JWT authentication solution for Rails APIs
https://github.com/Gokul595/api_guard
JWT authentication solution for Rails APIs. Contribute to Gokul595/api_guard development by creating an account on GitHub.
- 99Voight-Kampff is a Ruby gem that detects bots, spiders, crawlers and replicants
https://github.com/biola/Voight-Kampff
Voight-Kampff is a Ruby gem that detects bots, spiders, crawlers and replicants - biola/Voight-Kampff
- 100:briefcase: Manage application specific business logic.
https://github.com/AaronLasseigne/active_interaction
:briefcase: Manage application specific business logic. - AaronLasseigne/active_interaction
- 101Make awesome command-line applications the easy way
https://github.com/davetron5000/gli
Make awesome command-line applications the easy way - davetron5000/gli
- 102Interact with REST services in an ActiveRecord-like manner
https://github.com/balvig/spyke
Interact with REST services in an ActiveRecord-like manner - balvig/spyke
- 103A simple Ruby on Rails plugin for creating and managing a breadcrumb navigation.
https://github.com/weppos/breadcrumbs_on_rails
A simple Ruby on Rails plugin for creating and managing a breadcrumb navigation. - weppos/breadcrumbs_on_rails
- 104Simple Lightweight Option Parsing - ✨ new contributors welcome ✨
https://github.com/leejarvis/slop
Simple Lightweight Option Parsing - ✨ new contributors welcome ✨ - leejarvis/slop
- 105lita.io - Domain Name For Sale | Dan.com
https://www.lita.io/
I found a great domain name for sale on Dan.com. Check it out!
- 106Avo
https://avohq.io/ruby-on-rails-content-management-system
Ruby on Rails Admin Panel Framework
- 107ReCaptcha helpers for ruby apps
https://github.com/ambethia/recaptcha
ReCaptcha helpers for ruby apps. Contribute to ambethia/recaptcha development by creating an account on GitHub.
- 108Cache Active Model Records in Rails 3
https://github.com/orslumen/record-cache
Cache Active Model Records in Rails 3. Contribute to orslumen/record-cache development by creating an account on GitHub.
- 109Flog reports the most tortured code in an easy to read pain report. The higher the score, the more pain the code is in.
https://github.com/seattlerb/flog
Flog reports the most tortured code in an easy to read pain report. The higher the score, the more pain the code is in. - seattlerb/flog
- 110OS / rodauth-oauth · GitLab
https://gitlab.com/honeyryderchuck/rodauth-oauth
rodauth OAuth and OpenID provider plugin
- 111Low-code Admin panel and Business intelligence Rails engine. No DSL - configurable from the UI. Rails Admin, Active Admin, Blazer modern alternative.
https://github.com/motor-admin/motor-admin-rails
Low-code Admin panel and Business intelligence Rails engine. No DSL - configurable from the UI. Rails Admin, Active Admin, Blazer modern alternative. - motor-admin/motor-admin-rails
- 112A plugin for versioning Rails based RESTful APIs.
https://github.com/bploetz/versionist
A plugin for versioning Rails based RESTful APIs. Contribute to bploetz/versionist development by creating an account on GitHub.
- 113🏥 A Ruby gem that helps you refactor your legacy code
https://github.com/testdouble/suture
🏥 A Ruby gem that helps you refactor your legacy code - testdouble/suture
- 114Flexible Ruby on Rails breadcrumbs plugin.
https://github.com/lassebunk/gretel
Flexible Ruby on Rails breadcrumbs plugin. Contribute to lassebunk/gretel development by creating an account on GitHub.
- 115Series of Actions with an emphasis on simplicity.
https://github.com/adomokos/light-service
Series of Actions with an emphasis on simplicity. Contribute to adomokos/light-service development by creating an account on GitHub.
- 116Kashmir is a Ruby DSL that makes serializing and caching objects a snap.
https://github.com/IFTTT/kashmir
Kashmir is a Ruby DSL that makes serializing and caching objects a snap. - IFTTT/kashmir
- 117General ruby templating with json, bson, xml, plist and msgpack support
https://github.com/nesquena/rabl
General ruby templating with json, bson, xml, plist and msgpack support - nesquena/rabl
- 118A ruby implementation of the RFC 7519 OAuth JSON Web Token (JWT) standard.
https://github.com/jwt/ruby-jwt
A ruby implementation of the RFC 7519 OAuth JSON Web Token (JWT) standard. - jwt/ruby-jwt
- 119The best data slicer! Watch a 3 minute screencast at http://tableprintgem.com
https://github.com/arches/table_print
The best data slicer! Watch a 3 minute screencast at http://tableprintgem.com - arches/table_print
- 120Write Through and Read Through caching library inspired by CacheMoney and cache_fu, support ActiveRecord 4, 5 and 6.
https://github.com/hooopo/second_level_cache
Write Through and Read Through caching library inspired by CacheMoney and cache_fu, support ActiveRecord 4, 5 and 6. - hooopo/second_level_cache
- 121A self hosted Web publishing platform on Rails.
https://github.com/publify/publify
A self hosted Web publishing platform on Rails. Contribute to publify/publify development by creating an account on GitHub.
- 122Storytime is a Rails 4+ CMS and blogging engine, with a core focus on content. It is built and maintained by @cultivatelabs
https://github.com/CultivateLabs/storytime
Storytime is a Rails 4+ CMS and blogging engine, with a core focus on content. It is built and maintained by @cultivatelabs - CultivateLabs/storytime
- 123rails/activesupport at main · rails/rails
https://github.com/rails/rails/tree/master/activesupport
Ruby on Rails. Contribute to rails/rails development by creating an account on GitHub.
- 124Rails Plugin that tracks impressions and page views
https://github.com/charlotte-ruby/impressionist
Rails Plugin that tracks impressions and page views - charlotte-ruby/impressionist
- 125Flay analyzes code for structural similarities. Differences in literal values, variable, class, method names, whitespace, programming style, braces vs do/end, etc are all ignored.
https://github.com/seattlerb/flay
Flay analyzes code for structural similarities. Differences in literal values, variable, class, method names, whitespace, programming style, braces vs do/end, etc are all ignored. - seattlerb/flay
- 126Optimist is a commandline option parser for Ruby that just gets out of your way.
https://github.com/ManageIQ/optimist
Optimist is a commandline option parser for Ruby that just gets out of your way. - ManageIQ/optimist
- 127Ruby ASCII Table Generator, simple and feature rich.
https://github.com/tj/terminal-table
Ruby ASCII Table Generator, simple and feature rich. - tj/terminal-table
- 128Colorful Terminal Spinner for Ruby 😀︎
https://github.com/janlelis/whirly
Colorful Terminal Spinner for Ruby 😀︎. Contribute to janlelis/whirly development by creating an account on GitHub.
- 129A fist full of code metrics
https://github.com/metricfu/metric_fu
A fist full of code metrics. Contribute to metricfu/metric_fu development by creating an account on GitHub.
- 130A static analysis security vulnerability scanner for Ruby on Rails applications
https://github.com/presidentbeef/brakeman
A static analysis security vulnerability scanner for Ruby on Rails applications - presidentbeef/brakeman
- 131A Ruby code quality reporter
https://github.com/whitesmith/rubycritic
A Ruby code quality reporter. Contribute to whitesmith/rubycritic development by creating an account on GitHub.
- 132High performance memcached client for Ruby
https://github.com/mperham/dalli
High performance memcached client for Ruby. Contribute to petergoldstein/dalli development by creating an account on GitHub.
- 133Tiny DSL for idiomatic date parsing and formatting in Ruby
https://github.com/sshaw/yymmdd
Tiny DSL for idiomatic date parsing and formatting in Ruby - sshaw/yymmdd
- 134A Rails engine to provide the ability to add documentation to a Rails application
https://github.com/adamcooke/documentation
A Rails engine to provide the ability to add documentation to a Rails application - adamcooke/documentation
- 135A capistrano/rails plugin that makes it easy to deploy/manage/scale to various service providers, including EC2, DigitalOcean, vSphere, and bare metal servers.
https://github.com/rubber/rubber
A capistrano/rails plugin that makes it easy to deploy/manage/scale to various service providers, including EC2, DigitalOcean, vSphere, and bare metal servers. - rubber/rubber
- 136Code smell detector for Ruby
https://github.com/troessner/reek
Code smell detector for Ruby. Contribute to troessner/reek development by creating an account on GitHub.
- 137pippi
https://github.com/tcopeland/pippi
pippi. Contribute to tcopeland/pippi development by creating an account on GitHub.
- 138Returns the difference between two JSON files.
https://github.com/a2design-inc/json-compare
Returns the difference between two JSON files. Contribute to a2design-inc/json-compare development by creating an account on GitHub.
- 139Configuration management tool inspired by Chef, but simpler and lightweight. Formerly known as Lightchef.
https://github.com/itamae-kitchen/itamae
Configuration management tool inspired by Chef, but simpler and lightweight. Formerly known as Lightchef. - itamae-kitchen/itamae
- 140The simple tool to make work with date ranges in Ruby more enjoyable.
https://github.com/darkleaf/date_range_formatter
The simple tool to make work with date ranges in Ruby more enjoyable. - darkleaf/date_range_formatter
- 141Cloud Foundry BOSH is an open source tool chain for release engineering, deployment and lifecycle management of large scale distributed services.
https://github.com/cloudfoundry/bosh
Cloud Foundry BOSH is an open source tool chain for release engineering, deployment and lifecycle management of large scale distributed services. - cloudfoundry/bosh
- 142Manage complex tmux sessions easily
https://github.com/tmuxinator/tmuxinator
Manage complex tmux sessions easily. Contribute to tmuxinator/tmuxinator development by creating an account on GitHub.
- 143RDoc produces HTML and online documentation for Ruby projects.
https://github.com/ruby/rdoc
RDoc produces HTML and online documentation for Ruby projects. - ruby/rdoc
- 144Ruby client library for the Square Connect APIs
https://github.com/square/connect-ruby-sdk
Ruby client library for the Square Connect APIs. Contribute to square/connect-ruby-sdk development by creating an account on GitHub.
- 145☠️ A development tool that reveals your UI's bones
https://github.com/brentd/xray-rails
☠️ A development tool that reveals your UI's bones - brentd/xray-rails
- 146Displays the results of every line of code in your file
https://github.com/JoshCheek/seeing_is_believing
Displays the results of every line of code in your file - JoshCheek/seeing_is_believing
- 147Deploy web apps anywhere.
https://github.com/basecamp/kamal
Deploy web apps anywhere. Contribute to basecamp/kamal development by creating an account on GitHub.
- 148ruby bindings for liblxc
https://github.com/lxc/ruby-lxc
ruby bindings for liblxc. Contribute to lxc/ruby-lxc development by creating an account on GitHub.
- 149:cake: Version Cake is an unobtrusive way to version APIs in your Rails or Rack apps
https://github.com/bwillis/versioncake
:cake: Version Cake is an unobtrusive way to version APIs in your Rails or Rack apps - bwillis/versioncake
- 150Generic connection pooling for Ruby
https://github.com/mperham/connection_pool
Generic connection pooling for Ruby. Contribute to mperham/connection_pool development by creating an account on GitHub.
- 151A Ruby way to read MOBI format metadata
https://github.com/jkongie/mobi
A Ruby way to read MOBI format metadata. Contribute to jkongie/mobi development by creating an account on GitHub.
- 152CSS styled emails without the hassle.
https://github.com/fphilipe/premailer-rails
CSS styled emails without the hassle. Contribute to fphilipe/premailer-rails development by creating an account on GitHub.
- 153Easy full stack backup operations on UNIX-like systems.
https://github.com/backup/backup
Easy full stack backup operations on UNIX-like systems. - backup/backup
- 154💎 Ruby wrapper for Pygments syntax highlighter
https://github.com/tmm1/pygments.rb
💎 Ruby wrapper for Pygments syntax highlighter. Contribute to pygments/pygments.rb development by creating an account on GitHub.
- 155📮 A fully featured open source mail delivery platform for incoming & outgoing e-mail
https://github.com/atech/postal
📮 A fully featured open source mail delivery platform for incoming & outgoing e-mail - postalserver/postal
- 156RSpec Best Practices
https://github.com/andreareginato/betterspecs
RSpec Best Practices. Contribute to betterspecs/betterspecs development by creating an account on GitHub.
- 157Preview mail in the browser instead of sending.
https://github.com/ryanb/letter_opener
Preview mail in the browser instead of sending. Contribute to ryanb/letter_opener development by creating an account on GitHub.
- 158Advanced seed data handling for Rails, combining the best practices of several methods together.
https://github.com/mbleigh/seed-fu
Advanced seed data handling for Rails, combining the best practices of several methods together. - mbleigh/seed-fu
- 159Chronic is a pure Ruby natural language date parser.
https://github.com/mojombo/chronic
Chronic is a pure Ruby natural language date parser. - mojombo/chronic
- 160a code metric tool for rails projects
https://github.com/railsbp/rails_best_practices
a code metric tool for rails projects. Contribute to flyerhzm/rails_best_practices development by creating an account on GitHub.
- 161Date and time validation plugin for ActiveModel and Rails. Supports multiple ORMs and allows custom date/time formats.
https://github.com/adzap/validates_timeliness
Date and time validation plugin for ActiveModel and Rails. Supports multiple ORMs and allows custom date/time formats. - adzap/validates_timeliness
- 162Rails engine for cache-friendly, client-side local time
https://github.com/basecamp/local_time
Rails engine for cache-friendly, client-side local time - basecamp/local_time
- 163Lightweight Redis Client
https://github.com/amakawa/redic
Lightweight Redis Client. Contribute to amakawa/redic development by creating an account on GitHub.
- 164Online MySQL schema migrations
https://github.com/soundcloud/lhm
Online MySQL schema migrations. Contribute to soundcloud/lhm development by creating an account on GitHub.
- 165SchemaPlus provides a collection of enhancements and extensions to ActiveRecord
https://github.com/SchemaPlus/schema_plus
SchemaPlus provides a collection of enhancements and extensions to ActiveRecord - SchemaPlus/schema_plus
- 166Gem which calculates the difference between two times
https://github.com/abhidsm/time_diff
Gem which calculates the difference between two times - abhidsm/time_diff
- 167Find source repositories for ruby gems. Open, compare, and update outdated gem versions
https://github.com/teeparham/gemdiff
Find source repositories for ruby gems. Open, compare, and update outdated gem versions - teeparham/gemdiff
- 168a generic EPUB library for Ruby : supports EPUB 3
https://github.com/skoji/gepub
a generic EPUB library for Ruby : supports EPUB 3 - GitHub - skoji/gepub: a generic EPUB library for Ruby : supports EPUB 3
- 169Ruby library to perform server-side tracking into the official Google Analytics Measurement Protocol
https://github.com/tpitale/staccato
Ruby library to perform server-side tracking into the official Google Analytics Measurement Protocol - tpitale/staccato
- 170The express way to send mail from Ruby.
https://github.com/benprew/pony
The express way to send mail from Ruby. Contribute to benprew/pony development by creating an account on GitHub.
- 171Accurate current and historical timezones for Ruby with support for Geonames and Google latitude - longitude lookups.
https://github.com/panthomakos/timezone
Accurate current and historical timezones for Ruby with support for Geonames and Google latitude - longitude lookups. - panthomakos/timezone
- 172Debugging in Ruby 2
https://github.com/deivid-rodriguez/byebug
Debugging in Ruby 2. Contribute to deivid-rodriguez/byebug development by creating an account on GitHub.
- 173Seedbank gives your seed data a little structure. Create seeds for each environment, share seeds between environments and specify dependencies to load your seeds in order. All nicely integrated with simple rake tasks.
https://github.com/james2m/seedbank
Seedbank gives your seed data a little structure. Create seeds for each environment, share seeds between environments and specify dependencies to load your seeds in order. All nicely integrated wit...
- 174Incoming! helps you receive email in your Rack apps.
https://github.com/honeybadger-io/incoming
Incoming! helps you receive email in your Rack apps. - honeybadger-io/incoming
- 175Ruby production code coverage collection and reporting (line of code usage)
https://github.com/danmayer/coverband
Ruby production code coverage collection and reporting (line of code usage) - danmayer/coverband
- 176Seamless second database integration for Rails.
https://github.com/customink/secondbase
Seamless second database integration for Rails. Contribute to customink/secondbase development by creating an account on GitHub.
- 177A curses threads-with-tags style email client (mailing list: [email protected])
https://github.com/sup-heliotrope/sup
A curses threads-with-tags style email client (mailing list: [email protected]) - sup-heliotrope/sup
- 178Step-by-step debugging and stack navigation in Pry
https://github.com/deivid-rodriguez/pry-byebug
Step-by-step debugging and stack navigation in Pry - deivid-rodriguez/pry-byebug
- 179The gem that has been saving people from typos since 2014
https://github.com/yuki24/did_you_mean
The gem that has been saving people from typos since 2014 - ruby/did_you_mean
- 180Ruby bindings for the SQLite3 embedded database
https://github.com/sparklemotion/sqlite3-ruby
Ruby bindings for the SQLite3 embedded database. Contribute to sparklemotion/sqlite3-ruby development by creating an account on GitHub.
- 181The simplest way to group temporal data
https://github.com/ankane/groupdate
The simplest way to group temporal data. Contribute to ankane/groupdate development by creating an account on GitHub.
- 182Oath is rails authentication made simple. Previously known as Monban
https://github.com/halogenandtoast/monban
Oath is rails authentication made simple. Previously known as Monban - halogenandtoast/oath
- 183A set of Rails responders to dry up your application
https://github.com/heartcombo/responders
A set of Rails responders to dry up your application - heartcombo/responders
- 184⏰ A modern ruby gem allowing to do time calculation with business / working hours.
https://github.com/intrepidd/working_hours
⏰ A modern ruby gem allowing to do time calculation with business / working hours. - Intrepidd/working_hours
- 185Send e-mail straight from forms in Rails with I18n, validations, attachments and request information.
https://github.com/heartcombo/mail_form
Send e-mail straight from forms in Rails with I18n, validations, attachments and request information. - heartcombo/mail_form
- 186Wrap your objects with a helper to easily show them
https://github.com/heartcombo/show_for
Wrap your objects with a helper to easily show them - heartcombo/show_for
- 187Chef Infra, a powerful automation platform that transforms infrastructure into code automating how infrastructure is configured, deployed and managed across any environment, at any scale
https://github.com/chef/chef
Chef Infra, a powerful automation platform that transforms infrastructure into code automating how infrastructure is configured, deployed and managed across any environment, at any scale - chef/chef
- 188Flexible configuration for Ruby applications
https://github.com/elabs/econfig
Flexible configuration for Ruby applications. Contribute to varvet/econfig development by creating an account on GitHub.
- 189Create agents that monitor and act on your behalf. Your agents are standing by!
https://github.com/cantino/huginn
Create agents that monitor and act on your behalf. Your agents are standing by! - huginn/huginn
- 190Kanrisuru helps you manage your remote servers with objected oriented ruby. Results come back as structured data, parsed, prepared and ready for you to easily use in your applications.
https://github.com/avamia/kanrisuru
Kanrisuru helps you manage your remote servers with objected oriented ruby. Results come back as structured data, parsed, prepared and ready for you to easily use in your applications. - avamia/kan...
- 191:credit_card: ruby gem for validating credit card numbers, generating valid numbers, luhn checks
https://github.com/didww/credit_card_validations
:credit_card: ruby gem for validating credit card numbers, generating valid numbers, luhn checks - didww/credit_card_validations
- 192Workarea is an enterprise-grade Ruby on Rails commerce platform
https://github.com/workarea-commerce/workarea
Workarea is an enterprise-grade Ruby on Rails commerce platform - workarea-commerce/workarea
- 193Versioned database views for Rails
https://github.com/thoughtbot/scenic
Versioned database views for Rails. Contribute to scenic-views/scenic development by creating an account on GitHub.
- 194Einhorn: the language-independent shared socket manager
https://github.com/stripe/einhorn
Einhorn: the language-independent shared socket manager - GitHub - contribsys/einhorn: Einhorn: the language-independent shared socket manager
- 195BookPub is an advanced book publishing framework for creating manuscripts in Markdown, HTML, CSS, Javascript, and publishing them into any format (PDF, ePub, MOBI, HTML, Print).
https://github.com/worlduniting/bookshop
BookPub is an advanced book publishing framework for creating manuscripts in Markdown, HTML, CSS, Javascript, and publishing them into any format (PDF, ePub, MOBI, HTML, Print). - worlduniting/bookpub
- 196Simplify receiving email in Rails (deprecated)
https://github.com/thoughtbot/griddler
Simplify receiving email in Rails (deprecated). Contribute to thoughtbot/griddler development by creating an account on GitHub.
- 197SSH private and public key generator in pure Ruby (RSA & DSA)
https://github.com/bensie/sshkey
SSH private and public key generator in pure Ruby (RSA & DSA) - bensie/sshkey
- 198The official AWS SDK for Ruby.
https://github.com/aws/aws-sdk-ruby
The official AWS SDK for Ruby. Contribute to aws/aws-sdk-ruby development by creating an account on GitHub.
- 199Quick automated code review of your changes
https://github.com/mmozuras/pronto
Quick automated code review of your changes. Contribute to prontolabs/pronto development by creating an account on GitHub.
- 200Terminal output styling with intuitive and clean API.
https://github.com/peter-murach/pastel
Terminal output styling with intuitive and clean API. - piotrmurach/pastel
- 201Active Merchant is a simple payment abstraction library extracted from Shopify. The aim of the project is to feel natural to Ruby users and to abstract as many parts as possible away from the user to offer a consistent interface across all supported gateways.
https://github.com/activemerchant/active_merchant
Active Merchant is a simple payment abstraction library extracted from Shopify. The aim of the project is to feel natural to Ruby users and to abstract as many parts as possible away from the user ...
- 202A collection of Ruby methods to deal with statutory and other holidays. You deserve a holiday!
https://github.com/holidays/holidays
A collection of Ruby methods to deal with statutory and other holidays. You deserve a holiday! - holidays/holidays
- 203Support for doing time math in business hours and days
https://github.com/bokmann/business_time
Support for doing time math in business hours and days - bokmann/business_time
- 204:microscope: A Ruby library for carefully refactoring critical paths.
https://github.com/github/scientist
:microscope: A Ruby library for carefully refactoring critical paths. - github/scientist
- 205TZInfo - Ruby Timezone Library
https://github.com/tzinfo/tzinfo
TZInfo - Ruby Timezone Library. Contribute to tzinfo/tzinfo development by creating an account on GitHub.
- 206A Ruby client library for Redis
https://github.com/redis/redis-rb
A Ruby client library for Redis. Contribute to redis/redis-rb development by creating an account on GitHub.
- 207Annotate Rails classes with schema and routes info
https://github.com/ctran/annotate_models
Annotate Rails classes with schema and routes info - ctran/annotate_models
- 208Server automation framework and application
https://github.com/puppetlabs/puppet
Server automation framework and application. Contribute to puppetlabs/puppet development by creating an account on GitHub.
- 209A documentation analysis tool for the Ruby language
https://github.com/rrrene/inch
A documentation analysis tool for the Ruby language - rrrene/inch
- 210Re:VIEW is flexible document format/conversion system
https://github.com/kmuto/review
Re:VIEW is flexible document format/conversion system - kmuto/review
- 211Ruby on Rails Ecommerce platform, perfect for your small business solution.
https://github.com/drhenner/ror_ecommerce
Ruby on Rails Ecommerce platform, perfect for your small business solution. - drhenner/ror_ecommerce
- 212A helper for creating declarative interfaces in controllers
https://github.com/hashrocket/decent_exposure
A helper for creating declarative interfaces in controllers - hashrocket/decent_exposure
- 213A markdown based documentation system for style guides.
https://github.com/trulia/hologram
A markdown based documentation system for style guides. - trulia/hologram
- 214CloudFormation made easy
https://github.com/kddeisz/humidifier
CloudFormation made easy. Contribute to kddnewton/humidifier development by creating an account on GitHub.
- 215Parse and render REST API documents using representers.
https://github.com/apotonick/roar
Parse and render REST API documents using representers. - trailblazer/roar
- 216A performance dashboard for Postgres
https://github.com/ankane/pghero
A performance dashboard for Postgres. Contribute to ankane/pghero development by creating an account on GitHub.
- 217🛒 Solidus, the open-source eCommerce framework for industry trailblazers.
https://github.com/solidusio/solidus
🛒 Solidus, the open-source eCommerce framework for industry trailblazers. - solidusio/solidus
- 218Time calculations using business hours.
https://github.com/zendesk/biz
Time calculations using business hours. Contribute to zendesk/biz development by creating an account on GitHub.
- 219Rails engine providing access to files in cloud storage
https://github.com/projecthydra/browse-everything
Rails engine providing access to files in cloud storage - samvera/browse-everything
- 220Ruby's bikeshed-proof linter and formatter 🚲
https://github.com/testdouble/standard
Ruby's bikeshed-proof linter and formatter 🚲. Contribute to standardrb/standard development by creating an account on GitHub.
- 221Automatically generate change log from your tags, issues, labels and pull requests on GitHub.
https://github.com/github-changelog-generator/github-changelog-generator
Automatically generate change log from your tags, issues, labels and pull requests on GitHub. - github-changelog-generator/github-changelog-generator
- 222Ruby Date Recurrence Library - Allows easy creation of recurrence rules and fast querying
https://github.com/seejohnrun/ice_cube
Ruby Date Recurrence Library - Allows easy creation of recurrence rules and fast querying - ice-cube-ruby/ice_cube
- 223ObjectTracer tracks objects and records their activities
https://github.com/st0012/tapping_device
ObjectTracer tracks objects and records their activities - st0012/object_tracer
- 224Logstash - transport and process your logs, events, or other data
https://github.com/elastic/logstash
Logstash - transport and process your logs, events, or other data - elastic/logstash
- 225Ruby library for the Stripe API.
https://github.com/stripe/stripe-ruby
Ruby library for the Stripe API. . Contribute to stripe/stripe-ruby development by creating an account on GitHub.
- 226Ruby Bindings for Conekta
https://github.com/conekta/conekta-ruby
Ruby Bindings for Conekta. Contribute to conekta/conekta-ruby development by creating an account on GitHub.
- 227A mass deployment tool for Docker fleets
https://github.com/newrelic/centurion
A mass deployment tool for Docker fleets. Contribute to newrelic/centurion development by creating an account on GitHub.
- 228SQL Server Adapter For Rails
https://github.com/rails-sqlserver/activerecord-sqlserver-adapter
SQL Server Adapter For Rails. Contribute to rails-sqlserver/activerecord-sqlserver-adapter development by creating an account on GitHub.
- 229Upsert on MySQL, PostgreSQL, and SQLite3. Transparently creates functions (UDF) for MySQL and PostgreSQL; on SQLite3, uses INSERT OR IGNORE.
https://github.com/seamusabshere/upsert
Upsert on MySQL, PostgreSQL, and SQLite3. Transparently creates functions (UDF) for MySQL and PostgreSQL; on SQLite3, uses INSERT OR IGNORE. - seamusabshere/upsert
- 230Gibbon is an API wrapper for MailChimp's API
https://github.com/amro/gibbon
Gibbon is an API wrapper for MailChimp's API. Contribute to amro/gibbon development by creating an account on GitHub.
- 231Plain text table generator for Ruby, with a DRY, column-based API
https://github.com/matt-harvey/tabulo
Plain text table generator for Ruby, with a DRY, column-based API - matt-harvey/tabulo
- 232A framework for gradual system automation
https://github.com/braintree/runbook
A framework for gradual system automation. Contribute to braintree/runbook development by creating an account on GitHub.
- 233Toolkit for developing sleek command line apps.
https://github.com/peter-murach/tty
Toolkit for developing sleek command line apps. Contribute to piotrmurach/tty development by creating an account on GitHub.
- 234Lets you find ActiveRecord + Mongoid objects by year, month, fortnight, week and more!
https://github.com/radar/by_star
Lets you find ActiveRecord + Mongoid objects by year, month, fortnight, week and more! - radar/by_star
- 235Database constraints made easy for ActiveRecord.
https://github.com/nullobject/rein
Database constraints made easy for ActiveRecord. Contribute to nullobject/rein development by creating an account on GitHub.
- 236Minimal authorization through OO design and pure Ruby classes
https://github.com/elabs/pundit
Minimal authorization through OO design and pure Ruby classes - varvet/pundit
- 237TinyTDS - Simple and fast FreeTDS bindings for Ruby using DB-Library.
https://github.com/rails-sqlserver/tiny_tds
TinyTDS - Simple and fast FreeTDS bindings for Ruby using DB-Library. - rails-sqlserver/tiny_tds
- 238Decorators/View-Models for Rails Applications
https://github.com/drapergem/draper
Decorators/View-Models for Rails Applications. Contribute to drapergem/draper development by creating an account on GitHub.
- 239Making HTML emails comfortable for the Ruby rockstars
https://github.com/Mange/roadie
Making HTML emails comfortable for the Ruby rockstars - Mange/roadie
- 240Rails Database Viewer and SQL Query Runner
https://github.com/igorkasyanchuk/rails_db
Rails Database Viewer and SQL Query Runner. Contribute to igorkasyanchuk/rails_db development by creating an account on GitHub.
- 241Recurring events library for Ruby. Enumerable recurrence objects and convenient chainable interface.
https://github.com/rossta/montrose
Recurring events library for Ruby. Enumerable recurrence objects and convenient chainable interface. - rossta/montrose
- 242A Really Ruby Mail Library
https://github.com/mikel/mail
A Really Ruby Mail Library. Contribute to mikel/mail development by creating an account on GitHub.
- 243Rapid scaffold builder for Turbo-Rails and Hotwire. Get the tutorial now at:
https://github.com/hot-glue-for-rails/hot-glue/
Rapid scaffold builder for Turbo-Rails and Hotwire. Get the tutorial now at: - hot-glue-for-rails/hot-glue
- 244dry-rb
https://github.com/dry-rb
dry-rb is a collection of next-generation Ruby libraries, each intended to encapsulate a common task - dry-rb
- 245Polo travels through your database and creates sample snapshots so you can work with real world data in development.
https://github.com/IFTTT/polo
Polo travels through your database and creates sample snapshots so you can work with real world data in development. - IFTTT/polo
- 246Ruby and Ruby on Rails bookmarks collection
https://github.com/dreikanter/ruby-bookmarks
Ruby and Ruby on Rails bookmarks collection. Contribute to dreikanter/ruby-bookmarks development by creating an account on GitHub.
- 247Simple, Fast, and Declarative Serialization Library for Ruby
https://github.com/procore/blueprinter
Simple, Fast, and Declarative Serialization Library for Ruby - procore-oss/blueprinter
- 248Configus helps you easily manage environment specific settings
https://github.com/kaize/configus
Configus helps you easily manage environment specific settings - kaize/configus
- 249Catch unsafe migrations in development
https://github.com/ankane/strong_migrations
Catch unsafe migrations in development. Contribute to ankane/strong_migrations development by creating an account on GitHub.
- 250Code coverage for Ruby with a powerful configuration library and automatic merging of coverage across test suites
https://github.com/colszowka/simplecov
Code coverage for Ruby with a powerful configuration library and automatic merging of coverage across test suites - simplecov-ruby/simplecov
- 251Her is an ORM (Object Relational Mapper) that maps REST resources to Ruby objects. It is designed to build applications that are powered by a RESTful API instead of a database.
https://github.com/remiprev/her
Her is an ORM (Object Relational Mapper) that maps REST resources to Ruby objects. It is designed to build applications that are powered by a RESTful API instead of a database. - remi/her
- 252Convert country names and codes to a standard.
https://github.com/sshaw/normalize_country
Convert country names and codes to a standard. Contribute to sshaw/normalize_country development by creating an account on GitHub.
- 253General Rack Authentication Framework
https://github.com/hassox/warden
General Rack Authentication Framework. Contribute to wardencommunity/warden development by creating an account on GitHub.
- 254A Ruby wrapper for the OAuth 2.0 protocol.
https://github.com/intridea/oauth2
A Ruby wrapper for the OAuth 2.0 protocol. Contribute to oauth-xx/oauth2 development by creating an account on GitHub.
- 255Ruby support for Neovim
https://github.com/alexgenco/neovim-ruby
Ruby support for Neovim. Contribute to neovim/neovim-ruby development by creating an account on GitHub.
- 256RDoc generator designed with simplicity, beauty and ease of browsing in mind
https://github.com/rdoc/hanna-nouveau
RDoc generator designed with simplicity, beauty and ease of browsing in mind - jeremyevans/hanna
- 257📫 Rails Engine to preview emails in the browser
https://github.com/markets/maily
📫 Rails Engine to preview emails in the browser. Contribute to markets/maily development by creating an account on GitHub.
- 258Ruby Facets
https://github.com/rubyworks/facets
Ruby Facets. Contribute to rubyworks/facets development by creating an account on GitHub.
- 259:dash: Writing Fast Ruby -- Collect Common Ruby idioms.
https://github.com/JuanitoFatas/fast-ruby
:dash: Writing Fast Ruby :heart_eyes: -- Collect Common Ruby idioms. - GitHub - fastruby/fast-ruby: :dash: Writing Fast Ruby -- Collect Common Ruby idioms.
- 260Rails >= 3 pry initializer
https://github.com/rweng/pry-rails
Rails >= 3 pry initializer. Contribute to pry/pry-rails development by creating an account on GitHub.
- 261RailsAdmin is a Rails engine that provides an easy-to-use interface for managing your data
https://github.com/sferik/rails_admin
RailsAdmin is a Rails engine that provides an easy-to-use interface for managing your data - railsadminteam/rails_admin
- 262An extension of RuboCop focused on code performance checks.
https://github.com/rubocop-hq/rubocop-performance
An extension of RuboCop focused on code performance checks. - rubocop/rubocop-performance
- 263Code style checking for RSpec files.
https://github.com/rubocop-hq/rubocop-rspec
Code style checking for RSpec files. Contribute to rubocop/rubocop-rspec development by creating an account on GitHub.
- 264A RuboCop extension focused on enforcing Rails best practices and coding conventions.
https://github.com/rubocop-hq/rubocop-rails
A RuboCop extension focused on enforcing Rails best practices and coding conventions. - rubocop/rubocop-rails
- 265A pure Ruby code highlighter that is compatible with Pygments
https://github.com/jneen/rouge
A pure Ruby code highlighter that is compatible with Pygments - rouge-ruby/rouge
- 266csvreader library / gem - read tabular data in the comma-separated values (csv) format the right way (uses best practices out-of-the-box with zero-configuration)
https://github.com/csvreader/csvreader
csvreader library / gem - read tabular data in the comma-separated values (csv) format the right way (uses best practices out-of-the-box with zero-configuration) - rubycocos/csvreader
- 267A repository of geographic regions for Ruby
https://github.com/jim/carmen
A repository of geographic regions for Ruby. Contribute to carmen-ruby/carmen development by creating an account on GitHub.
- 268Manages and displays breadcrumb trails in Rails app - lean & mean.
https://github.com/peter-murach/loaf
Manages and displays breadcrumb trails in Rails app - lean & mean. - piotrmurach/loaf
- 269Small, focused, awesome methods added to core Ruby classes. Home of the endlessly useful nil_chain.
https://github.com/forgecrafted/finishing_moves
Small, focused, awesome methods added to core Ruby classes. Home of the endlessly useful nil_chain. - BattleBrisket/finishing_moves
- 270Easiest way to add multi-environment yaml settings to Rails, Sinatra, Padrino and other Ruby projects.
https://github.com/railsconfig/config
Easiest way to add multi-environment yaml settings to Rails, Sinatra, Padrino and other Ruby projects. - rubyconfig/config
- 271blockchain (crypto) tools, libraries & scripts in ruby
https://github.com/openblockchains/blockchain.lite.rb
blockchain (crypto) tools, libraries & scripts in ruby - rubycocos/blockchain
- 272A community-driven Ruby on Rails style guide
https://github.com/bbatsov/rails-style-guide
A community-driven Ruby on Rails style guide. Contribute to rubocop/rails-style-guide development by creating an account on GitHub.
- 273A Ruby static code analyzer and formatter, based on the community Ruby style guide.
https://github.com/rubocop-hq/rubocop
A Ruby static code analyzer and formatter, based on the community Ruby style guide. - rubocop/rubocop
- 274All sorts of useful information about every country packaged as convenient little country objects. It includes data from ISO 3166 (countries and states/subdivisions ), ISO 4217 (currency), and E.164 (phone numbers).
https://github.com/hexorx/countries
All sorts of useful information about every country packaged as convenient little country objects. It includes data from ISO 3166 (countries and states/subdivisions ), ISO 4217 (currency), and E.16...
- 275Hashie is a collection of classes and mixins that make Ruby hashes more powerful.
https://github.com/intridea/hashie
Hashie is a collection of classes and mixins that make Ruby hashes more powerful. - hashie/hashie
- 276A community-driven Ruby coding style guide
https://github.com/bbatsov/ruby-style-guide
A community-driven Ruby coding style guide. Contribute to rubocop/ruby-style-guide development by creating an account on GitHub.
- 277Simple, efficient background jobs for Ruby
https://sidekiq.org
Sidekiq is a simple, efficient framework for background jobs in Ruby
- 278Overview
https://nokogiri.org
The Official Tutorial Archive™ of Nokogiri®
- 279Application Monitoring & Error Tracking for Developers
https://www.honeybadger.io/
Full-stack application monitoring and error tracking that helps small teams move fast and fix things.
- 280Installs Ruby, JRuby, TruffleRuby, or mruby
https://github.com/postmodern/ruby-install
Installs Ruby, JRuby, TruffleRuby, or mruby. Contribute to postmodern/ruby-install development by creating an account on GitHub.
- 281A Rails Engine framework that helps safe and rapid feature prototyping
https://github.com/amatsuda/motorhead
A Rails Engine framework that helps safe and rapid feature prototyping - amatsuda/motorhead
- 282IRB with Typed Completion
https://github.com/tompng/katakata_irb
IRB with Typed Completion. Contribute to tompng/katakata_irb development by creating an account on GitHub.
- 283Feature flippers.
https://github.com/FetLife/rollout
Feature flippers. Contribute to fetlife/rollout development by creating an account on GitHub.
- 284A high performance implementation of the Ruby programming language, built on GraalVM.
https://github.com/oracle/truffleruby
A high performance implementation of the Ruby programming language, built on GraalVM. - oracle/truffleruby
- 285Pure Ruby implementation of HTTP/2 protocol
https://github.com/igrigorik/http-2
Pure Ruby implementation of HTTP/2 protocol. Contribute to igrigorik/http-2 development by creating an account on GitHub.
- 286FastImage finds the size or type of an image given its uri by fetching as little as needed
https://github.com/sdsykes/fastimage
FastImage finds the size or type of an image given its uri by fetching as little as needed - sdsykes/fastimage
- 287Ruby access to the clipboard on Windows, Linux, macOS, Java, WSL and more platforms 📋︎
https://github.com/janlelis/clipboard
Ruby access to the clipboard on Windows, Linux, macOS, Java, WSL and more platforms 📋︎ - janlelis/clipboard
- 288Manage translation and localization with static analysis, for Ruby i18n
https://github.com/glebm/i18n-tasks
Manage translation and localization with static analysis, for Ruby i18n - glebm/i18n-tasks
- 289Easy to use cryptographic framework for data protection: secure messaging with forward secrecy and secure data storage. Has unified APIs across 14 platforms.
https://github.com/cossacklabs/themis
Easy to use cryptographic framework for data protection: secure messaging with forward secrecy and secure data storage. Has unified APIs across 14 platforms. - cossacklabs/themis
- 290Ruby GetText, but 12x faster + 530x less garbage + simple + clean namespace + threadsafe + extendable + multiple backends
https://github.com/grosser/fast_gettext
Ruby GetText, but 12x faster + 530x less garbage + simple + clean namespace + threadsafe + extendable + multiple backends - grosser/fast_gettext
- 291✂️ Peruse and delete git branches ergonomically
https://github.com/matt-harvey/git_curate
✂️ Peruse and delete git branches ergonomically. Contribute to matt-harvey/git_curate development by creating an account on GitHub.
- 292Changes the current Ruby
https://github.com/postmodern/chruby
Changes the current Ruby. Contribute to postmodern/chruby development by creating an account on GitHub.
- 293A library for converting various objects into `Money` objects.
https://github.com/RubyMoney/monetize
A library for converting various objects into `Money` objects. - RubyMoney/monetize
- 294Find the merge and pull request a commit came from + fuzzy search for cherry-picks
https://github.com/grosser/git-whence
Find the merge and pull request a commit came from + fuzzy search for cherry-picks - grosser/git-whence
- 295Ruby implementation of GraphQL
https://github.com/rmosolgo/graphql-ruby
Ruby implementation of GraphQL . Contribute to rmosolgo/graphql-ruby development by creating an account on GitHub.
- 296HTTP (The Gem! a.k.a. http.rb) - a fast Ruby HTTP client with a chainable API, streaming support, and timeouts
https://github.com/httprb/http
HTTP (The Gem! a.k.a. http.rb) - a fast Ruby HTTP client with a chainable API, streaming support, and timeouts - httprb/http
- 297Simple, but flexible HTTP client library, with support for multiple backends.
https://github.com/lostisland/faraday
Simple, but flexible HTTP client library, with support for multiple backends. - lostisland/faraday
- 298Sentry SDK for Ruby
https://github.com/getsentry/sentry-ruby
Sentry SDK for Ruby. Contribute to getsentry/sentry-ruby development by creating an account on GitHub.
- 299Releases · tokaido/tokaidoapp
https://github.com/tokaido/tokaidoapp/releases
The home of the Tokaido app. Contribute to tokaido/tokaidoapp development by creating an account on GitHub.
- 300Handle unread records and mark them as read with Ruby on Rails
https://github.com/ledermann/unread
Handle unread records and mark them as read with Ruby on Rails - ledermann/unread
- 301The Ruby gem for querying Maxmind.com's GeoIP database, which returns the geographic location of a server given its IP address
https://github.com/cjheath/geoip
The Ruby gem for querying Maxmind.com's GeoIP database, which returns the geographic location of a server given its IP address - cjheath/geoip
- 302Heavy metal SOAP client
https://github.com/savonrb/savon
Heavy metal SOAP client. Contribute to savonrb/savon development by creating an account on GitHub.
- 303git-spelunk, an interactive git history tool
https://github.com/osheroff/git-spelunk
git-spelunk, an interactive git history tool. Contribute to osheroff/git-spelunk development by creating an account on GitHub.
- 304🌐 Minimalistic I18n library for Ruby
https://github.com/markets/mini_i18n
🌐 Minimalistic I18n library for Ruby . Contribute to markets/mini_i18n development by creating an account on GitHub.
- 305A simple game engine built using raylib and mruby
https://github.com/HellRok/Taylor
A simple game engine built using raylib and mruby. Contribute to HellRok/Taylor development by creating an account on GitHub.
- 306🎨 The Ruby 2D gem
https://github.com/ruby2d/ruby2d
🎨 The Ruby 2D gem. Contribute to ruby2d/ruby2d development by creating an account on GitHub.
- 307ROXML is a module for binding Ruby classes to XML. It supports custom mapping and bidirectional marshalling between Ruby and XML using annotation-style class methods, via Nokogiri or LibXML.
https://github.com/Empact/roxml
ROXML is a module for binding Ruby classes to XML. It supports custom mapping and bidirectional marshalling between Ruby and XML using annotation-style class methods, via Nokogiri or LibXML. - Empa...
- 308Tolk is a web interface for doing i18n translations packaged as an engine for Rails applications
https://github.com/tolk/tolk
Tolk is a web interface for doing i18n translations packaged as an engine for Rails applications - tolk/tolk
- 309Geospatial data library for Ruby
https://github.com/rgeo/rgeo
Geospatial data library for Ruby. Contribute to rgeo/rgeo development by creating an account on GitHub.
- 310Eventide Project
https://eventide-project.org
Microservices, Autonomous Services, Service-Oriented Architecture, and Event Sourcing Toolkit for Ruby with Support for Event Store and Postgres
- 311Ruby HTTP client based on libcurl
https://github.com/toland/patron
Ruby HTTP client based on libcurl. Contribute to toland/patron development by creating an account on GitHub.
- 312ActiveRecord plugin allowing you to hide and restore records without actually deleting them.
https://github.com/ActsAsParanoid/acts_as_paranoid
ActiveRecord plugin allowing you to hide and restore records without actually deleting them. - ActsAsParanoid/acts_as_paranoid
- 313A simple CLI to watch file changes and run their matching Ruby specs. Works on any ruby projects with no setup.
https://github.com/alexb52/retest
A simple CLI to watch file changes and run their matching Ruby specs. Works on any ruby projects with no setup. - AlexB52/retest
- 314Guard::LiveReload automatically reload your browser when 'view' files are modified.
https://github.com/guard/guard-livereload
Guard::LiveReload automatically reload your browser when 'view' files are modified. - guard/guard-livereload
- 315Log and Analyze Outgoing HTTP Requests
https://github.com/aderyabin/sniffer
Log and Analyze Outgoing HTTP Requests. Contribute to aderyabin/sniffer development by creating an account on GitHub.
- 316A Ruby gem for on-the-fly processing - suitable for image uploading in Rails, Sinatra and much more!
https://github.com/markevans/dragonfly
A Ruby gem for on-the-fly processing - suitable for image uploading in Rails, Sinatra and much more! - markevans/dragonfly
- 317High-level image processing wrapper for libvips and ImageMagick/GraphicsMagick
https://github.com/janko/image_processing
High-level image processing wrapper for libvips and ImageMagick/GraphicsMagick - janko/image_processing
- 318Yorick Peterse / oga · GitLab
https://gitlab.com/yorickpeterse/oga
Moved to https://github.com/yorickpeterse/oga
- 319Guard is a command line tool to easily handle events on file system modifications.
https://github.com/guard/guard
Guard is a command line tool to easily handle events on file system modifications. - guard/guard
- 320Ruby Optimized XML Parser
https://github.com/ohler55/ox
Ruby Optimized XML Parser. Contribute to ohler55/ox development by creating an account on GitHub.
- 321Enables easy Google map + overlays creation in Ruby apps
https://github.com/apneadiving/Google-Maps-for-Rails
Enables easy Google map + overlays creation in Ruby apps - apneadiving/Google-Maps-for-Rails
- 322Ruby ♥︎ JavaScript
https://github.com/opal/opal
Ruby ♥︎ JavaScript. Contribute to opal/opal development by creating an account on GitHub.
- 323Lightweight Ruby
https://github.com/mruby/mruby
Lightweight Ruby. Contribute to mruby/mruby development by creating an account on GitHub.
- 324BugSnag error monitoring & reporting software for rails, sinatra, rack and ruby
https://github.com/bugsnag/bugsnag-ruby
BugSnag error monitoring & reporting software for rails, sinatra, rack and ruby - bugsnag/bugsnag-ruby
- 325Ruby bindings for ImageMagick
https://github.com/rmagick/rmagick
Ruby bindings for ImageMagick. Contribute to rmagick/rmagick development by creating an account on GitHub.
- 326Super simple PDF invoicing
https://github.com/strzibny/invoice_printer
Super simple PDF invoicing. Contribute to strzibny/invoice_printer development by creating an account on GitHub.
- 327Upload files securely
https://github.com/dtaniwaki/rack-secure-upload
Upload files securely. Contribute to dtaniwaki/rack-secure-upload development by creating an account on GitHub.
- 328Secret User Agent of HTTP
https://github.com/lostisland/sawyer
Secret User Agent of HTTP. Contribute to lostisland/sawyer development by creating an account on GitHub.
- 329Really simple rubygem hosting
https://github.com/geminabox/geminabox
Really simple rubygem hosting. Contribute to geminabox/geminabox development by creating an account on GitHub.
- 330iOS, Android and Windows Phone Push Notifications made easy!!
https://github.com/calonso/ruby-push-notifications
iOS, Android and Windows Phone Push Notifications made easy!! - calonso/ruby-push-notifications
- 331Ruby and Rails efficient Kafka processing framework
https://github.com/karafka/karafka
Ruby and Rails efficient Kafka processing framework - karafka/karafka
- 332A drop in replacement for geminabox written in Go
https://github.com/gemfast/server
A drop in replacement for geminabox written in Go. Contribute to gemfast/server development by creating an account on GitHub.
- 333'httpclient' gives something like the functionality of libwww-perl (LWP) in Ruby.
https://github.com/nahi/httpclient
'httpclient' gives something like the functionality of libwww-perl (LWP) in Ruby. - nahi/httpclient
- 334Dynamic nested forms using jQuery made easy; works with formtastic, simple_form or default forms
https://github.com/nathanvda/cocoon
Dynamic nested forms using jQuery made easy; works with formtastic, simple_form or default forms - nathanvda/cocoon
- 335Usable, fast, simple HTTP 1.1 for Ruby
https://github.com/excon/excon
Usable, fast, simple HTTP 1.1 for Ruby. Contribute to excon/excon development by creating an account on GitHub.
- 336Better ImageMagick for Ruby
https://github.com/maxim/skeptick
Better ImageMagick for Ruby. Contribute to maxim/skeptick development by creating an account on GitHub.
- 337Bootstrappers is the base Rails application using Bootstrap template and other goodies.
https://github.com/xdite/bootstrappers
Bootstrappers is the base Rails application using Bootstrap template and other goodies. - xdite/bootstrappers
- 338Nested exceptions for Ruby
https://github.com/skorks/nesty
Nested exceptions for Ruby. Contribute to skorks/nesty development by creating an account on GitHub.
- 339Simple ruby version manager for fish
https://github.com/terlar/fry
Simple ruby version manager for fish. Contribute to terlar/fry development by creating an account on GitHub.
- 340High-performance HTML5 parser for Ruby based on Lexbor, with support for both CSS selectors and XPath.
https://github.com/serpapi/nokolexbor
High-performance HTML5 parser for Ruby based on Lexbor, with support for both CSS selectors and XPath. - serpapi/nokolexbor
- 341Parse Photoshop files in Ruby with ease
https://github.com/layervault/psd.rb
Parse Photoshop files in Ruby with ease. Contribute to layervault/psd.rb development by creating an account on GitHub.
- 342Yet another approach to file upload
https://github.com/choonkeat/attache
Yet another approach to file upload. Contribute to choonkeat/attache development by creating an account on GitHub.
- 343Exception tracking and logging from Ruby to Rollbar
https://github.com/rollbar/rollbar-gem
Exception tracking and logging from Ruby to Rollbar - rollbar/rollbar-gem
- 344ruby bindings to libgit2
https://github.com/libgit2/rugged
ruby bindings to libgit2. Contribute to libgit2/rugged development by creating an account on GitHub.
- 345Ruby parser for Accept-Language request HTTP header 🌐
https://github.com/cyril/accept_language.rb
Ruby parser for Accept-Language request HTTP header 🌐 - cyril/accept_language.rb
- 346Fast, Nimble PDF Writer for Ruby
https://github.com/prawnpdf/prawn
Fast, Nimble PDF Writer for Ruby. Contribute to prawnpdf/prawn development by creating an account on GitHub.
- 347JRuby, an implementation of Ruby on the JVM
https://github.com/jruby/jruby
JRuby, an implementation of Ruby on the JVM. Contribute to jruby/jruby development by creating an account on GitHub.
- 348The Rubinius Language Platform
https://github.com/rubinius/rubinius
The Rubinius Language Platform. Contribute to rubinius/rubinius development by creating an account on GitHub.
- 349Rumale is a machine learning library in Ruby
https://github.com/yoshoku/rumale
Rumale is a machine learning library in Ruby. Contribute to yoshoku/rumale development by creating an account on GitHub.
- 350Rails form builder for Bootstrap 4 markup that actually works!
https://github.com/comfy/comfy-bootstrap-form
Rails form builder for Bootstrap 4 markup that actually works! - comfy/comfy-bootstrap-form
- 351A RubyGems.org cache and private gem server
https://github.com/rubygems/gemstash
A RubyGems.org cache and private gem server. Contribute to rubygems/gemstash development by creating an account on GitHub.
- 352Artificial Intelligence for Ruby - A Ruby playground for AI researchers
https://github.com/sergiofierens/ai4r
Artificial Intelligence for Ruby - A Ruby playground for AI researchers - SergioFierens/ai4r
- 353Find the first broken commit without having to learn git bisect
https://github.com/grosser/git-autobisect
Find the first broken commit without having to learn git bisect - grosser/git-autobisect
- 354Translations with speech synthesis in your terminal as a ruby gem
https://github.com/pawurb/termit
Translations with speech synthesis in your terminal as a ruby gem - pawurb/termit
- 355Ruby wrapper around pHash, the perceptual hash library for detecting duplicate multimedia files
https://github.com/westonplatter/phashion
Ruby wrapper around pHash, the perceptual hash library for detecting duplicate multimedia files - westonplatter/phashion
- 356A Ruby implementation of an Event Store based on Active Record
https://github.com/RailsEventStore/rails_event_store
A Ruby implementation of an Event Store based on Active Record - RailsEventStore/rails_event_store
- 357Gem to automatically make a rubygems mirror.
https://github.com/PierreRambaud/gemirro
Gem to automatically make a rubygems mirror. Contribute to PierreRambaud/gemirro development by creating an account on GitHub.
- 358A web frontend for Git repositories
https://github.com/NARKOZ/ginatra
A web frontend for Git repositories. Contribute to NARKOZ/ginatra development by creating an account on GitHub.
- 359A tool for changing your $GEM_HOME
https://github.com/postmodern/gem_home
A tool for changing your $GEM_HOME. Contribute to postmodern/gem_home development by creating an account on GitHub.
- 360:tada: Makes http fun again!
https://github.com/jnunemaker/httparty
:tada: Makes http fun again! Contribute to jnunemaker/httparty development by creating an account on GitHub.
- 361Restarts an app when the filesystem changes. Uses growl and FSEventStream if on OS X.
https://github.com/alexch/rerun
Restarts an app when the filesystem changes. Uses growl and FSEventStream if on OS X. - alexch/rerun
- 362FXRuby is an extension module for Ruby that provides an interface to the FOX GUI toolkit.
https://github.com/larskanis/fxruby
FXRuby is an extension module for Ruby that provides an interface to the FOX GUI toolkit. - larskanis/fxruby
- 363Skylight agent for Ruby
https://github.com/skylightio/skylight-ruby
Skylight agent for Ruby. Contribute to skylightio/skylight-ruby development by creating an account on GitHub.
- 364An easy to install gem version of the Ruby bindings to Qt
https://github.com/ryanmelt/qtbindings
An easy to install gem version of the Ruby bindings to Qt - ryanmelt/qtbindings
- 365Simple authorization gem for GraphQL :lock:
https://github.com/exAspArk/graphql-guard
Simple authorization gem for GraphQL :lock:. Contribute to exAspArk/graphql-guard development by creating an account on GitHub.
- 366kramdown is a fast, pure Ruby Markdown superset converter, using a strict syntax definition and supporting several common extensions.
https://github.com/gettalong/kramdown
kramdown is a fast, pure Ruby Markdown superset converter, using a strict syntax definition and supporting several common extensions. - gettalong/kramdown
- 367A query batching executor for the graphql gem
https://github.com/Shopify/graphql-batch
A query batching executor for the graphql gem. Contribute to Shopify/graphql-batch development by creating an account on GitHub.
- 368Reflow automatically creates pull requests, ensures the code review is approved, and squash merges finished branches to master with a great commit message template.
https://github.com/reenhanced/gitreflow
Reflow automatically creates pull requests, ensures the code review is approved, and squash merges finished branches to master with a great commit message template. - reenhanced/gitreflow
- 369Easy multi-tenanting for Rails5 (or Rails4) + Devise
https://github.com/jekuno/milia
Easy multi-tenanting for Rails5 (or Rails4) + Devise - jekuno/milia
- 370The official Airbrake library for Ruby applications
https://github.com/airbrake/airbrake
The official Airbrake library for Ruby applications - airbrake/airbrake
- 371Experiment Driven Development for Ruby
https://github.com/assaf/vanity
Experiment Driven Development for Ruby. Contribute to assaf/vanity development by creating an account on GitHub.
- 372A pure-Ruby Markdown-superset interpreter (Official Repo).
https://github.com/bhollis/maruku
A pure-Ruby Markdown-superset interpreter (Official Repo). - bhollis/maruku
- 373Build software better, together
https://github.com/github/graphql-client
GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over 420 million projects.
- 374Microservice native message and event store for Postgres
https://github.com/message-db/message-db
Microservice native message and event store for Postgres - message-db/message-db
- 375Curated list: Resources for machine learning in Ruby
https://github.com/arbox/machine-learning-with-ruby
Curated list: Resources for machine learning in Ruby - arbox/machine-learning-with-ruby
- 376A command line interface for smithing Ruby gems.
https://github.com/bkuhlmann/gemsmith
A command line interface for smithing Ruby gems. Contribute to bkuhlmann/gemsmith development by creating an account on GitHub.
- 377Ruby file uploads, take 3
https://github.com/refile/refile
Ruby file uploads, take 3. Contribute to refile/refile development by creating an account on GitHub.
- 378Exception Notifier Plugin for Rails
https://github.com/smartinez87/exception_notification
Exception Notifier Plugin for Rails. Contribute to smartinez87/exception_notification development by creating an account on GitHub.
- 379Manage Procfile-based applications
https://github.com/ddollar/foreman
Manage Procfile-based applications. Contribute to ddollar/foreman development by creating an account on GitHub.
- 380Dead simple Ruby Syslog logger
https://github.com/crohr/syslogger
Dead simple Ruby Syslog logger. Contribute to crohr/syslogger development by creating an account on GitHub.
- 381Typhoeus wraps libcurl in order to make fast and reliable requests.
https://github.com/typhoeus/typhoeus
Typhoeus wraps libcurl in order to make fast and reliable requests. - typhoeus/typhoeus
- 382The open source error catcher that's Airbrake API compliant
https://github.com/errbit/errbit
The open source error catcher that's Airbrake API compliant - errbit/errbit
- 383Log4r is a comprehensive and flexible logging library for use in Ruby programs. It features a heirarchical logging system of any number of levels, custom level names, multiple output destinations per log event, custom formatting, and more.
https://github.com/colbygk/log4r
Log4r is a comprehensive and flexible logging library for use in Ruby programs. It features a heirarchical logging system of any number of levels, custom level names, multiple output destinations p...
- 384Simple logging
https://github.com/asenchi/scrolls
Simple logging. Contribute to asenchi/scrolls development by creating an account on GitHub.
- 385Simple HTTP and REST client for Ruby, inspired by microframework syntax for specifying actions.
https://github.com/rest-client/rest-client
Simple HTTP and REST client for Ruby, inspired by microframework syntax for specifying actions. - rest-client/rest-client
- 386Unleash client SDK for Ruby
https://github.com/Unleash/unleash-client-ruby
Unleash client SDK for Ruby. Contribute to Unleash/unleash-client-ruby development by creating an account on GitHub.
- 387Ruby on Rails Custom Error Pages
https://github.com/richpeck/exception_handler
Ruby on Rails Custom Error Pages. Contribute to richpeck/exception_handler development by creating an account on GitHub.
- 388mini replacement for RMagick
https://github.com/minimagick/minimagick
mini replacement for RMagick. Contribute to minimagick/minimagick development by creating an account on GitHub.
- 389The Listen gem listens to file modifications and notifies you about the changes.
https://github.com/guard/listen
The Listen gem listens to file modifications and notifies you about the changes. - guard/listen
- 390Supercharged method introspection in IRB
https://github.com/oggy/looksee
Supercharged method introspection in IRB. Contribute to oggy/looksee development by creating an account on GitHub.
- 391A Ruby structured logging is capable of handling a message, custom data or an exception easily and generates JSON or human readable logs.
https://github.com/tilfin/ougai
A Ruby structured logging is capable of handling a message, custom data or an exception easily and generates JSON or human readable logs. - tilfin/ougai
- 392DeviceDetector is a precise and fast user agent parser and device detector written in Ruby
https://github.com/podigee/device_detector
DeviceDetector is a precise and fast user agent parser and device detector written in Ruby - podigee/device_detector
- 393:chart_with_upwards_trend: The Rack Based A/B testing framework
https://github.com/splitrb/split
:chart_with_upwards_trend: The Rack Based A/B testing framework - splitrb/split
- 394Sequel: The Database Toolkit for Ruby
https://github.com/jeremyevans/sequel
Sequel: The Database Toolkit for Ruby. Contribute to jeremyevans/sequel development by creating an account on GitHub.
- 395Sym is a command line utility and a Ruby API that makes it trivial to encrypt and decrypt sensitive data. Unlike many other existing encryption tools, sym focuses on usability and streamlined interface (CLI), with the goal of making encryption easy and transparent. The result? There is no excuse for keeping your application secrets unencrypted :)
https://github.com/kigster/sym
Sym is a command line utility and a Ruby API that makes it trivial to encrypt and decrypt sensitive data. Unlike many other existing encryption tools, sym focuses on usability and streamlined inter...
- 396A flexible logging library for use in Ruby programs based on the design of Java's log4j library.
https://github.com/TwP/logging
A flexible logging library for use in Ruby programs based on the design of Java's log4j library. - TwP/logging
- 397OS / httpx · GitLab
https://gitlab.com/honeyryderchuck/httpx
An HTTP client library for ruby
- 398🏆 The Best Pagination Ruby Gem 🥇
https://github.com/ddnexus/pagy
🏆 The Best Pagination Ruby Gem 🥇. Contribute to ddnexus/pagy development by creating an account on GitHub.
- 399Complete Ruby geocoding solution.
https://github.com/alexreisner/geocoder
Complete Ruby geocoding solution. Contribute to alexreisner/geocoder development by creating an account on GitHub.
- 400Fluentd: Unified Logging Layer (project under CNCF)
https://github.com/fluent/fluentd
Fluentd: Unified Logging Layer (project under CNCF) - fluent/fluentd
- 401Ruby library for interfacing with FANN (Fast Artificial Neural Network)
https://github.com/tangledpath/ruby-fann
Ruby library for interfacing with FANN (Fast Artificial Neural Network) - tangledpath/ruby-fann
- 402Repository for collecting Locale data for Ruby on Rails I18n as well as other interesting, Rails related I18n stuff
https://github.com/svenfuchs/rails-i18n
Repository for collecting Locale data for Ruby on Rails I18n as well as other interesting, Rails related I18n stuff - svenfuchs/rails-i18n
- 403The Cocoa Dependency Manager.
https://github.com/CocoaPods/CocoaPods
The Cocoa Dependency Manager. Contribute to CocoaPods/CocoaPods development by creating an account on GitHub.
- 404A ruby gem to liberate content from Microsoft Word documents
https://github.com/benbalter/word-to-markdown
A ruby gem to liberate content from Microsoft Word documents - benbalter/word-to-markdown
- 405Easy file attachment management for ActiveRecord
https://github.com/thoughtbot/paperclip
Easy file attachment management for ActiveRecord. Contribute to thoughtbot/paperclip development by creating an account on GitHub.
- 406Transform ML models into a native code (Java, C, Python, Go, JavaScript, Visual Basic, C#, R, PowerShell, PHP, Dart, Haskell, Ruby, F#, Rust) with zero dependencies
https://github.com/BayesWitnesses/m2cgen
Transform ML models into a native code (Java, C, Python, Go, JavaScript, Visual Basic, C#, R, PowerShell, PHP, Dart, Haskell, Ruby, F#, Rust) with zero dependencies - BayesWitnesses/m2cgen
- 407An attempt to tame Rails' default policy to log everything.
https://github.com/roidrage/lograge
An attempt to tame Rails' default policy to log everything. - roidrage/lograge
- 408Machine Learning & Data Mining with JRuby
https://github.com/paulgoetze/weka-jruby
Machine Learning & Data Mining with JRuby. Contribute to paulgoetze/weka-jruby development by creating an account on GitHub.
- 409PubNub Ruby-based APIs
https://github.com/pubnub/ruby
PubNub Ruby-based APIs. Contribute to pubnub/ruby development by creating an account on GitHub.
- 410:cloud: Try the demo project of any Android Library
https://github.com/cesarferreira/dryrun
:cloud: Try the demo project of any Android Library - cesarferreira/dryrun
- 411A gem that calculates the exchange rate using published rates from European Central Bank. Compatible with the money gem
https://github.com/RubyMoney/eu_central_bank
A gem that calculates the exchange rate using published rates from European Central Bank. Compatible with the money gem - RubyMoney/eu_central_bank
- 412Official Geokit Gem. Geokit gem provides geocoding and distance/heading calculations. Pair with the geokit-rails plugin for full-fledged location-based app functionality.
https://github.com/geokit/geokit
Official Geokit Gem. Geokit gem provides geocoding and distance/heading calculations. Pair with the geokit-rails plugin for full-fledged location-based app functionality. - geokit/geokit
- 413:headphones: A Slack-Powered music bot for Spotify
https://github.com/smashingboxes/maestro
:headphones: A Slack-Powered music bot for Spotify - smashingboxes/maestro
- 414Bunny is a popular, easy to use, mature Ruby client for RabbitMQ
https://github.com/ruby-amqp/bunny
Bunny is a popular, easy to use, mature Ruby client for RabbitMQ - ruby-amqp/bunny
- 415Yell - Your Extensible Logging Library
https://github.com/rudionrails/yell
Yell - Your Extensible Logging Library. Contribute to rudionrails/yell development by creating an account on GitHub.
- 416Ruby language bindings for LIBSVM
https://github.com/febeling/rb-libsvm
Ruby language bindings for LIBSVM. Contribute to febeling/rb-libsvm development by creating an account on GitHub.
- 417DSL Framework consisting of a DSL Engine and a Data-Binding Library used in Glimmer DSL for SWT (JRuby Desktop Development GUI Framework), Glimmer DSL for Opal (Pure Ruby Web GUI), Glimmer DSL for LibUI (Prerequisite-Free Ruby Desktop Development GUI Library), Glimmer DSL for Tk (Ruby Tk Desktop Development GUI Library), Glimmer DSL for GTK (Ruby-GNOME Desktop Development GUI Library), Glimmer DSL for XML (& HTML), and Glimmer DSL for CSS
https://github.com/AndyObtiva/glimmer
DSL Framework consisting of a DSL Engine and a Data-Binding Library used in Glimmer DSL for SWT (JRuby Desktop Development GUI Framework), Glimmer DSL for Opal (Pure Ruby Web GUI), Glimmer DSL for ...
- 418Provides iteration per second benchmarking for Ruby
https://github.com/evanphx/benchmark-ips
Provides iteration per second benchmarking for Ruby - evanphx/benchmark-ips
- 419Forms made easy for Rails! It's tied to a simple DSL, with no opinion on markup.
https://github.com/heartcombo/simple_form
Forms made easy for Rails! It's tied to a simple DSL, with no opinion on markup. - heartcombo/simple_form
- 420Improvements for Ruby's IRB console 💎︎
https://github.com/janlelis/irbtools
Improvements for Ruby's IRB console 💎︎. Contribute to janlelis/irbtools development by creating an account on GitHub.
- 421A set of bindings for the GNOME libraries to use from Ruby.
https://github.com/ruby-gnome/ruby-gnome
A set of bindings for the GNOME libraries to use from Ruby. - ruby-gnome/ruby-gnome
- 422Ruby ORM for RethinkDB
https://github.com/nviennot/nobrainer/
Ruby ORM for RethinkDB. Contribute to NoBrainerORM/nobrainer development by creating an account on GitHub.
- 423Log outgoing HTTP requests in ruby
https://github.com/trusche/httplog
Log outgoing HTTP requests in ruby. Contribute to trusche/httplog development by creating an account on GitHub.
- 424A platform for developing apps using JRuby on Android.
https://github.com/ruboto/ruboto
A platform for developing apps using JRuby on Android. - ruboto/ruboto
- 425A ruby profiler. See https://ruby-prof.github.io for more information.
https://github.com/ruby-prof/ruby-prof
A ruby profiler. See https://ruby-prof.github.io for more information. - ruby-prof/ruby-prof
- 426A DSL for building fun, high-performance DNS servers.
https://github.com/ioquatix/rubydns
A DSL for building fun, high-performance DNS servers. - socketry/rubydns
- 427🍻 A CLI workflow for the administration of macOS applications distributed as binaries
https://github.com/caskroom/homebrew-cask
🍻 A CLI workflow for the administration of macOS applications distributed as binaries - Homebrew/homebrew-cask
- 428Ruby extension for the libvips image processing library.
https://github.com/jcupitt/ruby-vips
Ruby extension for the libvips image processing library. - libvips/ruby-vips
- 429PredictionIO Ruby SDK
https://github.com/PredictionIO/PredictionIO-Ruby-SDK
PredictionIO Ruby SDK. Contribute to apache/predictionio-sdk-ruby development by creating an account on GitHub.
- 430A simple, flexible, extensible, and liberal RSS and Atom reader for Ruby. It is designed to be backwards compatible with the standard RSS parser, but will never do RSS generation.
https://github.com/cardmagic/simple-rss
A simple, flexible, extensible, and liberal RSS and Atom reader for Ruby. It is designed to be backwards compatible with the standard RSS parser, but will never do RSS generation. - cardmagic/simpl...
- 431Extensible Ruby wrapper for Atom and RSS parsers
https://github.com/aasmith/feed-normalizer
Extensible Ruby wrapper for Atom and RSS parsers. Contribute to aasmith/feed-normalizer development by creating an account on GitHub.
- 432The safe Markdown parser, reloaded.
https://github.com/vmg/redcarpet
The safe Markdown parser, reloaded. Contribute to vmg/redcarpet development by creating an account on GitHub.
- 433🎹🎸A music theory library with a command-line interface
https://github.com/pedrozath/coltrane
🎹🎸A music theory library with a command-line interface - pedrozath/coltrane
- 434Fast String#underscore implementation
https://github.com/kddeisz/fast_underscore
Fast String#underscore implementation. Contribute to kddnewton/fast_underscore development by creating an account on GitHub.
- 435The web app builder for Rails (moved from tablatom/hobo)
https://github.com/Hobo/hobo
The web app builder for Rails (moved from tablatom/hobo) - Hobo/hobo
- 436Classier solution for file uploads for Rails, Sinatra and other Ruby web frameworks
https://github.com/carrierwaveuploader/carrierwave
Classier solution for file uploads for Rails, Sinatra and other Ruby web frameworks - carrierwaveuploader/carrierwave
- 437Rails I18n de-facto standard library for ActiveRecord model/data translation.
https://github.com/globalize/globalize
Rails I18n de-facto standard library for ActiveRecord model/data translation. - globalize/globalize
- 438Idiomatic, fast and well-maintained JRuby client for RabbitMQ
https://github.com/ruby-amqp/march_hare
Idiomatic, fast and well-maintained JRuby client for RabbitMQ - ruby-amqp/march_hare
- 439ActiveRecord Mixin for Safe Destroys
https://github.com/dockyard/ruby-destroyed_at
ActiveRecord Mixin for Safe Destroys. Contribute to DavyJonesLocker/ruby-destroyed_at development by creating an account on GitHub.
- 440Deep learning for Ruby
https://github.com/ankane/tensorflow
Deep learning for Ruby. Contribute to ankane/tensorflow-ruby development by creating an account on GitHub.
- 441Ruby Agent for Instrumental Application Monitoring
https://github.com/expectedbehavior/instrumental_agent
Ruby Agent for Instrumental Application Monitoring - Instrumental/instrumental_agent-ruby
- 442🕰️ Monitor your cron jobs
https://github.com/jamesrwhite/minicron
🕰️ Monitor your cron jobs. Contribute to jamesrwhite/minicron development by creating an account on GitHub.
- 443Sampling CPU profiler for Ruby
https://github.com/rbspy/rbspy
Sampling CPU profiler for Ruby. Contribute to rbspy/rbspy development by creating an account on GitHub.
- 444Deep learning for Ruby, powered by LibTorch
https://github.com/ankane/torch.rb
Deep learning for Ruby, powered by LibTorch. Contribute to ankane/torch.rb development by creating an account on GitHub.
- 445File Attachment toolkit for Ruby applications
https://github.com/janko-m/shrine
File Attachment toolkit for Ruby applications. Contribute to shrinerb/shrine development by creating an account on GitHub.
- 446bcrypt-ruby is a Ruby binding for the OpenBSD bcrypt() password hashing algorithm, allowing you to easily store a secure hash of your users' passwords.
https://github.com/codahale/bcrypt-ruby
bcrypt-ruby is a Ruby binding for the OpenBSD bcrypt() password hashing algorithm, allowing you to easily store a secure hash of your users' passwords. - bcrypt-ruby/bcrypt-ruby
- 447Ruby FFI binding to the Networking and Cryptography (NaCl) library (a.k.a. libsodium)
https://github.com/cryptosphere/rbnacl
Ruby FFI binding to the Networking and Cryptography (NaCl) library (a.k.a. libsodium) - RubyCrypto/rbnacl
- 4483D Graphics Library for Ruby.
https://github.com/jellymann/mittsu
3D Graphics Library for Ruby. Contribute to danini-the-panini/mittsu development by creating an account on GitHub.
- 449A fast background processing framework for Ruby and RabbitMQ
https://github.com/jondot/sneakers
A fast background processing framework for Ruby and RabbitMQ - jondot/sneakers
- 450Collection of text algorithms. gem install text
https://github.com/threedaymonk/text
Collection of text algorithms. gem install text. Contribute to threedaymonk/text development by creating an account on GitHub.
- 451🐬 Beautiful, performant feature flags for Ruby.
https://github.com/jnunemaker/flipper
🐬 Beautiful, performant feature flags for Ruby. Contribute to flippercloud/flipper development by creating an account on GitHub.
- 452Code. Music. Live.
https://github.com/samaaron/sonic-pi
Code. Music. Live. Contribute to sonic-pi-net/sonic-pi development by creating an account on GitHub.
- 453I18n tool to translate your Ruby application.
https://github.com/ai/r18n
I18n tool to translate your Ruby application. Contribute to r18n/r18n development by creating an account on GitHub.
- 454A feed parsing library
https://github.com/feedjira/feedjira
A feed parsing library. Contribute to feedjira/feedjira development by creating an account on GitHub.
- 455Rails application generator that builds applications with the common customization stuff already done.
https://github.com/carbonfive/raygun
Rails application generator that builds applications with the common customization stuff already done. - carbonfive/raygun
- 456Ruby speech recognition with Pocketsphinx
https://github.com/watsonbox/pocketsphinx-ruby
Ruby speech recognition with Pocketsphinx. Contribute to watsonbox/pocketsphinx-ruby development by creating an account on GitHub.
- 457A runtime developer console and IRB alternative with powerful introspection capabilities.
https://github.com/pry/pry
A runtime developer console and IRB alternative with powerful introspection capabilities. - pry/pry
- 458🚀 The easiest way to automate building and releasing your iOS and Android apps
https://github.com/fastlane/fastlane
🚀 The easiest way to automate building and releasing your iOS and Android apps - fastlane/fastlane
- 459Encapsulate measurements and their units in Ruby and Ruby on Rails.
https://github.com/Shopify/measured
Encapsulate measurements and their units in Ruby and Ruby on Rails. - Shopify/measured
- 460Curated List: Practical Natural Language Processing done in Ruby
https://github.com/arbox/nlp-with-ruby
Curated List: Practical Natural Language Processing done in Ruby - arbox/nlp-with-ruby
- 461Natural language processing framework for Ruby.
https://github.com/louismullie/treat
Natural language processing framework for Ruby. Contribute to louismullie/treat development by creating an account on GitHub.
- 462New Relic RPM Ruby Agent
https://github.com/newrelic/rpm
New Relic RPM Ruby Agent. Contribute to newrelic/newrelic-ruby-agent development by creating an account on GitHub.
- 463Form objects decoupled from models.
https://github.com/apotonick/reform
Form objects decoupled from models. Contribute to trailblazer/reform development by creating an account on GitHub.
- 464Making dynamic surveys should be easy!
https://github.com/code-mancers/rapidfire
Making dynamic surveys should be easy! Contribute to codemancers/rapidfire development by creating an account on GitHub.
- 465Opinionated rails application templates.
https://github.com/nickjj/orats
Opinionated rails application templates. Contribute to nickjj/orats development by creating an account on GitHub.
- 466A Rails template with our standard defaults.
https://github.com/thoughtbot/suspenders
A Rails template with our standard defaults. Contribute to thoughtbot/suspenders development by creating an account on GitHub.
- 467Makes your background jobs interruptible and resumable by design.
https://github.com/Shopify/job-iteration
Makes your background jobs interruptible and resumable by design. - Shopify/job-iteration
- 468Simple sentiment analysis with Ruby
https://github.com/7compass/sentimental
Simple sentiment analysis with Ruby. Contribute to 7compass/sentimental development by creating an account on GitHub.
- 469acts_as_paranoid for Rails 5, 6 and 7
https://github.com/radar/paranoia
acts_as_paranoid for Rails 5, 6 and 7. Contribute to rubysherpas/paranoia development by creating an account on GitHub.
- 470Manage your Redis instance (see keys, memory used, connected client, etc...)
https://github.com/OpenGems/redis_web_manager
Manage your Redis instance (see keys, memory used, connected client, etc...) - OpenGems/redis_web_manager
- 471A faster alternative to the custom use of `in_batches` with `pluck`
https://github.com/fatkodima/pluck_in_batches
A faster alternative to the custom use of `in_batches` with `pluck` - fatkodima/pluck_in_batches
- 472Ruby ORM for MongoDB (compatible with Rails 3)
https://github.com/spohlenz/mongomodel
Ruby ORM for MongoDB (compatible with Rails 3). Contribute to spohlenz/mongomodel development by creating an account on GitHub.
- 473A lightweight cron scheduler for the async job worker Que
https://github.com/hlascelles/que-scheduler
A lightweight cron scheduler for the async job worker Que - hlascelles/que-scheduler
- 474Sucker Punch is a Ruby asynchronous processing library using concurrent-ruby, heavily influenced by Sidekiq and girl_friday.
https://github.com/brandonhilkert/sucker_punch
Sucker Punch is a Ruby asynchronous processing library using concurrent-ruby, heavily influenced by Sidekiq and girl_friday. - brandonhilkert/sucker_punch
- 475Cron jobs in Ruby
https://github.com/javan/whenever
Cron jobs in Ruby. Contribute to javan/whenever development by creating an account on GitHub.
- 476Manage your app's Ruby environment
https://github.com/sstephenson/rbenv
Manage your app's Ruby environment. Contribute to rbenv/rbenv development by creating an account on GitHub.
- 477Ruby Tests Profiling Toolbox
https://github.com/palkan/test-prof
Ruby Tests Profiling Toolbox. Contribute to test-prof/test-prof development by creating an account on GitHub.
- 478Ruby on Jets
https://github.com/tongueroo/jets
Ruby on Jets. Contribute to rubyonjets/jets development by creating an account on GitHub.
- 479A unit handling library for ruby
https://github.com/olbrich/ruby-units
A unit handling library for ruby. Contribute to olbrich/ruby-units development by creating an account on GitHub.
- 480A Ruby Library for dealing with money and currency conversion.
https://github.com/RubyMoney/money
A Ruby Library for dealing with money and currency conversion. - RubyMoney/money
- 481Dnsruby is a feature-complete DNS(SEC) client for Ruby, as used by many of the world's largest DNS registries and the OpenDNSSEC project
https://github.com/alexdalitz/dnsruby
Dnsruby is a feature-complete DNS(SEC) client for Ruby, as used by many of the world's largest DNS registries and the OpenDNSSEC project - alexdalitz/dnsruby
- 482SamSaffron/fast_blank
https://github.com/SamSaffron/fast_blank
Contribute to SamSaffron/fast_blank development by creating an account on GitHub.
- 483An enhancement for Heroku Scheduler + Sidekiq for scheduling jobs at specific times.
https://github.com/simplymadeapps/simple_scheduler
An enhancement for Heroku Scheduler + Sidekiq for scheduling jobs at specific times. - simplymadeapps/simple_scheduler
- 484Arli is the command line tool, that's both — the Arduino Library manager that's decoupled from any IDE, as well a project generator based on "arduino-cmake". By coupling dependency management with CMake-based build system, Arli provides an easy way to package, share, and distribute complex Arduino projects.
https://github.com/kigster/arli
Arli is the command line tool, that's both — the Arduino Library manager that's decoupled from any IDE, as well a project generator based on "arduino-cmake". By coupling dependenc...
- 485Take a peek into your Rails applications.
https://github.com/peek/peek
Take a peek into your Rails applications. Contribute to peek/peek development by creating an account on GitHub.
- 486A ruby job scheduler which runs jobs each in their own thread in a persistent process.
https://github.com/jjb/ruby-clock
A ruby job scheduler which runs jobs each in their own thread in a persistent process. - jjb/ruby-clock
- 487A Ruby job queue that uses PostgreSQL's advisory locks for speed and reliability.
https://github.com/chanks/que
A Ruby job queue that uses PostgreSQL's advisory locks for speed and reliability. - que-rb/que
- 488Quickly get a count estimation for large tables (>99% of accuracy for PostgreSQL).
https://github.com/fatkodima/fast_count
Quickly get a count estimation for large tables (>99% of accuracy for PostgreSQL). - fatkodima/fast_count
- 489Attach comments to ActiveRecord's SQL queries
https://github.com/basecamp/marginalia
Attach comments to ActiveRecord's SQL queries. Contribute to basecamp/marginalia development by creating an account on GitHub.
- 490Database based asynchronous priority queue system -- Extracted from Shopify
https://github.com/collectiveidea/delayed_job
Database based asynchronous priority queue system -- Extracted from Shopify - GitHub - collectiveidea/delayed_job: Database based asynchronous priority queue system -- Extracted from Shopify
- 491help to kill N+1 queries and unused eager loading
https://github.com/flyerhzm/bullet
help to kill N+1 queries and unused eager loading. Contribute to flyerhzm/bullet development by creating an account on GitHub.
- 492feedparser gem - (universal) web feed parser and normalizer (XML w/ Atom or RSS, JSON Feed, HTML w/ Microformats e.g. h-entry/h-feed or Feed.HTML, Feed.TXT w/ YAML, JSON or INI & Markdown, etc.)
https://github.com/feedparser/feedparser
feedparser gem - (universal) web feed parser and normalizer (XML w/ Atom or RSS, JSON Feed, HTML w/ Microformats e.g. h-entry/h-feed or Feed.HTML, Feed.TXT w/ YAML, JSON or INI & Markdown, etc....
- 493The Official Ruby Object Mapper for MongoDB
https://github.com/mongodb/mongoid
The Official Ruby Object Mapper for MongoDB. Contribute to mongodb/mongoid development by creating an account on GitHub.
- 494rails/activerecord at main · rails/rails
https://github.com/rails/rails/tree/master/activerecord
Ruby on Rails. Contribute to rails/rails development by creating an account on GitHub.
- 495Object to XML mapping library, using Nokogiri (Fork from John Nunemaker's Happymapper)
https://github.com/dam5s/happymapper
Object to XML mapping library, using Nokogiri (Fork from John Nunemaker's Happymapper) - mvz/happymapper
- 496A self-hosted, anti-social RSS reader.
https://github.com/swanson/stringer
A self-hosted, anti-social RSS reader. Contribute to stringer-rss/stringer development by creating an account on GitHub.
- 497Multi-user non-linear history tracking, auditing, undo, redo for mongoid.
https://github.com/aq1018/mongoid-history
Multi-user non-linear history tracking, auditing, undo, redo for mongoid. - mongoid/mongoid-history
- 498Fast and distributed workflow runner using ActiveJob and Redis
https://github.com/chaps-io/gush
Fast and distributed workflow runner using ActiveJob and Redis - chaps-io/gush
- 499Ordered background jobs processing
https://github.com/bia-technologies/lowkiq
Ordered background jobs processing. Contribute to bia-technologies/lowkiq development by creating an account on GitHub.
- 500An ActiveRecord plugin for atomic archiving and unarchiving of object trees. Inspired by ActsAsParanoid and PermanentRecord
https://github.com/expectedbehavior/acts_as_archival
An ActiveRecord plugin for atomic archiving and unarchiving of object trees. Inspired by ActsAsParanoid and PermanentRecord - expectedbehavior/acts_as_archival
- 501Download, unpack from a ZIP/TAR/GZ/BZ2 archive, parse, correct, convert units and import Google Spreadsheets, XLS, ODS, XML, CSV, HTML, etc. into your ActiveRecord models. Uses RemoteTable gem internally.
https://github.com/seamusabshere/data_miner
Download, unpack from a ZIP/TAR/GZ/BZ2 archive, parse, correct, convert units and import Google Spreadsheets, XLS, ODS, XML, CSV, HTML, etc. into your ActiveRecord models. Uses RemoteTable gem inte...
- 502A new profiler for Ruby. With a GUI
https://github.com/code-mancers/rbkit
A new profiler for Ruby. With a GUI. Contribute to codemancers/rbkit development by creating an account on GitHub.
- 503A Ruby-based parsing DSL based on parsing expression grammars.
https://github.com/cjheath/treetop
A Ruby-based parsing DSL based on parsing expression grammars. - cjheath/treetop
- 504Ruby persistence framework with entities and repositories
https://github.com/hanami/model
Ruby persistence framework with entities and repositories - hanami/model
- 505A Ruby natural language processor.
https://github.com/abitdodgy/words_counted
A Ruby natural language processor. Contribute to abitdodgy/words_counted development by creating an account on GitHub.
- 506Profiler for your development and production Ruby rack apps.
https://github.com/MiniProfiler/rack-mini-profiler
Profiler for your development and production Ruby rack apps. - GitHub - MiniProfiler/rack-mini-profiler: Profiler for your development and production Ruby rack apps.
- 507A super efficient Amazon SQS thread based message processor for Ruby
https://github.com/phstc/shoryuken
A super efficient Amazon SQS thread based message processor for Ruby - ruby-shoryuken/shoryuken
- 508A data migration and visualization command line gem in Ruby
https://github.com/cmu-is-projects/ferry
A data migration and visualization command line gem in Ruby - cmu-is-projects/ferry
- 509Easily and efficiently make your ActiveRecord models support hierarchies
https://github.com/mceachen/closure_tree
Easily and efficiently make your ActiveRecord models support hierarchies - ClosureTree/closure_tree
- 510A Rails form builder plugin with semantically rich and accessible markup.
https://github.com/justinfrench/formtastic
A Rails form builder plugin with semantically rich and accessible markup. - formtastic/formtastic
- 511Simple and reliable beanstalkd job queue for ruby
https://github.com/nesquena/backburner
Simple and reliable beanstalkd job queue for ruby. Contribute to nesquena/backburner development by creating an account on GitHub.
- 512Cross-platform Ruby library for managing child processes.
https://github.com/jarib/childprocess
Cross-platform Ruby library for managing child processes. - enkessler/childprocess
- 513This gem implements a flexible time-ordered activity feeds commonly used within social networking applications. As events occur, they are pushed into the Feed and distributed to all users that need to see the event. Upon the user visiting their "feed page", a pre-populated ordered list of events is returned by the library.
https://github.com/kigster/simple-feed
This gem implements a flexible time-ordered activity feeds commonly used within social networking applications. As events occur, they are pushed into the Feed and distributed to all users that need...
- 514Simplified snapshots and restoration for ActiveRecord models and associations with a transparent white-box implementation
https://github.com/westonganger/active_snapshot
Simplified snapshots and restoration for ActiveRecord models and associations with a transparent white-box implementation - westonganger/active_snapshot
- 515Rails Plugin - soft-delete your ActiveRecord records. It's like an explicit version of ActsAsParanoid
https://github.com/JackDanger/permanent_records
Rails Plugin - soft-delete your ActiveRecord records. It's like an explicit version of ActsAsParanoid - JackDanger/permanent_records
- 516Efficient bulk inserts with ActiveRecord
https://github.com/jamis/bulk_insert
Efficient bulk inserts with ActiveRecord. Contribute to jamis/bulk_insert development by creating an account on GitHub.
- 517Ruby process spawning library
https://github.com/rtomayko/posix-spawn
Ruby process spawning library. Contribute to rtomayko/posix-spawn development by creating an account on GitHub.
- 518Data mapping and persistence toolkit for Ruby
https://github.com/rom-rb/rom
Data mapping and persistence toolkit for Ruby. Contribute to rom-rb/rom development by creating an account on GitHub.
- 519Bit array for ActiveRecord
https://github.com/kenn/active_flag
Bit array for ActiveRecord. Contribute to kenn/active_flag development by creating an account on GitHub.
- 520A light-weight job scheduling system built on top of Resque
https://github.com/resque/resque-scheduler
A light-weight job scheduling system built on top of Resque - resque/resque-scheduler
- 521Boot large Ruby/Rails apps faster
https://github.com/Shopify/bootsnap
Boot large Ruby/Rails apps faster. Contribute to Shopify/bootsnap development by creating an account on GitHub.
- 522🃏🗑 Soft deletes for ActiveRecord done right
https://github.com/jhawthorn/discard
🃏🗑 Soft deletes for ActiveRecord done right. Contribute to jhawthorn/discard development by creating an account on GitHub.
- 523n Booleans = 1 Integer, saves columns and migrations.
https://github.com/grosser/bitfields
n Booleans = 1 Integer, saves columns and migrations. - grosser/bitfields
- 524Object-Hash Mapping for Redis
https://github.com/soveran/ohm
Object-Hash Mapping for Redis. Contribute to soveran/ohm development by creating an account on GitHub.
- 525A streaming JSON parsing and encoding library for Ruby (C bindings to yajl)
https://github.com/brianmario/yajl-ruby
A streaming JSON parsing and encoding library for Ruby (C bindings to yajl) - brianmario/yajl-ruby
- 526Resque is a Redis-backed Ruby library for creating background jobs, placing them on multiple queues, and processing them later.
https://github.com/resque/resque
Resque is a Redis-backed Ruby library for creating background jobs, placing them on multiple queues, and processing them later. - resque/resque
- 527webpush, Encryption Utilities for Web Push protocol
https://github.com/zaru/webpush
webpush, Encryption Utilities for Web Push protocol - zaru/webpush
- 528Allow you to pluck attributes from nested associations without loading a bunch of records.
https://github.com/khiav223577/deep_pluck
Allow you to pluck attributes from nested associations without loading a bunch of records. - khiav223577/deep_pluck
- 529Collection of ActiveModel/ActiveRecord validators
https://github.com/franckverrot/activevalidators
Collection of ActiveModel/ActiveRecord validators. Contribute to franckverrot/activevalidators development by creating an account on GitHub.
- 530ActsAsTree -- Extends ActiveRecord to add simple support for organizing items into parent–children relationships.
https://github.com/amerine/acts_as_tree
ActsAsTree -- Extends ActiveRecord to add simple support for organizing items into parent–children relationships. - amerine/acts_as_tree
- 531RGhost is a document creation and conversion API. It uses the Ghostscript framework for the format conversion, utilizes EPS templates and is optimized to work with larger documents. Support(PDF,PS,GIF,TIF,PNG,JPG,etc)
https://github.com/shairontoledo/rghost
RGhost is a document creation and conversion API. It uses the Ghostscript framework for the format conversion, utilizes EPS templates and is optimized to work with larger documents. Support(PDF,PS,...
- 532Easy activity tracking for models - similar to Github's Public Activity
https://github.com/chaps-io/public_activity
Easy activity tracking for models - similar to Github's Public Activity - public-activity/public_activity
- 533Rails Composer. The Rails generator on steroids for starter apps.
https://github.com/RailsApps/rails-composer
Rails Composer. The Rails generator on steroids for starter apps. - RailsApps/rails-composer
- 534Audited (formerly acts_as_audited) is an ORM extension that logs all changes to your Rails models.
https://github.com/collectiveidea/audited
Audited (formerly acts_as_audited) is an ORM extension that logs all changes to your Rails models. - collectiveidea/audited
- 535A collection of links to Ruby Natural Language Processing (NLP) libraries, tools and software
https://github.com/diasks2/ruby-nlp
A collection of links to Ruby Natural Language Processing (NLP) libraries, tools and software - diasks2/ruby-nlp
- 536slideshow gems - write your slides / talks / presentations in plain text with markdown formatting conventions
https://github.com/slideshow-s9/slideshow
slideshow gems - write your slides / talks / presentations in plain text with markdown formatting conventions - slideshow-s9/slideshow
- 537Make use of recursive queries in Rails when using Postgresql or SQLite
https://github.com/1and1/acts_as_recursive_tree
Make use of recursive queries in Rails when using Postgresql or SQLite - GitHub - 1and1/acts_as_recursive_tree: Make use of recursive queries in Rails when using Postgresql or SQLite
- 538Scheduler / Cron for Sidekiq jobs
https://github.com/ondrejbartas/sidekiq-cron
Scheduler / Cron for Sidekiq jobs. Contribute to sidekiq-cron/sidekiq-cron development by creating an account on GitHub.
- 539The push notification service for Ruby.
https://github.com/rpush/rpush
The push notification service for Ruby. Contribute to rpush/rpush development by creating an account on GitHub.
- 540A tree structure for Mongoid documents using the materialized path pattern
https://github.com/benedikt/mongoid-tree
A tree structure for Mongoid documents using the materialized path pattern - benedikt/mongoid-tree
- 541Effing package management! Build packages for multiple platforms (deb, rpm, etc) with great ease and sanity.
https://github.com/jordansissel/fpm
Effing package management! Build packages for multiple platforms (deb, rpm, etc) with great ease and sanity. - jordansissel/fpm
- 542A Chef Cookbook manager
https://github.com/berkshelf/berkshelf
A Chef Cookbook manager. Contribute to berkshelf/berkshelf development by creating an account on GitHub.
- 543Performances & exceptions monitoring for Ruby on Rails applications
https://github.com/BaseSecrete/rorvswild
Performances & exceptions monitoring for Ruby on Rails applications - BaseSecrete/rorvswild
- 544Extending Arel
https://github.com/faveod/arel-extensions
Extending Arel. Contribute to Faveod/arel-extensions development by creating an account on GitHub.
- 545Tool for extracting pages from pdf as images and text as strings.
https://github.com/jonmagic/grim
Tool for extracting pages from pdf as images and text as strings. - jonmagic/grim
- 546Reputation engine for Rails apps
https://github.com/merit-gem/merit
Reputation engine for Rails apps. Contribute to merit-gem/merit development by creating an account on GitHub.
- 547Just the right amount of Rails eager loading
https://github.com/salsify/goldiloader
Just the right amount of Rails eager loading. Contribute to salsify/goldiloader development by creating an account on GitHub.
- 548An awesome replacement for acts_as_nested_set and better_nested_set.
https://github.com/collectiveidea/awesome_nested_set
An awesome replacement for acts_as_nested_set and better_nested_set. - collectiveidea/awesome_nested_set
- 549ScoutAPM Ruby Agent. Supports Rails, Sinatra, Grape, Rack, and many other frameworks
https://github.com/scoutapp/scout_apm_ruby
ScoutAPM Ruby Agent. Supports Rails, Sinatra, Grape, Rack, and many other frameworks - scoutapp/scout_apm_ruby
- 550🐊 Run processes in the background (and foreground) on Mac & Linux from a Procfile (for production and/or development environments)
https://github.com/adamcooke/procodile
🐊 Run processes in the background (and foreground) on Mac & Linux from a Procfile (for production and/or development environments) - adamcooke/procodile
- 551Ruby process monitor
https://github.com/mojombo/god
Ruby process monitor. Contribute to mojombo/god development by creating an account on GitHub.
- 552Pragmatic Segmenter is a rule-based sentence boundary detection gem that works out-of-the-box across many languages.
https://github.com/diasks2/pragmatic_segmenter
Pragmatic Segmenter is a rule-based sentence boundary detection gem that works out-of-the-box across many languages. - diasks2/pragmatic_segmenter
- 553:star: A true Bayesian rating system with scope and cache enabled
https://github.com/wbotelhos/rating
:star: A true Bayesian rating system with scope and cache enabled - wbotelhos/rating
- 554Pagination library for Rails and other Ruby applications
https://github.com/mislav/will_paginate
Pagination library for Rails and other Ruby applications - mislav/will_paginate
- 555Map Redis types directly to Ruby objects
https://github.com/nateware/redis-objects
Map Redis types directly to Ruby objects. Contribute to nateware/redis-objects development by creating an account on GitHub.
- 556Versatile PDF creation and manipulation for Ruby
https://github.com/gettalong/hexapdf
Versatile PDF creation and manipulation for Ruby. Contribute to gettalong/hexapdf development by creating an account on GitHub.
- 557A Ruby library to plot charts in PDF files
https://github.com/fullscreen/squid
A Ruby library to plot charts in PDF files. Contribute to nullscreen/squid development by creating an account on GitHub.
- 558Ruby implementation of the ICU (International Components for Unicode) that uses the Common Locale Data Repository to format dates, plurals, and more.
https://github.com/twitter/twitter-cldr-rb
Ruby implementation of the ICU (International Components for Unicode) that uses the Common Locale Data Repository to format dates, plurals, and more. - twitter/twitter-cldr-rb
- 559A Ruby gem to transform HTML + CSS into PDFs using the command-line utility wkhtmltopdf
https://github.com/pdfkit/pdfkit
A Ruby gem to transform HTML + CSS into PDFs using the command-line utility wkhtmltopdf - pdfkit/pdfkit
- 560Easy multi-tenancy for Rails in a shared database setup.
https://github.com/ErwinM/acts_as_tenant
Easy multi-tenancy for Rails in a shared database setup. - ErwinM/acts_as_tenant
- 561Find next / previous Active Record(s) in one query
https://github.com/glebm/order_query
Find next / previous Active Record(s) in one query - glebm/order_query
- 562Track changes to your rails models
https://github.com/airblade/paper_trail
Track changes to your rails models. Contribute to paper-trail-gem/paper_trail development by creating an account on GitHub.
- 563OpenAI API + Ruby! 🤖❤️ NEW: Assistant Vector Stores
https://github.com/alexrudall/ruby-openai
OpenAI API + Ruby! 🤖❤️ NEW: Assistant Vector Stores - alexrudall/ruby-openai
- 564Process monitoring tool. Inspired from Bluepill and God.
https://github.com/kostya/eye
Process monitoring tool. Inspired from Bluepill and God. - kostya/eye
- 565Enumerated attributes with I18n and ActiveRecord/Mongoid support
https://github.com/brainspec/enumerize
Enumerated attributes with I18n and ActiveRecord/Mongoid support - brainspec/enumerize
- 566Internationalization (i18n) library for Ruby
https://github.com/svenfuchs/i18n
Internationalization (i18n) library for Ruby. Contribute to ruby-i18n/i18n development by creating an account on GitHub.
- 567Database changes log for Rails
https://github.com/palkan/logidze
Database changes log for Rails. Contribute to palkan/logidze development by creating an account on GitHub.
- 568ActiveRecord Sharding Plugin
https://github.com/drecom/activerecord-turntable
ActiveRecord Sharding Plugin. Contribute to drecom/activerecord-turntable development by creating an account on GitHub.
- 569🍺 The missing package manager for macOS (or Linux)
https://github.com/Homebrew/brew
🍺 The missing package manager for macOS (or Linux) - Homebrew/brew
- 570A Pure ruby library to merge PDF files, number pages and maybe more...
https://github.com/boazsegev/combine_pdf
A Pure ruby library to merge PDF files, number pages and maybe more... - boazsegev/combine_pdf
- 571a sampling call-stack profiler for ruby 2.2+
https://github.com/tmm1/stackprof
a sampling call-stack profiler for ruby 2.2+. Contribute to tmm1/stackprof development by creating an account on GitHub.
- 572A tool to download, compile, and install Ruby on Unix-like systems.
https://github.com/sstephenson/ruby-build
A tool to download, compile, and install Ruby on Unix-like systems. - rbenv/ruby-build
- 573Build software better, together
https://github.com/omohokcoj/ruby-spellchecker
GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over 420 million projects.
- 574A framework for creating e-books from Markdown using Ruby. Using the Prince PDF generator, you'll be able to get high quality PDFs. Also supports EPUB, Mobi, Text and HTML generation.
https://github.com/fnando/kitabu
A framework for creating e-books from Markdown using Ruby. Using the Prince PDF generator, you'll be able to get high quality PDFs. Also supports EPUB, Mobi, Text and HTML generation. - fnando/...
- 575Database multi-tenancy for Rack (and Rails) applications
https://github.com/influitive/apartment
Database multi-tenancy for Rack (and Rails) applications - influitive/apartment
- 576A library for bulk insertion of data into your database using ActiveRecord.
https://github.com/zdennis/activerecord-import
A library for bulk insertion of data into your database using ActiveRecord. - zdennis/activerecord-import
- 577Make your long-running sidekiq jobs interruptible and resumable.
https://github.com/fatkodima/sidekiq-iteration
Make your long-running sidekiq jobs interruptible and resumable. - fatkodima/sidekiq-iteration
- 578Better error page for Rack apps
https://github.com/charliesome/better_errors
Better error page for Rack apps. Contribute to BetterErrors/better_errors development by creating an account on GitHub.
- 579scheduler for Ruby (at, in, cron and every jobs)
https://github.com/jmettraux/rufus-scheduler
scheduler for Ruby (at, in, cron and every jobs). Contribute to jmettraux/rufus-scheduler development by creating an account on GitHub.
- 580HTML processing filters and utilities
https://github.com/jch/html-pipeline
HTML processing filters and utilities. Contribute to gjtorikian/html-pipeline development by creating an account on GitHub.
- 581simple process monitoring tool
https://github.com/bluepill-rb/bluepill
simple process monitoring tool. Contribute to bluepill-rb/bluepill development by creating an account on GitHub.
- 582Notifications for Ruby on Rails applications
https://github.com/excid3/noticed
Notifications for Ruby on Rails applications. Contribute to excid3/noticed development by creating an account on GitHub.
- 583A Ruby library that encodes QR Codes
https://github.com/whomwah/rqrcode
A Ruby library that encodes QR Codes. Contribute to whomwah/rqrcode development by creating an account on GitHub.
- 584An acts_as_sortable/acts_as_list replacement built for Rails 4+
https://github.com/mixonic/ranked-model
An acts_as_sortable/acts_as_list replacement built for Rails 4+ - brendon/ranked-model
- 585Organise ActiveRecord model into a tree structure
https://github.com/stefankroes/ancestry
Organise ActiveRecord model into a tree structure. Contribute to stefankroes/ancestry development by creating an account on GitHub.
- 586An ActiveRecord plugin for managing lists.
https://github.com/swanandp/acts_as_list
An ActiveRecord plugin for managing lists. Contribute to brendon/acts_as_list development by creating an account on GitHub.
- 587⚡ A Scope & Engine based, clean, powerful, customizable and sophisticated paginator for Ruby webapps
https://github.com/amatsuda/kaminari
⚡ A Scope & Engine based, clean, powerful, customizable and sophisticated paginator for Ruby webapps - amatsuda/kaminari
- 588Official repository of the bootstrap_form gem, a Rails form builder that makes it super easy to create beautiful-looking forms using Bootstrap 5.
https://github.com/bootstrap-ruby/rails-bootstrap-forms
Official repository of the bootstrap_form gem, a Rails form builder that makes it super easy to create beautiful-looking forms using Bootstrap 5. - bootstrap-ruby/bootstrap_form
- 589A fully configurable and extendable Git hook manager
https://github.com/brigade/overcommit
A fully configurable and extendable Git hook manager - sds/overcommit
- 590Go faster, off the Rails - Benchmarks for your whole Rails app
https://github.com/schneems/derailed_benchmarks
Go faster, off the Rails - Benchmarks for your whole Rails app - zombocom/derailed_benchmarks
- 591Jekyll • Simple, blog-aware, static sites
https://jekyllrb.com
Transform your plain text into static websites and blogs
- 592Codacy - Code Quality and Security for Developers
https://www.codacy.com
Build clean, secure code efficiently and fearlessly with Codacy Platform.
- 593Ruby on Rails
http://rubyonrails.org
A web-app framework that includes everything needed to create database-backed web applications according to the Model-View-Controller (MVC) pattern.
- 594an open source realtime server for reliable two-way communication.
http://anycable.io
We tame realtime and WebSockets, so you can be productive in building any realtime functionality: chats, notifications, typing indicators, presence, cursors, collaboration, data streaming. Built for any backend.
- 595The most-comprehensive AI-powered DevSecOps platform
https://about.gitlab.com
From planning to production, bring teams together in one application. Ship secure code more efficiently to deliver value faster.
- 596Continuous Integration & Delivery - Semaphore
https://semaphoreci.com
Semaphore CI/CD helps product teams deliver software with high standards of quality, security, and efficiency.
- 597Let’s build from here
https://github.com
GitHub is where over 100 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and fea...
- 598Ad Manager SOAP API Client Libraries for Ruby
https://github.com/googleads/google-api-ads-ruby
Ad Manager SOAP API Client Libraries for Ruby. Contribute to googleads/google-api-ads-ruby development by creating an account on GitHub.
- 599Discord API for Ruby
https://github.com/meew0/discordrb
Discord API for Ruby . Contribute to meew0/discordrb development by creating an account on GitHub.
- 600Ruby algorithms and data structures. C extensions
https://github.com/kanwei/algorithms
Ruby algorithms and data structures. C extensions. Contribute to kanwei/algorithms development by creating an account on GitHub.
- 601A GNU Social-compatible microblogging server
https://github.com/Gargron/mastodon
A GNU Social-compatible microblogging server. Contribute to Gargron/mastodon development by creating an account on GitHub.
- 602💎 Ruby SMTP mock. Mimic any 📤 SMTP server behavior for your test environment with fake SMTP server.
https://github.com/mocktools/ruby-smtp-mock
💎 Ruby SMTP mock. Mimic any 📤 SMTP server behavior for your test environment with fake SMTP server. - mocktools/ruby-smtp-mock
- 603Lightweight Ruby web crawler/scraper with an elegant DSL which extracts structured data from pages.
https://github.com/felipecsl/wombat
Lightweight Ruby web crawler/scraper with an elegant DSL which extracts structured data from pages. - felipecsl/wombat
- 604Multidimensional array similar to NumPy and NArray
https://github.com/rbotafogo/mdarray
Multidimensional array similar to NumPy and NArray - rbotafogo/mdarray
- 605A query language for Gherkin
https://github.com/enkessler/cql
A query language for Gherkin. Contribute to enkessler/cql development by creating an account on GitHub.
- 606Simple ElasticSearch client for ruby with AR integration
https://github.com/printercu/elastics-rb
Simple ElasticSearch client for ruby with AR integration - printercu/elastics-rb
- 607A super-slim statemachine-like support library
https://github.com/svenfuchs/simple_states
A super-slim statemachine-like support library. Contribute to svenfuchs/simple_states development by creating an account on GitHub.
- 608Sphinx/Manticore plugin for ActiveRecord/Rails
https://github.com/pat/thinking-sphinx
Sphinx/Manticore plugin for ActiveRecord/Rails. Contribute to pat/thinking-sphinx development by creating an account on GitHub.
- 609Bioruby Statsample TimeSeries
https://github.com/sciruby/statsample-timeseries
Bioruby Statsample TimeSeries. Contribute to SciRuby/statsample-timeseries development by creating an account on GitHub.
- 610Continuous Integration and Delivery
https://about.gitlab.com/gitlab-ci/
Make software delivery repeatable and on-demand
- 611ID3-based implementation of the ML Decision Tree algorithm
https://github.com/igrigorik/decisiontree
ID3-based implementation of the ML Decision Tree algorithm - igrigorik/decisiontree
- 612Faker refactored.
https://github.com/ffaker/ffaker
Faker refactored. Contribute to ffaker/ffaker development by creating an account on GitHub.
- 613Isolated tests in Ruby.
https://github.com/djanowski/cutest
Isolated tests in Ruby. Contribute to djanowski/cutest development by creating an account on GitHub.
- 614Ruby/Numo::NArray - New NArray class library
https://github.com/ruby-numo/numo-narray
Ruby/Numo::NArray - New NArray class library. Contribute to ruby-numo/numo-narray development by creating an account on GitHub.
- 615Rails middleware gem for prerendering javascript-rendered pages on the fly for SEO
https://github.com/prerender/prerender_rails
Rails middleware gem for prerendering javascript-rendered pages on the fly for SEO - prerender/prerender_rails
- 616Spreadsheet Architect is a library that allows you to create XLSX, ODS, or CSV spreadsheets super easily from ActiveRecord relations, plain Ruby objects, or tabular data.
https://github.com/westonganger/spreadsheet_architect
Spreadsheet Architect is a library that allows you to create XLSX, ODS, or CSV spreadsheets super easily from ActiveRecord relations, plain Ruby objects, or tabular data. - westonganger/spreadsheet...
- 617Probability distributions for Ruby.
https://github.com/sciruby/distribution
Probability distributions for Ruby. Contribute to SciRuby/distribution development by creating an account on GitHub.
- 618A PhantomJS driver for Capybara
https://github.com/teampoltergeist/poltergeist
A PhantomJS driver for Capybara. Contribute to teampoltergeist/poltergeist development by creating an account on GitHub.
- 619Q/A based social network
https://github.com/Retrospring/retrospring
Q/A based social network. Contribute to Retrospring/retrospring development by creating an account on GitHub.
- 620webgen - fast, powerful and extensible static website generator
http://webgen.gettalong.org
webgen is a free, fast, powerful and extensible static website generator. Create a (or re-use an existing) website template, add a bunch of content files (in plain HTML or any markup language), throw in some assets and let webgen do the rest!
- 621Power Assert for Ruby
https://github.com/k-tsj/power_assert
Power Assert for Ruby. Contribute to k-tsj/power_assert development by creating an account on GitHub.
- 622A Ruby based DSL for building JMeter test plans
https://github.com/flood-io/ruby-jmeter
A Ruby based DSL for building JMeter test plans. Contribute to flood-io/ruby-jmeter development by creating an account on GitHub.
- 623Red Data Tools
https://github.com/red-data-tools
Data processing tools for Ruby. Red Data Tools has 53 repositories available. Follow their code on GitHub.
- 624Passenger - Enterprise grade web app server for Ruby, Node.js, Python
https://www.phusionpassenger.com
Passenger is a rock-solid, feature-rich web app server that integrates with Apache and Nginx. Serve millions of customers with confidence
- 625Run RSpec tests on multiple cores. Like parallel_tests but with incremental summarized output. Originally extracted from the Discourse and Rubygems source code.
https://github.com/serpapi/turbo_tests
Run RSpec tests on multiple cores. Like parallel_tests but with incremental summarized output. Originally extracted from the Discourse and Rubygems source code. - serpapi/turbo_tests
- 626Implementation of the Trello API for Ruby
https://github.com/jeremytregunna/ruby-trello
Implementation of the Trello API for Ruby. Contribute to jeremytregunna/ruby-trello development by creating an account on GitHub.
- 627A gem to model a Cucumber test suite.
https://github.com/enkessler/cuke_modeler
A gem to model a Cucumber test suite. Contribute to enkessler/cuke_modeler development by creating an account on GitHub.
- 628Ruby: 2 CPUs = 2x Testing Speed for RSpec, Test::Unit and Cucumber
https://github.com/grosser/parallel_tests
Ruby: 2 CPUs = 2x Testing Speed for RSpec, Test::Unit and Cucumber - grosser/parallel_tests
- 629Ruby wrapper for the LinkedIn API
https://github.com/hexgnu/linkedin
Ruby wrapper for the LinkedIn API. Contribute to hexgnu/linkedin development by creating an account on GitHub.
- 630Rails application preloader
https://github.com/rails/spring
Rails application preloader. Contribute to rails/spring development by creating an account on GitHub.
- 631A High Performance HTTP Server for Ruby
https://github.com/ohler55/agoo
A High Performance HTTP Server for Ruby. Contribute to ohler55/agoo development by creating an account on GitHub.
- 632A minimalistic microframework built on top of Rack.
https://github.com/patriciomacadden/hobbit
A minimalistic microframework built on top of Rack. - patriciomacadden/hobbit
- 633Tools for scientific computation in Ruby
https://github.com/sciruby/sciruby
Tools for scientific computation in Ruby. Contribute to SciRuby/sciruby development by creating an account on GitHub.
- 634Ruby Gem for convenient reading and writing of CSV files. It has intelligent defaults, and auto-discovery of column and row separators. It imports CSV Files as Array(s) of Hashes, suitable for direct processing with ActiveRecord, kicking-off batch jobs with Sidekiq, parallel processing, or oploading data to S3. Writing CSV Files is equally easy.
https://github.com/tilo/smarter_csv
Ruby Gem for convenient reading and writing of CSV files. It has intelligent defaults, and auto-discovery of column and row separators. It imports CSV Files as Array(s) of Hashes, suitable for dire...
- 635Simple, Flexible, Trustworthy CI/CD Tools - Travis CI
https://travis-ci.com
Travis CI is the most simple and flexible ci/cd tool available today. Find out how Travis CI can help with continuous integration and continuous delivery.
- 636Official gem repository: Ruby kernel for Jupyter/IPython Notebook
https://github.com/SciRuby/iruby
Official gem repository: Ruby kernel for Jupyter/IPython Notebook - SciRuby/iruby
- 637A batteries-included framework for easy web-scraping. Just add CSS! (Or do more.)
https://github.com/propublica/upton
A batteries-included framework for easy web-scraping. Just add CSS! (Or do more.) - propublica/upton
- 638the 5k pocket full-of-gags web microframework
https://github.com/camping/camping
the 5k pocket full-of-gags web microframework. Contribute to camping/camping development by creating an account on GitHub.
- 639Get video info from Dailymotion, Vimeo, Wistia, and YouTube URLs.
https://github.com/thibaudgg/video_info
Get video info from Dailymotion, Vimeo, Wistia, and YouTube URLs. - thibaudgg/video_info
- 640Buff is a Ruby Wrapper for the Buffer API
https://github.com/bufferapp/buffer-ruby
Buff is a Ruby Wrapper for the Buffer API. Contribute to bufferapp/buffer-ruby development by creating an account on GitHub.
- 641Ruby gem that fetches images and metadata from a given URL. Much like popular social website with link preview.
https://github.com/gottfrois/link_thumbnailer
Ruby gem that fetches images and metadata from a given URL. Much like popular social website with link preview. - gottfrois/link_thumbnailer
- 642Ruby wrapper and CLI for the GitLab REST API
https://github.com/NARKOZ/gitlab
Ruby wrapper and CLI for the GitLab REST API. Contribute to NARKOZ/gitlab development by creating an account on GitHub.
- 643Automated code reviews via mutation testing - semantic code coverage.
https://github.com/mbj/mutant
Automated code reviews via mutation testing - semantic code coverage. - mbj/mutant
- 644Collection of filters that transform plain text into HTML code.
https://github.com/dejan/auto_html
Collection of filters that transform plain text into HTML code. - dejan/auto_html
- 645A very fast & simple Ruby web server
https://github.com/macournoyer/thin
A very fast & simple Ruby web server. Contribute to macournoyer/thin development by creating an account on GitHub.
- 646Dense and sparse linear algebra library for Ruby via SciRuby
https://github.com/sciruby/nmatrix
Dense and sparse linear algebra library for Ruby via SciRuby - SciRuby/nmatrix
- 647Ruby library for Pusher Channels HTTP API
https://github.com/pusher/pusher-http-ruby
Ruby library for Pusher Channels HTTP API. Contribute to pusher/pusher-http-ruby development by creating an account on GitHub.
- 648Rails view helper to manage "active" state of a link
https://github.com/comfy/active_link_to
Rails view helper to manage "active" state of a link - comfy/active_link_to
- 649A Rubyesque interface to Gmail. Connect to Gmail via IMAP and manipulate emails and labels. Send email with your Gmail account via SMTP. Includes full support for parsing and generating MIME messages.
https://github.com/dcparker/ruby-gmail
A Rubyesque interface to Gmail. Connect to Gmail via IMAP and manipulate emails and labels. Send email with your Gmail account via SMTP. Includes full support for parsing and generating MIME messag...
- 650Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.
https://github.com/vcr/vcr
Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests. - vcr/vcr
- 651A Ruby wrapper for the Slack API
https://github.com/aki017/slack-ruby-gem
A Ruby wrapper for the Slack API. Contribute to aki017/slack-ruby-gem development by creating an account on GitHub.
- 652nov/fb_graph2
https://github.com/nov/fb_graph2
Contribute to nov/fb_graph2 development by creating an account on GitHub.
- 653Specing framework.
https://github.com/fixrb/fix
Specing framework. Contribute to fixrb/fix development by creating an account on GitHub.
- 654TorqueBox Ruby Platform
https://github.com/torquebox/torquebox
TorqueBox Ruby Platform. Contribute to torquebox/torquebox development by creating an account on GitHub.
- 655Page-specific javascript for Rails applications with the ability of passing data.
https://github.com/peresleguine/pluggable_js
Page-specific javascript for Rails applications with the ability of passing data. - peresleguine/pluggable_js
- 656A platform for community discussion. Free, open, simple.
https://github.com/discourse/discourse
A platform for community discussion. Free, open, simple. - discourse/discourse
- 657BloomFilter(s) in Ruby: Native counting filter + Redis counting/non-counting filters
https://github.com/igrigorik/bloomfilter-rb
BloomFilter(s) in Ruby: Native counting filter + Redis counting/non-counting filters - GitHub - igrigorik/bloomfilter-rb: BloomFilter(s) in Ruby: Native counting filter + Redis counting/non-counti...
- 658Generalized Linear Models extension for Statsample
https://github.com/sciruby/statsample-glm
Generalized Linear Models extension for Statsample - SciRuby/statsample-glm
- 659Ruby gem for web scraping purposes. It scrapes a given URL, and returns you its title, meta description, meta keywords, links, images...
https://github.com/jaimeiniesta/metainspector
Ruby gem for web scraping purposes. It scrapes a given URL, and returns you its title, meta description, meta keywords, links, images... - jaimeiniesta/metainspector
- 660A versatile Ruby web spidering library that can spider a site, multiple domains, certain links or infinitely. Spidr is designed to be fast and easy to use.
https://github.com/postmodern/spidr
A versatile Ruby web spidering library that can spider a site, multiple domains, certain links or infinitely. Spidr is designed to be fast and easy to use. - postmodern/spidr
- 661HipChat HTTP API Wrapper in Ruby with Capistrano hooks
https://github.com/hipchat/hipchat-rb
HipChat HTTP API Wrapper in Ruby with Capistrano hooks - hipchat/hipchat-rb
- 662Ruby client for the Wikipedia API
https://github.com/kenpratt/wikipedia-client
Ruby client for the Wikipedia API. Contribute to kenpratt/wikipedia-client development by creating an account on GitHub.
- 663Easy and customizable generation of forged data.
https://github.com/sevenwire/forgery
Easy and customizable generation of forged data. Contribute to sevenwire/forgery development by creating an account on GitHub.
- 664The advanced business logic framework for Ruby.
https://github.com/trailblazer/trailblazer
The advanced business logic framework for Ruby. Contribute to trailblazer/trailblazer development by creating an account on GitHub.
- 665Mechanize is a ruby library that makes automated web interaction easy.
https://github.com/sparklemotion/mechanize
Mechanize is a ruby library that makes automated web interaction easy. - sparklemotion/mechanize
- 666You can easily make Slack Bot!! :star:
https://github.com/kciter/simple-slack-bot
You can easily make Slack Bot!! :star:. Contribute to kciter/simple-slack-bot development by creating an account on GitHub.
- 667View components for Ruby and Rails.
https://github.com/trailblazer/cells
View components for Ruby and Rails. Contribute to trailblazer/cells development by creating an account on GitHub.
- 668Map incoming controller parameters to named scopes in your resources
https://github.com/heartcombo/has_scope
Map incoming controller parameters to named scopes in your resources - heartcombo/has_scope
- 669roots gem
https://github.com/jzakiya/roots
roots gem. Contribute to jzakiya/roots development by creating an account on GitHub.
- 670Ruby & C implementation of Jaro-Winkler distance algorithm which supports UTF-8 string.
https://github.com/tonytonyjan/jaro_winkler
Ruby & C implementation of Jaro-Winkler distance algorithm which supports UTF-8 string. - tonytonyjan/jaro_winkler
- 671Upload and manage your assets in the iTunes Store using the iTunes Store’s Transporter (iTMSTransporter).
https://github.com/sshaw/itunes_store_transporter
Upload and manage your assets in the iTunes Store using the iTunes Store’s Transporter (iTMSTransporter). - GitHub - sshaw/itunes_store_transporter: Upload and manage your assets in the iTunes St...
- 672Terjira is a very interactive and easy to use CLI tool for Jira.
https://github.com/keepcosmos/terjira
Terjira is a very interactive and easy to use CLI tool for Jira. - keepcosmos/terjira
- 673HTML Abstraction Markup Language - A Markup Haiku
https://github.com/haml/haml
HTML Abstraction Markup Language - A Markup Haiku. Contribute to haml/haml development by creating an account on GitHub.
- 674run all your test against a GitHub Pull request
https://github.com/openSUSE/gitarro
run all your test against a GitHub Pull request. Contribute to openSUSE/gitarro development by creating an account on GitHub.
- 675Custom Emoji Formatters for RSpec
https://github.com/cupakromer/emoji-rspec
Custom Emoji Formatters for RSpec. Contribute to cupakromer/emoji-rspec development by creating an account on GitHub.
- 676Simple yet powerful ruby ffmpeg wrapper for reading metadata and transcoding movies
https://github.com/streamio/streamio-ffmpeg
Simple yet powerful ruby ffmpeg wrapper for reading metadata and transcoding movies - streamio/streamio-ffmpeg
- 677Simple router for web applications
https://github.com/soveran/syro/
Simple router for web applications. Contribute to soveran/syro development by creating an account on GitHub.
- 678An update of Scott Raymond's insanely easy flickr library
https://github.com/RaVbaker/flickr
An update of Scott Raymond's insanely easy flickr library - RaVbaker/flickr
- 679Generic interface to multiple Ruby template engines
https://github.com/rtomayko/tilt
Generic interface to multiple Ruby template engines - rtomayko/tilt
- 680Minimization algorithms on pure Ruby
https://github.com/sciruby/minimization
Minimization algorithms on pure Ruby. Contribute to SciRuby/minimization development by creating an account on GitHub.
- 681bioruby
https://github.com/bioruby/bioruby
bioruby. Contribute to bioruby/bioruby development by creating an account on GitHub.
- 682Application Monitoring for Ruby on Rails, Elixir, Node.js & Python
https://appsignal.com
AppSignal APM offers error tracking, performance monitoring, dashboards, host metrics, and alerts. Built for Ruby, Ruby on Rails, Elixir, Node.js, and JavaScript.
- 683A gem providing "time travel", "time freezing", and "time acceleration" capabilities, making it simple to test time-dependent code. It provides a unified method to mock Time.now, Date.today, and DateTime.now in a single call.
https://github.com/travisjeffery/timecop
A gem providing "time travel", "time freezing", and "time acceleration" capabilities, making it simple to test time-dependent code. It provides a unified method to moc...
- 684Official SoundCloud API Wrapper for Ruby.
https://github.com/soundcloud/soundcloud-ruby
Official SoundCloud API Wrapper for Ruby. Contribute to soundcloud/soundcloud-ruby development by creating an account on GitHub.
- 685Your Rails variables in your JS
https://github.com/gazay/gon
Your Rails variables in your JS. Contribute to gazay/gon development by creating an account on GitHub.
- 686An Automatic Automated Test Writer
https://github.com/Nedomas/zapata
An Automatic Automated Test Writer. Contribute to Nedomas/zapata development by creating an account on GitHub.
- 687Open Pusher implementation compatible with Pusher libraries
https://github.com/stevegraham/slanger
Open Pusher implementation compatible with Pusher libraries - stevegraham/slanger
- 688Nyan Cat inspired RSpec formatter!
https://github.com/mattsears/nyan-cat-formatter
Nyan Cat inspired RSpec formatter! Contribute to mattsears/nyan-cat-formatter development by creating an account on GitHub.
- 689The Ruby bindings of Groonga.
https://github.com/ranguba/rroonga
The Ruby bindings of Groonga. Contribute to ranguba/rroonga development by creating an account on GitHub.
- 690Create some fake personalities
https://github.com/adamcooke/fake-person
Create some fake personalities. Contribute to adamcooke/fake-person development by creating an account on GitHub.
- 691CMS/LMS/Library etc Versions Fingerprinter
https://github.com/erwanlr/Fingerprinter
CMS/LMS/Library etc Versions Fingerprinter. Contribute to erwanlr/Fingerprinter development by creating an account on GitHub.
- 692A general classifier module to allow Bayesian and other types of classifications. A fork of cardmagic/classifier.
https://github.com/jekyll/classifier-reborn
A general classifier module to allow Bayesian and other types of classifications. A fork of cardmagic/classifier. - jekyll/classifier-reborn
- 693Watir Powered By Selenium
https://github.com/watir/watir/
Watir Powered By Selenium. Contribute to watir/watir development by creating an account on GitHub.
- 694A high-performance web server for Ruby, supporting HTTP/1, HTTP/2 and TLS.
https://github.com/socketry/falcon
A high-performance web server for Ruby, supporting HTTP/1, HTTP/2 and TLS. - socketry/falcon
- 695Easily search you ActiveRecord models with a simple query language that converts to SQL.
https://github.com/wvanbergen/scoped_search
Easily search you ActiveRecord models with a simple query language that converts to SQL. - wvanbergen/scoped_search
- 696Build software better, together
https://github.com/rspec/rspec
GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over 420 million projects.
- 697State machine extracted from ActiveModel
https://github.com/troessner/transitions
State machine extracted from ActiveModel. Contribute to troessner/transitions development by creating an account on GitHub.
- 698Minimal Finite State Machine
https://github.com/soveran/micromachine
Minimal Finite State Machine. Contribute to soveran/micromachine development by creating an account on GitHub.
- 699Small library to test your xml with Test::Unit or RSpec
https://github.com/alovak/test_xml
Small library to test your xml with Test::Unit or RSpec - alovak/test_xml
- 700:key: Hash type identifier (CLI & lib)
https://github.com/noraj/haiti
:key: Hash type identifier (CLI & lib). Contribute to noraj/haiti development by creating an account on GitHub.
- 701Check how many times url was shared in social networks, e.g. share counts
https://github.com/Timrael/social_shares
Check how many times url was shared in social networks, e.g. share counts - Timrael/social_shares
- 702RGL is a framework for graph data structures and algorithms in Ruby.
https://github.com/monora/rgl
RGL is a framework for graph data structures and algorithms in Ruby. - monora/rgl
- 703The instafailing RSpec progress bar formatter
https://github.com/thekompanee/fuubar
The instafailing RSpec progress bar formatter. Contribute to thekompanee/fuubar development by creating an account on GitHub.
- 704Object-based searching.
https://github.com/activerecord-hackery/ransack/
Object-based searching. . Contribute to activerecord-hackery/ransack development by creating an account on GitHub.
- 705Ruby client library SDK for Ably realtime messaging service
https://github.com/ably/ably-ruby
Ruby client library SDK for Ably realtime messaging service - ably/ably-ruby
- 706A simple EventMachine-based library for consuming Twitter's Streaming API.
https://github.com/tweetstream/tweetstream
A simple EventMachine-based library for consuming Twitter's Streaming API. - tweetstream/tweetstream
- 707A Rubyesque interface to Gmail, with all the tools you'll need.
https://github.com/gmailgem/gmail
A Rubyesque interface to Gmail, with all the tools you'll need. - gmailgem/gmail
- 708Liquid markup language. Safe, customer facing template language for flexible web apps.
https://github.com/Shopify/liquid
Liquid markup language. Safe, customer facing template language for flexible web apps. - GitHub - Shopify/liquid: Liquid markup language. Safe, customer facing template language for flexible web a...
- 709Metasploit Framework
https://github.com/rapid7/metasploit-framework
Metasploit Framework. Contribute to rapid7/metasploit-framework development by creating an account on GitHub.
- 710Easily include static pages in your Rails app.
https://github.com/thoughtbot/high_voltage
Easily include static pages in your Rails app. Contribute to thoughtbot/high_voltage development by creating an account on GitHub.
- 711Textacular exposes full text search capabilities from PostgreSQL, and allows you to declare full text indexes. Textacular will extend ActiveRecord with named_scope methods making searching easy and fun!
https://github.com/textacular/textacular
Textacular exposes full text search capabilities from PostgreSQL, and allows you to declare full text indexes. Textacular will extend ActiveRecord with named_scope methods making searching easy and...
- 712Pipal, THE password analyser
https://github.com/digininja/pipal
Pipal, THE password analyser. Contribute to digininja/pipal development by creating an account on GitHub.
- 713primes-utils rubygem
https://github.com/jzakiya/primes-utils
primes-utils rubygem. Contribute to jzakiya/primes-utils development by creating an account on GitHub.
- 714Development tool to mock API endpoints quickly and easily (docker image available)
https://github.com/iridakos/duckrails
Development tool to mock API endpoints quickly and easily (docker image available) - iridakos/duckrails
- 715Logic-less Ruby templates.
https://github.com/mustache/mustache
Logic-less Ruby templates. Contribute to mustache/mustache development by creating an account on GitHub.
- 716A suite for basic and advanced statistics on Ruby.
https://github.com/sciruby/statsample
A suite for basic and advanced statistics on Ruby. - SciRuby/statsample
- 717A Ruby library for testing your library against different versions of dependencies.
https://github.com/thoughtbot/appraisal
A Ruby library for testing your library against different versions of dependencies. - thoughtbot/appraisal
- 718Calling Python functions from the Ruby language
https://github.com/mrkn/pycall.rb
Calling Python functions from the Ruby language. Contribute to mrkn/pycall.rb development by creating an account on GitHub.
- 719A library for setting up Ruby objects as test data.
https://github.com/thoughtbot/factory_bot
A library for setting up Ruby objects as test data. - thoughtbot/factory_bot
- 720Versioned fork of the OpenCV gem for Ruby
https://github.com/ruby-opencv/ruby-opencv
Versioned fork of the OpenCV gem for Ruby. Contribute to ruby-opencv/ruby-opencv development by creating an account on GitHub.
- 721FriendlyId is the “Swiss Army bulldozer” of slugging and permalink plugins for ActiveRecord. It allows you to create pretty URL’s and work with human-friendly strings as if they were numeric ids for ActiveRecord models.
https://github.com/norman/friendly_id
FriendlyId is the “Swiss Army bulldozer” of slugging and permalink plugins for ActiveRecord. It allows you to create pretty URL’s and work with human-friendly strings as if they were numeric ids fo...
- 722A lightweight, efficient Ruby gem for interacting with Whatsapp Cloud API.
https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk
A lightweight, efficient Ruby gem for interacting with Whatsapp Cloud API. - ignacio-chiazzo/ruby_whatsapp_sdk
- 723minimalist framework for building rack applications
https://github.com/rack-app/rack-app
minimalist framework for building rack applications - rack-app/rack-app
- 724render_async lets you include pages asynchronously with AJAX
https://github.com/renderedtext/render_async
render_async lets you include pages asynchronously with AJAX - renderedtext/render_async
- 725DNS mock server written on 💎 Ruby. Mimic any DNS records for your test environment with fake DNS server.
https://github.com/mocktools/ruby-dns-mock
DNS mock server written on 💎 Ruby. Mimic any DNS records for your test environment with fake DNS server. - mocktools/ruby-dns-mock
- 726A privacy-aware, distributed, open source social network.
https://github.com/diaspora/diaspora
A privacy-aware, distributed, open source social network. - diaspora/diaspora
- 727An opinionated way of organizing front-end code in Ruby on Rails, based on components
https://github.com/komposable/komponent
An opinionated way of organizing front-end code in Ruby on Rails, based on components - komposable/komponent
- 728A Ruby gem for communicating with the Twilio API and generating TwiML
https://github.com/twilio/twilio-ruby
A Ruby gem for communicating with the Twilio API and generating TwiML - twilio/twilio-ruby
- 729Ruby client library for Dropbox API v2
https://github.com/Jesus/dropbox_api
Ruby client library for Dropbox API v2. Contribute to Jesus/dropbox_api development by creating an account on GitHub.
- 730A framework for building object-oriented views in Ruby.
https://github.com/joeldrapper/phlex
A framework for building object-oriented views in Ruby. - phlex-ruby/phlex
- 731A Rails gem to send messages inside a web application
https://github.com/mailboxer/mailboxer
A Rails gem to send messages inside a web application - mailboxer/mailboxer
- 732A collection of awesome Jekyll goodies (tools, templates, plugins, guides, etc.)
https://github.com/planetjekyll/awesome-jekyll
A collection of awesome Jekyll goodies (tools, templates, plugins, guides, etc.) - planetjekyll/awesome-jekyll
- 733RR is a test double framework that features a rich selection of double techniques and a terse syntax. ⛺
https://github.com/rr/rr
RR is a test double framework that features a rich selection of double techniques and a terse syntax. ⛺ - rr/rr
- 734Use simple commands on the server to control client browsers in real-time
https://github.com/hopsoft/cable_ready
Use simple commands on the server to control client browsers in real-time - stimulusreflex/cable_ready
- 735Bootstrap Helpers for Ruby
https://github.com/fullscreen/bh
Bootstrap Helpers for Ruby. Contribute to nullscreen/bh development by creating an account on GitHub.
- 736A Ruby interface to the Twitter API.
https://github.com/sferik/twitter
A Ruby interface to the Twitter API. Contribute to sferik/twitter-ruby development by creating an account on GitHub.
- 737Next generation web scanner
https://github.com/urbanadventurer/WhatWeb
Next generation web scanner. Contribute to urbanadventurer/WhatWeb development by creating an account on GitHub.
- 738The official gem for the Instagram API
https://github.com/Instagram/instagram-ruby-gem
The official gem for the Instagram API. Contribute to facebookarchive/instagram-ruby-gem development by creating an account on GitHub.
- 739Ruby integrations for Elasticsearch
https://github.com/elastic/elasticsearch-ruby
Ruby integrations for Elasticsearch. Contribute to elastic/elasticsearch-ruby development by creating an account on GitHub.
- 740Manages application of security headers with many safe defaults
https://github.com/twitter/secureheaders
Manages application of security headers with many safe defaults - github/secure_headers
- 741Test command-line applications with Cucumber-Ruby, RSpec or Minitest.
https://github.com/cucumber/aruba
Test command-line applications with Cucumber-Ruby, RSpec or Minitest. - cucumber/aruba
- 742Patch-level verification for Bundler
https://github.com/rubysec/bundler-audit
Patch-level verification for Bundler. Contribute to rubysec/bundler-audit development by creating an account on GitHub.
- 743Build realtime Ruby web applications. Created by the fine folks at Poll Everywhere.
https://github.com/firehoseio/firehose
Build realtime Ruby web applications. Created by the fine folks at Poll Everywhere. - firehoseio/firehose
- 744Principled Test Framework for Ruby and MRuby
https://github.com/test-bench/test-bench
Principled Test Framework for Ruby and MRuby. Contribute to test-bench/test-bench development by creating an account on GitHub.
- 745a small RSpec clone
https://github.com/chneukirchen/bacon
a small RSpec clone. Contribute to leahneukirchen/bacon development by creating an account on GitHub.
- 746A framework for building reusable, testable & encapsulated view components in Ruby on Rails.
https://github.com/github/view_component
A framework for building reusable, testable & encapsulated view components in Ruby on Rails. - ViewComponent/view_component
- 747xlsx generation with charts, images, automated column width, customizable styles and full schema validation. Axlsx excels at helping you generate beautiful Office Open XML Spreadsheet documents without having to understand the entire ECMA specification. Check out the README for some examples of how easy it is. Best of all, you can validate your xlsx file before serialization so you know for sure that anything generated is going to load on your client's machine.
https://github.com/randym/axlsx
xlsx generation with charts, images, automated column width, customizable styles and full schema validation. Axlsx excels at helping you generate beautiful Office Open XML Spreadsheet documents...
- 748The participatory democracy framework. A generator and multiple gems made with Ruby on Rails
https://github.com/decidim/decidim
The participatory democracy framework. A generator and multiple gems made with Ruby on Rails - decidim/decidim
- 749A Ruby-based framework for acceptance testing
https://github.com/strongqa/howitzer
A Ruby-based framework for acceptance testing. Contribute to strongqa/howitzer development by creating an account on GitHub.
- 750A simple wrapper for posting to slack channels
https://github.com/stevenosloan/slack-notifier
A simple wrapper for posting to slack channels. Contribute to slack-notifier/slack-notifier development by creating an account on GitHub.
- 751xlsx generation with charts, images, automated column width, customizable styles and full schema validation. Axlsx excels at helping you generate beautiful Office Open XML Spreadsheet documents without having to understand the entire ECMA specification. Check out the README for some examples of how easy it is. Best of all, you can validate your xlsx file before serialization so you know for sure that anything generated is going to load on your client's machine.
https://github.com/caxlsx/caxlsx
xlsx generation with charts, images, automated column width, customizable styles and full schema validation. Axlsx excels at helping you generate beautiful Office Open XML Spreadsheet documents...
- 752A Ruby/Rack web server built for parallelism
https://github.com/puma/puma
A Ruby/Rack web server built for parallelism. Contribute to puma/puma development by creating an account on GitHub.
- 753Generate mocks from ActiveRecord models for unit tests that run fast because they don’t need to load Rails or a database.
https://github.com/zeisler/active_mocker
Generate mocks from ActiveRecord models for unit tests that run fast because they don’t need to load Rails or a database. - zeisler/active_mocker
- 754Roo provides an interface to spreadsheets of several sorts.
https://github.com/roo-rb/roo
Roo provides an interface to spreadsheets of several sorts. - roo-rb/roo
- 755Ronin is a Free and Open Source Ruby Toolkit for Security Research and Development. Ronin also allows for the rapid development and distribution of code, exploits, payloads, etc, via 3rd-party git repositories.
https://github.com/ronin-rb/ronin
Ronin is a Free and Open Source Ruby Toolkit for Security Research and Development. Ronin also allows for the rapid development and distribution of code, exploits, payloads, etc, via 3rd-party git ...
- 756selenium/rb at trunk · SeleniumHQ/selenium
https://github.com/SeleniumHQ/selenium/tree/master/rb
A browser automation framework and ecosystem. Contribute to SeleniumHQ/selenium development by creating an account on GitHub.
- 757Rack middleware for blocking & throttling
https://github.com/kickstarter/rack-attack
Rack middleware for blocking & throttling. Contribute to rack/rack-attack development by creating an account on GitHub.
- 758The Curly template language allows separating your logic from the structure of your HTML templates.
https://github.com/zendesk/curly
The Curly template language allows separating your logic from the structure of your HTML templates. - zendesk/curly
- 759Spinach is a BDD framework on top of Gherkin.
https://github.com/codegram/spinach
Spinach is a BDD framework on top of Gherkin. Contribute to codegram/spinach development by creating an account on GitHub.
- 760Software Engineering Intelligence
https://codeclimate.com
Code Climate's industry-leading Software Engineering Intelligence platform helps unlock the full potential of your organization to ship better code,…
- 761A mocking and stubbing library for Ruby
https://github.com/freerange/mocha
A mocking and stubbing library for Ruby. Contribute to freerange/mocha development by creating an account on GitHub.
- 762Search engine like fulltext query support for ActiveRecord
https://github.com/mrkamel/search_cop
Search engine like fulltext query support for ActiveRecord - mrkamel/search_cop
- 763sinatra/rack-protection at main · sinatra/sinatra
https://github.com/sinatra/sinatra/tree/master/rack-protection
Classy web-development dressed in a DSL (official / canonical repo) - sinatra/sinatra
- 764Simple one-liner tests for common Rails functionality
https://github.com/thoughtbot/shoulda-matchers
Simple one-liner tests for common Rails functionality - thoughtbot/shoulda-matchers
- 765A next-generation progressive site generator & fullstack framework, powered by Ruby
https://github.com/bridgetownrb/bridgetown
A next-generation progressive site generator & fullstack framework, powered by Ruby - bridgetownrb/bridgetown
- 766A Ruby client for the Notion API
https://github.com/orbit-love/notion-ruby-client
A Ruby client for the Notion API. Contribute to phacks/notion-ruby-client development by creating an account on GitHub.
- 767Data Analysis in RUby
https://github.com/v0dro/daru
Data Analysis in RUby. Contribute to SciRuby/daru development by creating an account on GitHub.
- 768OctoLinker — Links together, what belongs together
https://github.com/OctoLinker/browser-extension
OctoLinker — Links together, what belongs together - OctoLinker/OctoLinker
- 769iodine - HTTP / WebSockets Server for Ruby with Pub/Sub support
https://github.com/boazsegev/iodine
iodine - HTTP / WebSockets Server for Ruby with Pub/Sub support - boazsegev/iodine
- 770A statesmanlike state machine library.
https://github.com/gocardless/statesman
A statesmanlike state machine library. Contribute to gocardless/statesman development by creating an account on GitHub.
- 771Ruby finite-state-machine-inspired API for modeling workflow
https://github.com/geekq/workflow
Ruby finite-state-machine-inspired API for modeling workflow - geekq/workflow
- 772The reliable YouTube API Ruby client
https://github.com/Fullscreen/yt
The reliable YouTube API Ruby client. Contribute to nullscreen/yt development by creating an account on GitHub.
- 773A home for issues that are common to multiple cucumber repositories
https://github.com/cucumber/cucumber
A home for issues that are common to multiple cucumber repositories - cucumber/common
- 774Adds support for creating state machines for attributes on any Ruby class
https://github.com/state-machines/state_machines
Adds support for creating state machines for attributes on any Ruby class - state-machines/state_machines
- 775A command-line power tool for Twitter.
https://github.com/sferik/t
A command-line power tool for Twitter. Contribute to sferik/t-ruby development by creating an account on GitHub.
- 776Simple full text search for Mongoid ORM
https://github.com/mauriciozaffari/mongoid_search
Simple full text search for Mongoid ORM. Contribute to mongoid/mongoid_search development by creating an account on GitHub.
- 777Search Engine Optimization (SEO) for Ruby on Rails applications.
https://github.com/kpumuk/meta-tags
Search Engine Optimization (SEO) for Ruby on Rails applications. - kpumuk/meta-tags
- 778The best Rails forums engine ever.
https://github.com/thredded/thredded
The best Rails forums engine ever. Contribute to thredded/thredded development by creating an account on GitHub.
- 779daru-view is for easy and interactive plotting in web application & IRuby notebook. daru-view is a plugin gem to the existing daru gem.
https://github.com/SciRuby/daru-view
daru-view is for easy and interactive plotting in web application & IRuby notebook. daru-view is a plugin gem to the existing daru gem. - SciRuby/daru-view
- 780Tools to transcode, inspect and convert videos.
https://github.com/donmelton/video_transcoding
Tools to transcode, inspect and convert videos. Contribute to lisamelton/video_transcoding development by creating an account on GitHub.
- 781Wraith — A responsive screenshot comparison tool
https://github.com/BBC-News/wraith
Wraith — A responsive screenshot comparison tool. Contribute to bbc/wraith development by creating an account on GitHub.
- 782Knapsack splits tests evenly across parallel CI nodes to run fast CI build and save you time.
https://github.com/ArturT/knapsack
Knapsack splits tests evenly across parallel CI nodes to run fast CI build and save you time. - KnapsackPro/knapsack
- 783pg_search builds ActiveRecord named scopes that take advantage of PostgreSQL’s full text search
https://github.com/Casecommons/pg_search
pg_search builds ActiveRecord named scopes that take advantage of PostgreSQL’s full text search - GitHub - Casecommons/pg_search: pg_search builds ActiveRecord named scopes that take advantage of ...
- 784Slim is a template language whose goal is to reduce the syntax to the essential parts without becoming cryptic.
https://github.com/slim-template/slim
Slim is a template language whose goal is to reduce the syntax to the essential parts without becoming cryptic. - slim-template/slim
- 785Fast, simple, configurable photo portfolio website generator
https://github.com/henrylawson/photish
Fast, simple, configurable photo portfolio website generator - henrylawson/photish
- 786Library for stubbing and setting expectations on HTTP requests in Ruby.
https://github.com/bblimke/webmock
Library for stubbing and setting expectations on HTTP requests in Ruby. - bblimke/webmock
- 787Acceptance test framework for web applications
https://github.com/teamcapybara/capybara
Acceptance test framework for web applications. Contribute to teamcapybara/capybara development by creating an account on GitHub.
- 788SitemapGenerator is a framework-agnostic XML Sitemap generator written in Ruby with automatic Rails integration. It supports Video, News, Image, Mobile, PageMap and Alternate Links sitemap extensions and includes Rake tasks for managing your sitemaps, as well as many other great features.
https://github.com/kjvarga/sitemap_generator
SitemapGenerator is a framework-agnostic XML Sitemap generator written in Ruby with automatic Rails integration. It supports Video, News, Image, Mobile, PageMap and Alternate Links sitemap extensio...
- 789Build reactive applications with the Rails tooling you already know and love.
https://github.com/hopsoft/stimulus_reflex
Build reactive applications with the Rails tooling you already know and love. - stimulusreflex/stimulus_reflex
- 790High-level Elasticsearch Ruby framework based on the official elasticsearch-ruby client
https://github.com/toptal/chewy
High-level Elasticsearch Ruby framework based on the official elasticsearch-ruby client - toptal/chewy
- 791AASM - State machines for Ruby classes (plain Ruby, ActiveRecord, Mongoid, NoBrainer, Dynamoid)
https://github.com/aasm/aasm
AASM - State machines for Ruby classes (plain Ruby, ActiveRecord, Mongoid, NoBrainer, Dynamoid) - aasm/aasm
- 792Solr-powered search for Ruby objects
https://github.com/sunspot/sunspot
Solr-powered search for Ruby objects. Contribute to sunspot/sunspot development by creating an account on GitHub.
- 793Headless Chrome Ruby API
https://github.com/rubycdp/ferrum
Headless Chrome Ruby API. Contribute to rubycdp/ferrum development by creating an account on GitHub.
- 794A minimal finite state machine with a straightforward syntax.
https://github.com/peter-murach/finite_machine
A minimal finite state machine with a straightforward syntax. - piotrmurach/finite_machine
- 795A library for generating fake data such as names, addresses, and phone numbers.
https://github.com/stympy/faker
A library for generating fake data such as names, addresses, and phone numbers. - faker-ruby/faker
- 796A Ruby client for the Salesforce REST API.
https://github.com/ejholmes/restforce
A Ruby client for the Salesforce REST API. Contribute to restforce/restforce development by creating an account on GitHub.
- 797minitest provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking.
https://github.com/seattlerb/minitest
minitest provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking. - minitest/minitest
- 798Intelligent search made easy
https://github.com/ankane/searchkick
Intelligent search made easy. Contribute to ankane/searchkick development by creating an account on GitHub.
- 799Kimurai is a modern web scraping framework written in Ruby which works out of box with Headless Chromium/Firefox, PhantomJS, or simple HTTP requests and allows to scrape and interact with JavaScript rendered websites
https://github.com/vifreefly/kimuraframework
Kimurai is a modern web scraping framework written in Ruby which works out of box with Headless Chromium/Firefox, PhantomJS, or simple HTTP requests and allows to scrape and interact with JavaScrip...
Related Articlesto learn about angular.
- 1Getting Started with Ruby, An Absolute Beginner's Guide
- 2Mastering Object-Oriented Programming in Ruby
- 3Building Web Applications with Ruby on Rails
- 4Ruby on Rails API Development: Building and Securing RESTful APIs
- 5Exploring Metaprogramming in Ruby: Dynamic Code at Runtime
- 6Ruby Blocks, Procs, and Lambdas Explained: Ruby’s Closures
- 7Optimizing Ruby Code: Tips for Boosting Ruby Application Performance
- 8Concurrency in Ruby: An Introduction to Threads, Fibers, and Actors
- 9Building a Simple Ruby Gem: From Concept to Publication
- 10Real-Time Applications in Ruby: Building a WebSocket-Based Chat App
FAQ'sto learn more about Angular JS.
mail [email protected] to add more queries here 🔍.
- 1
when was ruby language created
- 2
how popular is ruby programming
- 3
what is ruby programming language
- 4
why use ruby programming language
- 5
who uses ruby programming language
- 6
is ruby harder than python
- 7
- 8
what is ruby programming language used for
- 9
why is ruby important in programming
- 10
is ruby programming language
- 11
what is the purpose of ruby programming language
- 12
why ruby on rails
- 13
was ruby sparks real
- 14
what is ruby programming language good for
- 15
where ruby is used
- 16
who invented ruby programming language
- 17
where is ruby programming used
- 18
is ruby a programming language
- 19
who developed ruby programming language
- 20
will ruby be useful
- 21
who owns ruby programming language
- 22
what can you do with ruby programming language
- 23
are ruby and python similar
- 24
is ruby easier than python
- 25
why was ruby created
- 26
does ruby really work
- 27
what is ruby programming
- 28
what is ruby used for programming
- 29
what can i do with ruby programming language
- 30
what can ruby do
- 31
is ruby programming language easy to learn
- 32
how to learn ruby programming language
- 33
why ruby is better than python
- 34
what is a ruby developer
- 35
when was ruby programming language created
- 36
what type of programming language is ruby
- 38
was ruby good in supernatural
- 39
is ruby a popular programming language
- 40
what is ruby software used for
- 41
what are the principles of ruby programming language
- 42
should i learn ruby
- 43
is ruby programming language good
- 44
how is ruby used
- 45
what happened to ruby programming language
- 46
when was ruby created
- 47
is ruby programming language dead
- 48
who created ruby
- 49
why to use ruby on web development
- 50
what is ruby good for programming
- 51
when was ruby invented
- 52
how hard is ruby programming language
- 53
what is ruby programming used for
- 54
are ruby developers in demand
- 55
when ruby developed
- 56
where to learn ruby programming language
- 57
how popular is ruby programming language
- 58
what is the ruby programming language
- 59
where does ruby chocolate come from
- 60
how old is ruby programming language
- 61
did ruby die in wentworth
- 62
- 63
how to use ruby programming language
- 64
should i learn ruby on rails
- 65
is ruby a good programming language
- 66
what is ruby used for in programming
- 67
what happened to ruby language
- 68
what is the ruby programming language used for
- 69
what language does ruby use
- 70
what does ruby do programming
- 71
- 72
what is a ruby gem programming
- 73
does ruby protect you
- 74
are ruby javascript and python interpreted languages
More Sitesto check out once you're finished browsing here.
https://www.0x3d.site/
0x3d is designed for aggregating information.
https://nodejs.0x3d.site/
NodeJS Online Directory
https://cross-platform.0x3d.site/
Cross Platform Online Directory
https://open-source.0x3d.site/
Open Source Online Directory
https://analytics.0x3d.site/
Analytics Online Directory
https://javascript.0x3d.site/
JavaScript Online Directory
https://golang.0x3d.site/
GoLang Online Directory
https://python.0x3d.site/
Python Online Directory
https://swift.0x3d.site/
Swift Online Directory
https://rust.0x3d.site/
Rust Online Directory
https://scala.0x3d.site/
Scala Online Directory
https://ruby.0x3d.site/
Ruby Online Directory
https://clojure.0x3d.site/
Clojure Online Directory
https://elixir.0x3d.site/
Elixir Online Directory
https://elm.0x3d.site/
Elm Online Directory
https://lua.0x3d.site/
Lua Online Directory
https://c-programming.0x3d.site/
C Programming Online Directory
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
https://r-programming.0x3d.site/
R Programming Online Directory
https://perl.0x3d.site/
Perl Online Directory
https://java.0x3d.site/
Java Online Directory
https://kotlin.0x3d.site/
Kotlin Online Directory
https://php.0x3d.site/
PHP Online Directory
https://react.0x3d.site/
React JS Online Directory
https://angular.0x3d.site/
Angular JS Online Directory