minimum-viable-product 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +37 -0
  5. data/app/assets/javascripts/mvp/application.js.erb +38 -0
  6. data/app/assets/javascripts/mvp/init/controllers.js +23 -0
  7. data/app/assets/stylesheets/mvp/application.scss +23 -0
  8. data/app/assets/stylesheets/mvp/components/buttons.scss +20 -0
  9. data/app/assets/stylesheets/mvp/components/fonts.scss +15 -0
  10. data/app/assets/stylesheets/mvp/components/spacing.scss +13 -0
  11. data/app/assets/stylesheets/mvp/components/typography.scss +40 -0
  12. data/app/assets/stylesheets/mvp/init/_reset.scss +43 -0
  13. data/app/assets/stylesheets/mvp/init/layout.scss +42 -0
  14. data/app/assets/stylesheets/mvp/layout/basic.scss +6 -0
  15. data/app/assets/stylesheets/mvp/layout/carousel.scss +128 -0
  16. data/app/assets/stylesheets/mvp/layout/cover.scss +111 -0
  17. data/app/assets/stylesheets/mvp/pages/sample.scss +14 -0
  18. data/app/assets/stylesheets/mvp/skin/style.scss +8 -0
  19. data/app/controllers/mvp/analytics_controller.rb +14 -0
  20. data/app/controllers/mvp/application_controller.rb +11 -0
  21. data/app/controllers/mvp/concerns/analytics_concern.rb +77 -0
  22. data/app/controllers/mvp/concerns/seo_concern.rb +25 -0
  23. data/app/controllers/mvp/concerns/session_concern.rb +40 -0
  24. data/app/controllers/mvp/seo_controller.rb +13 -0
  25. data/app/controllers/mvp/styleguide_controller.rb +17 -0
  26. data/app/helpers/mvp/analytics_helper.rb +4 -0
  27. data/app/helpers/mvp/application_helper.rb +15 -0
  28. data/app/helpers/mvp/bootstrap_helper.rb +38 -0
  29. data/app/helpers/mvp/seo_helper.rb +4 -0
  30. data/app/helpers/mvp/styleguide_helper.rb +4 -0
  31. data/app/models/concerns/slugification.rb +16 -0
  32. data/app/views/layouts/mvp/_header.html.erb +48 -0
  33. data/app/views/layouts/mvp/_instrumentation.html.erb +75 -0
  34. data/app/views/layouts/mvp/_meta.html.erb +37 -0
  35. data/app/views/layouts/mvp/application.html.erb +24 -0
  36. data/app/views/layouts/mvp/basic.html.erb +10 -0
  37. data/app/views/layouts/mvp/carousel.html.erb +13 -0
  38. data/app/views/layouts/mvp/cover.html.erb +13 -0
  39. data/bin/mvp +23 -0
  40. data/config/initializers/canonical_host.rb +3 -0
  41. data/config/initializers/client_side_validations.rb +20 -0
  42. data/config/initializers/cloudinary.rb +6 -0
  43. data/config/initializers/geocoder.rb +9 -0
  44. data/config/initializers/iteration.rb +33 -0
  45. data/config/initializers/rollbar.rb +59 -0
  46. data/config/initializers/segment.rb +5 -0
  47. data/config/initializers/simple_form.rb +165 -0
  48. data/config/initializers/simple_form_bootstrap.rb +149 -0
  49. data/config/initializers/spoof_ip.rb +33 -0
  50. data/config/initializers/ssl.rb +3 -0
  51. data/config/routes.rb +16 -0
  52. data/lib/mvp.rb +6 -0
  53. data/lib/mvp/engine.rb +20 -0
  54. data/lib/mvp/ext/nil.rb +5 -0
  55. data/lib/mvp/ext/string.rb +7 -0
  56. data/lib/mvp/version.rb +3 -0
  57. data/lib/tasks/sitemap.rake +42 -0
  58. metadata +521 -0
