jabysoft-base 0.1.4

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 (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
+ }