minimum_viable_product 0.6.7 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/bin/mvp +2 -3
- data/minimum_viable_product.gemspec +89 -3
- data/project/Gemfile +33 -0
- data/project/Gemfile.lock +437 -0
- data/project/Procfile +2 -0
- data/project/README.md +117 -0
- data/project/Rakefile +14 -0
- data/project/app/controllers/application_controller.rb +12 -0
- data/project/app/controllers/conversions_controller.rb +24 -0
- data/project/app/controllers/examples_controller.rb +2 -0
- data/project/app/controllers/home_controller.rb +7 -0
- data/project/app/decorators/.keep +0 -0
- data/project/app/helpers/application_helper.rb +24 -0
- data/project/app/mailers/.keep +0 -0
- data/project/app/models/conversion.rb +4 -0
- data/project/app/views/examples/index.html.erb +1 -0
- data/project/app/views/examples/mustache.html.erb +18 -0
- data/project/app/views/examples/mustache/template.mustache +1 -0
- data/project/app/views/home/conversion.html.erb +12 -0
- data/project/app/views/home/index.html.erb +28 -0
- data/project/app/views/layouts/_header.html.erb +16 -0
- data/project/app/views/layouts/_includes.html.erb +7 -0
- data/project/app/views/layouts/application.html.erb +17 -0
- data/project/app/views/layouts/modal.html.erb +14 -0
- data/project/assets/images/.keep +0 -0
- data/project/assets/images/favicon.ico +0 -0
- data/project/assets/javascripts/controllers/home.coffee +15 -0
- data/project/assets/javascripts/pack.js +9 -0
- data/project/assets/stylesheets/config/variables.scss +876 -0
- data/project/assets/stylesheets/layout/basic.scss +6 -0
- data/project/assets/stylesheets/layout/carousel.scss +127 -0
- data/project/assets/stylesheets/layout/cover.scss +129 -0
- data/project/assets/stylesheets/lib/spacing.scss +55 -0
- data/project/assets/stylesheets/skin/style.scss +16 -0
- data/project/assets/stylesheets/style.scss +8 -0
- data/project/bin/bundle +3 -0
- data/project/bin/rails +9 -0
- data/project/bin/rake +9 -0
- data/project/bin/setup +32 -0
- data/project/bin/spring +15 -0
- data/project/config.ru +4 -0
- data/project/config/application.rb +32 -0
- data/project/config/boot.rb +3 -0
- data/project/config/database.yml +19 -0
- data/project/config/environment.rb +5 -0
- data/project/config/environments/development.rb +67 -0
- data/project/config/environments/production.rb +93 -0
- data/project/config/environments/test.rb +42 -0
- data/project/config/initializers/assets.rb +11 -0
- data/project/config/initializers/backtrace_silencers.rb +7 -0
- data/project/config/initializers/cookies_serializer.rb +3 -0
- data/project/config/initializers/filter_parameter_logging.rb +4 -0
- data/project/config/initializers/inflections.rb +16 -0
- data/project/config/initializers/mime_types.rb +4 -0
- data/project/config/initializers/mustache.rb +7 -0
- data/project/config/initializers/rails_admin.rb +43 -0
- data/project/config/initializers/session_store.rb +3 -0
- data/project/config/initializers/simple_form.rb +177 -0
- data/project/config/initializers/wrap_parameters.rb +14 -0
- data/project/config/locales/en.yml +23 -0
- data/project/config/locales/simple_form.en.yml +31 -0
- data/project/config/routes.rb +13 -0
- data/project/config/secrets.yml +8 -0
- data/project/config/sitemap.rb +28 -0
- data/project/db/migrate/20160728235100_create_conversions.rb +9 -0
- data/project/db/schema.rb +25 -0
- data/project/db/seeds.rb +7 -0
- data/project/lib/assets/.keep +0 -0
- data/project/lib/tasks/heroku.rake +70 -0
- data/project/log/.keep +0 -0
- data/project/log/development.log +48216 -0
- data/project/log/production.log +0 -0
- data/project/package.json +44 -0
- data/project/public/404.html +67 -0
- data/project/public/422.html +67 -0
- data/project/public/500.html +66 -0
- data/project/public/assets/javascripts/448c34a56d699c29117adc64c43affeb.woff2 +0 -0
- data/project/public/assets/javascripts/89889688147bd7575d6327160d64e760.svg +288 -0
- data/project/public/assets/javascripts/e18bbf611f2a2e43afc071aa2f4e1512.ttf +0 -0
- data/project/public/assets/javascripts/f4769f9bdb7466be65088239c12046d1.eot +0 -0
- data/project/public/assets/javascripts/fa2772327f55d8198301fdb8bcfc8158.woff +0 -0
- data/project/public/assets/javascripts/pack.js +31367 -0
- data/project/public/assets/javascripts/pack.js.map +1 -0
- data/project/public/assets/pack.js +17220 -0
- data/project/public/assets/style.css +7477 -0
- data/project/vendor/assets/javascripts/.keep +0 -0
- data/project/vendor/assets/stylesheets/.keep +0 -0
- data/project/webpack.config.js +67 -0
- metadata +88 -2
@@ -0,0 +1,127 @@
|
|
1
|
+
/* GLOBAL STYLES
|
2
|
+
-------------------------------------------------- */
|
3
|
+
/* Padding below the footer and lighter body text */
|
4
|
+
|
5
|
+
body.body-carousel {
|
6
|
+
/* Special class on .container surrounding .navbar, used for positioning it into place. */
|
7
|
+
.navbar-wrapper {
|
8
|
+
position: absolute;
|
9
|
+
top: 0;
|
10
|
+
right: 0;
|
11
|
+
left: 0;
|
12
|
+
z-index: 20;
|
13
|
+
}
|
14
|
+
|
15
|
+
/* Flip around the padding for proper display in narrow viewports */
|
16
|
+
.navbar-wrapper > .container {
|
17
|
+
padding-right: 0;
|
18
|
+
padding-left: 0;
|
19
|
+
}
|
20
|
+
.navbar-wrapper .navbar {
|
21
|
+
padding-right: 15px;
|
22
|
+
padding-left: 15px;
|
23
|
+
}
|
24
|
+
.navbar-wrapper .navbar .container {
|
25
|
+
width: auto;
|
26
|
+
}
|
27
|
+
|
28
|
+
|
29
|
+
/* CUSTOMIZE THE CAROUSEL
|
30
|
+
-------------------------------------------------- */
|
31
|
+
|
32
|
+
/* Carousel base class */
|
33
|
+
.carousel {
|
34
|
+
height: 500px;
|
35
|
+
}
|
36
|
+
/* Since positioning the image, we need to help out the caption */
|
37
|
+
.carousel-caption {
|
38
|
+
z-index: 10;
|
39
|
+
}
|
40
|
+
|
41
|
+
/* Declare heights because of positioning of img element */
|
42
|
+
.carousel .item {
|
43
|
+
height: 500px;
|
44
|
+
background-color: #777;
|
45
|
+
}
|
46
|
+
.carousel-inner > .item > img {
|
47
|
+
position: absolute;
|
48
|
+
top: 0;
|
49
|
+
left: 0;
|
50
|
+
min-width: 100%;
|
51
|
+
height: 500px;
|
52
|
+
}
|
53
|
+
|
54
|
+
|
55
|
+
/* MARKETING CONTENT
|
56
|
+
-------------------------------------------------- */
|
57
|
+
|
58
|
+
/* Center align the text within the three columns below the carousel */
|
59
|
+
.marketing .col-lg-4 {
|
60
|
+
margin-bottom: 20px;
|
61
|
+
text-align: center;
|
62
|
+
}
|
63
|
+
.marketing h2 {
|
64
|
+
font-weight: normal;
|
65
|
+
}
|
66
|
+
.marketing .col-lg-4 p {
|
67
|
+
margin-right: 10px;
|
68
|
+
margin-left: 10px;
|
69
|
+
}
|
70
|
+
|
71
|
+
|
72
|
+
/* Featurettes
|
73
|
+
------------------------- */
|
74
|
+
|
75
|
+
.featurette-divider {
|
76
|
+
margin: 80px 0; /* Space out the Bootstrap <hr> more */
|
77
|
+
}
|
78
|
+
|
79
|
+
/* Thin out the marketing headings */
|
80
|
+
.featurette-heading {
|
81
|
+
font-weight: 300;
|
82
|
+
line-height: 1;
|
83
|
+
letter-spacing: -1px;
|
84
|
+
}
|
85
|
+
|
86
|
+
|
87
|
+
/* RESPONSIVE CSS
|
88
|
+
-------------------------------------------------- */
|
89
|
+
|
90
|
+
@media (min-width: 768px) {
|
91
|
+
/* Navbar positioning foo */
|
92
|
+
.navbar-wrapper {
|
93
|
+
margin-top: 20px;
|
94
|
+
}
|
95
|
+
.navbar-wrapper .container {
|
96
|
+
padding-right: 15px;
|
97
|
+
padding-left: 15px;
|
98
|
+
}
|
99
|
+
.navbar-wrapper .navbar {
|
100
|
+
padding-right: 0;
|
101
|
+
padding-left: 0;
|
102
|
+
}
|
103
|
+
|
104
|
+
/* The navbar becomes detached from the top, so we round the corners */
|
105
|
+
.navbar-wrapper .navbar {
|
106
|
+
border-radius: 4px;
|
107
|
+
}
|
108
|
+
|
109
|
+
/* Bump up size of carousel content */
|
110
|
+
.carousel-caption p {
|
111
|
+
margin-bottom: 20px;
|
112
|
+
font-size: 21px;
|
113
|
+
line-height: 1.4;
|
114
|
+
}
|
115
|
+
|
116
|
+
.featurette-heading {
|
117
|
+
font-size: 50px;
|
118
|
+
}
|
119
|
+
}
|
120
|
+
|
121
|
+
@media (min-width: 992px) {
|
122
|
+
.featurette-heading {
|
123
|
+
margin-top: 120px;
|
124
|
+
}
|
125
|
+
}
|
126
|
+
|
127
|
+
}
|
@@ -0,0 +1,129 @@
|
|
1
|
+
html {
|
2
|
+
height: 100%;
|
3
|
+
}
|
4
|
+
|
5
|
+
body.body-cover {
|
6
|
+
height: 100%;
|
7
|
+
text-align: center;
|
8
|
+
|
9
|
+
/* Extra markup and styles for table-esque vertical and horizontal centering */
|
10
|
+
.site-wrapper {
|
11
|
+
display: table;
|
12
|
+
width: 100%;
|
13
|
+
height: 100%; /* For at least Firefox */
|
14
|
+
min-height: 100%;
|
15
|
+
}
|
16
|
+
.site-wrapper-inner {
|
17
|
+
display: table-cell;
|
18
|
+
vertical-align: top;
|
19
|
+
}
|
20
|
+
.cover-container {
|
21
|
+
margin-right: auto;
|
22
|
+
margin-left: auto;
|
23
|
+
}
|
24
|
+
|
25
|
+
/* Padding for spacing */
|
26
|
+
.inner {
|
27
|
+
padding: 2rem;
|
28
|
+
}
|
29
|
+
|
30
|
+
|
31
|
+
/*
|
32
|
+
* Header
|
33
|
+
*/
|
34
|
+
|
35
|
+
.masthead {
|
36
|
+
margin-bottom: 2rem;
|
37
|
+
}
|
38
|
+
|
39
|
+
.masthead-brand {
|
40
|
+
margin-bottom: 0;
|
41
|
+
}
|
42
|
+
|
43
|
+
.nav-masthead .nav-link {
|
44
|
+
padding: .25rem 0;
|
45
|
+
font-weight: bold;
|
46
|
+
background-color: transparent;
|
47
|
+
border-bottom: .25rem solid transparent;
|
48
|
+
}
|
49
|
+
|
50
|
+
.nav-masthead .nav-link:hover,
|
51
|
+
.nav-masthead .nav-link:focus {
|
52
|
+
border-bottom-color: rgba(155,155,155,.25);
|
53
|
+
}
|
54
|
+
|
55
|
+
.nav-masthead .nav-link + .nav-link {
|
56
|
+
margin-left: 1rem;
|
57
|
+
}
|
58
|
+
|
59
|
+
.nav-masthead .active {
|
60
|
+
// color: #fff;
|
61
|
+
// border-bottom-color: #fff;
|
62
|
+
}
|
63
|
+
|
64
|
+
@media (min-width: 48em) {
|
65
|
+
.masthead-brand {
|
66
|
+
float: left;
|
67
|
+
}
|
68
|
+
.nav-masthead {
|
69
|
+
float: right;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
|
74
|
+
/*
|
75
|
+
* Cover
|
76
|
+
*/
|
77
|
+
|
78
|
+
.cover {
|
79
|
+
padding: 0 1.5rem;
|
80
|
+
}
|
81
|
+
.cover .btn-lg {
|
82
|
+
padding: .75rem 1.25rem;
|
83
|
+
font-weight: bold;
|
84
|
+
}
|
85
|
+
|
86
|
+
|
87
|
+
/*
|
88
|
+
* Footer
|
89
|
+
*/
|
90
|
+
|
91
|
+
.mastfoot {
|
92
|
+
// color: rgba(255,255,255,.5);
|
93
|
+
}
|
94
|
+
|
95
|
+
|
96
|
+
/*
|
97
|
+
* Affix and center
|
98
|
+
*/
|
99
|
+
|
100
|
+
@media (min-width: 40em) {
|
101
|
+
/* Pull out the header and footer */
|
102
|
+
.masthead {
|
103
|
+
position: fixed;
|
104
|
+
top: 0;
|
105
|
+
}
|
106
|
+
.mastfoot {
|
107
|
+
position: fixed;
|
108
|
+
bottom: 0;
|
109
|
+
}
|
110
|
+
/* Start the vertical centering */
|
111
|
+
.site-wrapper-inner {
|
112
|
+
vertical-align: middle;
|
113
|
+
}
|
114
|
+
/* Handle the widths */
|
115
|
+
.masthead,
|
116
|
+
.mastfoot,
|
117
|
+
.cover-container {
|
118
|
+
width: 100%; /* Must be percentage or pixels for horizontal alignment */
|
119
|
+
}
|
120
|
+
}
|
121
|
+
|
122
|
+
@media (min-width: 62em) {
|
123
|
+
.masthead,
|
124
|
+
.mastfoot,
|
125
|
+
.cover-container {
|
126
|
+
width: 42rem;
|
127
|
+
}
|
128
|
+
}
|
129
|
+
}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
@import 'bootstrap/scss/bootstrap';
|
2
|
+
|
3
|
+
@each $breakpoint in map-keys($grid-breakpoints) {
|
4
|
+
@include media-breakpoint-up($breakpoint) {
|
5
|
+
.block-#{$breakpoint}-up { display: block; width: 100% }
|
6
|
+
}
|
7
|
+
|
8
|
+
@include media-breakpoint-down($breakpoint) {
|
9
|
+
.block-#{$breakpoint}-down { display: block; width: 100% }
|
10
|
+
}
|
11
|
+
}
|
12
|
+
|
13
|
+
@for $i from 0 through 100 {
|
14
|
+
.mt#{$i} { margin-top: #{$i}px !important; }
|
15
|
+
.mb#{$i} { margin-bottom: #{$i}px !important; }
|
16
|
+
.ml#{$i} { margin-left: #{$i}px !important; }
|
17
|
+
.mr#{$i} { margin-right: #{$i}px !important; }
|
18
|
+
.m#{$i} { margin: #{$i}px !important; }
|
19
|
+
|
20
|
+
.pt#{$i} { padding-top: #{$i}px !important; }
|
21
|
+
.pb#{$i} { padding-bottom: #{$i}px !important; }
|
22
|
+
.pl#{$i} { padding-left: #{$i}px !important; }
|
23
|
+
.pr#{$i} { padding-right: #{$i}px !important; }
|
24
|
+
.p#{$i} { padding: #{$i}px !important; }
|
25
|
+
|
26
|
+
@each $breakpoint in map-keys($grid-breakpoints) {
|
27
|
+
@include media-breakpoint-up($breakpoint) {
|
28
|
+
.mt#{$i}-#{$breakpoint}-up { margin-top: #{$i}px !important; }
|
29
|
+
.mb#{$i}-#{$breakpoint}-up { margin-bottom: #{$i}px !important; }
|
30
|
+
.ml#{$i}-#{$breakpoint}-up { margin-left: #{$i}px !important; }
|
31
|
+
.mr#{$i}-#{$breakpoint}-up { margin-right: #{$i}px !important; }
|
32
|
+
.m#{$i}-#{$breakpoint}-up { margin: #{$i}px !important; }
|
33
|
+
|
34
|
+
.pt#{$i}-#{$breakpoint}-up { padding-top: #{$i}px !important; }
|
35
|
+
.pb#{$i}-#{$breakpoint}-up { padding-bottom: #{$i}px !important; }
|
36
|
+
.pl#{$i}-#{$breakpoint}-up { padding-left: #{$i}px !important; }
|
37
|
+
.pr#{$i}-#{$breakpoint}-up { padding-right: #{$i}px !important; }
|
38
|
+
.p#{$i}-#{$breakpoint}-up { padding: #{$i}px !important; }
|
39
|
+
}
|
40
|
+
|
41
|
+
@include media-breakpoint-down($breakpoint) {
|
42
|
+
.mt#{$i}-#{$breakpoint}-down { margin-top: #{$i}px !important; }
|
43
|
+
.mb#{$i}-#{$breakpoint}-down { margin-bottom: #{$i}px !important; }
|
44
|
+
.ml#{$i}-#{$breakpoint}-down { margin-left: #{$i}px !important; }
|
45
|
+
.mr#{$i}-#{$breakpoint}-down { margin-right: #{$i}px !important; }
|
46
|
+
.m#{$i}-#{$breakpoint}-down { margin: #{$i}px !important; }
|
47
|
+
|
48
|
+
.pt#{$i}-#{$breakpoint}-down { padding-top: #{$i}px !important; }
|
49
|
+
.pb#{$i}-#{$breakpoint}-down { padding-bottom: #{$i}px !important; }
|
50
|
+
.pl#{$i}-#{$breakpoint}-down { padding-left: #{$i}px !important; }
|
51
|
+
.pr#{$i}-#{$breakpoint}-down { padding-right: #{$i}px !important; }
|
52
|
+
.p#{$i}-#{$breakpoint}-down { padding: #{$i}px !important; }
|
53
|
+
}
|
54
|
+
}
|
55
|
+
}
|
data/project/bin/bundle
ADDED
data/project/bin/rails
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
begin
|
3
|
+
load File.expand_path('../spring', __FILE__)
|
4
|
+
rescue LoadError => e
|
5
|
+
raise unless e.message.include?('spring')
|
6
|
+
end
|
7
|
+
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
8
|
+
require_relative '../config/boot'
|
9
|
+
require 'rails/commands'
|
data/project/bin/rake
ADDED
data/project/bin/setup
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
# path to your application root.
|
5
|
+
APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
|
6
|
+
|
7
|
+
Dir.chdir APP_ROOT do
|
8
|
+
# This script is a starting point to setup your application.
|
9
|
+
# Add necessary setup steps to this file:
|
10
|
+
|
11
|
+
puts "== Installing dependencies =="
|
12
|
+
system "gem install bundler --conservative"
|
13
|
+
system "bundle check || bundle install"
|
14
|
+
|
15
|
+
# puts "\n== Copying sample files =="
|
16
|
+
# unless File.exist?("config/database.yml")
|
17
|
+
# system "cp config/database.yml.sample config/database.yml"
|
18
|
+
# end
|
19
|
+
|
20
|
+
puts "\n== Preparing database =="
|
21
|
+
system "bin/rake db:setup"
|
22
|
+
|
23
|
+
puts "\n== Removing old logs and tempfiles =="
|
24
|
+
system "rm -f log/*"
|
25
|
+
system "rm -rf tmp/cache"
|
26
|
+
|
27
|
+
puts "\n== Installing Node Modules =="
|
28
|
+
system "npm install"
|
29
|
+
|
30
|
+
puts "\n== Creating .env =="
|
31
|
+
system "touch .env"
|
32
|
+
end
|
data/project/bin/spring
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# This file loads spring without using Bundler, in order to be fast.
|
4
|
+
# It gets overwritten when you run the `spring binstub` command.
|
5
|
+
|
6
|
+
unless defined?(Spring)
|
7
|
+
require 'rubygems'
|
8
|
+
require 'bundler'
|
9
|
+
|
10
|
+
if (match = Bundler.default_lockfile.read.match(/^GEM$.*?^ (?: )*spring \((.*?)\)$.*?^$/m))
|
11
|
+
Gem.paths = { 'GEM_PATH' => [Bundler.bundle_path.to_s, *Gem.path].uniq.join(Gem.path_separator) }
|
12
|
+
gem 'spring', match[1]
|
13
|
+
require 'spring/binstub'
|
14
|
+
end
|
15
|
+
end
|
data/project/config.ru
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.expand_path('../boot', __FILE__)
|
2
|
+
|
3
|
+
require 'rails/all'
|
4
|
+
|
5
|
+
# Require the gems listed in Gemfile, including any gems
|
6
|
+
# you've limited to :test, :development, or :production.
|
7
|
+
Bundler.require(*Rails.groups)
|
8
|
+
|
9
|
+
module Project
|
10
|
+
class Application < Rails::Application
|
11
|
+
config.autoload_paths += %W(#{Rails.root}/lib)
|
12
|
+
config.active_record.raise_in_transactional_callbacks = true
|
13
|
+
config.generators do |g|
|
14
|
+
g.helper false
|
15
|
+
g.decorator false
|
16
|
+
g.controller_specs false
|
17
|
+
g.model_specs false
|
18
|
+
g.view_specs false
|
19
|
+
g.specs false
|
20
|
+
g.javascripts false
|
21
|
+
g.stylesheets false
|
22
|
+
g.test_framework false
|
23
|
+
end
|
24
|
+
|
25
|
+
config.assets.paths << Rails.root.join('node_modules')
|
26
|
+
|
27
|
+
_host = ENV['HOST_DOMAIN'] || "localhost"
|
28
|
+
_port = ENV['HOST_PORT'] || "3000"
|
29
|
+
routes.default_url_options = { host: _host, port: _port }
|
30
|
+
config.action_mailer.default_url_options = { host: _host, port: _port }
|
31
|
+
end
|
32
|
+
end
|