shoelaces 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +11 -0
  5. data/CONTRIBUTING.md +37 -0
  6. data/Gemfile +3 -0
  7. data/Gemfile.lock +131 -0
  8. data/LICENSE +21 -0
  9. data/README.md +211 -0
  10. data/Rakefile +8 -0
  11. data/bin/rake +16 -0
  12. data/bin/rspec +16 -0
  13. data/bin/setup +13 -0
  14. data/bin/shoelaces +13 -0
  15. data/lib/shoelaces.rb +4 -0
  16. data/lib/shoelaces/actions.rb +29 -0
  17. data/lib/shoelaces/app_builder.rb +437 -0
  18. data/lib/shoelaces/generators/app_generator.rb +233 -0
  19. data/lib/shoelaces/version.rb +5 -0
  20. data/shoelaces.gemspec +53 -0
  21. data/spec/fakes/bin/heroku +5 -0
  22. data/spec/fakes/bin/hub +5 -0
  23. data/spec/features/github_spec.rb +10 -0
  24. data/spec/features/heroku_spec.rb +19 -0
  25. data/spec/features/new_project_spec.rb +77 -0
  26. data/spec/spec_helper.rb +24 -0
  27. data/spec/support/fake_github.rb +21 -0
  28. data/spec/support/fake_heroku.rb +38 -0
  29. data/spec/support/shoelaces.rb +49 -0
  30. data/templates/Gemfile.erb +63 -0
  31. data/templates/Guardfile +33 -0
  32. data/templates/Procfile +2 -0
  33. data/templates/README.md.erb +34 -0
  34. data/templates/_analytics.html.erb +7 -0
  35. data/templates/_flashes.html.erb +7 -0
  36. data/templates/_javascript.html.erb +12 -0
  37. data/templates/_variables.scss +2 -0
  38. data/templates/about.html.erb.erb +67 -0
  39. data/templates/action_mailer.rb +5 -0
  40. data/templates/application.css.scss +18 -0
  41. data/templates/background_jobs_rspec.rb +19 -0
  42. data/templates/bin_setup.erb +34 -0
  43. data/templates/config_locales_en.yml +16 -0
  44. data/templates/contact.html.erb.erb +67 -0
  45. data/templates/database_cleaner_rspec.rb +21 -0
  46. data/templates/development_seeds.rb +12 -0
  47. data/templates/disable_xml_params.rb +3 -0
  48. data/templates/errors.rb +34 -0
  49. data/templates/factory_girl_rspec.rb +3 -0
  50. data/templates/high_voltage.rb +3 -0
  51. data/templates/home.html.erb.erb +16 -0
  52. data/templates/i18n.rb +3 -0
  53. data/templates/newrelic.yml.erb +34 -0
  54. data/templates/noise.png +0 -0
  55. data/templates/postgresql_database.yml.erb +12 -0
  56. data/templates/rack_timeout.rb +1 -0
  57. data/templates/sample.env +3 -0
  58. data/templates/secrets.yml +14 -0
  59. data/templates/shoelaces_gitignore +13 -0
  60. data/templates/shoelaces_layout.html.erb.erb +25 -0
  61. data/templates/shoelaces_layout_footer.html.erb.erb +11 -0
  62. data/templates/shoelaces_layout_header.html.erb.erb +33 -0
  63. data/templates/smtp.rb +9 -0
  64. data/templates/spec_helper.rb +30 -0
  65. data/templates/staging.rb +5 -0
  66. data/templates/travis.yml.erb +24 -0
  67. data/templates/unicorn.rb +30 -0
  68. metadata +232 -0
