jabysoft-base 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.rspec +3 -0
  4. data/CODE_OF_CONDUCT.md +49 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +180 -0
  7. data/LICENSE +21 -0
  8. data/README.md +37 -0
  9. data/Rakefile +6 -0
  10. data/app/assets/javascripts/jabysoft.js +1 -0
  11. data/app/assets/stylesheets/jabysoft.sass +42 -0
  12. data/app/controllers/base_controller.rb +111 -0
  13. data/app/helpers/base_helper.rb +63 -0
  14. data/app/helpers/devise_helper.rb +17 -0
  15. data/app/helpers/links_helper.rb +84 -0
  16. data/app/helpers/render_helper.rb +19 -0
  17. data/app/models/concerns/extension_model_behaviour.rb +16 -0
  18. data/app/models/concerns/searchable_behaviour.rb +47 -0
  19. data/app/views/layouts/admin.html.haml +46 -0
  20. data/app/views/layouts/application.html.haml +31 -0
  21. data/app/views/shared/_datepicker_field.html.haml +9 -0
  22. data/app/views/shared/_layout.html.haml +7 -0
  23. data/app/views/shared/_messages.html.haml +7 -0
  24. data/app/views/shared/_panel.html.haml +5 -0
  25. data/app/views/shared/_search_form.html.haml +6 -0
  26. data/app/views/shared/form/_error_messages.html.haml +6 -0
  27. data/app/views/shared/modals/_delete_confirmation.html.haml +17 -0
  28. data/bin/console +14 -0
  29. data/bin/setup +8 -0
  30. data/config/locales/en.yml +35 -0
  31. data/config/locales/pt-BR.yml +35 -0
  32. data/jabysoft-base.gemspec +37 -0
  33. data/lib/generators/haml/scaffold/scaffold_generator.rb +36 -0
  34. data/lib/generators/jabysoft/setup/USAGE +19 -0
  35. data/lib/generators/jabysoft/setup/setup_generator.rb +57 -0
  36. data/lib/generators/jabysoft/setup/templates/.rspec +3 -0
  37. data/lib/generators/jabysoft/setup/templates/Gemfile +48 -0
  38. data/lib/generators/jabysoft/setup/templates/assets/stylesheets/base.scss +24 -0
  39. data/lib/generators/jabysoft/setup/templates/assets/stylesheets/bootstrap-variables.scss +875 -0
  40. data/lib/generators/jabysoft/setup/templates/layouts/admin.html.haml +46 -0
  41. data/lib/generators/jabysoft/setup/templates/layouts/application.html.haml +31 -0
  42. data/lib/generators/jabysoft/setup/templates/spec/rails_helper.rb +92 -0
  43. data/lib/generators/jabysoft/setup/templates/spec/spec_helper.rb +97 -0
  44. data/lib/generators/rspec/scaffold/scaffold_generator.rb +167 -0
  45. data/lib/jabysoft/base/version.rb +5 -0
  46. data/lib/jabysoft/base.rb +16 -0
  47. data/lib/templates/haml/scaffold/_form.html.haml +14 -0
  48. data/lib/templates/haml/scaffold/_index.html.haml +25 -0
  49. data/lib/templates/haml/scaffold/edit.html.haml +1 -0
  50. data/lib/templates/haml/scaffold/index.html.haml +1 -0
  51. data/lib/templates/haml/scaffold/new.html.haml +1 -0
  52. data/lib/templates/haml/scaffold/show.html.haml +1 -0
  53. data/lib/templates/rails/scaffold_controller/controller.rb +29 -0
  54. data/lib/templates/rspec/scaffold/controller_spec.rb +148 -0
  55. data/lib/templates/rspec/scaffold/model_spec.rb +14 -0
  56. data/lib/templates/rspec/scaffold/request_spec.rb +10 -0
  57. data/lib/templates/rspec/scaffold/routing_spec.rb +44 -0
  58. data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.eot +0 -0
  59. data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.svg +288 -0
  60. data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
  61. data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
  62. data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
  63. data/vendor/assets/images/.keep +0 -0
  64. data/vendor/assets/javascripts/bootstrap/affix.js +162 -0
  65. data/vendor/assets/javascripts/bootstrap/alert.js +94 -0
  66. data/vendor/assets/javascripts/bootstrap/button.js +120 -0
  67. data/vendor/assets/javascripts/bootstrap/carousel.js +237 -0
  68. data/vendor/assets/javascripts/bootstrap/collapse.js +211 -0
  69. data/vendor/assets/javascripts/bootstrap/dropdown.js +165 -0
  70. data/vendor/assets/javascripts/bootstrap/modal.js +337 -0
  71. data/vendor/assets/javascripts/bootstrap/popover.js +108 -0
  72. data/vendor/assets/javascripts/bootstrap/scrollspy.js +172 -0
  73. data/vendor/assets/javascripts/bootstrap/tab.js +155 -0
  74. data/vendor/assets/javascripts/bootstrap/tooltip.js +514 -0
  75. data/vendor/assets/javascripts/bootstrap/transition.js +59 -0
  76. data/vendor/assets/javascripts/bootstrap-sprockets.js +12 -0
  77. data/vendor/assets/javascripts/bootstrap.js +2363 -0
  78. data/vendor/assets/javascripts/bootstrap.min.js +7 -0
  79. data/vendor/assets/stylesheets/_bootstrap-compass.scss +9 -0
  80. data/vendor/assets/stylesheets/_bootstrap-mincer.scss +19 -0
  81. data/vendor/assets/stylesheets/_bootstrap-sprockets.scss +9 -0
  82. data/vendor/assets/stylesheets/_bootstrap.scss +56 -0
  83. data/vendor/assets/stylesheets/bootstrap/_alerts.scss +73 -0
  84. data/vendor/assets/stylesheets/bootstrap/_badges.scss +68 -0
  85. data/vendor/assets/stylesheets/bootstrap/_breadcrumbs.scss +28 -0
  86. data/vendor/assets/stylesheets/bootstrap/_button-groups.scss +244 -0
  87. data/vendor/assets/stylesheets/bootstrap/_buttons.scss +168 -0
  88. data/vendor/assets/stylesheets/bootstrap/_carousel.scss +270 -0
  89. data/vendor/assets/stylesheets/bootstrap/_close.scss +36 -0
  90. data/vendor/assets/stylesheets/bootstrap/_code.scss +69 -0
  91. data/vendor/assets/stylesheets/bootstrap/_component-animations.scss +37 -0
  92. data/vendor/assets/stylesheets/bootstrap/_dropdowns.scss +216 -0
  93. data/vendor/assets/stylesheets/bootstrap/_forms.scss +617 -0
  94. data/vendor/assets/stylesheets/bootstrap/_glyphicons.scss +307 -0
  95. data/vendor/assets/stylesheets/bootstrap/_grid.scss +84 -0
  96. data/vendor/assets/stylesheets/bootstrap/_input-groups.scss +171 -0
  97. data/vendor/assets/stylesheets/bootstrap/_jumbotron.scss +54 -0
  98. data/vendor/assets/stylesheets/bootstrap/_labels.scss +66 -0
  99. data/vendor/assets/stylesheets/bootstrap/_list-group.scss +130 -0
  100. data/vendor/assets/stylesheets/bootstrap/_media.scss +66 -0
  101. data/vendor/assets/stylesheets/bootstrap/_mixins.scss +40 -0
  102. data/vendor/assets/stylesheets/bootstrap/_modals.scss +150 -0
  103. data/vendor/assets/stylesheets/bootstrap/_navbar.scss +662 -0
  104. data/vendor/assets/stylesheets/bootstrap/_navs.scss +242 -0
  105. data/vendor/assets/stylesheets/bootstrap/_normalize.scss +424 -0
  106. data/vendor/assets/stylesheets/bootstrap/_pager.scss +54 -0
  107. data/vendor/assets/stylesheets/bootstrap/_pagination.scss +89 -0
  108. data/vendor/assets/stylesheets/bootstrap/_panels.scss +271 -0
  109. data/vendor/assets/stylesheets/bootstrap/_popovers.scss +131 -0
  110. data/vendor/assets/stylesheets/bootstrap/_print.scss +101 -0
  111. data/vendor/assets/stylesheets/bootstrap/_progress-bars.scss +87 -0
  112. data/vendor/assets/stylesheets/bootstrap/_responsive-embed.scss +35 -0
  113. data/vendor/assets/stylesheets/bootstrap/_responsive-utilities.scss +179 -0
  114. data/vendor/assets/stylesheets/bootstrap/_scaffolding.scss +161 -0
  115. data/vendor/assets/stylesheets/bootstrap/_tables.scss +234 -0
  116. data/vendor/assets/stylesheets/bootstrap/_theme.scss +291 -0
  117. data/vendor/assets/stylesheets/bootstrap/_thumbnails.scss +38 -0
  118. data/vendor/assets/stylesheets/bootstrap/_tooltip.scss +101 -0
  119. data/vendor/assets/stylesheets/bootstrap/_type.scss +298 -0
  120. data/vendor/assets/stylesheets/bootstrap/_utilities.scss +55 -0
  121. data/vendor/assets/stylesheets/bootstrap/_variables.scss +874 -0
  122. data/vendor/assets/stylesheets/bootstrap/_wells.scss +29 -0
  123. data/vendor/assets/stylesheets/bootstrap/mixins/_alerts.scss +14 -0
  124. data/vendor/assets/stylesheets/bootstrap/mixins/_background-variant.scss +12 -0
  125. data/vendor/assets/stylesheets/bootstrap/mixins/_border-radius.scss +18 -0
  126. data/vendor/assets/stylesheets/bootstrap/mixins/_buttons.scss +65 -0
  127. data/vendor/assets/stylesheets/bootstrap/mixins/_center-block.scss +7 -0
  128. data/vendor/assets/stylesheets/bootstrap/mixins/_clearfix.scss +22 -0
  129. data/vendor/assets/stylesheets/bootstrap/mixins/_forms.scss +88 -0
  130. data/vendor/assets/stylesheets/bootstrap/mixins/_gradients.scss +58 -0
  131. data/vendor/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +81 -0
  132. data/vendor/assets/stylesheets/bootstrap/mixins/_grid.scss +122 -0
  133. data/vendor/assets/stylesheets/bootstrap/mixins/_hide-text.scss +21 -0
  134. data/vendor/assets/stylesheets/bootstrap/mixins/_image.scss +33 -0
  135. data/vendor/assets/stylesheets/bootstrap/mixins/_labels.scss +12 -0
  136. data/vendor/assets/stylesheets/bootstrap/mixins/_list-group.scss +32 -0
  137. data/vendor/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +10 -0
  138. data/vendor/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +9 -0
  139. data/vendor/assets/stylesheets/bootstrap/mixins/_opacity.scss +8 -0
  140. data/vendor/assets/stylesheets/bootstrap/mixins/_pagination.scss +24 -0
  141. data/vendor/assets/stylesheets/bootstrap/mixins/_panels.scss +24 -0
  142. data/vendor/assets/stylesheets/bootstrap/mixins/_progress-bar.scss +10 -0
  143. data/vendor/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +8 -0
  144. data/vendor/assets/stylesheets/bootstrap/mixins/_reset-text.scss +18 -0
  145. data/vendor/assets/stylesheets/bootstrap/mixins/_resize.scss +6 -0
  146. data/vendor/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +21 -0
  147. data/vendor/assets/stylesheets/bootstrap/mixins/_size.scss +10 -0
  148. data/vendor/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +9 -0
  149. data/vendor/assets/stylesheets/bootstrap/mixins/_table-row.scss +28 -0
  150. data/vendor/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +12 -0
  151. data/vendor/assets/stylesheets/bootstrap/mixins/_text-overflow.scss +8 -0
  152. data/vendor/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +222 -0
  153. 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,9 @@
