mvpkit 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (150) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +30 -0
  3. data/Gemfile.lock +329 -0
  4. data/LICENSE.txt +20 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.md +134 -0
  7. data/Rakefile +52 -0
  8. data/VERSION +1 -0
  9. data/app/assets/javascripts/mvp/application.js +1 -0
  10. data/app/assets/stylesheets/mvp/application.scss +0 -0
  11. data/app/controllers/concerns/mvp/analytics_concern.rb +78 -0
  12. data/app/controllers/concerns/mvp/seo_concern.rb +25 -0
  13. data/app/controllers/concerns/mvp/session_concern.rb +44 -0
  14. data/app/controllers/mvp/analytics_controller.rb +12 -0
  15. data/app/controllers/mvp/seo_controller.rb +11 -0
  16. data/app/controllers/mvp/styleguide_controller.rb +23 -0
  17. data/app/helpers/minimum_viable_product/body_helper.rb +14 -0
  18. data/app/helpers/minimum_viable_product/bootstrap_helper.rb +38 -0
  19. data/app/helpers/minimum_viable_product/styleguide_helper.rb +4 -0
  20. data/app/models/concerns/mvp/slugification.rb +24 -0
  21. data/app/views/layouts/minimum_viable_product/_instrumentation.html.erb +100 -0
  22. data/app/views/layouts/minimum_viable_product/_meta.html.erb +37 -0
  23. data/app/views/layouts/minimum_viable_product/application.html.erb +19 -0
  24. data/app/views/minimum_viable_product/styleguide/_example.html.erb +6 -0
  25. data/app/views/minimum_viable_product/styleguide/bootstrap/_buttons.html.erb +191 -0
  26. data/app/views/minimum_viable_product/styleguide/bootstrap/_forms.html.erb +192 -0
  27. data/app/views/minimum_viable_product/styleguide/bootstrap/_header.html.erb +48 -0
  28. data/app/views/minimum_viable_product/styleguide/bootstrap/_panels.html.erb +16 -0
  29. data/app/views/minimum_viable_product/styleguide/bootstrap/_tables.html.erb +34 -0
  30. data/app/views/minimum_viable_product/styleguide/bootstrap/_typography.html.erb +51 -0
  31. data/app/views/minimum_viable_product/styleguide/bootstrap.html.erb +43 -0
  32. data/app/views/minimum_viable_product/styleguide/elements/_grouping.html.erb +1 -0
  33. data/app/views/minimum_viable_product/styleguide/elements/partials/_row_groups_of.html.erb +7 -0
  34. data/app/views/minimum_viable_product/styleguide/index.html.erb +17 -0
  35. data/app/views/minimum_viable_product/styleguide/layouts/basic.html.erb +4 -0
  36. data/app/views/minimum_viable_product/styleguide/layouts/carousel.html.erb +120 -0
  37. data/app/views/minimum_viable_product/styleguide/layouts/cover.html.erb +34 -0
  38. data/assets/js/application.js +31 -0
  39. data/assets/js/init/controllers.js +26 -0
  40. data/assets/js/init/forms.js +12 -0
  41. data/bin/mvp +78 -0
  42. data/bin/rails +12 -0
  43. data/config/initializers/assets.rb +2 -0
  44. data/config/initializers/canonical_host.rb +3 -0
  45. data/config/initializers/cloudinary.rb +7 -0
  46. data/config/initializers/geocoder.rb +9 -0
  47. data/config/initializers/iteration.rb +33 -0
  48. data/config/initializers/project.rb +1 -0
  49. data/config/initializers/rollbar.rb +59 -0
  50. data/config/initializers/routing.rb +7 -0
  51. data/config/initializers/spoof_ip.rb +33 -0
  52. data/config/initializers/ssl.rb +14 -0
  53. data/config/routes.rb +6 -0
  54. data/lib/mvp/engine.rb +22 -0
  55. data/lib/mvp/ext/nil.rb +5 -0
  56. data/lib/mvp/ext/string.rb +7 -0
  57. data/lib/mvpkit.rb +6 -0
  58. data/lib/tasks/sitemap.rake +42 -0
  59. data/mvpkit.gemspec +245 -0
  60. data/package.json +43 -0
  61. data/project/.gitignore +45 -0
  62. data/project/Gemfile +33 -0
  63. data/project/Gemfile.lock +437 -0
  64. data/project/Procfile +2 -0
  65. data/project/README.md +117 -0
  66. data/project/Rakefile +14 -0
  67. data/project/app/controllers/application_controller.rb +12 -0
  68. data/project/app/controllers/conversions_controller.rb +24 -0
  69. data/project/app/controllers/examples_controller.rb +2 -0
  70. data/project/app/controllers/home_controller.rb +7 -0
  71. data/project/app/decorators/.keep +0 -0
  72. data/project/app/helpers/application_helper.rb +24 -0
  73. data/project/app/mailers/.keep +0 -0
  74. data/project/app/models/conversion.rb +4 -0
  75. data/project/app/views/examples/index.html.erb +1 -0
  76. data/project/app/views/examples/mustache/template.mustache +1 -0
  77. data/project/app/views/examples/mustache.html.erb +18 -0
  78. data/project/app/views/home/conversion.html.erb +12 -0
  79. data/project/app/views/home/index.html.erb +28 -0
  80. data/project/app/views/layouts/_header.html.erb +16 -0
  81. data/project/app/views/layouts/_includes.html.erb +7 -0
  82. data/project/app/views/layouts/application.html.erb +17 -0
  83. data/project/app/views/layouts/modal.html.erb +14 -0
  84. data/project/assets/images/.keep +0 -0
  85. data/project/assets/images/favicon.ico +0 -0
  86. data/project/assets/javascripts/controllers/home.coffee +15 -0
  87. data/project/assets/javascripts/pack.js +9 -0
  88. data/project/assets/stylesheets/config/variables.scss +876 -0
  89. data/project/assets/stylesheets/layout/basic.scss +6 -0
  90. data/project/assets/stylesheets/layout/carousel.scss +127 -0
  91. data/project/assets/stylesheets/layout/cover.scss +129 -0
  92. data/project/assets/stylesheets/lib/spacing.scss +55 -0
  93. data/project/assets/stylesheets/skin/style.scss +16 -0
  94. data/project/assets/stylesheets/style.scss +8 -0
  95. data/project/bin/bundle +3 -0
  96. data/project/bin/rails +9 -0
  97. data/project/bin/rake +9 -0
  98. data/project/bin/setup +32 -0
  99. data/project/bin/spring +15 -0
  100. data/project/config/application.rb +32 -0
  101. data/project/config/boot.rb +3 -0
  102. data/project/config/database.yml +19 -0
  103. data/project/config/environment.rb +5 -0
  104. data/project/config/environments/development.rb +67 -0
  105. data/project/config/environments/production.rb +93 -0
  106. data/project/config/environments/test.rb +42 -0
  107. data/project/config/initializers/assets.rb +11 -0
  108. data/project/config/initializers/backtrace_silencers.rb +7 -0
  109. data/project/config/initializers/cookies_serializer.rb +3 -0
  110. data/project/config/initializers/filter_parameter_logging.rb +4 -0
  111. data/project/config/initializers/inflections.rb +16 -0
  112. data/project/config/initializers/mime_types.rb +4 -0
  113. data/project/config/initializers/mustache.rb +7 -0
  114. data/project/config/initializers/rails_admin.rb +43 -0
  115. data/project/config/initializers/session_store.rb +3 -0
  116. data/project/config/initializers/simple_form.rb +177 -0
  117. data/project/config/initializers/wrap_parameters.rb +14 -0
  118. data/project/config/locales/en.yml +23 -0
  119. data/project/config/locales/simple_form.en.yml +31 -0
  120. data/project/config/routes.rb +13 -0
  121. data/project/config/secrets.yml +8 -0
  122. data/project/config/sitemap.rb +28 -0
  123. data/project/config.ru +4 -0
  124. data/project/db/migrate/20160728235100_create_conversions.rb +9 -0
  125. data/project/db/schema.rb +25 -0
  126. data/project/db/seeds.rb +7 -0
  127. data/project/lib/assets/.keep +0 -0
  128. data/project/lib/tasks/heroku.rake +70 -0
  129. data/project/log/.keep +0 -0
  130. data/project/log/development.log +48216 -0
  131. data/project/log/production.log +0 -0
  132. data/project/package.json +44 -0
  133. data/project/public/404.html +67 -0
  134. data/project/public/422.html +67 -0
  135. data/project/public/500.html +66 -0
  136. data/project/public/assets/javascripts/448c34a56d699c29117adc64c43affeb.woff2 +0 -0
  137. data/project/public/assets/javascripts/89889688147bd7575d6327160d64e760.svg +288 -0
  138. data/project/public/assets/javascripts/e18bbf611f2a2e43afc071aa2f4e1512.ttf +0 -0
  139. data/project/public/assets/javascripts/f4769f9bdb7466be65088239c12046d1.eot +0 -0
  140. data/project/public/assets/javascripts/fa2772327f55d8198301fdb8bcfc8158.woff +0 -0
  141. data/project/public/assets/javascripts/pack.js +31367 -0
  142. data/project/public/assets/javascripts/pack.js.map +1 -0
  143. data/project/public/assets/pack.js +17220 -0
  144. data/project/public/assets/style.css +7477 -0
  145. data/project/vendor/assets/javascripts/.keep +0 -0
  146. data/project/vendor/assets/stylesheets/.keep +0 -0
  147. data/project/webpack.config.js +67 -0
  148. data/test/helper.rb +34 -0
  149. data/test/test_minimum_viable_product.rb +7 -0
  150. metadata +473 -0
