Skip to content

Commit 9a65b58

Browse files
committed
Add snippets for environments to play around with SiB in
1 parent 3a2e531 commit 9a65b58

4 files changed

+184
-0
lines changed

ActiveRecord.sublime-snippet

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<snippet>
2+
<content><![CDATA[require 'active_record'
3+
require 'logger'
4+
5+
ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
6+
ActiveRecord::Base.logger = Logger.new \$stdout
7+
ActiveSupport::LogSubscriber.colorize_logging = false
8+
9+
ActiveRecord::Schema.define do
10+
self.verbose = false
11+
12+
create_table :users do |t|
13+
t.string :name
14+
end
15+
16+
create_table :posts do |t|
17+
t.string :name
18+
t.integer :user_id
19+
end
20+
end
21+
22+
class User < ActiveRecord::Base
23+
has_many :posts
24+
end
25+
26+
class Post < ActiveRecord::Base
27+
belongs_to :user
28+
end
29+
30+
user = User.create! name: 'Josh'
31+
user.posts = [Post.new(name: 'yo ho ho'), Post.new(name: 'and a bottle of rum')]
32+
$0]]></content>
33+
<tabTrigger>s_arb</tabTrigger>
34+
<scope>source.ruby</scope>
35+
<description>In memory ActiveRecord bootstrap</description>
36+
</snippet>

Nokogiri.sublime-snippet

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<snippet>
2+
<content><![CDATA[
3+
require 'nokogiri'
4+
5+
doc = Nokogiri::HTML(<<-HTML)
6+
<!DOCTYPE html>
7+
<html>
8+
<head>
9+
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
10+
<title>OMG</title>
11+
</head>
12+
<body>
13+
<ul>
14+
<li>a</li>
15+
<li>b</li>
16+
<li>c</li>
17+
</ul>
18+
</body>
19+
</html>
20+
HTML
21+
22+
doc.at_css('ul li:nth-child(2)')
23+
.text
24+
]]></content>
25+
<tabTrigger>s_nokogiri</tabTrigger>
26+
<scope>source.ruby</scope>
27+
<description>Practice parsing html/xml/css selectors/xpath in Ruby</description>
28+
</snippet>

Reflection.sublime-snippet

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<snippet>
2+
<content><![CDATA[
3+
class User
4+
attr_accessor :name, :age
5+
def initialize(name, age)
6+
self.name, self.age = name, age
7+
end
8+
9+
private
10+
11+
def reverse_name
12+
name.reverse
13+
end
14+
end
15+
16+
user = User.new 'Mr. Picklecopter', 45
17+
18+
# ZOMG, ENCAPSULATION VIOLATION!
19+
user.instance_variables
20+
user.instance_variable_get(:@name)
21+
user.instance_variable_set(:@name, 'Mr. Lawyerstein')
22+
user.name
23+
user.instance_eval { "#@name is #@age years old" }
24+
user.send(:reverse_name)
25+
26+
27+
# ZOMG, METHODS!
28+
user.methods(false)
29+
def user.what_time?(a, b=1, *c, &d)
30+
'420'
31+
end
32+
33+
# getting lists of methods
34+
user.singleton_methods
35+
user.methods
36+
user.private_methods(false)
37+
38+
User.instance_methods(false)
39+
User.private_instance_methods(false)
40+
41+
# fun shit to do with methods
42+
user.method(:reverse_name)
43+
user.method(:reverse_name).owner
44+
user.method(:puts).owner
45+
user.method(:reverse_name).call
46+
user.method(:what_time?).parameters
47+
48+
User.instance_method(:name)
49+
.bind(user)
50+
.call
51+
52+
# uhm, there was a method like code_location or something, lets find and use that
53+
user.method(:reverse_name).methods.grep(/loc/)
54+
user.method(:reverse_name).source_location
55+
56+
57+
# ZOMG OTHER SHIT!
58+
user.class
59+
user.class.class
60+
user.class.class.class
61+
User.ancestors
62+
Object.constants.grep(/ruby/i)
63+
Object.included_modules
64+
]]></content>
65+
<tabTrigger>s_reflection</tabTrigger>
66+
<scope>source.ruby</scope>
67+
<description>Examples of reflection in Ruby</description>
68+
</snippet>

