static_blocks 0.1.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/README.md +13 -7
  2. data/app/controllers/static_blocks/application_controller.rb +0 -4
  3. data/app/controllers/static_blocks/{static_blocks_controller.rb → snippets_controller.rb} +36 -36
  4. data/app/helpers/static_blocks/{static_blocks_helper.rb → snippets_helper.rb} +0 -0
  5. data/app/models/static_blocks/{static_block.rb → snippet.rb} +19 -19
  6. data/app/views/layouts/static_blocks/application.html.erb +10 -8
  7. data/app/views/static_blocks/{static_blocks → snippets}/_form.html.erb +4 -4
  8. data/app/views/static_blocks/snippets/edit.html.erb +4 -0
  9. data/app/views/static_blocks/{static_blocks → snippets}/index.html.erb +14 -14
  10. data/app/views/static_blocks/snippets/new.html.erb +3 -0
  11. data/app/views/static_blocks/snippets/show.html.erb +23 -0
  12. data/config/routes.rb +11 -7
  13. data/db/migrate/20130611042319_create_static_blocks_static_blocks.rb +2 -2
  14. data/db/migrate/20130612034816_create_static_block_translations.rb +3 -3
  15. data/lib/static_blocks/engine.rb +2 -1
  16. data/lib/static_blocks/helpers.rb +11 -11
  17. data/lib/static_blocks/version.rb +1 -1
  18. data/lib/tasks/populate.rake +1 -1
  19. data/spec/dummy/app/views/info/index.html.erb +1 -1
  20. data/spec/dummy/config/initializers/static_blocks.rb +2 -1
  21. data/spec/dummy/config/routes.rb +1 -2
  22. data/spec/dummy/db/development.sqlite3 +0 -0
  23. data/spec/dummy/db/migrate/20130611042521_create_static_blocks_static_blocks.static_blocks.rb +2 -2
  24. data/spec/dummy/db/migrate/20130612035223_create_static_block_translations.static_blocks.rb +3 -3
  25. data/spec/dummy/db/schema.rb +5 -5
  26. data/spec/dummy/db/test.sqlite3 +0 -0
  27. data/spec/dummy/log/development.log +34145 -0
  28. data/spec/dummy/log/test.log +17664 -0
  29. data/spec/dummy/tmp/capybara/capybara-201306271715434400421805.html +105 -0
  30. data/spec/dummy/tmp/capybara/capybara-201306271720151310204564.html +2 -0
  31. data/spec/dummy/tmp/capybara/capybara-201306271721083468243101.html +2 -0
  32. data/spec/dummy/tmp/capybara/capybara-201306271721478445036540.html +2 -0
  33. data/spec/dummy/tmp/capybara/capybara-201306271721487345133836.html +97 -0
  34. data/spec/dummy/tmp/capybara/capybara-201306271722466837246437.html +2 -0
  35. data/spec/dummy/tmp/capybara/capybara-201306271722471821301599.html +105 -0
  36. data/spec/dummy/tmp/capybara/capybara-201306271724391294417961.html +2 -0
  37. data/spec/dummy/tmp/capybara/capybara-201306271725269568506755.html +2 -0
  38. data/spec/dummy/tmp/capybara/capybara-201306271725532116510731.html +2 -0
  39. data/spec/dummy/tmp/capybara/capybara-201306271726399551759972.html +97 -0
  40. data/spec/dummy/tmp/capybara/capybara-201306271732329832575014.html +105 -0
  41. data/spec/dummy/tmp/capybara/capybara-201306271733118671160246.html +105 -0
  42. data/spec/dummy/tmp/capybara/capybara-201306271733551813912702.html +105 -0
  43. data/spec/dummy/tmp/capybara/capybara-201306271736422992487098.html +105 -0
  44. data/spec/dummy/tmp/capybara/capybara-201306271737422569974960.html +2 -0
  45. data/spec/dummy/tmp/capybara/capybara-201306271741158405455507.html +3 -0
  46. data/spec/dummy/tmp/pids/server.pid +1 -0
  47. data/spec/helpers/static_blocks_helper_spec.rb +4 -4
  48. data/spec/integration/import_export_spec.rb +41 -0
  49. data/spec/integration/search_spec.rb +41 -0
  50. data/spec/integration/static_blocks_spec.rb +12 -12
  51. data/spec/integration/translations_spec.rb +24 -0
  52. data/spec/models/static_block_spec.rb +3 -3
  53. metadata +52 -14
  54. data/app/views/static_blocks/static_blocks/edit.html.erb +0 -4
  55. data/app/views/static_blocks/static_blocks/new.html.erb +0 -3
  56. data/app/views/static_blocks/static_blocks/show.html.erb +0 -23
  57. data/spec/dummy/tmp/cache/96E/880/static_block%3A%3Aen%3A%3Afoo +0 -2
  58. data/spec/dummy/tmp/cache/97D/300/static_block%3A%3Awk%3A%3Afoo +0 -2
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Static Blocks
2
2
 