data/bin/mvp ADDED
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ command = ARGV[0]
4
+
5
+ error(%%
6
+ No command specified, please use one of the following
7
+ new: start a new project
8
+ update: update mvp inside current project
9
+ %) unless command
10
+
11
+ case command.downcase
12
+ when 'new'
13
+ project = if ARGV[1]
14
+ ARGV[1]
15
+ else
16
+ $stdin.reopen(File.open("/dev/tty", "r"))
17
+ print "Project name? "
18
+ STDIN.gets.chomp
19
+ end
20
+
21
+ error('Must specify a project name') if project == ""
22
+
23
+ slug = slugify(project)
24
+
25
+ puts
26
+ run "cp -r #{File.dirname(__FILE__)}/../project #{slug}"
27
+
28
+ puts
29
+ puts "\n== Initializing Project =="
30
+ files = Dir.glob("#{slug}/**/*").select { |f| File.file?(f) }
31
+ files.each do |file_name|
32
+ begin
33
+ puts "Replacing #{file_name}"
34
+ text = File.read(file_name)
35
+ new_contents = text.gsub(/__PROJECT_NAME__/, project)
36
+ .gsub(/__PROJECT_NAME_SLUG__/, slug)
37
+
38
+ File.open(file_name, "w") {|file| file.puts new_contents }
39
+ rescue
40
+
41
+ end
42
+ end
43
+ run "cd #{slug} && rm -rf .git && git init"
44
+
45
+ run "cd #{slug}; bin/setup", "\n== Project Setup"
46
+
47
+ when 'update'
48
+ run "bundle update minimum_viable_product"
49
+ # npm has a bug where it won't update new dependencies
50
+ # https://github.com/npm/npm/issues/1341
51
+ run "rm -rf node_modules; npm install"
52
+ when '-v','version'
53
+ version = File.read(File.dirname(__FILE__) + '/../VERSION')
54
+ puts "Version #{version}"
55
+ end
56
+
57
+ BEGIN {
58
+ def slugify(name)
59
+ slug = name.gsub(/'/, '').gsub(/[^a-z0-9]+/, '_')
60
+ slug.chop! if slug[-1] == '-'
61
+ slug
62
+ end
63
+
64
+ def error(message)
65
+ puts
66
+ puts "Error: #{message}"
67
+ exit 1
68
+ end
69
+
70
+ def run(cmd, message=nil)
71
+ if message
72
+ puts
73
+ puts message
74
+ end
75
+
76
+ system cmd
77
+ end
78
+ }
data/bin/rails ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
3
+
4
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
5
+ ENGINE_PATH = File.expand_path('../../lib/minimum_viable_product/engine', __FILE__)
6
+
7
+ # Set up gems listed in the Gemfile.
8
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
9
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
10
+
11
+ require 'rails/all'
12
+ require 'rails/engine/commands'
@@ -0,0 +1,2 @@
1
+ Rails.application.config.assets.paths << Rails.root.join('node_modules')
2
+ Rails.application.config.assets.paths << MinimumViableProduct::Engine.root.join('app')
@@ -0,0 +1,3 @@
1
+ if ENV['HOST_DOMAIN']
2
+ Rails.application.config.middleware.use Rack::CanonicalHost, ENV['HOST_DOMAIN']
3
+ end
@@ -0,0 +1,7 @@
1
+ Cloudinary.config do |config|
2
+ config.cloud_name = ENV['CLOUDINARY_NAME']
3
+ config.api_key = ENV['CLOUDINARY_KEY']
4
+ config.api_secret = ENV['CLOUDINARY_SECRET']
5
+ config.cdn_subdomain = true
6
+ config.secure = true
7
+ end
@@ -0,0 +1,9 @@
1
+ Geocoder.configure(
2
+ :lookup => :esri,
3
+ # :ip_lookup => :maxmind,
4
+ :logger => Logger.new(STDOUT, Logger::FATAL)
5
+
6
+ # calculation options
7
+ # :units => :mi, # :km for kilometers or :mi for miles
8
+ # :distances => :linear # :spherical or :linear
9
+ )
@@ -0,0 +1,33 @@
1
+ module MinimumViableProduct
2
+ module Iteration
3
+ CONFIG_FILE = File.join(Rails.root, '.iteration')
4
+
5
+ class << self
6
+ def write(json)
7
+ _file = File.open( CONFIG_FILE, "w+" )
8
+ _file.write(JSON.pretty_generate(json))
9
+ _file.close
10
+
11
+ @config = json
12
+ end
13
+
14
+ def read
15
+ @config ||= begin
16
+ JSON.parse( IO.read(CONFIG_FILE), symbolize_names: false )
17
+ rescue
18
+ write({'version' => '0.0.1'})
19
+ end
20
+ end
21
+
22
+ def bump!(bump)
23
+ config = read
24
+ config['version'] = Semantic::Version.new(config['version']).increment!(bump.downcase.to_sym).to_s
25
+ write(config)
26
+ end
27
+
28
+ def version
29
+ read["version"]
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1 @@
1
+ ENV['PROJECT_NAME'] ||= JSON.parse(Rails.root.join('package.json').read)["name"]
@@ -0,0 +1,59 @@
1
+ if ENV['ROLLBAR_SERVER_ACCESS_TOKEN']
2
+ Rollbar.configure do |config|
3
+ # Without configuration, Rollbar is enabled in all environments.
4
+ # To disable in specific environments, set config.enabled=false.
5
+
6
+ config.access_token = ENV['ROLLBAR_SERVER_ACCESS_TOKEN']
7
+
8
+ # Here we'll disable in 'test':
9
+ if Rails.env.test?
10
+ config.enabled = false
11
+ end
12
+
13
+ # By default, Rollbar will try to call the `current_user` controller method
14
+ # to fetch the logged-in user object, and then call that object's `id`,
15
+ # `username`, and `email` methods to fetch those properties. To customize:
16
+ # config.person_method = "my_current_user"
17
+ # config.person_id_method = "my_id"
18
+ # config.person_username_method = "my_username"
19
+ # config.person_email_method = "my_email"
20
+
21
+ # If you want to attach custom data to all exception and message reports,
22
+ # provide a lambda like the following. It should return a hash.
23
+ # config.custom_data_method = lambda { {:some_key => "some_value" } }
24
+
25
+ # Add exception class names to the exception_level_filters hash to
26
+ # change the level that exception is reported at. Note that if an exception
27
+ # has already been reported and logged the level will need to be changed
28
+ # via the rollbar interface.
29
+ # Valid levels: 'critical', 'error', 'warning', 'info', 'debug', 'ignore'
30
+ # 'ignore' will cause the exception to not be reported at all.
31
+ # config.exception_level_filters.merge!('MyCriticalException' => 'critical')
32
+ #
33
+ # You can also specify a callable, which will be called with the exception instance.
34
+ # config.exception_level_filters.merge!('MyCriticalException' => lambda { |e| 'critical' })
35
+
36
+ # Enable asynchronous reporting (uses girl_friday or Threading if girl_friday
37
+ # is not installed)
38
+ # config.use_async = true
39
+ # Supply your own async handler:
40
+ # config.async_handler = Proc.new { |payload|
41
+ # Thread.new { Rollbar.process_from_async_handler(payload) }
42
+ # }
43
+
44
+ # Enable asynchronous reporting (using sucker_punch)
45
+ # config.use_sucker_punch
46
+
47
+ # Enable delayed reporting (using Sidekiq)
48
+ # config.use_sidekiq
49
+ # You can supply custom Sidekiq options:
50
+ # config.use_sidekiq 'queue' => 'default'
51
+
52
+ # If you run your staging application instance in production environment then
53
+ # you'll want to override the environment reported by `Rails.env` with an
54
+ # environment variable like this: `ROLLBAR_ENV=staging`. This is a recommended
55
+ # setup for Heroku. See:
56
+ # https://devcenter.heroku.com/articles/deploying-to-a-custom-rails-environment
57
+ config.environment = ENV['ROLLBAR_ENV'] || Rails.env
58
+ end
59
+ end
@@ -0,0 +1,7 @@
1
+ _options = {}
2
+ _options[:protocol] = ENV['HOST_PROTOCOL'] || (ENV['FORCE_SSL'].to_b ? "https" : "http")
3
+ _options[:host] = ENV['HOST_DOMAIN']
4
+ _options[:port] = ENV['HOST_PORT']
5
+
6
+ Rails.application.routes.default_url_options = _options
7
+ MVP::Engine.routes.default_url_options = _options
@@ -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,14 @@
1
+ # case ENV['FORCE_SSL']
2
+ # when /t|true|yes|y|on/
3
+ # Rails.application.config.middleware.use SslEnforcerOnlyProtocol, :https_port => ENV['HOST_PORT']
4
+ # end
5
+ #
6
+ # BEGIN {
7
+ # class SslEnforcerOnlyProtocol < Rack::SslEnforcer
8
+ # def current_scheme
9
+ # @request.scheme == 'https'
10
+ # end
11
+ # end
12
+ # }
13
+
14
+ Rails.application.config.force_ssl = ENV['FORCE_SSL'].to_b
data/config/routes.rb ADDED
@@ -0,0 +1,6 @@
1
+ MinimumViableProduct::Engine.routes.draw do
2
+ get 'robots.txt', to: 'seo#robots', as: :robots
3
+ get '/sitemap.xml.gz', to: redirect("https://#{ENV['AWS_S3_BUCKET']}.s3.amazonaws.com/#{Rails.application.class.parent_name.underscore}/sitemaps/sitemap.xml.gz"), as: :sitemap
4
+
5
+ get 'analytics/optout', to: 'analytics#optout'
6
+ end
data/lib/mvp/engine.rb ADDED
@@ -0,0 +1,22 @@
1
+ require 'carrierwave'
2
+ require 'cloudinary'
3
+ require 'faraday'
4
+ require 'fog'
5
+ require 'geocoder'
6
+ require 'hashie'
7
+ require 'rack-canonical-host'
8
+ require 'rack-ssl-enforcer'
9
+ require 'rollbar'
10
+ require 'sitemap_generator'
11
+ require 'slack-notifier'
12
+
13
+ require_relative './ext/nil'
14
+ require_relative './ext/string'
15
+
16
+ module MVP
17
+ class Engine < ::Rails::Engine
18
+ isolate_namespace MVP
19
+ # config.autoload_paths << "#{Rails.root}/app"
20
+ # config.autoload_paths << "#{Rails.root}/lib"
21
+ end
22
+ 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
data/lib/mvpkit.rb ADDED
@@ -0,0 +1,6 @@
1
+ module MVP
2
+ end
3
+
4
+ MinimumViableProduct = MVP
5
+
6
+ require "mvp/engine"
@@ -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 = "#{Rails.application.class.parent_name.underscore}/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(MVP::Engine.routes.url_helpers.sitemap_url)
41
+ end
42
+ end
data/mvpkit.gemspec ADDED
@@ -0,0 +1,245 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: mvpkit 0.8.0 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "mvpkit"
9
+ s.version = "0.8.0"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
13
+ s.authors = ["Ian Hunter"]
14
+ s.date = "2017-03-14"
15
+ s.description = "Built for Developers. Ideal for MVPs, product ideation and validation."
16
+ s.email = "ianhunter@gmail.com"
17
+ s.extra_rdoc_files = [
18
+ "LICENSE.txt",
19
+ "README.md"
20
+ ]
21
+ s.files = [
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "MIT-LICENSE",
26
+ "README.md",
27
+ "Rakefile",
28
+ "VERSION",
29
+ "app/assets/javascripts/mvp/application.js",
30
+ "app/assets/stylesheets/mvp/application.scss",
31
+ "app/controllers/concerns/mvp/analytics_concern.rb",
32
+ "app/controllers/concerns/mvp/seo_concern.rb",
33
+ "app/controllers/concerns/mvp/session_concern.rb",
34
+ "app/controllers/mvp/analytics_controller.rb",
35
+ "app/controllers/mvp/seo_controller.rb",
36
+ "app/controllers/mvp/styleguide_controller.rb",
37
+ "app/helpers/minimum_viable_product/body_helper.rb",
38
+ "app/helpers/minimum_viable_product/bootstrap_helper.rb",
39
+ "app/helpers/minimum_viable_product/styleguide_helper.rb",
40
+ "app/models/concerns/mvp/slugification.rb",
41
+ "app/views/layouts/minimum_viable_product/_instrumentation.html.erb",
42
+ "app/views/layouts/minimum_viable_product/_meta.html.erb",
43
+ "app/views/layouts/minimum_viable_product/application.html.erb",
44
+ "app/views/minimum_viable_product/styleguide/_example.html.erb",
45
+ "app/views/minimum_viable_product/styleguide/bootstrap.html.erb",
46
+ "app/views/minimum_viable_product/styleguide/bootstrap/_buttons.html.erb",
47
+ "app/views/minimum_viable_product/styleguide/bootstrap/_forms.html.erb",
48
+ "app/views/minimum_viable_product/styleguide/bootstrap/_header.html.erb",
49
+ "app/views/minimum_viable_product/styleguide/bootstrap/_panels.html.erb",
50
+ "app/views/minimum_viable_product/styleguide/bootstrap/_tables.html.erb",
51
+ "app/views/minimum_viable_product/styleguide/bootstrap/_typography.html.erb",
52
+ "app/views/minimum_viable_product/styleguide/elements/_grouping.html.erb",
53
+ "app/views/minimum_viable_product/styleguide/elements/partials/_row_groups_of.html.erb",
54
+ "app/views/minimum_viable_product/styleguide/index.html.erb",
55
+ "app/views/minimum_viable_product/styleguide/layouts/basic.html.erb",
56
+ "app/views/minimum_viable_product/styleguide/layouts/carousel.html.erb",
57
+ "app/views/minimum_viable_product/styleguide/layouts/cover.html.erb",
58
+ "assets/js/application.js",
59
+ "assets/js/init/controllers.js",
60
+ "assets/js/init/forms.js",
61
+ "bin/mvp",
62
+ "bin/rails",
63
+ "config/initializers/assets.rb",
64
+ "config/initializers/canonical_host.rb",
65
+ "config/initializers/cloudinary.rb",
66
+ "config/initializers/geocoder.rb",
67
+ "config/initializers/iteration.rb",
68
+ "config/initializers/project.rb",
69
+ "config/initializers/rollbar.rb",
70
+ "config/initializers/routing.rb",
71
+ "config/initializers/spoof_ip.rb",
72
+ "config/initializers/ssl.rb",
73
+ "config/routes.rb",
74
+ "lib/mvp/engine.rb",
75
+ "lib/mvp/ext/nil.rb",
76
+ "lib/mvp/ext/string.rb",
77
+ "lib/mvpkit.rb",
78
+ "lib/tasks/sitemap.rake",
79
+ "mvpkit.gemspec",
80
+ "package.json",
81
+ "project/.gitignore",
82
+ "project/Gemfile",
83
+ "project/Gemfile.lock",
84
+ "project/Procfile",
85
+ "project/README.md",
86
+ "project/Rakefile",
87
+ "project/app/controllers/application_controller.rb",
88
+ "project/app/controllers/conversions_controller.rb",
89
+ "project/app/controllers/examples_controller.rb",
90
+ "project/app/controllers/home_controller.rb",
91
+ "project/app/decorators/.keep",
92
+ "project/app/helpers/application_helper.rb",
93
+ "project/app/mailers/.keep",
94
+ "project/app/models/conversion.rb",
95
+ "project/app/views/examples/index.html.erb",
96
+ "project/app/views/examples/mustache.html.erb",
97
+ "project/app/views/examples/mustache/template.mustache",
98
+ "project/app/views/home/conversion.html.erb",
99
+ "project/app/views/home/index.html.erb",
100
+ "project/app/views/layouts/_header.html.erb",
101
+ "project/app/views/layouts/_includes.html.erb",
102
+ "project/app/views/layouts/application.html.erb",
103
+ "project/app/views/layouts/modal.html.erb",
104
+ "project/assets/images/.keep",
105
+ "project/assets/images/favicon.ico",
106
+ "project/assets/javascripts/controllers/home.coffee",
107
+ "project/assets/javascripts/pack.js",
108
+ "project/assets/stylesheets/config/variables.scss",
109
+ "project/assets/stylesheets/layout/basic.scss",
110
+ "project/assets/stylesheets/layout/carousel.scss",
111
+ "project/assets/stylesheets/layout/cover.scss",
112
+ "project/assets/stylesheets/lib/spacing.scss",
113
+ "project/assets/stylesheets/skin/style.scss",
114
+ "project/assets/stylesheets/style.scss",
115
+ "project/bin/bundle",
116
+ "project/bin/rails",
117
+ "project/bin/rake",
118
+ "project/bin/setup",
119
+ "project/bin/spring",
120
+ "project/config.ru",
121
+ "project/config/application.rb",
122
+ "project/config/boot.rb",
123
+ "project/config/database.yml",
124
+ "project/config/environment.rb",
125
+ "project/config/environments/development.rb",
126
+ "project/config/environments/production.rb",
127
+ "project/config/environments/test.rb",
128
+ "project/config/initializers/assets.rb",
129
+ "project/config/initializers/backtrace_silencers.rb",
130
+ "project/config/initializers/cookies_serializer.rb",
131
+ "project/config/initializers/filter_parameter_logging.rb",
132
+ "project/config/initializers/inflections.rb",
133
+ "project/config/initializers/mime_types.rb",
134
+ "project/config/initializers/mustache.rb",
135
+ "project/config/initializers/rails_admin.rb",
136
+ "project/config/initializers/session_store.rb",
137
+ "project/config/initializers/simple_form.rb",
138
+ "project/config/initializers/wrap_parameters.rb",
139
+ "project/config/locales/en.yml",
140
+ "project/config/locales/simple_form.en.yml",
141
+ "project/config/routes.rb",
142
+ "project/config/secrets.yml",
143
+ "project/config/sitemap.rb",
144
+ "project/db/migrate/20160728235100_create_conversions.rb",
145
+ "project/db/schema.rb",
146
+ "project/db/seeds.rb",
147
+ "project/lib/assets/.keep",
148
+ "project/lib/tasks/heroku.rake",
149
+ "project/log/.keep",
150
+ "project/log/development.log",
151
+ "project/log/production.log",
152
+ "project/package.json",
153
+ "project/public/404.html",
154
+ "project/public/422.html",
155
+ "project/public/500.html",
156
+ "project/public/assets/javascripts/448c34a56d699c29117adc64c43affeb.woff2",
157
+ "project/public/assets/javascripts/89889688147bd7575d6327160d64e760.svg",
158
+ "project/public/assets/javascripts/e18bbf611f2a2e43afc071aa2f4e1512.ttf",
159
+ "project/public/assets/javascripts/f4769f9bdb7466be65088239c12046d1.eot",
160
+ "project/public/assets/javascripts/fa2772327f55d8198301fdb8bcfc8158.woff",
161
+ "project/public/assets/javascripts/pack.js",
162
+ "project/public/assets/javascripts/pack.js.map",
163
+ "project/public/assets/pack.js",
164
+ "project/public/assets/style.css",
165
+ "project/vendor/assets/javascripts/.keep",
166
+ "project/vendor/assets/stylesheets/.keep",
167
+ "project/webpack.config.js",
168
+ "test/helper.rb",
169
+ "test/test_minimum_viable_product.rb"
170
+ ]
171
+ s.homepage = "http://github.com/ian/mvp"
172
+ s.licenses = ["MIT"]
173
+ s.rubygems_version = "2.5.1"
174
+ s.summary = "The start-to-finish 3 minute product platform"
175
+
176
+ if s.respond_to? :specification_version then
177
+ s.specification_version = 4
178
+
179
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
180
+ s.add_runtime_dependency(%q<carrierwave>, [">= 0"])
181
+ s.add_runtime_dependency(%q<cloudinary>, [">= 0"])
182
+ s.add_runtime_dependency(%q<geocoder>, [">= 0"])
183
+ s.add_runtime_dependency(%q<faraday>, [">= 0"])
184
+ s.add_runtime_dependency(%q<fog>, [">= 0"])
185
+ s.add_runtime_dependency(%q<fog-aws>, [">= 0"])
186
+ s.add_runtime_dependency(%q<hashie>, [">= 0"])
187
+ s.add_runtime_dependency(%q<rack-canonical-host>, [">= 0"])
188
+ s.add_runtime_dependency(%q<rack-ssl-enforcer>, [">= 0"])
189
+ s.add_runtime_dependency(%q<rollbar>, [">= 0"])
190
+ s.add_runtime_dependency(%q<sass-rails>, ["~> 5.0"])
191
+ s.add_runtime_dependency(%q<sitemap_generator>, [">= 0"])
192
+ s.add_runtime_dependency(%q<slack-notifier>, [">= 0"])
193
+ s.add_development_dependency(%q<byebug>, [">= 0"])
194
+ s.add_development_dependency(%q<better_errors>, [">= 0"])
195
+ s.add_development_dependency(%q<binding_of_caller>, [">= 0"])
196
+ s.add_development_dependency(%q<bullet>, [">= 0"])
197
+ s.add_development_dependency(%q<semantic>, [">= 0"])
198
+ s.add_development_dependency(%q<web-console>, ["~> 2.0"])
199
+ s.add_development_dependency(%q<jeweler>, ["~> 2.3.2"])
200
+ else
201
+ s.add_dependency(%q<carrierwave>, [">= 0"])
202
+ s.add_dependency(%q<cloudinary>, [">= 0"])
203
+ s.add_dependency(%q<geocoder>, [">= 0"])
204
+ s.add_dependency(%q<faraday>, [">= 0"])
205
+ s.add_dependency(%q<fog>, [">= 0"])
206
+ s.add_dependency(%q<fog-aws>, [">= 0"])
207
+ s.add_dependency(%q<hashie>, [">= 0"])
208
+ s.add_dependency(%q<rack-canonical-host>, [">= 0"])
209
+ s.add_dependency(%q<rack-ssl-enforcer>, [">= 0"])
210
+ s.add_dependency(%q<rollbar>, [">= 0"])
211
+ s.add_dependency(%q<sass-rails>, ["~> 5.0"])
212
+ s.add_dependency(%q<sitemap_generator>, [">= 0"])
213
+ s.add_dependency(%q<slack-notifier>, [">= 0"])
214
+ s.add_dependency(%q<byebug>, [">= 0"])
215
+ s.add_dependency(%q<better_errors>, [">= 0"])
216
+ s.add_dependency(%q<binding_of_caller>, [">= 0"])
217
+ s.add_dependency(%q<bullet>, [">= 0"])
218
+ s.add_dependency(%q<semantic>, [">= 0"])
219
+ s.add_dependency(%q<web-console>, ["~> 2.0"])
220
+ s.add_dependency(%q<jeweler>, ["~> 2.3.2"])
221
+ end
222
+ else
223
+ s.add_dependency(%q<carrierwave>, [">= 0"])
224
+ s.add_dependency(%q<cloudinary>, [">= 0"])
225
+ s.add_dependency(%q<geocoder>, [">= 0"])
226
+ s.add_dependency(%q<faraday>, [">= 0"])
227
+ s.add_dependency(%q<fog>, [">= 0"])
228
+ s.add_dependency(%q<fog-aws>, [">= 0"])
229
+ s.add_dependency(%q<hashie>, [">= 0"])
230
+ s.add_dependency(%q<rack-canonical-host>, [">= 0"])
231
+ s.add_dependency(%q<rack-ssl-enforcer>, [">= 0"])
232
+ s.add_dependency(%q<rollbar>, [">= 0"])
233
+ s.add_dependency(%q<sass-rails>, ["~> 5.0"])
234
+ s.add_dependency(%q<sitemap_generator>, [">= 0"])
235
+ s.add_dependency(%q<slack-notifier>, [">= 0"])
236
+ s.add_dependency(%q<byebug>, [">= 0"])
237
+ s.add_dependency(%q<better_errors>, [">= 0"])
238
+ s.add_dependency(%q<binding_of_caller>, [">= 0"])
239
+ s.add_dependency(%q<bullet>, [">= 0"])
240
+ s.add_dependency(%q<semantic>, [">= 0"])
241
+ s.add_dependency(%q<web-console>, ["~> 2.0"])
242
+ s.add_dependency(%q<jeweler>, ["~> 2.3.2"])
243
+ end
244
+ end
245
+
data/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "mvpkit",
3
+ "private": true,
4
+ "version": "1.0.0",
5
+ "description": "= MVP",
6
+ "main": "index.js",
7
+ "directories": {
8
+ "test": "test"
9
+ },
10
+ "scripts": {
11
+ "postinstall": "rm -rf app"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/ian/minimum_viable_product.git"
16
+ },
17
+ "author": "",
18
+ "license": "ISC",
19
+ "bugs": {
20
+ "url": "https://github.com/ian/minimum_viable_product/issues"
21
+ },
22
+ "homepage": "https://github.com/ian/minimum_viable_product#readme",
23
+ "dependencies": {
24
+ "coffee-loader": "^0.7.2",
25
+ "coffee-script": "^1.10.0",
26
+ "css-loader": "^0.24.0",
27
+ "es6-loader": "^0.2.0",
28
+ "extract-text-webpack-plugin": "^1.0.1",
29
+ "file-loader": "^0.9.0",
30
+ "font-awesome": "^4.6.3",
31
+ "is": "^3.1.0",
32
+ "jquery": "^3.1.0",
33
+ "jquery-ujs": "^1.2.2",
34
+ "jquery.cookie": "^1.4.1",
35
+ "lodash": "^4.14.1",
36
+ "node-sass": "^3.8.0",
37
+ "resolve-url": "^0.2.1",
38
+ "resolve-url-loader": "^1.6.0",
39
+ "sass-loader": "^4.0.1",
40
+ "style-loader": "^0.13.1",
41
+ "webpack": "^1.13.2"
42
+ }
43
+ }