@@ -0,0 +1,38 @@
1
+ class FakeHeroku
2
+ RECORDER = File.expand_path(File.join('..', '..', 'tmp', 'heroku_commands'), File.dirname(__FILE__))
3
+
4
+ def initialize(args)
5
+ @args = args
6
+ end
7
+
8
+ def run!
9
+ File.open(RECORDER, 'a') do |file|
10
+ file.puts @args.join(' ')
11
+ end
12
+ end
13
+
14
+ def self.clear!
15
+ FileUtils.rm_rf RECORDER
16
+ end
17
+
18
+ def self.has_gem_included?(project_path, gem_name)
19
+ gemfile = File.open(File.join(project_path, 'Gemfile'), 'a')
20
+
21
+ File.foreach(gemfile).any? do |line|
22
+ line.match(/#{Regexp.quote(gem_name)}/)
23
+ end
24
+ end
25
+
26
+ def self.has_created_app_for?(remote_name)
27
+ app_name = "#{ShoelacesTestHelpers::APP_NAME}-#{remote_name}"
28
+ expected_line = "create #{app_name} --remote=#{remote_name}\n"
29
+
30
+ File.foreach(RECORDER).any? { |line| line == expected_line }
31
+ end
32
+
33
+ def self.has_configured_vars?(remote_name, var)
34
+ File.foreach(RECORDER).any? do |line|
35
+ line =~ /^config:add #{var}=.+ --remote=#{remote_name}\n$/
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,49 @@
1
+ module ShoelacesTestHelpers
2
+ APP_NAME = 'dummy'
3
+
4
+ def remove_project_directory
5
+ FileUtils.rm_rf(project_path)
6
+ end
7
+
8
+ def create_tmp_directory
9
+ FileUtils.mkdir_p(tmp_path)
10
+ end
11
+
12
+ def run_shoelaces(arguments = nil)
13
+ Dir.chdir(tmp_path) do
14
+ Bundler.with_clean_env do
15
+ ENV['TESTING'] = '1'
16
+
17
+ %x(#{shoelaces_bin} #{APP_NAME} #{arguments})
18
+ end
19
+ end
20
+ end
21
+
22
+ def drop_dummy_database
23
+ if File.exists?(project_path)
24
+ Dir.chdir(project_path) do
25
+ Bundler.with_clean_env do
26
+ `rake db:drop`
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ def project_path
33
+ @project_path ||= Pathname.new("#{tmp_path}/#{APP_NAME}")
34
+ end
35
+
36
+ private
37
+
38
+ def tmp_path
39
+ @tmp_path ||= Pathname.new("#{root_path}/tmp")
40
+ end
41
+
42
+ def shoelaces_bin
43
+ File.join(root_path, 'bin', 'shoelaces')
44
+ end
45
+
46
+ def root_path
47
+ File.expand_path('../../../', __FILE__)
48
+ end
49
+ end
@@ -0,0 +1,63 @@
1
+ source "https://rubygems.org"
2
+
3
+ ruby "<%= Shoelaces::RUBY_VERSION %>"
4
+
5
+ gem "airbrake"
6
+ gem 'bootstrap-sass'
7
+ gem "coffee-rails"
8
+ gem "delayed_job_active_record"
9
+ gem "email_validator"
10
+ gem "high_voltage"
11
+ gem "jquery-rails"
12
+ gem 'paperclip', '~> 3.0'
13
+ gem "pg"
14
+ gem "rack-timeout"
15
+ gem "rails", "<%= Shoelaces::RAILS_VERSION %>"
16
+ gem "recipient_interceptor"
17
+ gem "sass-rails", "~> 4.0.3"
18
+ gem "simple_form"
19
+ gem "title"
20
+ gem "uglifier"
21
+ gem "unicorn"
22
+
23
+ # gem 'devise'
24
+ # gem 'omniauth-facebook'
25
+ # gem 'omniauth-twitter'
26
+ # gem 'twitter'
27
+ # gem 'fb_graph'
28
+ # gem 'cancan'
29
+
30
+ group :development do
31
+ gem "spring"
32
+ gem "spring-commands-rspec"
33
+
34
+ gem 'guard'
35
+ gem 'guard-rspec', require: false
36
+ gem 'guard-livereload', require: false
37
+ gem 'rack-livereload'
38
+ gem 'terminal-notifier-guard'
39
+ end
40
+
41
+ group :development, :test do
42
+ gem "awesome_print"
43
+ gem "byebug"
44
+ gem "dotenv-rails"
45
+ gem "factory_girl_rails"
46
+ gem "pry-rails"
47
+ gem "rspec-rails", "~> 3.0.0"
48
+ end
49
+
50
+ group :test do
51
+ gem "capybara-webkit", ">= 1.2.0"
52
+ gem "database_cleaner"
53
+ gem "formulaic"
54
+ gem "launchy"
55
+ gem "shoulda-matchers", require: false
56
+ gem "timecop"
57
+ gem "webmock"
58
+ end
59
+
60
+ group :staging, :production do
61
+ gem "newrelic_rpm", ">= 3.7.3"
62
+ # gem 'aws-sdk', '~> 1.5.7'
63
+ end
@@ -0,0 +1,33 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'livereload' do
5
+ watch(%r{app/views/.+\.(erb|haml|slim)$})
6
+ watch(%r{app/helpers/.+\.rb})
7
+ watch(/public\/.+\.(css|js|html)/)
8
+ watch(%r{config/locales/.+\.yml})
9
+
10
+ # Rails Assets Pipeline
11
+ watch(%r{(app|vendor)(/assets/\w+/(.+\.(css|js|html|png|jpg|erb))).*}) { |m| "/assets/#{m[3]}" }
12
+ end
13
+
14
+ guard :rspec do
15
+ watch(/^app\/(.+)\.rb$/) { |m| "spec/#{m[1]}_spec.rb" }
16
+ watch(/^app\/(.*)(\.erb|\.haml|\.slim)$/) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
17
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb" }
18
+ watch(%r{^spec/support/(.+)\.rb$}) { 'spec' }
19
+ watch('config/routes.rb') { 'spec/routing' }
20
+ watch('app/controllers/application_controller.rb') { 'spec/controllers' }
21
+ end
22
+
23
+ notification(
24
+ :tmux,
25
+ display_message: true,
26
+ timeout: 5,
27
+ # the first %s will show the title, the second the message
28
+ # Alternately you can also configure *success_message_format*,
29
+ # *pending_message_format*, *failed_message_format*
30
+ default_message_format: '%s >> %s',
31
+ line_separator: ' > ',
32
+ color_location: 'status-left-fg'
33
+ )
@@ -0,0 +1,2 @@
1
+ web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
2
+ worker: bundle exec rake jobs:work
@@ -0,0 +1,34 @@
1
+ <%= app_name.humanize %>
2
+ <%= '=' * app_name.humanize.length %>
3
+
4
+ Getting Started
5
+ ---------------
6
+
7
+ This repository comes equipped with a self-setup script:
8
+
9
+ % ./bin/setup
10
+
11
+ It assumes you have a machine equipped with Ruby, Postgres, etc. If not, set up
12
+ your machine with [this script].
13
+
14
+ [this script]: https://github.com/jonr22/laptop
15
+
16
+ After setting up, you can run the application using [foreman]:
17
+
18
+ % foreman start
19
+
20
+ If you don't have `foreman`, see [Foreman's install instructions][foreman]. It
21
+ is [purposefully excluded from the project's `Gemfile`][exclude].
22
+
23
+ [foreman]: https://github.com/ddollar/foreman
24
+ [exclude]: https://github.com/ddollar/foreman/pull/437#issuecomment-41110407
25
+
26
+ Guidelines
27
+ ----------
28
+
29
+ Use the following guides for getting things done, programming well, and
30
+ programming in style.
31
+
32
+ * [Protocol](http://github.com/thoughtbot/guides/blob/master/protocol)
33
+ * [Best Practices](http://github.com/thoughtbot/guides/blob/master/best-practices)
34
+ * [Style](http://github.com/thoughtbot/guides/blob/master/style)
@@ -0,0 +1,7 @@
1
+ <% if ENV["SEGMENT_IO_KEY"] %>
2
+ <script type="text/javascript">
3
+ window.analytics=window.analytics||[],window.analytics.methods=["identify","group","track","page","pageview","alias","ready","on","once","off","trackLink","trackForm","trackClick","trackSubmit"],window.analytics.factory=function(t){return function(){var a=Array.prototype.slice.call(arguments);return a.unshift(t),window.analytics.push(a),window.analytics}};for(var i=0;i<window.analytics.methods.length;i++){var key=window.analytics.methods[i];window.analytics[key]=window.analytics.factory(key)}window.analytics.load=function(t){if(!document.getElementById("analytics-js")){var a=document.createElement("script");a.type="text/javascript",a.id="analytics-js",a.async=!0,a.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment.io/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(a,n)}},window.analytics.SNIPPET_VERSION="2.0.9",
4
+ window.analytics.load("<%= ENV["SEGMENT_IO_KEY"] %>");
5
+ window.analytics.page();
6
+ </script>
7
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <% if flash.any? %>
2
+ <div id="flash">
3
+ <% flash.each do |key, value| -%>
4
+ <div id="flash_<%= key %>"><%= value %></div>
5
+ <% end -%>
6
+ </div>
7
+ <% end %>
@@ -0,0 +1,12 @@
1
+ <%= javascript_include_tag :application %>
2
+
3
+ <%= yield :javascript %>
4
+
5
+ <%= render "analytics" %>
6
+
7
+ <% if Rails.env.test? %>
8
+ <%= javascript_tag do %>
9
+ $.fx.off = true;
10
+ $.ajaxSetup({ async: false });
11
+ <% end %>
12
+ <% end %>
@@ -0,0 +1,2 @@
1
+ $gray: #333;
2
+ $light-gray: #a0a0a0;
@@ -0,0 +1,67 @@
1
+ <div class="container-fluid">
2
+ <div class="page-header">
3
+ <h1>About Us <small>Everything you ever wanted to know about <%=app_name%></small></h1>
4
+ </div>
5
+
6
+ <div class="panel panel-default">
7
+ <div class="panel-body">
8
+ <p>
9
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut felis
10
+ mi. Vestibulum varius imperdiet justo at pellentesque. Donec lacinia
11
+ vel sapien sed iaculis. Etiam vitae gravida arcu. Pellentesque
12
+ condimentum viverra ligula, sed euismod neque porta vitae. Curabitur
13
+ fermentum nulla ac sem imperdiet, quis sollicitudin tortor scelerisque.
14
+ Nulla laoreet nisi sapien, in ornare dui suscipit vitae. Vestibulum
15
+ consectetur venenatis diam vitae sollicitudin. Donec tempus mi massa,
16
+ non tristique nunc vestibulum ac. Etiam at diam at lorem malesuada
17
+ tempus. Aenean mollis dui eget libero consequat, a euismod ante iaculis.
18
+ Maecenas id pretium est. Nam ultricies leo ac metus sagittis
19
+ consectetur. Quisque ut libero urna.
20
+ </p>
21
+
22
+ <p>
23
+ Fusce rhoncus tellus vitae pretium rhoncus. Ut eu ante luctus, commodo
24
+ lectus vel, eleifend quam. Proin ipsum quam, tempor sed nisi eu, auctor
25
+ volutpat lorem. Sed in nunc vel erat rhoncus facilisis. Phasellus et
26
+ elit ac nisl molestie rhoncus. Vivamus id justo ultrices neque bibendum
27
+ laoreet. Mauris scelerisque quam vitae velit lacinia placerat. Sed non
28
+ aliquet magna, vel dapibus nisl. In nec lorem lorem. Cras vitae volutpat
29
+ lacus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer
30
+ a posuere erat, sit amet tristique libero. Donec sit amet lobortis est,
31
+ et tempus erat. Nulla semper urna ut purus tincidunt, quis consectetur
32
+ lacus fermentum.
33
+ </p>
34
+ </div>
35
+ </div>
36
+
37
+ <div class="panel panel-default">
38
+ <div class="panel-body">
39
+ <p>
40
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut felis
41
+ mi. Vestibulum varius imperdiet justo at pellentesque. Donec lacinia
42
+ vel sapien sed iaculis. Etiam vitae gravida arcu. Pellentesque
43
+ condimentum viverra ligula, sed euismod neque porta vitae. Curabitur
44
+ fermentum nulla ac sem imperdiet, quis sollicitudin tortor scelerisque.
45
+ Nulla laoreet nisi sapien, in ornare dui suscipit vitae. Vestibulum
46
+ consectetur venenatis diam vitae sollicitudin. Donec tempus mi massa,
47
+ non tristique nunc vestibulum ac. Etiam at diam at lorem malesuada
48
+ tempus. Aenean mollis dui eget libero consequat, a euismod ante iaculis.
49
+ Maecenas id pretium est. Nam ultricies leo ac metus sagittis
50
+ consectetur. Quisque ut libero urna.
51
+ </p>
52
+
53
+ <p>
54
+ Fusce rhoncus tellus vitae pretium rhoncus. Ut eu ante luctus, commodo
55
+ lectus vel, eleifend quam. Proin ipsum quam, tempor sed nisi eu, auctor
56
+ volutpat lorem. Sed in nunc vel erat rhoncus facilisis. Phasellus et
57
+ elit ac nisl molestie rhoncus. Vivamus id justo ultrices neque bibendum
58
+ laoreet. Mauris scelerisque quam vitae velit lacinia placerat. Sed non
59
+ aliquet magna, vel dapibus nisl. In nec lorem lorem. Cras vitae volutpat
60
+ lacus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer
61
+ a posuere erat, sit amet tristique libero. Donec sit amet lobortis est,
62
+ et tempus erat. Nulla semper urna ut purus tincidunt, quis consectetur
63
+ lacus fermentum.
64
+ </p>
65
+ </div>
66
+ </div>
67
+ </div>
@@ -0,0 +1,5 @@
1
+ RSpec.configure do |config|
2
+ config.before(:each) do
3
+ ActionMailer::Base.deliveries.clear
4
+ end
5
+ end
@@ -0,0 +1,18 @@
1
+ @import "variables";
2
+ @import "bootstrap";
3
+
4
+ html {
5
+ background: $gray image-url('noise.png') top left;
6
+ }
7
+
8
+ footer {
9
+ color: $light-gray;
10
+ background: $gray image-url('noise.png') top left;
11
+ padding-top: 20px;
12
+ a {
13
+ color: $light-gray;
14
+ &:hover {
15
+ color: $light-gray;
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,19 @@
1
+ module BackgroundJobs
2
+ def run_background_jobs_immediately
3
+ delay_jobs = Delayed::Worker.delay_jobs
4
+ Delayed::Worker.delay_jobs = false
5
+ yield
6
+ ensure
7
+ Delayed::Worker.delay_jobs = delay_jobs
8
+ end
9
+ end
10
+
11
+ RSpec.configure do |config|
12
+ config.around(:each, type: :feature) do |example|
13
+ run_background_jobs_immediately do
14
+ example.run
15
+ end
16
+ end
17
+
18
+ config.include BackgroundJobs
19
+ end
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env sh
2
+
3
+ # Set up Rails app. Run this script immediately after cloning the codebase.
4
+ # https://github.com/thoughtbot/guides/tree/master/protocol
5
+
6
+ # Exit if any subcommand fails
7
+ set -e
8
+
9
+ # Set up Ruby dependencies via Bundler
10
+ bundle install
11
+
12
+ # Set up configurable environment variables
13
+ if [ ! -f .env ]; then
14
+ cp .sample.env .env
15
+ fi
16
+
17
+ # Set up database and add any development seed data
18
+ bundle exec rake dev:prime
19
+
20
+ # Add binstubs to PATH via export PATH=".git/safe/../../bin:$PATH" in ~/.zshenv
21
+ mkdir -p .git/safe
22
+
23
+ # Pick a port for Foreman
24
+ echo "port: <%= config[:port_number] %>" > .foreman
25
+
26
+ # Print warning if Foreman is not installed
27
+ if ! command -v foreman &>/dev/null; then
28
+ echo "foreman is not installed."
29
+ echo "See https://github.com/ddollar/foreman for install instructions."
30
+ fi
31
+
32
+ if [ -d ~/.pow ]; then
33
+ echo <%= config[:port_number] %> > ~/.pow/<%=app_name%>
34
+ fi
@@ -0,0 +1,16 @@
1
+ en:
2
+ date:
3
+ formats:
4
+ default:
5
+ "%m/%d/%Y"
6
+ with_weekday:
7
+ "%a %m/%d/%y"
8
+
9
+ time:
10
+ formats:
11
+ default:
12
+ "%a, %b %-d, %Y at %r"
13
+ date:
14
+ "%b %-d, %Y"
15
+ short:
16
+ "%B %d"
@@ -0,0 +1,67 @@
1
+ <div class="container-fluid">
2
+ <div class="page-header">
3
+ <h1>Contact Us <small>How to reach <%=app_name%></small></h1>
4
+ </div>
5
+
6
+ <div class="panel panel-default">
7
+ <div class="panel-body">
8
+ <p>
9
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut felis
10
+ mi. Vestibulum varius imperdiet justo at pellentesque. Donec lacinia
11
+ vel sapien sed iaculis. Etiam vitae gravida arcu. Pellentesque
12
+ condimentum viverra ligula, sed euismod neque porta vitae. Curabitur
13
+ fermentum nulla ac sem imperdiet, quis sollicitudin tortor scelerisque.
14
+ Nulla laoreet nisi sapien, in ornare dui suscipit vitae. Vestibulum
15
+ consectetur venenatis diam vitae sollicitudin. Donec tempus mi massa,
16
+ non tristique nunc vestibulum ac. Etiam at diam at lorem malesuada
17
+ tempus. Aenean mollis dui eget libero consequat, a euismod ante iaculis.
18
+ Maecenas id pretium est. Nam ultricies leo ac metus sagittis
19
+ consectetur. Quisque ut libero urna.
20
+ </p>
21
+
22
+ <p>
23
+ Fusce rhoncus tellus vitae pretium rhoncus. Ut eu ante luctus, commodo
24
+ lectus vel, eleifend quam. Proin ipsum quam, tempor sed nisi eu, auctor
25
+ volutpat lorem. Sed in nunc vel erat rhoncus facilisis. Phasellus et
26
+ elit ac nisl molestie rhoncus. Vivamus id justo ultrices neque bibendum
27
+ laoreet. Mauris scelerisque quam vitae velit lacinia placerat. Sed non
28
+ aliquet magna, vel dapibus nisl. In nec lorem lorem. Cras vitae volutpat
29
+ lacus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer
30
+ a posuere erat, sit amet tristique libero. Donec sit amet lobortis est,
31
+ et tempus erat. Nulla semper urna ut purus tincidunt, quis consectetur
32
+ lacus fermentum.
33
+ </p>
34
+ </div>
35
+ </div>
36
+
37
+ <div class="panel panel-default">
38
+ <div class="panel-body">
39
+ <p>
40
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut felis
41
+ mi. Vestibulum varius imperdiet justo at pellentesque. Donec lacinia
42
+ vel sapien sed iaculis. Etiam vitae gravida arcu. Pellentesque
43
+ condimentum viverra ligula, sed euismod neque porta vitae. Curabitur
44
+ fermentum nulla ac sem imperdiet, quis sollicitudin tortor scelerisque.
45
+ Nulla laoreet nisi sapien, in ornare dui suscipit vitae. Vestibulum
46
+ consectetur venenatis diam vitae sollicitudin. Donec tempus mi massa,
47
+ non tristique nunc vestibulum ac. Etiam at diam at lorem malesuada
48
+ tempus. Aenean mollis dui eget libero consequat, a euismod ante iaculis.
49
+ Maecenas id pretium est. Nam ultricies leo ac metus sagittis
50
+ consectetur. Quisque ut libero urna.
51
+ </p>
52
+
53
+ <p>
54
+ Fusce rhoncus tellus vitae pretium rhoncus. Ut eu ante luctus, commodo
55
+ lectus vel, eleifend quam. Proin ipsum quam, tempor sed nisi eu, auctor
56
+ volutpat lorem. Sed in nunc vel erat rhoncus facilisis. Phasellus et
57
+ elit ac nisl molestie rhoncus. Vivamus id justo ultrices neque bibendum
58
+ laoreet. Mauris scelerisque quam vitae velit lacinia placerat. Sed non
59
+ aliquet magna, vel dapibus nisl. In nec lorem lorem. Cras vitae volutpat
60
+ lacus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer
61
+ a posuere erat, sit amet tristique libero. Donec sit amet lobortis est,
62
+ et tempus erat. Nulla semper urna ut purus tincidunt, quis consectetur
63
+ lacus fermentum.
64
+ </p>
65
+ </div>
66
+ </div>
67
+ </div>