3
- Static Blocks is an ultra light-weight CMS for Ruby on Rails. Create static blocks of content. Place them anywhere in your views.
3
+ Static Blocks is an ultra light-weight CMS for Ruby on Rails.
4
+
5
+ Create snippets of content. Place them anywhere in your views.
4
6
 
5
7
  ## Features
6
8
  * Simple admin interface
@@ -39,17 +41,17 @@ rake db:migrate
39
41
  Mount engine in routes.rb:
40
42
 
41
43
  ```ruby
42
- mount StaticBlocks::Engine => "/static_blocks_admin"
44
+ mount StaticBlocks::Engine => "/static_blocks"
43
45
  ```
44
46
 
45
47
  ## Usage
46
48
 
47
- Visit `/static_blocks_admin` and create some static blocks.
49
+ Visit `/static_blocks` and create some static blocks.
48
50
 
49
- Use the `static_block_for` method or it's alias `s` to output a block onto any view template. Pass in the title of the static block as argument. Use `raw` if you do not want to escape the html.
51
+ Use the `snippet_for` method or it's alias `s` to output a block onto any view template. Pass in the title of the static block as argument. Use `raw` if you do not want to escape the html.
50
52
 
51
53
  ```
52
- <%=raw static_block_for('foo') %>
54
+ <%=raw snippet_for('foo') %>
53
55
  <%=raw s('foo') %>
54
56
  ```
55
57
 
@@ -63,6 +65,7 @@ StaticBlocks.config do |config|
63
65
  config.http_auth = false
64
66
  config.username = ENV['STATIC_BLOCKS_USERNAME']
65
67
  config.password = ENV['STATIC_BLOCKS_PASSWORD']
68
+ config.wysihtml5 = true
66
69
  end
67
70
  ```
68
71
 
@@ -71,7 +74,7 @@ end
71
74
  Static Blocks supports i18n internationalization. Pass in an array of locales to it's config option:
72
75
 
73
76
  ```ruby
74
- config.locales = ['en', 'wk', 'zh', 'pirate']
77
+ config.locales = ['en', 'wk', 'pirate']
75
78
  ```
76
79
 
77
80
  ### Optional http basic authentication
@@ -82,8 +85,11 @@ Static Blocks has an optional http basic authentication which is turned off by d
82
85
  config.http_auth = true
83
86
  ```
84
87
 
88
+ ### wysihtml5 editor
89
+ Static Blocks uses the wysihtml5 editor which is turned on by default. To deactive, set the config option to false.
90
+
85
91
  ## Credits
86
- Written by Travis Luong
92
+ Created by Travis Luong
87
93
 
88
94
  ## License