Sinatra.sublime-snippet

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<snippet>
2+
<content><![CDATA[
3+
require 'sinatra/base'
4+
require 'stringio'
5+
require 'logger'
6+
7+
class MyApp < Sinatra::Base
8+
enable :inline_templates
9+
get '/users/:id' do
10+
"User number #{params[:id]} is an uppity know-it-all"
11+
end
12+
end
13+
14+
env = {"REQUEST_METHOD" => "GET", "PATH_INFO" => "/users/456", "rack.input" => StringIO.new}
15+
status, headers, response = MyApp.call(env)
16+
17+
status
18+
headers
19+
response
20+
21+
# --- OTHER ENV OPTIONS ---
22+
# "REQUEST_PATH" => "/users/123",
23+
# "REQUEST_URI" => "/users/789",
24+
# "SERVER_SOFTWARE" => "thin 1.5.1 codename Straight Razor",
25+
# "SERVER_NAME" => "localhost",
26+
# "rack.version" => [1, 0],
27+
# "rack.errors" => \$stderr,
28+
# "HTTP_VERSION" => "HTTP/1.1",
29+
# "HTTP_HOST" => "localhost:4567",
30+
# "HTTP_CONNECTION" => "keep-alive",
31+
# "HTTP_CACHE_CONTROL" => "max-age=0",
32+
# "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
33+
# "HTTP_USER_AGENT" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36",
34+
# "HTTP_ACCEPT_ENCODING" => "gzip,deflate,sdch",
35+
# "HTTP_ACCEPT_LANGUAGE" => "en-US,en;q=0.8",
36+
# "HTTP_COOKIE" => "_session_id=2fca27fa2255b1ebf961610b616fc044; _simple_feed_consumer_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFRkkiJTNiNzg2YWQwMWU1NzU3M2MxM2U1ZTg5ZTRiZDY3MmJiBjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMXo2Y2YrVkhWRG9NQTVNV3ZoblVRdnRjRzk0eml4NGk1UzhQRFNZVHZhZzA9BjsARg%3D%3D--dc69c96a2374f9ffd646cd2005a63f3b32094f9f; _simple_feed_consumer2_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFRkkiJWE3Nzk2NzlmNjRjZjMwODY1NjdkMWU2OTdjNzYxNzNlBjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMXEzVmVobmpaYTZzZGRzRytkNUVUUTV4THAxVnlvMXM1Q3hjTko4TXFUMm89BjsARg%3D%3D--fa7da019717903452ef2de05ccf74a9d9547c791; _simple_feed_consumer3_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFRkkiJTcxMjNjMmM5NTRiOGQzY2VkNmE4NTQxZjFhNzhlYWQxBjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMTRnR1d3bVFoK3phMFdwQ2MyTEFmUGhHRjVTL0ZiblNhWkhvWFRqbllhZ1U9BjsARg%3D%3D--e6ddb60584bc6323181881d71ccc0380222d49f3; _gauges_unique_year=1; _gauges_unique=1; _simple_feed_consumer5_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFRkkiJWE3NTBhOGE3MDcyODljMWNjMzRjNWI1ZWI0ZDNmMjU2BjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMTB5dW9DRFkvOElpMzFkZk9PTGwrVTBpWnJ1RU4yWnFBdGI3cW0veXl2Q1U9BjsARg%3D%3D--4003910f17682ddb0e25e12c1fb865b16f197e29; _simple_feed_session=BAh7CDoScmV0dXJuX3RvX3VybDA6DHVzZXJfaWRpCEkiD3Nlc3Npb25faWQGOgZFRkkiJWE4ODMyM2Q4ZjgwZTNiNzI5YTA1ZTA5ZTFjYjg2ODI1BjsHVA%3D%3D--caf9d70c54a570a5bf8f7e9f939ca5bca1989d9e; _staffing_service_session=BAh7CEkiD3Nlc3Npb25faWQGOgZFRkkiJWM1NzFiODc5MjJlMzhjYzA4NjM1ZDNlMGZmZTEwOWI3BjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMUYvNldXOXkvKzlRMHNLb3BjcGt3UXlRN1BNT0oyL3cyRDdhSVhoaTlSWUU9BjsARkkiEGNyZWRlbnRpYWxzBjsARkM6F09tbmlBdXRoOjpBdXRoSGFzaHsJSSIKdG9rZW4GOwBGSSI5eWEyOS5BSEVTNlpUUTJZcEhSdjhnaGVoTUV6S043Nk42MEMwTm0waXJHRzFpMWNEbndVawY7AEZJIhJyZWZyZXNoX3Rva2VuBjsARkkiMjEvLURDWkx0T2ljSzUtQ3lkVjZfNEVDLWg0djlKVy15V1hxRlB3T053cks1WQY7AEZJIg9leHBpcmVzX2F0BjsARmwrB5fYflFJIgxleHBpcmVzBjsARlQ%3D--85f3a935ed10e4e4237ee72b236f901010222f71",
37+
# "GATEWAY_INTERFACE" => "CGI/1.2",
38+
# "SERVER_PORT" => "4567",
39+
# "QUERY_STRING" => "",
40+
# "SERVER_PROTOCOL" => "HTTP/1.1",
41+
# "rack.url_scheme" => "http",
42+
# "SCRIPT_NAME" => "",
43+
# "REMOTE_ADDR" => "127.0.0.1",
44+
# "sinatra.commonlogger" => true,
45+
# "rack.logger" => Logger.new(\$stdout),
46+
# "rack.request.query_string" => "",
47+
# "rack.request.query_hash" => {}
48+
]]></content>
49+
<tabTrigger>s_sinatra</tabTrigger>
50+
<scope>source.ruby</scope>
51+
<description>Play with Sinatra, without needing to host it on a server</description>
52+
</snippet>

0 commit comments

Comments
 (0)