@@ -0,0 +1,149 @@
1
+ # Use this setup block to configure all options available in SimpleForm.
2
+ SimpleForm.setup do |config|
3
+ config.error_notification_class = 'alert alert-danger'
4
+ config.button_class = 'btn btn-default'
5
+ config.boolean_label_class = nil
6
+
7
+ config.wrappers :vertical_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
8
+ b.use :html5
9
+ b.use :placeholder
10
+ b.optional :maxlength
11
+ b.optional :pattern
12
+ b.optional :min_max
13
+ b.optional :readonly
14
+ b.use :label, class: 'control-label'
15
+
16
+ b.use :input, class: 'form-control'
17
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
18
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
19
+ end
20
+
21
+ config.wrappers :vertical_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
22
+ b.use :html5
23
+ b.use :placeholder
24
+ b.optional :maxlength
25
+ b.optional :readonly
26
+ b.use :label, class: 'control-label'
27
+
28
+ b.use :input
29
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
30
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
31
+ end
32
+
33
+ config.wrappers :vertical_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
34
+ b.use :html5
35
+ b.optional :readonly
36
+
37
+ b.wrapper tag: 'div', class: 'checkbox' do |ba|
38
+ ba.use :label_input
39
+ end
40
+
41
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
42
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
43
+ end
44
+
45
+ config.wrappers :vertical_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
46
+ b.use :html5
47
+ b.optional :readonly
48
+ b.use :label, class: 'control-label'
49
+ b.use :input
50
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
51
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
52
+ end
53
+
54
+ config.wrappers :horizontal_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
55
+ b.use :html5
56
+ b.use :placeholder
57
+ b.optional :maxlength
58
+ b.optional :pattern
59
+ b.optional :min_max
60
+ b.optional :readonly
61
+ b.use :label, class: 'col-sm-3 control-label'
62
+
63
+ b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
64
+ ba.use :input, class: 'form-control'
65
+ ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
66
+ ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
67
+ end
68
+ end
69
+
70
+ config.wrappers :horizontal_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
71
+ b.use :html5
72
+ b.use :placeholder
73
+ b.optional :maxlength
74
+ b.optional :readonly
75
+ b.use :label, class: 'col-sm-3 control-label'
76
+
77
+ b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
78
+ ba.use :input
79
+ ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
80
+ ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
81
+ end
82
+ end
83
+
84
+ config.wrappers :horizontal_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
85
+ b.use :html5
86
+ b.optional :readonly
87
+
88
+ b.wrapper tag: 'div', class: 'col-sm-offset-3 col-sm-9' do |wr|
89
+ wr.wrapper tag: 'div', class: 'checkbox' do |ba|
90
+ ba.use :label_input
91
+ end
92
+
93
+ wr.use :error, wrap_with: { tag: 'span', class: 'help-block' }
94
+ wr.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
95
+ end
96
+ end
97
+
98
+ config.wrappers :horizontal_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
99
+ b.use :html5
100
+ b.optional :readonly
101
+
102
+ b.use :label, class: 'col-sm-3 control-label'
103
+
104
+ b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
105
+ ba.use :input
106
+ ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
107
+ ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
108
+ end
109
+ end
110
+
111
+ config.wrappers :inline_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
112
+ b.use :html5
113
+ b.use :placeholder
114
+ b.optional :maxlength
115
+ b.optional :pattern
116
+ b.optional :min_max
117
+ b.optional :readonly
118
+ b.use :label, class: 'sr-only'
119
+
120
+ b.use :input, class: 'form-control'
121
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
122
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
123
+ end
124
+
125
+ config.wrappers :multi_select, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
126
+ b.use :html5
127
+ b.optional :readonly
128
+ b.use :label, class: 'control-label'
129
+ b.wrapper tag: 'div', class: 'form-inline' do |ba|
130
+ ba.use :input, class: 'form-control'
131
+ ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
132
+ ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
133
+ end
134
+ end
135
+ # Wrappers for forms and inputs using the Bootstrap toolkit.
136
+ # Check the Bootstrap docs (http://getbootstrap.com)
137
+ # to learn about the different styles for forms and inputs,
138
+ # buttons and other elements.
139
+ config.default_wrapper = :vertical_form
140
+ config.wrapper_mappings = {
141
+ check_boxes: :vertical_radio_and_checkboxes,
142
+ radio_buttons: :vertical_radio_and_checkboxes,
143
+ file: :vertical_file_input,
144
+ boolean: :vertical_boolean,
145
+ datetime: :multi_select,
146
+ date: :multi_select,
147
+ time: :multi_select
148
+ }
149
+ end
@@ -0,0 +1,33 @@
1
+ if ENV['SPOOF_IP'] =~ /^(true|t|yes|y)$/
2
+ Rails.application.config.middleware.use 'SpoofIpMiddleware', ENV['SPOOF_IP'] # will use whatismyipaddress.com if not set
3
+ end
4
+
5
+ BEGIN {
6
+ class SpoofIpMiddleware
7
+ require 'open-uri'
8
+
9
+ def initialize(app, ip)
10
+ @app = app
11
+ @ip = if /\d{2,3}\.\d{2,3}\.\d{2,3}\.\d{2,3}/.match(ip)
12
+ ip
13
+ else
14
+ f = open('http://whatismyipaddress.com/')
15
+ body = f.read
16
+ /\d{2,3}\.\d{2,3}\.\d{2,3}\.\d{2,3}/i.match(body).to_s
17
+ end
18
+ puts %%
19
+ ############## Spoof IP ################
20
+ # Overriding IP address to #{@ip}
21
+ ########################################
22
+ %
23
+ rescue
24
+ # Service unavailable
25
+ end
26
+
27
+ def call(env)
28
+ env['REMOTE_ADDR'] = env['action_dispatch.remote_ip'] = @ip
29
+ @status, @headers, @response = @app.call(env)
30
+ [@status, @headers, @response]
31
+ end
32
+ end
33
+ }
@@ -0,0 +1,3 @@
1
+ if ENV['FORCE_SSL'].to_b == true
2
+ Rails.application.config.middleware.use Rack::SslEnforcer
3
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,16 @@
1
+ Mvp::Engine.routes.draw do
2
+ # mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
3
+
4
+ if Rails.env.development?
5
+ get 'styleguide', to: 'styleguide#index'
6
+ get 'styleguide/bootstrap', to: 'styleguide#bootstrap'
7
+ ['basic','cover','carousel'].each do |layout|
8
+ get "styleguide/layouts/#{layout}", to: "styleguide#layout_#{layout}"
9
+ end
10
+ end
11
+
12
+ get 'robots.txt', to: 'seo#robots', as: :robots
13
+ get '/sitemap.xml.gz', to: redirect("https://#{ENV['AWS_S3_BUCKET']}.s3.amazonaws.com/nailsalons/sitemaps/sitemap.xml.gz"), as: :sitemap
14
+
15
+ get 'analytics/optout', to: 'sessions#optout'
16
+ end
data/lib/mvp.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "mvp/engine"
2
+
3
+ module Mvp
4
+ end
5
+
6
+ MVP = Mvp
data/lib/mvp/engine.rb ADDED
@@ -0,0 +1,20 @@
1
+ require 'bootstrap-sass'
2
+ require 'browserify-rails'
3
+ require 'client_side_validations'
4
+ require 'client_side_validations/simple_form'
5
+ require 'cloudinary'
6
+ require 'font-awesome-sass'
7
+ require 'geocoder'
8
+ require 'hashie'
9
+ require 'jquery-rails'
10
+ require "simple_form"
11
+
12
+ require_relative './ext/nil'
13
+ require_relative './ext/string'
14
+
15
+ module Mvp
16
+ class Engine < ::Rails::Engine
17
+ isolate_namespace Mvp
18
+ config.autoload_paths << "#{Rails.root}/lib"
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ class NilClass
2
+ def to_b
3
+ return false
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class String
2
+ def to_b
3
+ return true if self == true || self =~ (/(true|t|yes|y|1)$/i)
4
+ return false if self == false || self.blank? || self =~ (/(false|f|no|n|0)$/i)
5
+ raise ArgumentError.new("invalid value for Boolean: \"#{self}\"")
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module Mvp
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,42 @@
1
+ require 'fog'
2
+
3
+ namespace :sitemap do
4
+ desc 'Upload the sitemap files to S3'
5
+ task upload: :environment do
6
+ puts "Starting sitemap upload to S3..."
7
+
8
+ connection = Fog::Storage.new({
9
+ :provider => 'AWS',
10
+ :aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'],
11
+ :aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
12
+ })
13
+
14
+ directory = connection.directories.get(ENV['AWS_S3_BUCKET'])
15
+
16
+ Dir.entries(File.join(Rails.root, "tmp", "sitemaps")).each do |file_name|
17
+ next if ['.', '..', '.DS_Store'].include? file_name
18
+ path = "__PROJECT_NAME_SLUG__/sitemaps/#{file_name}"
19
+ file = File.new(File.join(Rails.root, "tmp", "sitemaps", file_name))
20
+
21
+ begin
22
+ file = directory.files.create(
23
+ :body => file,
24
+ :key => path,
25
+ :public => true
26
+ )
27
+ # object = bucket.objects[path]
28
+ # object.write(file: file)
29
+ rescue Exception => e
30
+ raise e
31
+ end
32
+ puts "Saved #{file_name} to S3"
33
+ end
34
+ end
35
+
36
+ desc 'Create the sitemap, then upload it to S3 and ping the search engines'
37
+ task worker: :environment do
38
+ Rake::Task["sitemap:create"].invoke
39
+ Rake::Task["sitemap:upload"].invoke
40
+ SitemapGenerator::Sitemap.ping_search_engines(Rails.application.routes.url_helpers.sitemap_url)
41
+ end
42
+ end
metadata ADDED
@@ -0,0 +1,521 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: minimum-viable-product
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Ian Hunter
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-08-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: analytics-ruby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bootstrap-sass
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: browserify-rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: carrierwave
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: client_side_validations
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: client_side_validations-simple_form
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: cloudinary
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: dotenv-rails
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: geocoder
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: faraday
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: fog
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: fog-aws
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: font-awesome-sass
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: hashie
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: jquery-rails
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: rack-canonical-host
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: rack-ssl-enforcer
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :runtime
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: rails
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "~>"
256
+ - !ruby/object:Gem::Version
257
+ version: 4.2.3
258
+ type: :runtime
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "~>"
263
+ - !ruby/object:Gem::Version
264
+ version: 4.2.3
265
+ - !ruby/object:Gem::Dependency
266
+ name: rollbar
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :runtime
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: sass-rails
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - "~>"
284
+ - !ruby/object:Gem::Version
285
+ version: '5.0'
286
+ type: :runtime
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - "~>"
291
+ - !ruby/object:Gem::Version
292
+ version: '5.0'
293
+ - !ruby/object:Gem::Dependency
294
+ name: simple_form
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
300
+ type: :runtime
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
307
+ - !ruby/object:Gem::Dependency
308
+ name: sitemap_generator
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ type: :runtime
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - ">="
319
+ - !ruby/object:Gem::Version
320
+ version: '0'
321
+ - !ruby/object:Gem::Dependency
322
+ name: slack-notifier
323
+ requirement: !ruby/object:Gem::Requirement
324
+ requirements:
325
+ - - ">="
326
+ - !ruby/object:Gem::Version
327
+ version: '0'
328
+ type: :runtime
329
+ prerelease: false
330
+ version_requirements: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - ">="
333
+ - !ruby/object:Gem::Version
334
+ version: '0'
335
+ - !ruby/object:Gem::Dependency
336
+ name: byebug
337
+ requirement: !ruby/object:Gem::Requirement
338
+ requirements:
339
+ - - ">="
340
+ - !ruby/object:Gem::Version
341
+ version: '0'
342
+ type: :development
343
+ prerelease: false
344
+ version_requirements: !ruby/object:Gem::Requirement
345
+ requirements:
346
+ - - ">="
347
+ - !ruby/object:Gem::Version
348
+ version: '0'
349
+ - !ruby/object:Gem::Dependency
350
+ name: better_errors
351
+ requirement: !ruby/object:Gem::Requirement
352
+ requirements:
353
+ - - ">="
354
+ - !ruby/object:Gem::Version
355
+ version: '0'
356
+ type: :development
357
+ prerelease: false
358
+ version_requirements: !ruby/object:Gem::Requirement
359
+ requirements:
360
+ - - ">="
361
+ - !ruby/object:Gem::Version
362
+ version: '0'
363
+ - !ruby/object:Gem::Dependency
364
+ name: binding_of_caller
365
+ requirement: !ruby/object:Gem::Requirement
366
+ requirements:
367
+ - - ">="
368
+ - !ruby/object:Gem::Version
369
+ version: '0'
370
+ type: :development
371
+ prerelease: false
372
+ version_requirements: !ruby/object:Gem::Requirement
373
+ requirements:
374
+ - - ">="
375
+ - !ruby/object:Gem::Version
376
+ version: '0'
377
+ - !ruby/object:Gem::Dependency
378
+ name: bullet
379
+ requirement: !ruby/object:Gem::Requirement
380
+ requirements:
381
+ - - ">="
382
+ - !ruby/object:Gem::Version
383
+ version: '0'
384
+ type: :development
385
+ prerelease: false
386
+ version_requirements: !ruby/object:Gem::Requirement
387
+ requirements:
388
+ - - ">="
389
+ - !ruby/object:Gem::Version
390
+ version: '0'
391
+ - !ruby/object:Gem::Dependency
392
+ name: semantic
393
+ requirement: !ruby/object:Gem::Requirement
394
+ requirements:
395
+ - - ">="
396
+ - !ruby/object:Gem::Version
397
+ version: '0'
398
+ type: :development
399
+ prerelease: false
400
+ version_requirements: !ruby/object:Gem::Requirement
401
+ requirements:
402
+ - - ">="
403
+ - !ruby/object:Gem::Version
404
+ version: '0'
405
+ - !ruby/object:Gem::Dependency
406
+ name: web-console
407
+ requirement: !ruby/object:Gem::Requirement
408
+ requirements:
409
+ - - "~>"
410
+ - !ruby/object:Gem::Version
411
+ version: '2.0'
412
+ type: :development
413
+ prerelease: false
414
+ version_requirements: !ruby/object:Gem::Requirement
415
+ requirements:
416
+ - - "~>"
417
+ - !ruby/object:Gem::Version
418
+ version: '2.0'
419
+ - !ruby/object:Gem::Dependency
420
+ name: spring
421
+ requirement: !ruby/object:Gem::Requirement
422
+ requirements:
423
+ - - ">="
424
+ - !ruby/object:Gem::Version
425
+ version: '0'
426
+ type: :development
427
+ prerelease: false
428
+ version_requirements: !ruby/object:Gem::Requirement
429
+ requirements:
430
+ - - ">="
431
+ - !ruby/object:Gem::Version
432
+ version: '0'
433
+ description: Built for Developers. Ideal for MVPs, product ideation and validation.
434
+ email:
435
+ - ianhunter@gmail.com
436
+ executables:
437
+ - mvp
438
+ extensions: []
439
+ extra_rdoc_files: []
440
+ files:
441
+ - MIT-LICENSE
442
+ - README.rdoc
443
+ - Rakefile
444
+ - app/assets/javascripts/mvp/application.js.erb
445
+ - app/assets/javascripts/mvp/init/controllers.js
446
+ - app/assets/stylesheets/mvp/application.scss
447
+ - app/assets/stylesheets/mvp/components/buttons.scss
448
+ - app/assets/stylesheets/mvp/components/fonts.scss
449
+ - app/assets/stylesheets/mvp/components/spacing.scss
450
+ - app/assets/stylesheets/mvp/components/typography.scss
451
+ - app/assets/stylesheets/mvp/init/_reset.scss
452
+ - app/assets/stylesheets/mvp/init/layout.scss
453
+ - app/assets/stylesheets/mvp/layout/basic.scss
454
+ - app/assets/stylesheets/mvp/layout/carousel.scss
455
+ - app/assets/stylesheets/mvp/layout/cover.scss
456
+ - app/assets/stylesheets/mvp/pages/sample.scss
457
+ - app/assets/stylesheets/mvp/skin/style.scss
458
+ - app/controllers/mvp/analytics_controller.rb
459
+ - app/controllers/mvp/application_controller.rb
460
+ - app/controllers/mvp/concerns/analytics_concern.rb
461
+ - app/controllers/mvp/concerns/seo_concern.rb
462
+ - app/controllers/mvp/concerns/session_concern.rb
463
+ - app/controllers/mvp/seo_controller.rb
464
+ - app/controllers/mvp/styleguide_controller.rb
465
+ - app/helpers/mvp/analytics_helper.rb
466
+ - app/helpers/mvp/application_helper.rb
467
+ - app/helpers/mvp/bootstrap_helper.rb
468
+ - app/helpers/mvp/seo_helper.rb
469
+ - app/helpers/mvp/styleguide_helper.rb
470
+ - app/models/concerns/slugification.rb
471
+ - app/views/layouts/mvp/_header.html.erb
472
+ - app/views/layouts/mvp/_instrumentation.html.erb
473
+ - app/views/layouts/mvp/_meta.html.erb
474
+ - app/views/layouts/mvp/application.html.erb
475
+ - app/views/layouts/mvp/basic.html.erb
476
+ - app/views/layouts/mvp/carousel.html.erb
477
+ - app/views/layouts/mvp/cover.html.erb
478
+ - bin/mvp
479
+ - config/initializers/canonical_host.rb
480
+ - config/initializers/client_side_validations.rb
481
+ - config/initializers/cloudinary.rb
482
+ - config/initializers/geocoder.rb
483
+ - config/initializers/iteration.rb
484
+ - config/initializers/rollbar.rb
485
+ - config/initializers/segment.rb
486
+ - config/initializers/simple_form.rb
487
+ - config/initializers/simple_form_bootstrap.rb
488
+ - config/initializers/spoof_ip.rb
489
+ - config/initializers/ssl.rb
490
+ - config/routes.rb
491
+ - lib/mvp.rb
492
+ - lib/mvp/engine.rb
493
+ - lib/mvp/ext/nil.rb
494
+ - lib/mvp/ext/string.rb
495
+ - lib/mvp/version.rb
496
+ - lib/tasks/sitemap.rake
497
+ homepage: http://github.com/ian/mvp
498
+ licenses:
499
+ - MIT
500
+ metadata: {}
501
+ post_install_message:
502
+ rdoc_options: []
503
+ require_paths:
504
+ - lib
505
+ required_ruby_version: !ruby/object:Gem::Requirement
506
+ requirements:
507
+ - - ">="
508
+ - !ruby/object:Gem::Version
509
+ version: '0'
510
+ required_rubygems_version: !ruby/object:Gem::Requirement
511
+ requirements:
512
+ - - ">="
513
+ - !ruby/object:Gem::Version
514
+ version: '0'
515
+ requirements: []
516
+ rubyforge_project:
517
+ rubygems_version: 2.4.6
518
+ signing_key:
519
+ specification_version: 4
520
+ summary: The start-to-finish 3 minute product platform
521
+ test_files: []