89
95
  [MIT](http://opensource.org/licenses/MIT)
@@ -11,10 +11,6 @@ module StaticBlocks
11
11
 
12
12
  def set_locale
13
13
  I18n.locale = params[:locale] if params[:locale].present?
14
- # current_user.locale
15
- # request.subdomain
16
- # request.env["HTTP_ACCEPT_LANGUAGE"]
17
- # request.remote_ip
18
14
  end
19
15
 
20
16
  def default_url_options(options = {})
@@ -1,14 +1,14 @@
1
1
  require_dependency "static_blocks/application_controller"
2
2
 
3
3
  module StaticBlocks
4
- class StaticBlocksController < ApplicationController
4
+ class SnippetsController < ApplicationController
5
5
 
6
6
  def export
7
7
  t = Time.now.strftime('%Y%m%d%H%M%S')
8
8
  filename = "static-blocks-#{t}.csv"
9
9
  respond_to do |format|
10
10
  format.csv do
11
- send_data StaticBlock.to_csv, :filename => filename
11
+ send_data Snippet.to_csv, :filename => filename
12
12
  end
13
13
  end
14
14
  end
@@ -18,7 +18,7 @@ module StaticBlocks
18
18
  filename = "static-blocks-translations-#{t}.csv"
19
19
  respond_to do |format|
20
20
  format.csv do
21
- send_data StaticBlock.translations_to_csv, :filename => filename
21
+ send_data Snippet.translations_to_csv, :filename => filename
22
22
  end
23
23
  end
24
24
  end
@@ -31,7 +31,7 @@ module StaticBlocks
31
31
  redirect_to root_url
32
32
  flash[:error] = "Wrong file. You uploaded the translations."
33
33
  else
34
- StaticBlock.import(params[:file])
34
+ Snippet.import(params[:file])
35
35
  redirect_to root_url, notice: "Static Blocks imported"
36
36
  end
37
37
  end
@@ -41,7 +41,7 @@ module StaticBlocks
41
41
  redirect_to root_url
42
42
  flash[:error] = "You did not attach a file."
43
43
  elsif params[:file].original_filename.include? 'translations'
44
- StaticBlock.import_translations(params[:file])
44
+ Snippet.import_translations(params[:file])
45
45
  redirect_to root_url, notice: "Static Block translations imported"
46
46
  else
47
47
  redirect_to root_url
@@ -52,82 +52,82 @@ module StaticBlocks
52
52
  # GET /static_blocks
53
53
  # GET /static_blocks.json
54
54
  def index
55
- @search = StaticBlock.order('title asc').search(params[:q])
56
- @static_blocks = @search.result.per_page_kaminari(params[:page]).per(10)
55
+ @search = Snippet.order('title asc').search(params[:q])
56
+ @snippets = @search.result.per_page_kaminari(params[:page]).per(10)
57
57
 
58
58
  respond_to do |format|
59
59
  format.html # index.html.erb
60
- format.json { render json: @static_blocks }
60
+ format.json { render json: @snippets }
61
61
  end
62
62
  end
63
63
 
64
- # GET /static_blocks/1
65
- # GET /static_blocks/1.json
64
+ # GET /snippets/1
65
+ # GET /snippets/1.json
66
66
  def show
67
- @static_block = StaticBlock.find(params[:id])
67
+ @snippet = Snippet.find(params[:id])
68
68
 
69
69
  respond_to do |format|
70
70
  format.html # show.html.erb
71
- format.json { render json: @static_block }
71
+ format.json { render json: @snippet }
72
72
  end
73
73
  end
74
74
 
75
- # GET /static_blocks/new
76
- # GET /static_blocks/new.json
75
+ # GET /snippets/new
76
+ # GET /snippets/new.json
77
77
  def new
78
- @static_block = StaticBlock.new
78
+ @snippet = Snippet.new
79
79
 
80
80
  respond_to do |format|
81
81
  format.html # new.html.erb
82
- format.json { render json: @static_block }
82
+ format.json { render json: @snippet }
83
83
  end
84
84
  end
85
85
 
86
- # GET /static_blocks/1/edit
86
+ # GET /snippets/1/edit
87
87
  def edit
88
- @static_block = StaticBlock.find(params[:id])
88
+ @snippet = Snippet.find(params[:id])
89
89
  end
90
90
 
91
- # POST /static_blocks
92
- # POST /static_blocks.json
91
+ # POST /snippets
92
+ # POST /snippets.json
93
93
  def create
94
- @static_block = StaticBlock.new(params[:static_block])
94
+ @snippet = Snippet.new(params[:snippet])
95
95
 
96
96
  respond_to do |format|
97
- if @static_block.save
98
- format.html { redirect_to @static_block, notice: 'Static block was successfully created.' }
99
- format.json { render json: @static_block, status: :created, location: @static_block }
97
+ if @snippet.save
98
+ format.html { redirect_to @snippet, notice: 'Snippet was successfully created.' }
99
+ format.json { render json: @snippet, status: :created, location: @snippet }
100
100
  else
101
101
  format.html { render action: "new" }
102
- format.json { render json: @static_block.errors, status: :unprocessable_entity }
102
+ format.json { render json: @snippet.errors, status: :unprocessable_entity }
103
103
  end
104
104
  end
105
105
  end
106
106
 
107
- # PUT /static_blocks/1
108
- # PUT /static_blocks/1.json
107
+ # PUT /snippets/1
108
+ # PUT /snippets/1.json
109
109
  def update
110
- @static_block = StaticBlock.find(params[:id])
110
+ @snippet = Snippet.find(params[:id])
111
111
 
112
112
  respond_to do |format|
113
- if @static_block.update_attributes(params[:static_block])
114
- format.html { redirect_to @static_block, notice: 'Static block was successfully updated.' }
113
+ if @snippet.update_attributes(params[:snippet])
114
+ format.html { redirect_to @snippet, notice: 'Static block was successfully updated.' }
115
115
  format.json { head :no_content }
116
116
  else
117
117
  format.html { render action: "edit" }
118
- format.json { render json: @static_block.errors, status: :unprocessable_entity }
118
+ format.json { render json: @snippet.errors, status: :unprocessable_entity }
119
119
  end
120
120
  end
121
121
  end
122
122
 
123
- # DELETE /static_blocks/1
124
- # DELETE /static_blocks/1.json
123
+ # DELETE /snippets/1
124
+ # DELETE /snippets/1.json
125
125
  def destroy
126
- @static_block = StaticBlock.find(params[:id])
127
- @static_block.destroy
126
+ @snippet = Snippet.find(params[:id])
127
+ @snippet.destroy
128
128
 
129
129
  respond_to do |format|
130
- format.html { redirect_to static_blocks_url }
130
+ format.html { redirect_to snippets_url }
131
131
  format.json { head :no_content }
132
132
  end
133
133
  end
@@ -1,5 +1,5 @@
1
1
  module StaticBlocks
2
- class StaticBlock < ActiveRecord::Base
2
+ class Snippet < ActiveRecord::Base
3
3
  attr_accessible :content, :status, :title
4
4
  after_save :clear_cache
5
5
  scope :published, where(:status => 'published')
@@ -11,22 +11,22 @@ module StaticBlocks
11
11
  end
12
12
 
13
13
  def clear_cache
14
- Rails.cache.delete("static_block::"+I18n.locale.to_s+"::"+title)
14
+ Rails.cache.delete("snippet::"+I18n.locale.to_s+"::"+title)
15
15
  end
16
16
 
17
17
  def self.to_csv(options = {})
18
- static_blocks = self.connection.select_all('select * from static_blocks_static_blocks')
19
- static_blocks_column_names = static_blocks.first.keys
18
+ snippets = self.connection.select_all('select * from static_blocks_snippets')
19
+ snippets_column_names = snippets.first.keys
20
20
  CSV.generate(options) do |csv|
21
- csv << static_blocks_column_names
22
- static_blocks.each do |s|
23
- csv << s.values_at(*static_blocks_column_names)
21
+ csv << snippets_column_names
22
+ snippets.each do |s|
23
+ csv << s.values_at(*snippets_column_names)
24
24
  end
25
25
  end
26
26
  end
27
27
 
28
28
  def self.translations_to_csv(options = {})
29
- translations = self.connection.select_all('select * from static_blocks_static_block_translations')
29
+ translations = self.connection.select_all('select * from static_blocks_snippet_translations')
30
30
  translation_column_names = translations.first.keys
31
31
  CSV.generate(options) do |csv|
32
32
  csv << translation_column_names
@@ -38,30 +38,30 @@ module StaticBlocks
38
38
 
39
39
  def self.import(file)
40
40
  CSV.foreach(file.path, headers: true) do |row|
41
- static_block = find_by_title(row["title"]) || new
42
- static_block.attributes = row.to_hash.slice(*accessible_attributes)
43
- static_block.id = row['id']
44
- static_block.save!
41
+ snippet = find_by_title(row["title"]) || new
42
+ snippet.attributes = row.to_hash.slice(*accessible_attributes)
43
+ snippet.id = row['id']
44
+ snippet.save!
45
45
  end
46
46
  end
47
47
 
48
48
  def self.import_translations(file)
49
49
  CSV.foreach(file.path, headers: true) do |row|
50
50
  # find translation
51
- raw_sql = "SELECT * FROM static_blocks_static_block_translations WHERE id=#{row['id']}"
51
+ raw_sql = "SELECT * FROM static_blocks_snippet_translations WHERE id=#{row['id']}"
52
52
  translation = ActiveRecord::Base.connection.execute(raw_sql)
53
53
  if translation.present?
54
54
  # update existing translation
55
55
  raw_sql = "
56
- UPDATE static_blocks_static_block_translations
57
- SET static_blocks_static_block_id=%d, locale='%s', content='%s', created_at='%s', updated_at='%s'
58
- WHERE id=%d" % [row['static_blocks_static_block_id'], row['locale'], row['content'], row['created_at'], row['updated_at'], row['id']]
56
+ UPDATE static_blocks_snippet_translations
57
+ SET static_blocks_snippet_id=%d, locale='%s', content='%s', created_at='%s', updated_at='%s'
58
+ WHERE id=%d" % [row['static_blocks_snippet_id'], row['locale'], row['content'], row['created_at'], row['updated_at'], row['id']]
59
59
  else
60
60
  # create new translation
61
61
  raw_sql = "
62
- INSERT INTO static_blocks_static_block_translations
63
- ('id', 'static_blocks_static_block_id', 'locale', 'content', 'created_at', 'updated_at') VALUES
64
- ('%d', '%d', '%s', '%s', '%s', '%s')" % [row['id'], row['static_blocks_static_block_id'], row['locale'], row['content'], row['created_at'], row['updated_at']]
62
+ INSERT INTO static_blocks_snippet_translations
63
+ ('id', 'static_blocks_snippet_id', 'locale', 'content', 'created_at', 'updated_at') VALUES
64
+ ('%d', '%d', '%s', '%s', '%s', '%s')" % [row['id'], row['static_blocks_snippet_id'], row['locale'], row['content'], row['created_at'], row['updated_at']]
65
65
  end
66
66
  ActiveRecord::Base.connection.execute(raw_sql)
67
67
  end
@@ -11,13 +11,13 @@
11
11
  <div class="navbar">
12
12
  <div class="navbar-inner">
13
13
  <div class="container">
14
- <%= link_to "Static Blocks", static_blocks_path, :class => "brand" %>
14
+ <%= link_to "Static Blocks", snippets_path, :class => "brand" %>
15
15
  <div class="nav-collapse collapse">
16
16
  <ul class="nav pull-right">
17
- <li><%= link_to "List blocks", static_blocks_path %></li>
18
- <li><%= link_to "New block", new_static_block_path %></li>
19
- <li><%= link_to "Export", export_static_blocks_path(:format => :csv) %></li>
20
- <li><%= link_to "Export translations", export_translations_static_blocks_path(:format => :csv) %></li> </ul>
17
+ <li><%= link_to "List blocks", snippets_path %></li>
18
+ <li><%= link_to "New block", new_snippet_path %></li>
19
+ <li><%= link_to "Export", export_snippets_path(:format => :csv) %></li>
20
+ <li><%= link_to "Export translations", export_translations_snippets_path(:format => :csv) %></li> </ul>
21
21
  </div><!--/.nav-collapse -->
22
22
  </div>
23
23
  </div>
@@ -34,11 +34,11 @@
34
34
  <% end %>
35
35
  <% end %>
36
36
 
37
- <div id="locale">
38
- Language
37
+ <div id="locale" class="well well-small">
38
+ <strong>Language:</strong>
39
39
 
40
40
  <% StaticBlocks.config.locales.each do |loc| %>
41
- <%= link_to_unless_current loc, locale: loc %>
41
+ &nbsp;<%= link_to_unless_current loc, locale: loc %>
42
42
  <% end %>
43
43
  </div>
44
44
 
@@ -46,6 +46,7 @@
46
46
 
47
47
  </div>
48
48
 
49
+ <% if StaticBlocks.config.wysihtml5 %>
49
50
  <script type="text/javascript">
50
51
  $('.wysihtml5').each(function(i, elem) {
51
52
  $(elem).wysihtml5({
@@ -53,6 +54,7 @@
53
54
  });
54
55
  });
55
56
  </script>
57
+ <% end %>
56
58
 
57
59
  </body>
58
60
  </html>
@@ -1,10 +1,10 @@
1
- <%= form_for(@static_block) do |f| %>
2
- <% if @static_block.errors.any? %>
1
+ <%= form_for(@snippet) do |f| %>
2
+ <% if @snippet.errors.any? %>
3
3
  <div id="error_explanation">
4
- <h2><%= pluralize(@static_block.errors.count, "error") %> prohibited this static_block from being saved:</h2>
4
+ <h2><%= pluralize(@snippet.errors.count, "error") %> prohibited this snippet from being saved:</h2>
5
5
 
6
6
  <ul>
7
- <% @static_block.errors.full_messages.each do |msg| %>
7
+ <% @snippet.errors.full_messages.each do |msg| %>
8
8
  <li><%= msg %></li>
9
9
  <% end %>
10
10
  </ul>
@@ -0,0 +1,4 @@
1
+ <h1>Editing snippet</h1>
2
+
3
+ <%= render 'form' %>
4
+
@@ -1,4 +1,4 @@
1
- <h1>Listing static blocks</h1>
1
+ <h1>Listing snippets</h1>
2
2
  <div class="row">
3
3
  <div class="span6">
4
4
  <h2>Search</h2>
@@ -8,8 +8,8 @@
8
8
  <%= f.text_field :title_cont %>
9
9
  </div>
10
10
  <div class="field">
11
- <%= f.label :content_cont, "Content contains" %>
12
- <%= f.text_field :content_cont %>
11
+ <%= f.label :translations_content_cont, "Content contains" %>
12
+ <%= f.text_field :translations_content_cont %>
13
13
  </div>
14
14
  <div class="field">
15
15
  <%= f.label :status_cont, "Status contains" %>
@@ -20,19 +20,19 @@
20
20
  </div>
21
21
  <div class="span6">
22
22
  <h2>Import</h2>
23
- <%= form_tag import_static_blocks_path, multipart: true do %>
23
+ <%= form_tag import_snippets_path, multipart: true do %>
24
24
  <%= file_field_tag :file %>
25
25
  <%= submit_tag "Import" %>
26
26
  <% end %>
27
27
  <h2>Import Translations</h2>
28
- <%= form_tag import_translations_static_blocks_path, multipart: true do %>
28
+ <%= form_tag import_translations_snippets_path, multipart: true do %>
29
29
  <%= file_field_tag :file %>
30
30
  <%= submit_tag "Import Translations" %>
31
31
  <% end %>
32
32
  </div>
33
33
  </div>
34
34
 
35
- <%= paginate @static_blocks, :theme => 'twitter-bootstrap' %>
35
+ <%= paginate @snippets, :theme => 'twitter-bootstrap' %>
36
36
 
37
37
  <table id="static-block-list" class="table table-striped">
38
38
  <tr>
@@ -44,16 +44,16 @@
44
44
  <th></th>
45
45
  </tr>
46
46
 
47
- <% @static_blocks.each do |static_block| %>
47
+ <% @snippets.each do |snippet| %>
48
48
  <tr>
49
- <td><%= static_block.title %></td>
50
- <td><%= static_block.content %></td>
51
- <td><%= static_block.status %></td>
52
- <td><%= link_to 'Show', static_block_path(static_block), class: "btn btn-mini btn-success" %></td>
53
- <td><%= link_to 'Edit', edit_static_block_path(static_block), class: "btn btn-mini btn-warning" %></td>
54
- <td><%= link_to 'Destroy', static_block, class: "btn btn-mini btn-danger", method: :delete, data: { confirm: 'Are you sure?' } %></td>
49
+ <td><%= snippet.title %></td>
50
+ <td><%= snippet.content %></td>
51
+ <td><%= snippet.status %></td>
52
+ <td><%= link_to 'Show', snippet_path(snippet), class: "btn btn-mini btn-success" %></td>
53
+ <td><%= link_to 'Edit', edit_snippet_path(snippet), class: "btn btn-mini btn-warning" %></td>
54
+ <td><%= link_to 'Destroy', snippet, class: "btn btn-mini btn-danger", method: :delete, data: { confirm: 'Are you sure?' } %></td>
55
55
  </tr>
56
56
  <% end %>
57
57
  </table>
58
58
 
59
- <%= paginate @static_blocks, :theme => 'twitter-bootstrap' %>
59
+ <%= paginate @snippets, :theme => 'twitter-bootstrap' %>
@@ -0,0 +1,3 @@
1
+ <h1>New snippet</h1>
2
+
3
+ <%= render 'form' %>