1
+ .input-group.date{onclick: remote_request(:get, date_locale_path)}
2
+ = f.text_field field, class: 'form-control datepicker'
3
+ .input-group-addon
4
+ %span.glyphicon.glyphicon-calendar
5
+
6
+ :javascript
7
+ $(function () {
8
+ $('.date').datepicker()
9
+ });
@@ -0,0 +1,7 @@
1
+ .container
2
+ .row
3
+ .col-lg-12
4
+ = render_flash_messages
5
+ .row
6
+ .col-lg-12
7
+ = yield
@@ -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,5 @@
1
+ .panel.panel-default
2
+ .panel-heading
3
+ %h2= heading
4
+ .panel-body
5
+ = render partial_body
@@ -0,0 +1,6 @@
1
+ = form_tag url, method: :get, html: {class: 'form-inline'} do
2
+ .form-group
3
+ .row
4
+ .col-sm-12
5
+ = search_field_tag :search, "", placeholder: t('search'), class: 'search-field'
6
+ = submit_tag t('search'), class: 'btn btn-primary'
@@ -0,0 +1,6 @@
1
+ - if resource.errors.any?
2
+ .alert.alert-danger
3
+ %h4= t "error_message_header", :count => resource.errors.count, :model => resource.class.model_name.human
4
+ %ul
5
+ - resource.errors.full_messages.each do |msg|
6
+ %li= 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">&times;</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,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -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: "&#8592; Previous"
34
+ next_label: "Next &#8594;"
35
+ page_gap: "&hellip;"
@@ -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: "&#8592; Anterior"
34
+ next_label: "Próximo &#8594;"
35
+ page_gap: "&hellip;"
@@ -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,3 @@
1
+ --color
2
+ --require spec_helper
3
+ --format documentation
@@ -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
+ }