drezyna 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2ff7284de6f044ba97f47d0ff4fec08c2faa50d7
4
+ data.tar.gz: 69acf341e0b94ebfa1d16e71147989ec3158fad1
5
+ SHA512:
6
+ metadata.gz: 7eb5b830fd071306adc84dab33508da6022883da993b434a33ff3e9a32823dd975c9ae88968fa026867aee4626c1ca8f414e14b05e7ed078c0c03cfb9842df1a
7
+ data.tar.gz: d8c2ac3e2ecdafef9877fbd82f8955c719265d38c6495d3688bcbe46bd01ec8f6f189e128a7aa0f945bb404b128d23375060858d9d3ca76abc8973365042477f
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.2
4
+ before_install: gem install bundler -v 1.10.6
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in drezyna.gemspec
4
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Zaiste
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,22 @@
1
+ # Drezyna
2
+
3
+ Drezyna is a simple Rails application template used at Nukomeet.
4
+
5
+ ![Drezyna](http://nukomeet.s3.amazonaws.com/logo.svg)
6
+
7
+ ## Installation
8
+
9
+ Install it as:
10
+
11
+ $ gem install drezyna
12
+
13
+ ## Usage
14
+
15
+ drezyna <your name>
16
+
17
+ ## Gems
18
+
19
+ ## License
20
+
21
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
22
+
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+
5
+ source_path = (Pathname.new(__FILE__).dirname + '../lib').expand_path
6
+ $LOAD_PATH << source_path
7
+
8
+ require 'drezyna'
9
+
10
+ templates_root = File.expand_path(File.join('..', 'templates'), File.dirname(__FILE__))
11
+
12
+ Drezyna::AppGenerator.source_root templates_root
13
+ Drezyna::AppGenerator.source_paths << Rails::Generators::AppGenerator.source_root << templates_root
14
+
15
+ Drezyna::AppGenerator.start
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'drezyna/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "drezyna"
8
+ spec.version = Drezyna::VERSION
9
+ spec.authors = ["Zaiste"]
10
+ spec.email = ["oh@zaiste.net"]
11
+
12
+ spec.summary = %q{Rails application template by Nukomeet}
13
+ spec.description = %q{Rails application template by Nukomeet}
14
+ spec.homepage = "http://github.com/nukomeet/drezyna"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.executables = ["drezyna"]
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.10"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ end
@@ -0,0 +1,7 @@
1
+ require 'drezyna/version'
2
+ require 'drezyna/generators/app_generator'
3
+ require 'drezyna/action_helpers'
4
+ require 'drezyna/app_builder'
5
+
6
+ module Drezyna
7
+ end
@@ -0,0 +1,19 @@
1
+ module Drezyna
2
+ module ActionHelpers
3
+
4
+ def configure_environment(rails_env, config)
5
+ inject_into_file("config/environments/#{rails_env}.rb",
6
+ "\n\n #{config}", before: "\nend")
7
+ end
8
+
9
+ def replace_in_file(relative_path, find, replace)
10
+ path = File.join(destination_root, relative_path)
11
+ contents = IO.read(path)
12
+ unless contents.gsub!(find, replace)
13
+ raise "#{find.inspect} not found in #{relative_path}"
14
+ end
15
+ File.open(path, "w") { |file| file.write(contents) }
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,103 @@
1
+ module Drezyna
2
+ class AppBuilder < Rails::AppBuilder
3
+
4
+ include Drezyna::ActionHelpers
5
+
6
+ def readme
7
+ template 'README.md.erb', 'README.md'
8
+ end
9
+
10
+ def gitignore
11
+ template 'gitignore.erb', '.gitignore'
12
+ end
13
+
14
+ def gemfile
15
+ template 'Gemfile.erb', 'Gemfile'
16
+ end
17
+
18
+ def use_postgres_config_template
19
+ template 'database.yml.erb', 'config/database.yml', force: true
20
+ template 'database.yml.erb', 'config/database.yml.example'
21
+ end
22
+
23
+ def create_partials_directory
24
+ empty_directory 'app/views/shared'
25
+ end
26
+
27
+ def setup_stylesheets
28
+ remove_file 'app/assets/stylesheets/application.css'
29
+ copy_file 'application.scss', 'app/assets/stylesheets/application.scss'
30
+ copy_file '_navigation.scss', 'app/assets/stylesheets/_navigation.scss'
31
+ end
32
+
33
+ def setup_javascripts
34
+ end
35
+
36
+ def setup_application
37
+ remove_file 'app/controllers/application_controller.rb'
38
+ copy_file 'application_controller.rb', 'app/controllers/application_controller.rb'
39
+ copy_file 'registrations_controller.rb', 'app/controllers/registrations_controller.rb'
40
+ copy_file 'users_controller.rb', 'app/controllers/users_controller.rb'
41
+ end
42
+
43
+ def create_application_layout
44
+ remove_file 'app/views/layouts/application.html.erb'
45
+ copy_file 'layout.html.erb', 'app/views/layouts/application.html.erb'
46
+ copy_file '_navigation.html.erb', 'app/views/shared/_navigation.html.erb'
47
+ copy_file '_messages.html.erb', 'app/views/shared/_messages.html.erb'
48
+ end
49
+
50
+ def create_pryrc
51
+ copy_file 'pryrc.rb', '.pryrc'
52
+ end
53
+
54
+ def create_database
55
+ bundle_command 'exec rake db:create'
56
+ end
57
+
58
+ def setup_routes
59
+ copy_file 'routes.rb.erb', 'config/routes.rb', force: true
60
+ end
61
+
62
+ def raise_on_unpermitted_parameters
63
+ configure_environment 'development',
64
+ 'config.action_controller.action_on_unpermitted_parameters = :raise'
65
+ end
66
+
67
+ def configure_generators
68
+ config = <<-RUBY
69
+ config.generators do |generate|
70
+ generate.helper false
71
+ generate.javascript_engine false
72
+ generate.request_specs false
73
+ generate.routing_specs false
74
+ generate.stylesheets false
75
+ generate.test_framework :rspec
76
+ generate.view_specs false
77
+ end
78
+ RUBY
79
+
80
+ inject_into_class 'config/application.rb', 'Application', config
81
+ end
82
+
83
+ def configure_i18n_logger
84
+ configure_environment 'development',
85
+ "# I18n debug\n I18nLogger = ActiveSupport::" \
86
+ "Logger.new(Rails.root.join('log/i18n.log'))"
87
+ end
88
+
89
+ def setup_devise
90
+ generate 'devise:install'
91
+ generate 'controller', 'home index'
92
+ generate 'devise', options[:devise_model]
93
+ end
94
+
95
+ def setup_simple_form
96
+ generate 'simple_form:install'
97
+ end
98
+
99
+ def init_git
100
+ run 'git init'
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,60 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/rails/app/app_generator'
3
+
4
+ module Drezyna
5
+ class AppGenerator < Rails::Generators::AppGenerator
6
+ class_option :database, type: :string, aliases: "-d", default: "postgresql",
7
+ desc: "Configure for selected database (options: #{DATABASES.join("/")})"
8
+
9
+ class_option :devise_model, type: :string, aliases: '-M', default: 'User',
10
+ desc: 'Name of devise model to generate'
11
+
12
+ class_option :skip_test_unit, type: :boolean, aliases: '-T', default: true,
13
+ desc: 'Skip Test::Unit files'
14
+
15
+ class_option :skip_bundle, type: :boolean, aliases: "-B", default: true,
16
+ desc: "Don't run bundle install"
17
+
18
+ def finish_template
19
+ invoke :custom
20
+ super
21
+ end
22
+
23
+ def custom
24
+ say 'Setting up database'
25
+ build :use_postgres_config_template
26
+ build :create_database
27
+
28
+ say 'Setting up the development environment'
29
+ build :configure_generators
30
+ build :raise_on_unpermitted_parameters
31
+ build :configure_i18n_logger
32
+
33
+ build :create_partials_directory
34
+ build :create_application_layout
35
+ build :create_pryrc
36
+
37
+ build :setup_application
38
+
39
+ build :setup_stylesheets
40
+
41
+ say 'Setting up devise'
42
+ build :setup_devise
43
+
44
+ say 'Setting up SimpleForm'
45
+ build :setup_simple_form
46
+
47
+ build :setup_routes
48
+
49
+ say 'Initializing git'
50
+ build :setup_gitignore
51
+ build :init_git
52
+ end
53
+
54
+ protected
55
+
56
+ def get_builder_class
57
+ Drezyna::AppBuilder
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,3 @@
1
+ module Drezyna
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,51 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rails', '4.2.4'
4
+ gem 'pg'
5
+
6
+ gem 'sass-rails', '~> 5.0'
7
+ gem 'uglifier', '>= 1.3.0'
8
+ gem 'jquery-rails'
9
+ gem 'turbolinks'
10
+ gem 'jbuilder', '~> 2.0'
11
+ gem 'sdoc', '~> 0.4.0', group: :doc
12
+
13
+ gem 'devise'
14
+ gem 'pundit'
15
+ gem 'simple_form'
16
+ gem 'flutie'
17
+
18
+ gem 'bourbon'
19
+ gem 'neat'
20
+
21
+
22
+ group :development do
23
+ gem 'thin'
24
+ gem 'foreman'
25
+ gem 'pry-rails'
26
+
27
+ gem 'better_errors'
28
+ gem 'binding_of_caller'
29
+ gem 'quiet_assets'
30
+
31
+ gem 'brakeman', require: false
32
+ gem 'rubocop', require: false
33
+
34
+ gem 'awesome_print'
35
+ gem 'i18n-debug'
36
+
37
+ gem 'spring'
38
+ gem 'spring-commands-rspec'
39
+ end
40
+
41
+ group :development, :test do
42
+ gem 'web-console', '~> 2.0'
43
+ gem 'spring'
44
+
45
+ gem 'pry-byebug'
46
+ gem 'pry-doc'
47
+ end
48
+
49
+ group :production do
50
+ gem 'newrelic_rpm'
51
+ end
@@ -0,0 +1 @@
1
+ web: bundle exec rails server -p $PORT
@@ -0,0 +1,3 @@
1
+ # <%= app_name.titleize %>
2
+
3
+ Nukomeet 2015
File without changes
@@ -0,0 +1,43 @@
1
+ <header class="navigation" role="banner">
2
+ <div class="navigation-wrapper">
3
+ <a href="javascript:void(0)" class="logo">
4
+ <img src="https://raw.githubusercontent.com/thoughtbot/refills/master/source/images/placeholder_logo_1.png" alt="Logo Image">
5
+ </a>
6
+ <a href="javascript:void(0)" class="navigation-menu-button" id="js-mobile-menu">MENU</a>
7
+ <nav role="navigation">
8
+ <ul id="js-navigation-menu" class="navigation-menu show">
9
+ <li class="nav-link"><a href="javascript:void(0)">Products</a></li>
10
+ <li class="nav-link"><a href="javascript:void(0)">About Us</a></li>
11
+ <li class="nav-link"><a href="javascript:void(0)">Contact</a></li>
12
+ <li class="nav-link more"><a href="javascript:void(0)">More</a>
13
+ <ul class="submenu">
14
+ <li><a href="javascript:void(0)">Submenu Item</a></li>
15
+ <li><a href="javascript:void(0)">Another Item</a></li>
16
+ <li class="more"><a href="javascript:void(0)">Item with submenu</a>
17
+ <ul class="submenu">
18
+ <li><a href="javascript:void(0)">Sub-submenu Item</a></li>
19
+ <li><a href="javascript:void(0)">Another Item</a></li>
20
+ </ul>
21
+ </li>
22
+ <li class="more"><a href="javascript:void(0)">Another submenu</a>
23
+ <ul class="submenu">
24
+ <li><a href="javascript:void(0)">Sub-submenu</a></li>
25
+ <li><a href="javascript:void(0)">An Item</a></li>
26
+ </ul>
27
+ </li>
28
+ </ul>
29
+ </li>
30
+ </ul>
31
+ </nav>
32
+ <div class="navigation-tools">
33
+ <div class="search-bar">
34
+ <form role="search">
35
+ <input type="search" placeholder="Enter Search" />
36
+ <button type="submit">
37
+ <img src="https://raw.githubusercontent.com/thoughtbot/refills/master/source/images/search-icon.png" alt="Search Icon">
38
+ </button>
39
+ </form>
40
+ </div>
41
+ </div>
42
+ </div>
43
+ </header>
@@ -0,0 +1,333 @@
1
+ header.navigation {
2
+ $base-border-color: gainsboro !default;
3
+ $base-border-radius: 3px !default;
4
+ $action-color: #477DCA !default;
5
+ $dark-gray: #333 !default;
6
+ $large-screen: em(860) !default;
7
+ $navigation-padding: 1em;
8
+ $navigation-background: $dark-gray;
9
+ $navigation-color: transparentize(white, 0.3);
10
+ $navigation-color-hover: white;
11
+ $navigation-height: 60px;
12
+ $navigation-nav-button-background: $action-color;
13
+ $navigation-nav-button-background-hover: lighten($navigation-background, 10%);
14
+ $navigation-nav-button-border: 1px solid lighten($navigation-nav-button-background, 20%);
15
+ $navigation-search-background: lighten($navigation-background, 5);
16
+ $navigation-search-border: 1px solid darken($navigation-background, 5);
17
+ $navigation-active-link-color: transparentize(white, 0.5);
18
+ $navigation-submenu-padding: 1em;
19
+ $navigation-submenu-width: 12em;
20
+ $horizontal-bar-mode: $large-screen;
21
+
22
+ background-color: $navigation-background;
23
+ border-bottom: 1px solid darken($navigation-background, 10);
24
+ min-height: $navigation-height;
25
+ width: 100%;
26
+ z-index: 999;
27
+
28
+ .navigation-wrapper {
29
+ @include clearfix;
30
+ @include outer-container;
31
+ position: relative;
32
+ z-index: 9999;
33
+ }
34
+
35
+ .logo {
36
+ float: left;
37
+ max-height: $navigation-height;
38
+ padding-left: $navigation-padding;
39
+ padding-right: 2em;
40
+
41
+ img {
42
+ max-height: $navigation-height;
43
+ padding: 0.8em 0;
44
+ }
45
+ }
46
+
47
+ // Mobile view
48
+
49
+ .navigation-menu-button {
50
+ color: $navigation-color;
51
+ display: block;
52
+ float: right;
53
+ line-height: $navigation-height;
54
+ margin: 0;
55
+ padding-right: 1em;
56
+ text-decoration: none;
57
+ text-transform: uppercase;
58
+
59
+ @include media ($horizontal-bar-mode) {
60
+ display: none;
61
+ }
62
+
63
+ &:focus,
64
+ &:hover {
65
+ color: $navigation-color-hover;
66
+ }
67
+ }
68
+
69
+ // Nav menu
70
+
71
+ nav {
72
+ float: none;
73
+ min-height: $navigation-height;
74
+ z-index: 9999999;
75
+
76
+ @include media ($horizontal-bar-mode) {
77
+ float: left;
78
+ }
79
+ }
80
+
81
+ ul.navigation-menu {
82
+ clear: both;
83
+ display: none;
84
+ margin: 0 auto;
85
+ overflow: visible;
86
+ padding: 0;
87
+ width: 100%;
88
+ z-index: 9999;
89
+
90
+ &.show {
91
+ display: block;
92
+ }
93
+
94
+ @include media ($horizontal-bar-mode) {
95
+ display: inline;
96
+ margin: 0;
97
+ padding: 0;
98
+ }
99
+ }
100
+
101
+ // The nav items
102
+
103
+ ul li.nav-link {
104
+ background: $navigation-background;
105
+ display: block;
106
+ line-height: $navigation-height;
107
+ overflow: hidden;
108
+ padding-right: 0.8em;
109
+ text-align: right;
110
+ width: 100%;
111
+ z-index: 9999;
112
+
113
+ @include media ($horizontal-bar-mode) {
114
+ background: transparent;
115
+ display: inline;
116
+ line-height: $navigation-height;
117
+ text-decoration: none;
118
+ width: auto;
119
+ }
120
+
121
+ a {
122
+ color: $navigation-color;
123
+ display: inline-block;
124
+ text-decoration: none;
125
+
126
+ @include media ($horizontal-bar-mode) {
127
+ padding-right: 1em;
128
+ }
129
+
130
+ &:focus,
131
+ &:hover {
132
+ color: $navigation-color-hover;
133
+ }
134
+ }
135
+ }
136
+
137
+ .active-nav-item a {
138
+ border-bottom: 1px solid $navigation-active-link-color;
139
+ padding-bottom: 3px;
140
+ }
141
+
142
+ // Sub menus
143
+
144
+ li.more.nav-link {
145
+ padding-right: 0;
146
+
147
+ @include media($horizontal-bar-mode) {
148
+ padding-right: $navigation-submenu-padding;
149
+ }
150
+
151
+ > ul > li:first-child a {
152
+ padding-top: 1em;
153
+ }
154
+
155
+ a {
156
+ margin-right: $navigation-submenu-padding;
157
+ }
158
+
159
+ > a {
160
+ padding-right: 0.6em;
161
+ }
162
+
163
+ > a:after {
164
+ @include position(absolute, auto -0.4em auto auto);
165
+ content: '\25BE';
166
+ color: $navigation-color;
167
+ }
168
+ }
169
+
170
+ li.more {
171
+ overflow: visible;
172
+ padding-right: 0;
173
+
174
+ a {
175
+ padding-right: 0.8em;
176
+ }
177
+
178
+ > a {
179
+ padding-right: 1.6em;
180
+ position: relative;
181
+
182
+ @include media($horizontal-bar-mode) {
183
+ margin-right: $navigation-submenu-padding;
184
+ }
185
+
186
+ &:after {
187
+ content: '›';
188
+ font-size: 1.2em;
189
+ position: absolute;
190
+ right: $navigation-submenu-padding / 2;
191
+ }
192
+ }
193
+
194
+ &:focus > .submenu,
195
+ &:hover > .submenu {
196
+ display: block;
197
+ }
198
+
199
+ @include media($horizontal-bar-mode) {
200
+ padding-right: 0.8em;
201
+ position: relative;
202
+ }
203
+ }
204
+
205
+ ul.submenu {
206
+ display: none;
207
+ padding-left: 0;
208
+
209
+ @include media($horizontal-bar-mode) {
210
+ left: -$navigation-submenu-padding;
211
+ position: absolute;
212
+ top: 1.5em;
213
+ }
214
+
215
+ .submenu {
216
+ @include media($horizontal-bar-mode) {
217
+ left: $navigation-submenu-width - 0.2em;
218
+ top: 0;
219
+ }
220
+ }
221
+
222
+ li {
223
+ display: block;
224
+ padding-right: 0;
225
+
226
+ @include media($horizontal-bar-mode) {
227
+ line-height: $navigation-height / 1.3;
228
+
229
+ &:first-child > a {
230
+ border-top-left-radius: $base-border-radius;
231
+ border-top-right-radius: $base-border-radius;
232
+ }
233
+
234
+ &:last-child > a {
235
+ border-bottom-left-radius: $base-border-radius;
236
+ border-bottom-right-radius: $base-border-radius;
237
+ padding-bottom: 0.7em;
238
+ }
239
+ }
240
+
241
+ a {
242
+ background-color: darken($navigation-background, 3%);
243
+ display: inline-block;
244
+ text-align: right;
245
+ width: 100%;
246
+
247
+ @include media($horizontal-bar-mode) {
248
+ background-color: $navigation-background;
249
+ padding-left: $navigation-submenu-padding;
250
+ text-align: left;
251
+ width: $navigation-submenu-width;
252
+ }
253
+ }
254
+ }
255
+ }
256
+
257
+ // Elements on the far right
258
+
259
+ .navigation-tools {
260
+ background: #505050;
261
+ clear: both;
262
+ display: block;
263
+ height: $navigation-height;
264
+
265
+ @include media($horizontal-bar-mode) {
266
+ background: transparent;
267
+ clear: none;
268
+ float: right;
269
+ }
270
+ }
271
+
272
+ // Search bar
273
+
274
+ .search-bar {
275
+ $search-bar-border-color: $base-border-color;
276
+ $search-bar-border: 1px solid $search-bar-border-color;
277
+ $search-bar-background: lighten($search-bar-border-color, 10%);
278
+
279
+ float: left;
280
+ padding: 0.85em 0.85em 0.7em 0.6em;
281
+ width: 60%;
282
+
283
+ form {
284
+ position: relative;
285
+
286
+ input[type=search] {
287
+ @include box-sizing(border-box);
288
+ background: $navigation-search-background;
289
+ border-radius: $base-border-radius * 2;
290
+ border: $navigation-search-border;
291
+ color: $navigation-color;
292
+ font-size: 0.9em;
293
+ font-style: italic;
294
+ margin: 0;
295
+ padding: 0.5em 0.8em;
296
+ width: 100%;
297
+
298
+ @include media($horizontal-bar-mode) {
299
+ width: 100%;
300
+ }
301
+ }
302
+
303
+ button[type=submit] {
304
+ background: $navigation-search-background;
305
+ border: none;
306
+ bottom: 0.3em;
307
+ left: auto;
308
+ outline: none;
309
+ padding: 0 9px;
310
+ position: absolute;
311
+ right: 0.3em;
312
+ top: 0.3em;
313
+
314
+ img {
315
+ height: 12px;
316
+ opacity: 0.7;
317
+ padding: 1px;
318
+ }
319
+ }
320
+ }
321
+
322
+ @include media($horizontal-bar-mode) {
323
+ display: inline-block;
324
+ position: relative;
325
+ width: 16em;
326
+
327
+ input {
328
+ @include box-sizing(border-box);
329
+ display: block;
330
+ }
331
+ }
332
+ }
333
+ }
@@ -0,0 +1,4 @@
1
+ @import "bourbon";
2
+ @import "neat";
3
+
4
+ @import "navigation";
@@ -0,0 +1,15 @@
1
+ class ApplicationController < ActionController::Base
2
+ include Pundit
3
+ # Prevent CSRF attacks by raising an exception.
4
+ # For APIs, you may want to use :null_session instead.
5
+ protect_from_forgery with: :exception
6
+
7
+ rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
8
+
9
+ private
10
+
11
+ def user_not_authorized
12
+ flash[:alert] = "Access denied."
13
+ redirect_to (request.referrer || root_path)
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ development: &default
2
+ adapter: postgresql
3
+ database: <%= app_name %>_development
4
+ encoding: utf8
5
+ min_messages: warning
6
+ pool: 5
7
+ timeout: 5000
8
+
9
+ test:
10
+ <<: *default
11
+ database: <%= app_name %>_test
@@ -0,0 +1,13 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /public/assets
11
+
12
+ /log/*
13
+ !/log/.keep
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title></title>
5
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
6
+ <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body class="<%= body_class %>">
10
+ <%= render 'shared/messages' %>
11
+ <%= render 'shared/navigation' %>
12
+
13
+ <%= yield %>
14
+ </body>
15
+ </html>
@@ -0,0 +1,51 @@
1
+ # Switch default editor for pry to Sublime text
2
+ Pry.config.editor = ENV['PRY_EDITOR'] || 'sublime'
3
+
4
+ # History
5
+ Pry.config.history.file = '.pry_history'
6
+
7
+ # Support for debugger - remove aliases
8
+ if defined? PryDebugger
9
+ Pry::Commands.delete 'c'
10
+ Pry::Commands.delete 'n'
11
+ Pry::Commands.delete 's'
12
+ end
13
+
14
+ # awesome_print gem
15
+ begin
16
+ require 'awesome_print'
17
+ Pry.config.print = proc { |output, value| Pry::Helpers::BaseHelpers.stagger_output("=> #{value.ai}", output) }
18
+ rescue LoadError
19
+ # no awesome_print present
20
+ end
21
+
22
+ # Prompt with app name
23
+ Pry.config.prompt_name = begin
24
+ current_branch = `git rev-parse --abbrev-ref HEAD`.chomp
25
+ current_branch = "#{current_branch[0..14]}.." if current_branch.length > 16
26
+
27
+ prompt_name = ENV['APP_NAME'] || File.basename(Rails.root)
28
+ prompt_name << "#{Rails.env.to_s.first}" unless Rails.env.development?
29
+ prompt_name << " (#{current_branch})"
30
+ prompt_name
31
+ end
32
+
33
+ Pry.config.prompt = [
34
+ # Default
35
+ -> (target_self, nest_level, pry) {
36
+ prompt = "[#{pry.input_array.size}]"
37
+ prompt << " #{Pry.config.prompt_name}:"
38
+ prompt << " #{Pry.view_clip(target_self)}"
39
+ prompt << "#{":#{nest_level}" unless nest_level.zero?}> "
40
+ prompt
41
+ },
42
+
43
+ # Nested under def, class etc.
44
+ ->(target_self, nest_level, pry) {
45
+ default_prompt = Pry.config.prompt[0].call(target_self, nest_level, pry)
46
+ prompt = (' ' * default_prompt.length)[0...-(pry.input_array.size.to_s.length + 4)]
47
+ prompt << " #{pry.input_array.size} "
48
+ prompt << '> '
49
+ prompt
50
+ }
51
+ ]
@@ -0,0 +1,2 @@
1
+ class RegistrationsController < Devise::RegistrationsController
2
+ end
@@ -0,0 +1,19 @@
1
+ Rails.application.routes.draw do
2
+ devise_for :users,
3
+ path: "",
4
+ controllers: { registrations: "registrations" },
5
+ path_names: { sign_in: 'login', password: 'forgot', confirmation: 'confirm', unlock: 'unblock', sign_up: 'register', sign_out: 'signout'}
6
+ as :user do
7
+ end
8
+
9
+ authenticated :user do
10
+ root to: 'home#dashboard', as: :authenticated_root
11
+ end
12
+ unauthenticated :user do
13
+ root to: 'home#index', as: :unauthenticated_root
14
+ end
15
+
16
+ root to: 'home#index'
17
+
18
+ resources :users
19
+ end
@@ -0,0 +1,46 @@
1
+ class UsersController < ApplicationController
2
+ before_filter :authenticate_user!
3
+ after_action :verify_authorized, except: [:show]
4
+
5
+ def index
6
+ @users = User.all
7
+ authorize @users
8
+ end
9
+
10
+ def show
11
+ @user = User.find(params[:id])
12
+ unless current_user.admin?
13
+ unless @user == current_user
14
+ redirect_to root_path, :alert => "Access denied."
15
+ end
16
+ end
17
+ end
18
+
19
+ def update
20
+ @user = User.find(params[:id])
21
+ authorize @user
22
+ if @user.update_attributes(secure_params)
23
+ redirect_to users_path, :notice => "User updated."
24
+ else
25
+ redirect_to users_path, :alert => "Unable to update user."
26
+ end
27
+ end
28
+
29
+ def destroy
30
+ user = User.find(params[:id])
31
+ authorize user
32
+ unless user == current_user
33
+ user.destroy
34
+ redirect_to users_path, :notice => "User deleted."
35
+ else
36
+ redirect_to users_path, :notice => "Can't delete yourself."
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def secure_params
43
+ params.require(:user).permit(:role)
44
+ end
45
+
46
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: drezyna
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Zaiste
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Rails application template by Nukomeet
42
+ email:
43
+ - oh@zaiste.net
44
+ executables:
45
+ - drezyna
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - ".gitignore"
50
+ - ".travis.yml"
51
+ - Gemfile
52
+ - LICENSE.txt
53
+ - README.md
54
+ - Rakefile
55
+ - bin/drezyna
56
+ - drezyna.gemspec
57
+ - lib/drezyna.rb
58
+ - lib/drezyna/action_helpers.rb
59
+ - lib/drezyna/app_builder.rb
60
+ - lib/drezyna/generators/app_generator.rb
61
+ - lib/drezyna/version.rb
62
+ - templates/Gemfile.erb
63
+ - templates/Procfile.erb
64
+ - templates/README.md.erb
65
+ - templates/_messages.html.erb
66
+ - templates/_navigation.html.erb
67
+ - templates/_navigation.scss
68
+ - templates/application.scss
69
+ - templates/application_controller.rb
70
+ - templates/database.yml.erb
71
+ - templates/gitignore.erb
72
+ - templates/layout.html.erb
73
+ - templates/pryrc.rb
74
+ - templates/registrations_controller.rb
75
+ - templates/routes.rb.erb
76
+ - templates/users_controller.rb
77
+ homepage: http://github.com/nukomeet/drezyna
78
+ licenses:
79
+ - MIT
80
+ metadata: {}
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubyforge_project:
97
+ rubygems_version: 2.4.8
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: Rails application template by Nukomeet
101
+ test_files: []
102
+ has_rdoc: