jabysoft-base 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/.rspec +3 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +180 -0
- data/LICENSE +21 -0
- data/README.md +37 -0
- data/Rakefile +6 -0
- data/app/assets/javascripts/jabysoft.js +1 -0
- data/app/assets/stylesheets/jabysoft.sass +42 -0
- data/app/controllers/base_controller.rb +111 -0
- data/app/helpers/base_helper.rb +63 -0
- data/app/helpers/devise_helper.rb +17 -0
- data/app/helpers/links_helper.rb +84 -0
- data/app/helpers/render_helper.rb +19 -0
- data/app/models/concerns/extension_model_behaviour.rb +16 -0
- data/app/models/concerns/searchable_behaviour.rb +47 -0
- data/app/views/layouts/admin.html.haml +46 -0
- data/app/views/layouts/application.html.haml +31 -0
- data/app/views/shared/_datepicker_field.html.haml +9 -0
- data/app/views/shared/_layout.html.haml +7 -0
- data/app/views/shared/_messages.html.haml +7 -0
- data/app/views/shared/_panel.html.haml +5 -0
- data/app/views/shared/_search_form.html.haml +6 -0
- data/app/views/shared/form/_error_messages.html.haml +6 -0
- data/app/views/shared/modals/_delete_confirmation.html.haml +17 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/config/locales/en.yml +35 -0
- data/config/locales/pt-BR.yml +35 -0
- data/jabysoft-base.gemspec +37 -0
- data/lib/generators/haml/scaffold/scaffold_generator.rb +36 -0
- data/lib/generators/jabysoft/setup/USAGE +19 -0
- data/lib/generators/jabysoft/setup/setup_generator.rb +57 -0
- data/lib/generators/jabysoft/setup/templates/.rspec +3 -0
- data/lib/generators/jabysoft/setup/templates/Gemfile +48 -0
- data/lib/generators/jabysoft/setup/templates/assets/stylesheets/base.scss +24 -0
- data/lib/generators/jabysoft/setup/templates/assets/stylesheets/bootstrap-variables.scss +875 -0
- data/lib/generators/jabysoft/setup/templates/layouts/admin.html.haml +46 -0
- data/lib/generators/jabysoft/setup/templates/layouts/application.html.haml +31 -0
- data/lib/generators/jabysoft/setup/templates/spec/rails_helper.rb +92 -0
- data/lib/generators/jabysoft/setup/templates/spec/spec_helper.rb +97 -0
- data/lib/generators/rspec/scaffold/scaffold_generator.rb +167 -0
- data/lib/jabysoft/base/version.rb +5 -0
- data/lib/jabysoft/base.rb +16 -0
- data/lib/templates/haml/scaffold/_form.html.haml +14 -0
- data/lib/templates/haml/scaffold/_index.html.haml +25 -0
- data/lib/templates/haml/scaffold/edit.html.haml +1 -0
- data/lib/templates/haml/scaffold/index.html.haml +1 -0
- data/lib/templates/haml/scaffold/new.html.haml +1 -0
- data/lib/templates/haml/scaffold/show.html.haml +1 -0
- data/lib/templates/rails/scaffold_controller/controller.rb +29 -0
- data/lib/templates/rspec/scaffold/controller_spec.rb +148 -0
- data/lib/templates/rspec/scaffold/model_spec.rb +14 -0
- data/lib/templates/rspec/scaffold/request_spec.rb +10 -0
- data/lib/templates/rspec/scaffold/routing_spec.rb +44 -0
- data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.eot +0 -0
- data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.svg +288 -0
- data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
- data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
- data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
- data/vendor/assets/images/.keep +0 -0
- data/vendor/assets/javascripts/bootstrap/affix.js +162 -0
- data/vendor/assets/javascripts/bootstrap/alert.js +94 -0
- data/vendor/assets/javascripts/bootstrap/button.js +120 -0
- data/vendor/assets/javascripts/bootstrap/carousel.js +237 -0
- data/vendor/assets/javascripts/bootstrap/collapse.js +211 -0
- data/vendor/assets/javascripts/bootstrap/dropdown.js +165 -0
- data/vendor/assets/javascripts/bootstrap/modal.js +337 -0
- data/vendor/assets/javascripts/bootstrap/popover.js +108 -0
- data/vendor/assets/javascripts/bootstrap/scrollspy.js +172 -0
- data/vendor/assets/javascripts/bootstrap/tab.js +155 -0
- data/vendor/assets/javascripts/bootstrap/tooltip.js +514 -0
- data/vendor/assets/javascripts/bootstrap/transition.js +59 -0
- data/vendor/assets/javascripts/bootstrap-sprockets.js +12 -0
- data/vendor/assets/javascripts/bootstrap.js +2363 -0
- data/vendor/assets/javascripts/bootstrap.min.js +7 -0
- data/vendor/assets/stylesheets/_bootstrap-compass.scss +9 -0
- data/vendor/assets/stylesheets/_bootstrap-mincer.scss +19 -0
- data/vendor/assets/stylesheets/_bootstrap-sprockets.scss +9 -0
- data/vendor/assets/stylesheets/_bootstrap.scss +56 -0
- data/vendor/assets/stylesheets/bootstrap/_alerts.scss +73 -0
- data/vendor/assets/stylesheets/bootstrap/_badges.scss +68 -0
- data/vendor/assets/stylesheets/bootstrap/_breadcrumbs.scss +28 -0
- data/vendor/assets/stylesheets/bootstrap/_button-groups.scss +244 -0
- data/vendor/assets/stylesheets/bootstrap/_buttons.scss +168 -0
- data/vendor/assets/stylesheets/bootstrap/_carousel.scss +270 -0
- data/vendor/assets/stylesheets/bootstrap/_close.scss +36 -0
- data/vendor/assets/stylesheets/bootstrap/_code.scss +69 -0
- data/vendor/assets/stylesheets/bootstrap/_component-animations.scss +37 -0
- data/vendor/assets/stylesheets/bootstrap/_dropdowns.scss +216 -0
- data/vendor/assets/stylesheets/bootstrap/_forms.scss +617 -0
- data/vendor/assets/stylesheets/bootstrap/_glyphicons.scss +307 -0
- data/vendor/assets/stylesheets/bootstrap/_grid.scss +84 -0
- data/vendor/assets/stylesheets/bootstrap/_input-groups.scss +171 -0
- data/vendor/assets/stylesheets/bootstrap/_jumbotron.scss +54 -0
- data/vendor/assets/stylesheets/bootstrap/_labels.scss +66 -0
- data/vendor/assets/stylesheets/bootstrap/_list-group.scss +130 -0
- data/vendor/assets/stylesheets/bootstrap/_media.scss +66 -0
- data/vendor/assets/stylesheets/bootstrap/_mixins.scss +40 -0
- data/vendor/assets/stylesheets/bootstrap/_modals.scss +150 -0
- data/vendor/assets/stylesheets/bootstrap/_navbar.scss +662 -0
- data/vendor/assets/stylesheets/bootstrap/_navs.scss +242 -0
- data/vendor/assets/stylesheets/bootstrap/_normalize.scss +424 -0
- data/vendor/assets/stylesheets/bootstrap/_pager.scss +54 -0
- data/vendor/assets/stylesheets/bootstrap/_pagination.scss +89 -0
- data/vendor/assets/stylesheets/bootstrap/_panels.scss +271 -0
- data/vendor/assets/stylesheets/bootstrap/_popovers.scss +131 -0
- data/vendor/assets/stylesheets/bootstrap/_print.scss +101 -0
- data/vendor/assets/stylesheets/bootstrap/_progress-bars.scss +87 -0
- data/vendor/assets/stylesheets/bootstrap/_responsive-embed.scss +35 -0
- data/vendor/assets/stylesheets/bootstrap/_responsive-utilities.scss +179 -0
- data/vendor/assets/stylesheets/bootstrap/_scaffolding.scss +161 -0
- data/vendor/assets/stylesheets/bootstrap/_tables.scss +234 -0
- data/vendor/assets/stylesheets/bootstrap/_theme.scss +291 -0
- data/vendor/assets/stylesheets/bootstrap/_thumbnails.scss +38 -0
- data/vendor/assets/stylesheets/bootstrap/_tooltip.scss +101 -0
- data/vendor/assets/stylesheets/bootstrap/_type.scss +298 -0
- data/vendor/assets/stylesheets/bootstrap/_utilities.scss +55 -0
- data/vendor/assets/stylesheets/bootstrap/_variables.scss +874 -0
- data/vendor/assets/stylesheets/bootstrap/_wells.scss +29 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_alerts.scss +14 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_background-variant.scss +12 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_border-radius.scss +18 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_buttons.scss +65 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_center-block.scss +7 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_clearfix.scss +22 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_forms.scss +88 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_gradients.scss +58 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +81 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_grid.scss +122 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_hide-text.scss +21 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_image.scss +33 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_labels.scss +12 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_list-group.scss +32 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +10 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +9 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_opacity.scss +8 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_pagination.scss +24 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_panels.scss +24 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_progress-bar.scss +10 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +8 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_reset-text.scss +18 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_resize.scss +6 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +21 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_size.scss +10 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +9 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_table-row.scss +28 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +12 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_text-overflow.scss +8 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +222 -0
- metadata +308 -0
@@ -0,0 +1,47 @@
|
|
1
|
+
module SearchableBehaviour
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
def self.search(params)
|
6
|
+
if has_joins?
|
7
|
+
joins(get_joins).where(query, p: "%#{params}%")
|
8
|
+
else
|
9
|
+
where(query, p: "%#{params}%")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.look_for(*attrs)
|
14
|
+
@attrs_to_search = attrs
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.query
|
18
|
+
return unless @attrs_to_search.any?
|
19
|
+
each_attr = @attrs_to_search.map { |a| handle_attribute(a) + " LIKE :p "}
|
20
|
+
each_attr.join("OR ")
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
def self.has_joins?
|
25
|
+
select_hash_attributes.any?
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.select_hash_attributes
|
29
|
+
@attrs_to_search.select { |attribute| attribute.is_a? Hash }
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.get_joins
|
33
|
+
keys = []
|
34
|
+
select_hash_attributes.each do |hash_attribute|
|
35
|
+
keys |= hash_attribute.keys
|
36
|
+
end
|
37
|
+
keys
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.handle_attribute(attribute)
|
41
|
+
return "#{self.name.downcase.pluralize}.#{attribute}" unless attribute.is_a? Hash
|
42
|
+
attribute.map {|k, v| "#{k.to_s.pluralize}.#{v}" }.first
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
!!!
|
2
|
+
%html
|
3
|
+
%head
|
4
|
+
%meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/
|
5
|
+
%title= t('title.administration')
|
6
|
+
= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true
|
7
|
+
= javascript_include_tag 'application', 'data-turbolinks-track' => true
|
8
|
+
= csrf_meta_tags
|
9
|
+
%body
|
10
|
+
%nav.navbar.navbar-default.navbar-fixed-top
|
11
|
+
.container
|
12
|
+
= link_to t('title.administration'), admin_root_path, class: 'navbar-brand'
|
13
|
+
|
14
|
+
%button{class: "navbar-toggle", "data-toggle" => "collapse", "data-target" => ".navHeaderCollapse"}
|
15
|
+
%span.glyphicon.glyphicon-th
|
16
|
+
#navbar.collapse.navbar-collapse.navHeaderCollapse
|
17
|
+
%ul.nav.navbar-nav.navbar-left
|
18
|
+
%li= link_to 'Hello', '#'
|
19
|
+
%li= link_to 'About', '#'
|
20
|
+
%li.dropdown
|
21
|
+
%a.dropdown-toggle{src: '#', "data-toggle" => 'dropdown'}
|
22
|
+
= "Dropdown"
|
23
|
+
.glyphicon.glyphicon-chevron-down
|
24
|
+
%ul.dropdown-menu
|
25
|
+
%li= link_to 'First link', '#'
|
26
|
+
|
27
|
+
%ul.nav.navbar-nav.navbar-right
|
28
|
+
%li
|
29
|
+
.user-name User Name
|
30
|
+
.logout
|
31
|
+
= link_to 'Logout', '#', method: :delete, class: 'btn btn-default glyphicon glyphicon-off'
|
32
|
+
%li.user-avatar
|
33
|
+
= image_tag("icons/admin.png")
|
34
|
+
|
35
|
+
.container
|
36
|
+
.row
|
37
|
+
.col-lg-12
|
38
|
+
= render_flash_messages
|
39
|
+
.row
|
40
|
+
.col-lg-12
|
41
|
+
= yield
|
42
|
+
|
43
|
+
%footer.navbar.navbar-default.navbar-static-bottom
|
44
|
+
.container
|
45
|
+
%p.navbar-text
|
46
|
+
= "© Admin JabySoft - #{Date.today.year}".html_safe
|
@@ -0,0 +1,31 @@
|
|
1
|
+
!!!
|
2
|
+
%html
|
3
|
+
%head
|
4
|
+
%meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/
|
5
|
+
%title= t('title.application')
|
6
|
+
= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true
|
7
|
+
= javascript_include_tag 'application', 'data-turbolinks-track' => true
|
8
|
+
= csrf_meta_tags
|
9
|
+
%body
|
10
|
+
%nav.navbar.navbar-default.navbar-fixed-top{role: 'navigation'}
|
11
|
+
.container
|
12
|
+
= link_to t('title.application'), '#', class: 'navbar-brand'
|
13
|
+
%button{class: "navbar-toggle", "data-toggle" => "collapse", "data-target" => ".navHeaderCollapse"}
|
14
|
+
%span.glyphicon.glyphicon-th
|
15
|
+
.collapse.navbar-collapse.navHeaderCollapse
|
16
|
+
%ul.nav.navbar-nav.navbar-left
|
17
|
+
%li= link_to 'Hello', '#'
|
18
|
+
%li= link_to 'About', '#'
|
19
|
+
|
20
|
+
.container
|
21
|
+
.row
|
22
|
+
.col-lg-12
|
23
|
+
= render_flash_messages
|
24
|
+
.row
|
25
|
+
.col-lg-12
|
26
|
+
= yield
|
27
|
+
|
28
|
+
%footer.navbar.navbar-default.navbar-static-bottom
|
29
|
+
.container
|
30
|
+
%p.navbar-text
|
31
|
+
= "© JabySoft - #{Date.today.year}".html_safe
|
@@ -0,0 +1,7 @@
|
|
1
|
+
- unless flash.empty?
|
2
|
+
- flash.each do |name, msg|
|
3
|
+
= content_tag :div, class: "alert alert-#{name} alert-dismissible", role: "alert" do
|
4
|
+
%button.close{type: "button", data: {dismiss: "alert"} }
|
5
|
+
%span{aria: {hidden: "true"} } ×
|
6
|
+
%span.sr-only Close
|
7
|
+
= msg
|
@@ -0,0 +1,17 @@
|
|
1
|
+
- controller = params[:controller].split("/")
|
2
|
+
- url = "/#{resource.model_name.name.pluralize.downcase}/#{resource.id}"
|
3
|
+
- namespace = ''
|
4
|
+
.modal.fade{id: "delete-confirmation", role: "dialog"}
|
5
|
+
.modal-dialog
|
6
|
+
.modal-content
|
7
|
+
.modal-header
|
8
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
9
|
+
%h4.modal-title
|
10
|
+
= t('confirmation')
|
11
|
+
.modal-body
|
12
|
+
%p= t('are_you_sure')
|
13
|
+
.modal-footer
|
14
|
+
= link_to t('close'), "#", class: "btn btn-default", "data-dismiss" => "modal"
|
15
|
+
- if controller.size > 1
|
16
|
+
- url = "/#{controller[0]}" + url
|
17
|
+
= link_to t('confirm'), url, {method: :delete, class: "btn btn-primary"}
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "jabysoft/base"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
en:
|
2
|
+
title:
|
3
|
+
administration: Admin
|
4
|
+
application: Application
|
5
|
+
money_symbol: $
|
6
|
+
created: "%{model} was created successfully"
|
7
|
+
updated: "%{model} was updated successfully"
|
8
|
+
destroyed: "%{model} was destroyed successfully"
|
9
|
+
confirmation: Confirmation
|
10
|
+
are_you_sure: Are you sure?
|
11
|
+
login: Login
|
12
|
+
logout: Logout
|
13
|
+
new: "New %{model}"
|
14
|
+
edit: Edit
|
15
|
+
back: Back
|
16
|
+
destroy: Delete
|
17
|
+
save: Save
|
18
|
+
show: Show
|
19
|
+
listing: "Listing %{model}"
|
20
|
+
editing: "Editing %{model}"
|
21
|
+
close: Close
|
22
|
+
confirm: Confirm
|
23
|
+
error_message_header: "Found %{count} error(s) on this %{model}:"
|
24
|
+
selection: Select
|
25
|
+
search: Search
|
26
|
+
not_authorized: Not Authorized
|
27
|
+
admin_area: Administration
|
28
|
+
toggle_sidebar: Sidebar
|
29
|
+
send: Send
|
30
|
+
contact: Contact
|
31
|
+
about: About
|
32
|
+
will_paginate:
|
33
|
+
previous_label: "← Previous"
|
34
|
+
next_label: "Next →"
|
35
|
+
page_gap: "…"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
pt-BR:
|
2
|
+
title:
|
3
|
+
administration: Admin
|
4
|
+
application: Application
|
5
|
+
money_symbol: R$
|
6
|
+
created: "%{model} foi cadastrado(a) com sucesso"
|
7
|
+
updated: "%{model} foi atualizado(a) com sucesso"
|
8
|
+
destroyed: "%{model} foi removido(a) com sucesso"
|
9
|
+
confirmation: Confirmação
|
10
|
+
are_you_sure: Você tem certeza?
|
11
|
+
login: Logar
|
12
|
+
logout: Sair
|
13
|
+
new: "Novo(a) %{model}"
|
14
|
+
edit: Editar
|
15
|
+
back: Voltar
|
16
|
+
destroy: Remover
|
17
|
+
save: Salvar
|
18
|
+
show: Exibir
|
19
|
+
listing: "Lista de %{model}"
|
20
|
+
editing: "Editando %{model}"
|
21
|
+
close: Fechar
|
22
|
+
confirm: Confirmar
|
23
|
+
error_message_header: "%{count} erro(s) impediram este %{model} de ser registrado:"
|
24
|
+
selection: Selecione
|
25
|
+
search: Pesquisar
|
26
|
+
not_authorized: Sem permissão
|
27
|
+
admin_area: Administração
|
28
|
+
toggle_sidebar: Menu Lateral
|
29
|
+
send: Enviar
|
30
|
+
contact: Contato
|
31
|
+
about: Sobre
|
32
|
+
will_paginate:
|
33
|
+
previous_label: "← Anterior"
|
34
|
+
next_label: "Próximo →"
|
35
|
+
page_gap: "…"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'jabysoft/base/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'jabysoft-base'
|
8
|
+
spec.version = Jabysoft::Base::VERSION
|
9
|
+
spec.licenses = ['MIT']
|
10
|
+
spec.authors = ["Emerson S. Xavier"]
|
11
|
+
spec.email = ["msxavii@gmail.com"]
|
12
|
+
spec.summary = %q{Jabysoft Rails-based}
|
13
|
+
spec.description = %q{Simple Jabysoft Rails-based code and scaffold generators.}
|
14
|
+
spec.homepage = "https://github.com/Jabysoft/jabysoft-base"
|
15
|
+
|
16
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
17
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
18
|
+
if spec.respond_to?(:metadata)
|
19
|
+
spec.metadata['allowed_push_host'] = "https://rubygems.org"
|
20
|
+
else
|
21
|
+
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
22
|
+
end
|
23
|
+
|
24
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
+
spec.bindir = "exe"
|
26
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
27
|
+
spec.require_paths = ["lib"]
|
28
|
+
|
29
|
+
spec.add_development_dependency 'bundler', '~> 1.12'
|
30
|
+
spec.add_development_dependency 'simplecov', '~> 0.12.0'
|
31
|
+
spec.add_dependency 'rails', '~> 5.0'
|
32
|
+
spec.add_dependency 'rspec-rails', '~> 3.5'
|
33
|
+
spec.add_dependency 'factory_girl_rails', '~> 4.7'
|
34
|
+
spec.add_dependency 'rake', '~> 11.0'
|
35
|
+
spec.add_dependency 'pry-byebug', '~> 3.4'
|
36
|
+
spec.add_dependency 'devise', '~> 4.2'
|
37
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'rails/generators/erb/scaffold/scaffold_generator'
|
2
|
+
|
3
|
+
module Haml
|
4
|
+
module Generators
|
5
|
+
class ScaffoldGenerator < Erb::Generators::ScaffoldGenerator
|
6
|
+
source_root File.expand_path("../templates", __FILE__)
|
7
|
+
|
8
|
+
def copy_view_files
|
9
|
+
available_views.each do |view|
|
10
|
+
filename = filename_with_extensions(view)
|
11
|
+
template "#{view}.html.haml", File.join("app/views", controller_file_path, filename)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
hook_for :form_builder, :as => :scaffold
|
16
|
+
|
17
|
+
def copy_form_file
|
18
|
+
if options[:form_builder].nil?
|
19
|
+
filename = filename_with_extensions("_form")
|
20
|
+
template "_form.html.haml", File.join("app/views", controller_file_path, filename)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def available_views
|
27
|
+
%w(index edit show new _index)
|
28
|
+
end
|
29
|
+
|
30
|
+
def handler
|
31
|
+
:haml
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Description:
|
2
|
+
Prepare your rails application to receive Jabysoft patterns layouts when using scaffold.
|
3
|
+
|
4
|
+
Example:
|
5
|
+
rails generate jabysoft:setup
|
6
|
+
|
7
|
+
BE CAREFULL! This will override your Gemfile entirely.
|
8
|
+
|
9
|
+
This will create:
|
10
|
+
- app/views/layouts/application.html.haml
|
11
|
+
- app/views/layouts/admin.html.haml
|
12
|
+
- app/assets/stylesheets/bootstrap-variables.scss
|
13
|
+
- spec/rails_helper.rb
|
14
|
+
|
15
|
+
This will inject content into:
|
16
|
+
- app/assets/javascripts/application.js
|
17
|
+
- app/assets/stylesheets/application.css
|
18
|
+
|
19
|
+
Then will rename application.css to application.scss in order to use Bootstrap.
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'rails/generators'
|
3
|
+
|
4
|
+
module Jabysoft
|
5
|
+
module Generators
|
6
|
+
class SetupGenerator < ::Rails::Generators::Base
|
7
|
+
desc 'Prepare your rails application to Jabysoft standards'
|
8
|
+
source_root ::File.expand_path('../templates', __FILE__)
|
9
|
+
|
10
|
+
def create_layout
|
11
|
+
remove_file "app/views/layouts/application.html.erb"
|
12
|
+
template "layouts/application.html.haml", "app/views/layouts/application.html.haml"
|
13
|
+
template "layouts/admin.html.haml", "app/views/layouts/admin.html.haml"
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_stylesheets
|
17
|
+
copy_file "assets/stylesheets/bootstrap-variables.scss", "app/assets/stylesheets/bootstrap-variables.scss"
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_spec_rails_helper
|
21
|
+
copy_file "spec/rails_helper.rb", "spec/rails_helper.rb"
|
22
|
+
copy_file "spec/spec_helper.rb", "spec/spec_helper.rb"
|
23
|
+
copy_file ".rspec", ".rspec"
|
24
|
+
end
|
25
|
+
|
26
|
+
def inject_backbone
|
27
|
+
application_js_path = 'app/assets/javascripts/application.js'
|
28
|
+
application_sass_path = 'app/assets/stylesheets/application.scss'
|
29
|
+
|
30
|
+
if ::File.exists?('app/assets/stylesheets/application.css')
|
31
|
+
css_file = ::File.open('app/assets/stylesheets/application.css')
|
32
|
+
FileUtils.mv css_file, "#{File.dirname(css_file)}/#{File.basename(css_file,'.*')}.scss"
|
33
|
+
end
|
34
|
+
|
35
|
+
if ::File.exists?(::File.join(destination_root, application_js_path))
|
36
|
+
inject_into_file application_js_path, before: '//= require_tree' do
|
37
|
+
"//= require jabysoft\n"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
if ::File.exists?(::File.join(destination_root, application_sass_path))
|
42
|
+
inject_into_file application_sass_path, after: ' */' do
|
43
|
+
"\n\n@import 'jabysoft'\n"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def create_gemfile
|
49
|
+
remove_file "Gemfile"
|
50
|
+
remove_file "Gemfile.lock"
|
51
|
+
copy_file "Gemfile", "Gemfile"
|
52
|
+
run('bundle install')
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
ruby '2.3.1'
|
4
|
+
|
5
|
+
# JabySoft
|
6
|
+
gem 'jabysoft-base', '~> 0.1'
|
7
|
+
|
8
|
+
# RAILS DEPENDENCIES
|
9
|
+
gem 'rails', '~> 5.0', '>= 5.0.0.1'
|
10
|
+
gem 'sqlite3', '~> 1.3', '>= 1.3.11'
|
11
|
+
gem 'puma', '~> 3.4'
|
12
|
+
gem 'sass-rails', '~> 5.0', '>= 5.0.5'
|
13
|
+
gem 'uglifier', '~> 3.0'
|
14
|
+
gem 'jquery-rails', '~> 4.2', '>= 4.2.1'
|
15
|
+
gem 'coffee-rails', '~> 4.2', '>= 4.2.1'
|
16
|
+
gem 'turbolinks', '~> 5.0'
|
17
|
+
gem 'jbuilder', '~> 2.6'
|
18
|
+
|
19
|
+
# INCLUDED
|
20
|
+
gem 'haml-rails', '~> 0.9.0'
|
21
|
+
gem 'choices', '~> 0.4.0'
|
22
|
+
gem 'will_paginate-bootstrap', '~> 1.0', '>= 1.0.1'
|
23
|
+
gem 'rack-mini-profiler', '~> 0.10.1', require: false
|
24
|
+
gem 'whenever', '~> 0.9.7', require: false
|
25
|
+
gem 'after_party', '~> 1.10'
|
26
|
+
gem 'rails-controller-testing', '~> 0.1.1'
|
27
|
+
|
28
|
+
group :development, :test do
|
29
|
+
gem 'pry-byebug', '~> 3.4'
|
30
|
+
gem 'factory_girl_rails', '~> 4.7'
|
31
|
+
gem 'rspec-rails', '~> 3.5'
|
32
|
+
gem 'capybara', '~> 2.7', '>= 2.7.1'
|
33
|
+
gem 'database_cleaner', '~> 1.5', '>= 1.5.3'
|
34
|
+
gem 'shoulda-matchers', '~> 3.1', '>= 3.1.1'
|
35
|
+
gem 'simplecov', '~> 0.12.0', require: false
|
36
|
+
gem 'brakeman', '~> 3.3', '>= 3.3.2', require: false # execute "brakeman" in root folder
|
37
|
+
gem 'rubycritic', '~> 2.9', '>= 2.9.2', require: false # execute "rubycritic" in root folder
|
38
|
+
end
|
39
|
+
|
40
|
+
group :development do
|
41
|
+
gem 'web-console', '~> 2.0'
|
42
|
+
gem 'letter_opener', '~> 1.4', '>= 1.4.1'
|
43
|
+
gem 'rails-erd', '~> 1.4', '>= 1.4.7'
|
44
|
+
gem 'listen', '~> 3.0.5'
|
45
|
+
end
|
46
|
+
|
47
|
+
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
48
|
+
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
|
@@ -0,0 +1,24 @@
|
|
1
|
+
@import "bootstrap-compass";
|
2
|
+
@import "bootstrap-variables";
|
3
|
+
@import "bootstrap-sprockets";
|
4
|
+
@import "bootstrap";
|
5
|
+
|
6
|
+
body {
|
7
|
+
padding-top: $navbar-height + 10px;
|
8
|
+
}
|
9
|
+
|
10
|
+
.page-header {
|
11
|
+
a.btn {
|
12
|
+
float: right;
|
13
|
+
}
|
14
|
+
|
15
|
+
a.btn + a.btn {
|
16
|
+
margin-right: 8px;
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
input[type="radio"], input[type="checkbox"] {
|
21
|
+
width: initial;
|
22
|
+
height: initial;
|
23
|
+
margin-top: 7px;
|
24
|
+
}
|