grape-gen 0.0.1

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 (62) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +31 -0
  6. data/Rakefile +2 -0
  7. data/bin/grape-gen +5 -0
  8. data/grape-scaffold.gemspec +24 -0
  9. data/lib/grape/generate/version.rb +5 -0
  10. data/lib/grape/generate.rb +91 -0
  11. data/template/Gemfile.tt +95 -0
  12. data/template/Guardfile +20 -0
  13. data/template/abilities/api_ability.rb +15 -0
  14. data/template/api/api_app.rb +85 -0
  15. data/template/api/mounts/auth.rb.tt +42 -0
  16. data/template/api/mounts/profile.rb.tt +24 -0
  17. data/template/config/application.yml.tt +33 -0
  18. data/template/config/boot.rb.tt +85 -0
  19. data/template/config/boot_faye.rb +22 -0
  20. data/template/config/boot_sidekiq.rb.tt +33 -0
  21. data/template/config/boot_spec.rb.tt +85 -0
  22. data/template/config/database.rb.tt +6 -0
  23. data/template/config/database.yml.tt +21 -0
  24. data/template/config/initializers/carrierwave.rb +3 -0
  25. data/template/config/initializers/core_ext.rb +14 -0
  26. data/template/config/initializers/em-patches/carrierwave.rb +13 -0
  27. data/template/config/initializers/em-patches/faye.rb +4 -0
  28. data/template/config/initializers/em-patches/lazy_evaluated_pool.rb +35 -0
  29. data/template/config/initializers/em-patches/mandrill.rb +45 -0
  30. data/template/config/initializers/em-patches/redis.rb +13 -0
  31. data/template/config/initializers/em-patches/redis_lazy_evaluated_pool.rb +19 -0
  32. data/template/config/initializers/em-patches/sidekiq.rb +46 -0
  33. data/template/config/initializers/em-patches/tire.rb +8 -0
  34. data/template/config/initializers/faye.rb +3 -0
  35. data/template/config/initializers/grape.rb +11 -0
  36. data/template/config/initializers/logging.rb +38 -0
  37. data/template/config/initializers/mandrill.rb +1 -0
  38. data/template/config/initializers/patches/redis_namespace.rb +96 -0
  39. data/template/config/initializers/sidekiq.rb +15 -0
  40. data/template/config/initializers/tire.rb +6 -0
  41. data/template/config/initializers/workflow.rb +31 -0
  42. data/template/config/logging.yml.tt +39 -0
  43. data/template/config/settings.rb +24 -0
  44. data/template/config/sidekiq.yml.tt +22 -0
  45. data/template/config.ru.tt +8 -0
  46. data/template/faye.ru +55 -0
  47. data/template/jobs/pong_time.rb +11 -0
  48. data/template/lib/faye_auth_extension.rb +61 -0
  49. data/template/lib/faye_publisher.rb +63 -0
  50. data/template/lib/mongoid/tire_plugin.rb +17 -0
  51. data/template/lib/warden/token_strategy.rb +18 -0
  52. data/template/mailers/registration_mailer.rb +17 -0
  53. data/template/models/user.rb.tt +75 -0
  54. data/template/public/faye.html +36 -0
  55. data/template/search_indexes/search_index.rb +60 -0
  56. data/template/search_indexes/user_index.rb +20 -0
  57. data/template/spec/api/mounts/auth_spec.rb.tt +37 -0
  58. data/template/spec/factories/user.rb +8 -0
  59. data/template/spec/spec_helper.rb.tt +132 -0
  60. data/template/uploaders/avatar_uploader.rb +23 -0
  61. data/template/views/v1/user/profile.json.jbuilder.tt +4 -0
  62. metadata +147 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d7f28bfcaadc1cb321a828f7c4894eff2962b043
