See https://www.youtube.com/watch?v=4_RJu_TrqO0&feature=youtu.be&t=8h6m40s
$ ruby dilute.rb fib.rb
def fi n
if n < 3
1
else
fib(n-1 + ib(n
end
| def count_nodes(label) | |
| before = ObjectSpace.count_objects | |
| yield | |
| after = ObjectSpace.count_objects | |
| puts " #{label} created T_NODE: %d" % (after[:T_NODE] - before[:T_NODE]) | |
| end | |
| class MyClass | |
| include Enumerable |
| defmodule ExUnit.Lets do | |
| defmacro __using__([]) do | |
| quote do | |
| import ExUnit.Lets | |
| end | |
| end | |
| defmacro let(name, expr) do | |
| if match?([do: _], expr) do | |
| expr = expr[:do] |
See https://www.youtube.com/watch?v=4_RJu_TrqO0&feature=youtu.be&t=8h6m40s
$ ruby dilute.rb fib.rb
def fi n
if n < 3
1
else
fib(n-1 + ib(n
end
This is the source for the scripts discussed in https://robots.thoughtbot.com/improving-user-experience-with-shell-scripts
Both scripts are in the bin/ directory of the repo that contains all the markdown documents for blog posts.
Users run bin/server and everything is automatically set up for them to view a local preview of the blog.
bin/server-setup is a dependency of bin/server and is never run directly by users.
Maitre-d is the name of the "blog engine" discussed in the article.
| #!/usr/bin/env ruby | |
| #/ Usage: <progname> [options]... | |
| #/ How does this script make my life easier? | |
| # ** Tip: use #/ lines to define the --help usage message. | |
| $stderr.sync = true | |
| require 'optparse' | |
| # default options | |
| flag = false | |
| option = "default value" |
| module GitHub | |
| module CSP | |
| # Public: Constants for CSP keywords | |
| NONE = "'none'".freeze | |
| SELF = "'self'".freeze | |
| UNSAFE_INLINE = "'unsafe-inline'".freeze | |
| UNSAFE_EVAL = "'unsafe-eval'".freeze | |
| # Public: Constants for CSP directive names | |
| BASE_URI = "base-uri".freeze |
| import { Component } from "React"; | |
| export var Enhance = ComposedComponent => class extends Component { | |
| constructor() { | |
| this.state = { data: null }; | |
| } | |
| componentDidMount() { | |
| this.setState({ data: 'Hello' }); | |
| } | |
| render() { |
| class Importer | |
| def parse_csv_file(csv_file) | |
| File.open(csv_file) do |file| | |
| ActiveRecordModel.transaction do | |
| import_csv_stream(file) | |
| end | |
| end | |
| end | |
| end |
As your business logic gets complex you may need to implement transactions. The classic example is a bank funds transfer from account A to account B. If the withdrawal from account A fails then the deposit to account B should either never take place or be rolled back.
All the complexity is handled by ActiveRecord::Transactions. Any model class or instance has a method named .transaction. When called and passed a block, that block will be executed inside a database transaction. If there's an exception raised, the transaction will automatically be rolled back.
| daemon off; | |
| # Heroku dynos have at least 4 cores. | |
| worker_processes <%= ENV['NGINX_WORKERS'] || 4 %>; | |
| events { | |
| use epoll; | |
| accept_mutex on; | |
| worker_connections 1024; | |
| } |