4
+ data.tar.gz: b33f27008effe93350e091eb781156bbecb5f426
5
+ SHA512:
6
+ metadata.gz: f8140102fd00109d2e5f58084e38ed08c70cea5d5df9b7b0d61e80e7bca6b652132f49b978247766681d8ca90988d28a53c73999e09a107cb655dd420baad188
7
+ data.tar.gz: 5f49879d8caae93ffbcfa9c25ed5d0eb2b4b43b72b5969bf036e38ba66de434bd84183951ec0a24431a40ddf5736073c838690f97eb6f8067d99379d6f18afb2
data/.gitignore ADDED
@@ -0,0 +1,16 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ .idea
16
+ .ruby-
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in grape-scaffold.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 AMar4enko
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # Grape::Scaffold
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'grape-scaffold'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install grape-scaffold
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Contributing
26
+
27
+ 1. Fork it ( https://github.com/[my-github-username]/grape-scaffold/fork )
28
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
29
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
30
+ 4. Push to the branch (`git push origin my-new-feature`)
31
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/bin/grape-gen ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'grape/generate'
4
+
5
+ Grape::Generate::CLI.start(ARGV)
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'grape/generate/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'grape-gen'
8
+ spec.version = Grape::Generate::VERSION
9
+ spec.authors = ['AMar4enko']
10
+ spec.email = ['amar4enko@gmail.com']
11
+ spec.summary = %q{Grape-powered rack application generator with batteries included}
12
+ spec.homepage = 'https://github.com/AlexYankee/grape-gen'
13
+ spec.license = 'MIT'
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ['lib']
19
+
20
+ spec.add_runtime_dependency 'thor', '~> 0.19.1'
21
+
22
+ spec.add_development_dependency 'bundler', '~> 1.7'
23
+ spec.add_development_dependency 'rake', '~> 10.0'
24
+ end
@@ -0,0 +1,5 @@
1
+ module Grape
2
+ module Generate
3
+ VERSION = '0.0.1'
4
+ end
5
+ end
@@ -0,0 +1,91 @@
1
+ require 'grape/generate/version'
2
+ require 'bundler/vendor/thor'
3
+
4
+ module Grape
5
+ module Generate
6
+ BATTERIES = %w{sidekiq carrierwave mandrill es faye}
7
+ class CLI < Thor
8
+ include Thor::Actions
9
+
10
+ source_root File.expand_path('../../template', File.dirname(__FILE__))
11
+
12
+ desc 'app APP_NAME', 'Guides you through Grape app scaffolding process'
13
+ option :path
14
+ option :orm, default: 'mongoid'
15
+ option :batteries,
16
+ type: :array,
17
+ default: Generate::BATTERIES,
18
+ desc: 'Batteries to include'
19
+
20
+ option :'use-grape-rackbuilder', type: :boolean, default: true
21
+
22
+ attr_accessor *Generate::BATTERIES
23
+
24
+ def app(app_name)
25
+ Generate::BATTERIES.each do |v|
26
+ send("#{v}=", options[:batteries].include?(v))
27
+ end
28
+
29
+ @app_name = app_name
30
+
31
+ @orm = options[:orm]
32
+ @dev_reload = options[:'use-grape-rackbuilder']
33
+
34
+ begin
35
+ FileUtils.rm_r(options[:path] || app_name.downcase)
36
+ rescue
37
+ end
38
+
39
+ self.destination_root = options[:path] || app_name.downcase
40
+ @redis = true
41
+ @faye_secret = Digest::MD5.hexdigest('%s-%s'%[app_name,Time.now.to_s])
42
+
43
+ directory './', exclude_pattern: /(sidekiq|carrierwave|faye|mandrill|tire|elastic_search|search_indexes|mailers|uploaders|jobs)/
44
+
45
+ directory './log'
46
+ directory './tmp/pids'
47
+
48
+ @redis ||= @sidekiq || @faye
49
+
50
+ if @faye
51
+ template './faye.ru'
52
+ copy_file './config/boot_faye.rb'
53
+ copy_file './config/initializers/faye.rb'
54
+ copy_file './config/initializers/em-patches/faye.rb'
55
+ copy_file './public/faye.html'
56
+ copy_file './lib/faye_auth_extension.rb'
57
+ copy_file './lib/faye_publisher.rb'
58
+ end
59
+
60
+ if @sidekiq
61
+ if @faye
62
+ copy_file './jobs/pong_time.rb'
63
+ end
64
+ copy_file './config/initializers/sidekiq.rb'
65
+ copy_file './config/initializers/em-patches/sidekiq.rb'
66
+ template './config/sidekiq.yml'
67
+ template './config/boot_sidekiq.rb'
68
+ end
69
+
70
+ if @mandrill
71
+ copy_file './config/initializers/mandrill.rb'
72
+ copy_file './config/initializers/em-patches/mandrill.rb'
73
+ directory './mailers'
74
+ end
75
+
76
+ if @es
77
+ template './config/initializers/tire.rb'
78
+ copy_file './config/initializers/em-patches/tire.rb'
79
+ copy_file './lib/mongoid/tire_plugin.rb'
80
+ directory './search_indexes'
81
+ end
82
+
83
+ if @carrierwave
84
+ copy_file './config/initializers/em-patches/carrierwave.rb'
85
+ copy_file './config/initializers/carrierwave.rb'
86
+ directory './uploaders'
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,95 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Web frameworks related
4
+ group :framework do
5
+ gem 'grape', '~> 0.10'
6
+ <%- if @dev_reload -%>
7
+ gem 'grape-reload', github: 'AlexYankee/grape-reload'
8
+ <%- end -%>
9
+ gem 'warden', '~> 1.2.3'
10
+ gem 'grape-jbuilder', '~> 0.2.0'
11
+ gem 'jbuilder', '~> 2.2.5'
12
+ gem 'rack-cors', '~> 0.2.9'
13
+ end
14
+ # ORM
15
+ group :db do
16
+ <%- case @orm
17
+ when 'mongoid' -%>
18
+ gem 'mongoid', '~> 4.0.0'
19
+ gem 'mongoid-paranoia', '~> 1.0.0'
20
+ <%- if @carrierwave -%>
21
+ gem 'carrierwave-mongoid', '~> 0.7.1'
22
+ <%- end -%>
23
+ <%- else -%>
24
+ <%- end -%>
25
+ <%- if @carrierwave -%>
26
+ gem 'carrierwave', '~> 0.10.0'
27
+ gem 'mini_magick', '~> 4.0.2'
28
+ <%- end -%>
29
+ gem 'workflow', '~> 1.2.0'
30
+ end
31
+ <% if @sidekiq -%>
32
+ # Background job
33
+ group :sidekiq do
34
+ gem 'sidekiq', '~> 3.2.6'
35
+ gem 'sidekiq-middleware', '~> 0.3.0'
36
+ gem 'sidekiq-scheduler', github: 'preplay/sidekiq-scheduler', ref: '4b8abd1f256ff3e577a666c181437bd5f4590438'
37
+ end
38
+ <% end -%>
39
+ <%- if @mandrill -%>
40
+ # Mailing
41
+ group :mailer do
42
+ gem 'mandrill_mailer', '~> 0.5.1'
43
+ end
44
+ <%- end -%>
45
+ # Utils
46
+ group :utils do
47
+ gem 'settingslogic', '~> 2.0.9'
48
+ gem 'logging', '~> 1.8.2'
49
+ gem 'bcrypt', '~> 3.1.7'
50
+ gem 'cancancan', '~> 1.9.2'
51
+ gem 'hashie', '~> 3.3.2'
52
+ gem 'activesupport', '~> 4.2'
53
+ gem 'multi_json', '~> 1.10.1'
54
+ gem 'oj', '~> 2.11.2'
55
+ end
56
+ <%- if @es -%>
57
+ # ElasticSearch
58
+ group :elastic_search do
59
+ gem 'tire', '~> 0.6.2'
60
+ gem 'faraday', '~> 0.9.1'
61
+ end
62
+ <%- end -%>
63
+ group :eventmachine do
64
+ <%- if @redis -%>
65
+ gem 'em-hiredis'
66
+ <%- end -%>
67
+ gem 'em-synchrony', github: 'igrigorik/em-synchrony'
68
+ end
69
+ <%- if @faye -%>
70
+ group :faye do
71
+ gem 'faye', '~> 1.0.1'
72
+ <%- if @redis -%>
73
+ gem 'faye-redis'
74
+ <%- end -%>
75
+ end
76
+ <%- end -%>
77
+ # Server
78
+ group :rack_server do
79
+ gem 'thin', '~> 1.6.3'
80
+ gem 'rake', '~> 10.3.2'
81
+ gem 'rack-fiber_pool', '~> 0.9.1'
82
+ end
83
+ group :test do
84
+ gem 'rack-test', '~> 0.6.3'
85
+ gem 'database_cleaner', '~> 1.3.0'
86
+ gem 'faker', '~> 1.4.3'
87
+ gem 'factory_girl', '~> 4.5.0'
88
+ gem 'guard', '~> 2.6.1'
89
+ gem 'guard-spork', '~> 1.5.1'
90
+ gem 'guard-rspec', '~> 4.3.1'
91
+ gem 'rspec', '~> 3.1.0'
92
+ gem 'spork', github: 'manafire/spork', branch: 'rspec3_runner'
93
+ gem 'terminal-notifier-guard', '~> 1.5.3'
94
+ gem 'rspec_api_documentation', '~> 4.3.0'
95
+ end
@@ -0,0 +1,20 @@
1
+ notification :terminal_notifier
2
+
3
+ guard 'spork', rspec_env: { 'RACK_ENV' => 'test' } do
4
+ watch('config/.+\.rb')
5
+ watch('Gemfile.lock')
6
+ watch(%r{^spec/factories/.+\.rb$})
7
+ watch('spec/spec_helper.rb') { :rspec }
8
+ end
9
+
10
+ guard :rspec, cmd: 'bundle exec rspec --drb --color --format progress' do
11
+ watch(%r{^spec/.+_spec\.rb$})
12
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
13
+ watch('spec/spec_helper.rb') { "spec" }
14
+
15
+ watch(%r{^api/mounts/(.+)\.rb$}) { |m| "spec/api/mounts/#{m[1]}_spec.rb" }
16
+ watch(%r{^models/(.+)\.rb$}) { |m| "spec/models/#{m[1]}_spec.rb" }
17
+ watch(%r{^abilities/(.+)\.rb$}) { |m| "spec/abilities/#{m[1]}_spec.rb" }
18
+ watch(%r{^views/(v[^/]+)/\.rb$}) { |m| "spec/api/**/*.rb" }
19
+ end
20
+
@@ -0,0 +1,15 @@
1
+ class ApiAbility
2
+ include CanCan::Ability
3
+ def initialize(user)
4
+ return unless user
5
+ alias_action :view, :create, :update, :delete, to: :crud
6
+
7
+ can :update_profile, user
8
+ can :view, Models::User
9
+ can :update, Models::User, { id: user.id }
10
+
11
+ if user.role == :admin
12
+ can :crud, :all
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,85 @@
1
+ module API
2
+ class Application < Grape::API
3
+ format :json
4
+ formatter :json, Grape::Formatter::Jbuilder
5
+
6
+ logger Logging.logger[:api]
7
+
8
+ helpers do
9
+ def logger; API::Application.logger end
10
+
11
+ def ability
12
+ @_ability ||= ApiAbility.new(current_user)
13
+ end
14
+
15
+ def authorize!(*args)
16
+ error! :unauthorized, 401 unless ability.can?(*args)
17
+ end
18
+ def current_user
19
+ warden.authenticate(:access_token)
20
+ end
21
+
22
+ def warden; env['warden'] end
23
+
24
+ def error!(msg, error = 400)
25
+ super(msg, error, header)
26
+ end
27
+
28
+ def set_locals(locals_hash)
29
+ env['api.tilt.locals'] = locals_hash
30
+ end
31
+
32
+ def add_locals(locals_hash)
33
+ env['api.tilt.locals'] = (env['api.tilt.locals'] || {}).merge(locals_hash)
34
+ end
35
+
36
+ def redis
37
+ REDIS_CONNECTION
38
+ end
39
+ end
40
+
41
+ route [:get, :post, :put, :patch], :unauthenticated do
42
+ error! :unauthenticated, 401
43
+ end
44
+
45
+ before do
46
+ header('Access-Control-Allow-Origin', '*')
47
+ header('Access-Control-Allow-Methods', '*')
48
+ header('Access-Control-Allow-Headers', 'Content-Type,Accept-Version,X-Authorize')
49
+ end
50
+
51
+ rescue_from Mongoid::Errors::DocumentNotFound do
52
+ Rack::Response.new(['Not found'], 404, env['api.endpoint'].header).finish
53
+ end
54
+
55
+ rescue_from :all do |exception|
56
+ API::Application.logger.error exception
57
+ Rack::Response.new(['Error'], 500, env['api.endpoint'].header).finish
58
+ end
59
+
60
+ rescue_from Grape::Exceptions::ValidationErrors do |exception|
61
+ body = [MultiJson.dump(validation: exception.errors.map{|params, errors| Hash[params.zip([errors.first.to_s] * params.length)]}.inject({},&:merge))]
62
+ Rack::Response.new(body, 400, env['api.endpoint'].header).finish
63
+ end
64
+
65
+ rescue_from Mongoid::Errors::Validations do |exception|
66
+ body = [MultiJson.dump(validation: exception.document.errors.messages.map{|attr, errors| {attr => errors.first}}.inject({},&:merge))]
67
+ Rack::Response.new(body, 400, env['api.endpoint'].header).finish
68
+ end
69
+
70
+ mount Mounts::Auth => '/auth'
71
+ mount Mounts::Profile => '/profile'
72
+
73
+ get :ping do
74
+ {pong: true}
75
+ end
76
+
77
+ post :redis_write do
78
+ {result: redis.set('redis_key', Time.now.to_s)}
79
+ end
80
+
81
+ get :redis_read do
82
+ {result: redis.get('redis_key')}
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,42 @@
1
+ module API
2
+ module Mounts
3
+ class Auth < Grape::API
4
+ params do
5
+ requires :display_name, type: String
6
+ requires :email, type: String
7
+ end
8
+ post :register do
9
+ params[:email] = params[:email].downcase
10
+ user = Models::User.where(email: params[:email]).first
11
+ if user
12
+ error! :waiting_for_approvement if user.registered?
13
+ error! :already_exists, 400
14
+ end
15
+
16
+ user = Models::User.register(declared(params, include_missing: false))
17
+
18
+ <%- if @mandrill -%>
19
+ begin
20
+ RegistrationMailer.registered(user).deliver
21
+ rescue
22
+ logger.error $!
23
+ end
24
+ <%- end -%>
25
+ end
26
+
27
+ params do
28
+ requires :email, type: String
29
+ requires :email_approvement_code, type: String
30
+ end
31
+ post :approve_email, jbuilder: 'v1/user/profile.json' do
32
+ @user = Models::User.find_by(email: params[:email].downcase, email_approvement_code: params[:email_approvement_code])
33
+ @user.email_approved!
34
+ @user.save
35
+ header['X-Authorize'] = @user.token
36
+ <% if @faye %>
37
+ FayePublisher.publish('/user/registered', {display_name: @user.display_name})
38
+ <% end %>
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,24 @@
1
+ module API
2
+ module Mounts
3
+ class Profile < Grape::API
4
+ before {
5
+ @user = current_user
6
+ authorize! :update_profile, @user
7
+ }
8
+ params do
9
+ optional :display_name
10
+ <% if @carrierwave %>
11
+ optional :avatar
12
+ optional :remove_avatar
13
+ mutually_exclusive :avatar, :remove_avatar
14
+ <% end %>
15
+ end
16
+ put jbuilder: 'v1/user/profile.json' do
17
+ declared(params, include_missing: false).each {|k,v| @user.send("#{k}=", v) }
18
+ @user.save!
19
+ end
20
+
21
+ get jbuilder: 'v1/user/profile.json'
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,33 @@
1
+ development: &dev
2
+ api_root: http://localhost:9292/api
3
+ <% if @redis -%>
4
+ redis:
5
+ url: redis://localhost:6379/0
6
+ size: 20
7
+ <% end -%>
8
+ <% if @mandrill -%>
9
+ mandrill:
10
+ api_key: your_mandrill_key
11
+ <% end -%>
12
+ <% if @es -%>
13
+ elasticsearch:
14
+ url: http://localhost:9200
15
+ <% end -%>
16
+ <% if @faye -%>
17
+ faye:
18
+ server_secret: <%= @faye_secret %>
19
+ redis:
20
+ url: redis://localhost:6379/0
21
+ namespace: faye
22
+ size: 20 # Pool size
23
+ <% end -%>
24
+ <% if @sidekiq %>
25
+ sidekiq:
26
+ redis:
27
+ url: redis://localhost:6379/0
28
+ size: 20 # Pool size
29
+ <% end %>
30
+
31
+ production: *dev
32
+ test:
33
+ api_root: http://localhost/api
@@ -0,0 +1,85 @@
1
+ # Defines our constants
2
+ RACK_ENV = ENV['RACK_ENV'] || 'development' unless defined?(RACK_ENV)
3
+ APP_ROOT = File.expand_path('../..', __FILE__) unless defined?(APP_ROOT)
4
+
5
+ # Load our dependencies
6
+ require 'rubygems' unless defined?(Gem)
7
+ require 'bundler/setup'
8
+ require 'yaml'
9
+
10
+ # Load initializers
11
+ Bundler.require(
12
+ :framework,
13
+ :db,
14
+ <% if @sidekiq -%>
15
+ :sidekiq,
16
+ <% end -%>
17
+ <% if @mandrill -%>
18
+ :mailer,
19
+ <% end -%>
20
+ :utils,
21
+ <% if @es -%>
22
+ :elastic_search,
23
+ <% end -%>
24
+ :eventmachine,
25
+ :rack_server,
26
+ RACK_ENV
27
+ )
28
+
29
+ require_relative 'settings'
30
+
31
+ ApplicationSettings.source File.expand_path('config/application.yml', APP_ROOT)
32
+ ApplicationSettings.root = APP_ROOT
33
+
34
+ require_relative 'database'
35
+
36
+ Dir[ApplicationSettings.root('config/initializers/em-patches/*.rb')].each {|initializer| require initializer}
37
+ Dir[ApplicationSettings.root('config/initializers/*.rb')].each {|initializer| require initializer}
38
+
39
+
40
+ REDIS_CONNECTION = RedisLazyEvaluatedPool.pool_with_config(ApplicationSettings.redis)
41
+
42
+ <% if @dev_reload %>
43
+ RACK_APPLICATION = Grape::RackBuilder.setup do
44
+ %w{api models lib uploaders models abilities jobs search_indexes mailers}.each do |path|
45
+ add_source_path ApplicationSettings.root("#{path}/**/*.rb")
46
+ add_source_path ApplicationSettings.root("#{path}/*.rb")
47
+ end
48
+
49
+ use Warden::Manager do |config|
50
+ config.strategies.add(:access_token, TokenStrategy)
51
+ config.default_strategies :access_token
52
+ config.failure_app = API::Application
53
+ config.intercept_401 = false
54
+ end
55
+
56
+ use Rack::Config do |env|
57
+ env['api.tilt.root'] = ApplicationSettings.root('views')
58
+ end
59
+
60
+ mount 'API::Application', to: '/api'
61
+
62
+ logger Logging.logger[:rackbuilder]
63
+ end.boot!.application
64
+ <% else %>
65
+ %w{lib models uploaders models abilities jobs search_indexes mailers api}.each do |path|
66
+ Dir[ApplicationSettings.root("#{path}/**/*.rb")].each {|f| require f}
67
+ end
68
+
69
+ RACK_APPLICATION = Rack::Builder.new do
70
+ use Warden::Manager do |config|
71
+ config.strategies.add(:access_token, TokenStrategy)
72
+ config.default_strategies :access_token
73
+ config.failure_app = API::Application
74
+ config.intercept_401 = false
75
+ end
76
+
77
+ use Rack::Config do |env|
78
+ env['api.tilt.root'] = ApplicationSettings.root('views')
79
+ end
80
+
81
+ map '/api' do
82
+ run API::Application
83
+ end
84
+ end
85
+ <% end %>
@@ -0,0 +1,22 @@
1
+ # Defines our constants
2
+ RACK_ENV = :production
3
+ APP_ROOT = File.expand_path('../..', __FILE__) unless defined?(APP_ROOT)
4
+
5
+ # Load our dependencies
6
+ require 'rubygems' unless defined?(Gem)
7
+ require 'bundler/setup'
8
+ # Load initializers
9
+ Bundler.require(:faye, RACK_ENV)
10
+ require 'warden'
11
+ require 'active_support/core_ext/hash/keys'
12
+ require 'hashie/mash'
13
+ require 'redis-namespace'
14
+ require_relative 'initializers/patches/redis_namespace'
15
+ require_relative 'settings'
16
+
17
+ ApplicationSettings.source File.expand_path('config/application.yml', APP_ROOT)
18
+ ApplicationSettings.root = APP_ROOT
19
+
20
+ require_relative 'initializers/logging'
21
+ require_relative '../lib/faye_auth_extension'
22
+ require_relative '../lib/faye_publisher'
@@ -0,0 +1,33 @@
1
+ # Load our dependencies
2
+ require 'rubygems' unless defined?(Gem)
3
+ require 'bundler/setup'
4
+
5
+ Bundler.require(:utils, :db)
6
+ Bundler.require(
7
+ :sidekiq,
8
+ <% if @mandrill -%>
9
+ :mailer,
10
+ <% end -%>
11
+ <% if @es -%>
12
+ :elastic_search,
13
+ <% end -%>
14
+ )
15
+
16
+ # Defines our constants
17
+ RACK_ENV = Sidekiq.options[:environment] || ENV['RACK_ENV'] || :development
18
+ APP_ROOT = File.expand_path('../..', __FILE__) unless defined?(APP_ROOT)
19
+ Bundler.require(RACK_ENV)
20
+
21
+ require 'warden'
22
+
23
+ require_relative 'settings'
24
+
25
+ ApplicationSettings.source File.expand_path('config/application.yml', APP_ROOT)
26
+ ApplicationSettings.root = APP_ROOT
27
+
28
+ # Load initializers
29
+ Dir[ApplicationSettings.root('config/initializers/*.rb')].each {|file_name| require file_name}
30
+
31
+ %w{lib jobs uploaders models search_indexes}.each do |path|
32
+ Dir[ApplicationSettings.root("#{path}/**/*.rb")].each {|f| require f}
33
+ end