bootstrap-on 0.0.0

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 (71) hide show
  1. data/.document +5 -0
  2. data/Gemfile +13 -0
  3. data/Gemfile.lock +90 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.md +98 -0
  6. data/Rakefile +38 -0
  7. data/VERSION +1 -0
  8. data/bootstrap-on.gemspec +127 -0
  9. data/lib/bootstrap-on.rb +6 -0
  10. data/lib/bootstrap-on/bs_admin.rb +138 -0
  11. data/lib/bootstrap-on/bs_admin_page.rb +55 -0
  12. data/lib/bootstrap-on/templates/.DS_Store +0 -0
  13. data/lib/bootstrap-on/templates/account/.DS_Store +0 -0
  14. data/lib/bootstrap-on/templates/account/activerecord.rb.tt +38 -0
  15. data/lib/bootstrap-on/templates/account/couchrest.rb.tt +66 -0
  16. data/lib/bootstrap-on/templates/account/datamapper.rb.tt +55 -0
  17. data/lib/bootstrap-on/templates/account/mini_record.rb.tt +41 -0
  18. data/lib/bootstrap-on/templates/account/mongoid.rb.tt +53 -0
  19. data/lib/bootstrap-on/templates/account/mongomapper.rb.tt +46 -0
  20. data/lib/bootstrap-on/templates/account/seeds.rb.tt +28 -0
  21. data/lib/bootstrap-on/templates/account/sequel.rb.tt +52 -0
  22. data/lib/bootstrap-on/templates/app.rb.tt +36 -0
  23. data/lib/bootstrap-on/templates/app/controllers/base.rb +6 -0
  24. data/lib/bootstrap-on/templates/app/controllers/sessions.rb.tt +26 -0
  25. data/lib/bootstrap-on/templates/app/helpers/application_helper.rb +23 -0
  26. data/lib/bootstrap-on/templates/assets/.DS_Store +0 -0
  27. data/lib/bootstrap-on/templates/assets/css/bootstrap-responsive.css +815 -0
  28. data/lib/bootstrap-on/templates/assets/css/bootstrap-responsive.min.css +9 -0
  29. data/lib/bootstrap-on/templates/assets/css/bootstrap.css +4983 -0
  30. data/lib/bootstrap-on/templates/assets/css/bootstrap.min.css +9 -0
  31. data/lib/bootstrap-on/templates/assets/ico/apple-touch-icon-114-precomposed.png +0 -0
  32. data/lib/bootstrap-on/templates/assets/ico/apple-touch-icon-144-precomposed.png +0 -0
  33. data/lib/bootstrap-on/templates/assets/ico/apple-touch-icon-57-precomposed.png +0 -0
  34. data/lib/bootstrap-on/templates/assets/ico/apple-touch-icon-72-precomposed.png +0 -0
  35. data/lib/bootstrap-on/templates/assets/ico/favicon.ico +0 -0
  36. data/lib/bootstrap-on/templates/assets/img/glyphicons-halflings-white.png +0 -0
  37. data/lib/bootstrap-on/templates/assets/img/glyphicons-halflings.png +0 -0
  38. data/lib/bootstrap-on/templates/assets/js/.DS_Store +0 -0
  39. data/lib/bootstrap-on/templates/assets/js/bootstrap.js +1825 -0
  40. data/lib/bootstrap-on/templates/assets/js/bootstrap.min.js +6 -0
  41. data/lib/bootstrap-on/templates/assets/js/jquery-min.js +4 -0
  42. data/lib/bootstrap-on/templates/assets/js/jquery-ujs.js +92 -0
  43. data/lib/bootstrap-on/templates/assets/js/jquery.js +9404 -0
  44. data/lib/bootstrap-on/templates/erb/app/base/index.erb.tt +16 -0
  45. data/lib/bootstrap-on/templates/erb/app/layouts/application.erb.tt +79 -0
  46. data/lib/bootstrap-on/templates/erb/app/sessions/new.erb.tt +98 -0
  47. data/lib/bootstrap-on/templates/erb/page/_form.erb.tt +16 -0
  48. data/lib/bootstrap-on/templates/erb/page/edit.erb.tt +26 -0
  49. data/lib/bootstrap-on/templates/erb/page/index.erb.tt +41 -0
  50. data/lib/bootstrap-on/templates/erb/page/new.erb.tt +23 -0
  51. data/lib/bootstrap-on/templates/haml/app/base/index.haml.tt +23 -0
  52. data/lib/bootstrap-on/templates/haml/app/layouts/application.haml.tt +31 -0
  53. data/lib/bootstrap-on/templates/haml/app/sessions/new.haml.tt +30 -0
  54. data/lib/bootstrap-on/templates/haml/page/_form.haml.tt +12 -0
  55. data/lib/bootstrap-on/templates/haml/page/edit.haml.tt +15 -0
  56. data/lib/bootstrap-on/templates/haml/page/index.haml.tt +29 -0
  57. data/lib/bootstrap-on/templates/haml/page/new.haml.tt +14 -0
  58. data/lib/bootstrap-on/templates/page/controller.rb.tt +47 -0
  59. data/lib/bootstrap-on/templates/slim/app/base/index.slim.tt +23 -0
  60. data/lib/bootstrap-on/templates/slim/app/layouts/application.slim.tt +31 -0
  61. data/lib/bootstrap-on/templates/slim/app/sessions/new.slim.tt +31 -0
  62. data/lib/bootstrap-on/templates/slim/page/_form.slim.tt +14 -0
  63. data/lib/bootstrap-on/templates/slim/page/edit.slim.tt +16 -0
  64. data/lib/bootstrap-on/templates/slim/page/index.slim.tt +30 -0
  65. data/lib/bootstrap-on/templates/slim/page/new.slim.tt +15 -0
  66. data/test/bootstrap-on/test_bs_admin_generator.rb +332 -0
  67. data/test/bootstrap-on/test_bs_admin_page_generator.rb +132 -0
  68. data/test/helper.rb +98 -0
  69. data/test/load_paths.rb +6 -0
  70. data/test/test_bootstrap-on.rb +15 -0
  71. metadata +240 -0
@@ -0,0 +1,55 @@
1
+ module Padrino
2
+ module Generators
3
+ ##
4
+ # Defines the generator for creating a new admin page.
5
+ #
6
+ class BsAdminPage < Thor::Group
7
+ attr_accessor :default_orm
8
+
9
+ # Add this generator to our padrino-gen
10
+ Padrino::Generators.add_generator(:bs_admin_page, self)
11
+
12
+ # Define the source template root
13
+ def self.source_root; File.expand_path(File.dirname(__FILE__)); end
14
+ # Defines the "banner" text for the CLI.
15
+ def self.banner; "padrino g bs_admin_page [model]"; end
16
+
17
+ # Include related modules
18
+ include Thor::Actions
19
+ include Padrino::Generators::Actions
20
+ include Padrino::Generators::Admin::Actions
21
+
22
+ desc "Description:\n\n\tpadrino g bs_admin_page [model(s)] - Generates a new Padrino Admin page with Twitter Bootstrapped integrated"
23
+
24
+ argument :models, :desc => "The name(s) of your model(s)", :type => :array
25
+ class_option :skip_migration, :aliases => "-s", :default => false, :type => :boolean
26
+ class_option :root, :desc => "The root destination", :aliases => '-r', :type => :string
27
+ class_option :destroy, :aliases => '-d', :default => false, :type => :boolean
28
+
29
+ # Show help if no argv given
30
+ require_arguments!
31
+
32
+ # Create controller for admin
33
+ def create_controller
34
+ self.destination_root = options[:root]
35
+ if in_app_root?
36
+ models.each do |model|
37
+ @orm = default_orm || Padrino::Admin::Generators::Orm.new(model, adapter)
38
+ self.behavior = :revoke if options[:destroy]
39
+ empty_directory destination_root("/admin/views/#{@orm.name_plural}")
40
+
41
+ template "templates/page/controller.rb.tt", destination_root("/admin/controllers/#{@orm.name_plural}.rb")
42
+ template "templates/#{ext}/page/_form.#{ext}.tt", destination_root("/admin/views/#{@orm.name_plural}/_form.#{ext}")
43
+ template "templates/#{ext}/page/edit.#{ext}.tt", destination_root("/admin/views/#{@orm.name_plural}/edit.#{ext}")
44
+ template "templates/#{ext}/page/index.#{ext}.tt", destination_root("/admin/views/#{@orm.name_plural}/index.#{ext}")
45
+ template "templates/#{ext}/page/new.#{ext}.tt", destination_root("/admin/views/#{@orm.name_plural}/new.#{ext}")
46
+
47
+ options[:destroy] ? remove_project_module(@orm.name_plural) : add_project_module(@orm.name_plural)
48
+ end
49
+ else
50
+ say "You are not at the root of a Padrino application! (config/boot.rb not found)"
51
+ end
52
+ end
53
+ end # AdminPage
54
+ end # Generators
55
+ end # Padrino
@@ -0,0 +1,38 @@
1
+ class <%= @model_name %> < ActiveRecord::Base
2
+ attr_accessor :password, :password_confirmation
3
+
4
+ # Validations
5
+ validates_presence_of :email, :role
6
+ validates_presence_of :password, :if => :password_required
7
+ validates_presence_of :password_confirmation, :if => :password_required
8
+ validates_length_of :password, :within => 4..40, :if => :password_required
9
+ validates_confirmation_of :password, :if => :password_required
10
+ validates_length_of :email, :within => 3..100
11
+ validates_uniqueness_of :email, :case_sensitive => false
12
+ validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
13
+ validates_format_of :role, :with => /[A-Za-z]/
14
+
15
+ # Callbacks
16
+ before_save :encrypt_password, :if => :password_required
17
+
18
+ ##
19
+ # This method is for authentication purpose
20
+ #
21
+ def self.authenticate(email, password)
22
+ account = first(:conditions => { :email => email }) if email.present?
23
+ account && account.has_password?(password) ? account : nil
24
+ end
25
+
26
+ def has_password?(password)
27
+ ::BCrypt::Password.new(crypted_password) == password
28
+ end
29
+
30
+ private
31
+ def encrypt_password
32
+ self.crypted_password = ::BCrypt::Password.create(password)
33
+ end
34
+
35
+ def password_required
36
+ crypted_password.blank? || password.present?
37
+ end
38
+ end
@@ -0,0 +1,66 @@
1
+ class <%= @model_name %> < CouchRest::Model::Base
2
+ attr_accessor :password, :password_confirmation
3
+
4
+ # Properties
5
+ property :name
6
+ property :surname
7
+ property :email
8
+ property :crypted_password
9
+ property :role
10
+
11
+ view_by :email
12
+
13
+ # Validations
14
+ validates_presence_of :email, :role
15
+ validates_presence_of :password, :if => :password_required
16
+ validates_presence_of :password_confirmation, :if => :password_required
17
+ validates_length_of :password, :within => 4..40, :if => :password_required
18
+ validates_confirmation_of :password, :if => :password_required
19
+ validates_length_of :email, :within => 3..100
20
+ validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
21
+ validates_format_of :role, :with => /[A-Za-z]/
22
+ validate :unique_email_validator
23
+
24
+ # Callbacks
25
+ before_save :encrypt_password, :if => :password_required
26
+
27
+ ##
28
+ # This method is for authentication purpose
29
+ #
30
+ def self.authenticate(email, password)
31
+ account = find_by_email(email)
32
+ account if account && account.has_password?(password)
33
+ end
34
+
35
+ def has_password?(password)
36
+ ::BCrypt::Password.new(crypted_password) == password
37
+ end
38
+
39
+ ##
40
+ # This method is used by AuthenticationHelper
41
+ #
42
+ def self.find_by_id(id)
43
+ get(id)
44
+ end
45
+
46
+ private
47
+ def encrypt_password
48
+ self.crypted_password = ::BCrypt::Password.create(password)
49
+ end
50
+
51
+ def password_required
52
+ crypted_password.blank? || password.present?
53
+ end
54
+
55
+ def unique_email_validator
56
+ account = self.class.find_by_email(email)
57
+
58
+ # didn't find email in the database
59
+ return if account.nil?
60
+
61
+ # account with same email in database is this account
62
+ return if has_key?('_id') && self['_id'] == account['_id']
63
+
64
+ errors.add(:email, "is not unique")
65
+ end
66
+ end
@@ -0,0 +1,55 @@
1
+ class <%= @model_name %>
2
+ include DataMapper::Resource
3
+ include DataMapper::Validate
4
+ attr_accessor :password, :password_confirmation
5
+
6
+ # Properties
7
+ property :id, Serial
8
+ property :name, String
9
+ property :surname, String
10
+ property :email, String
11
+ property :crypted_password, String, :length => 70
12
+ property :role, String
13
+
14
+ # Validations
15
+ validates_presence_of :email, :role
16
+ validates_presence_of :password, :if => :password_required
17
+ validates_presence_of :password_confirmation, :if => :password_required
18
+ validates_length_of :password, :min => 4, :max => 40, :if => :password_required
19
+ validates_confirmation_of :password, :if => :password_required
20
+ validates_length_of :email, :min => 3, :max => 100
21
+ validates_uniqueness_of :email, :case_sensitive => false
22
+ validates_format_of :email, :with => :email_address
23
+ validates_format_of :role, :with => /[A-Za-z]/
24
+
25
+ # Callbacks
26
+ before :save, :encrypt_password
27
+
28
+ ##
29
+ # This method is for authentication purpose
30
+ #
31
+ def self.authenticate(email, password)
32
+ account = first(:conditions => { :email => email }) if email.present?
33
+ account && account.has_password?(password) ? account : nil
34
+ end
35
+
36
+ ##
37
+ # This method is used by AuthenticationHelper
38
+ #
39
+ def self.find_by_id(id)
40
+ get(id) rescue nil
41
+ end
42
+
43
+ def has_password?(password)
44
+ ::BCrypt::Password.new(crypted_password) == password
45
+ end
46
+
47
+ private
48
+ def password_required
49
+ crypted_password.blank? || password.present?
50
+ end
51
+
52
+ def encrypt_password
53
+ self.crypted_password = ::BCrypt::Password.create(password) if password.present?
54
+ end
55
+ end
@@ -0,0 +1,41 @@
1
+ class <%= @model_name %> < ActiveRecord::Base
2
+ attr_accessor :password, :password_confirmation
3
+
4
+ # Fields
5
+ field :name, :surname, :email, :crypted_password, :role
6
+
7
+ # Validations
8
+ validates_presence_of :email, :role
9
+ validates_presence_of :password, :if => :password_required
10
+ validates_presence_of :password_confirmation, :if => :password_required
11
+ validates_length_of :password, :within => 4..40, :if => :password_required
12
+ validates_confirmation_of :password, :if => :password_required
13
+ validates_length_of :email, :within => 3..100
14
+ validates_uniqueness_of :email, :case_sensitive => false
15
+ validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
16
+ validates_format_of :role, :with => /[A-Za-z]/
17
+
18
+ # Callbacks
19
+ before_save :encrypt_password, :if => :password_required
20
+
21
+ ##
22
+ # This method is for authentication purpose
23
+ #
24
+ def self.authenticate(email, password)
25
+ account = first(:conditions => { :email => email }) if email.present?
26
+ account && account.has_password?(password) ? account : nil
27
+ end
28
+
29
+ def has_password?(password)
30
+ ::BCrypt::Password.new(crypted_password) == password
31
+ end
32
+
33
+ private
34
+ def encrypt_password
35
+ self.crypted_password = ::BCrypt::Password.create(password)
36
+ end
37
+
38
+ def password_required
39
+ crypted_password.blank? || password.present?
40
+ end
41
+ end
@@ -0,0 +1,53 @@
1
+ class <%= @model_name %>
2
+ include Mongoid::Document
3
+ attr_accessor :password, :password_confirmation
4
+
5
+ # Fields
6
+ field :name, :type => String
7
+ field :surname, :type => String
8
+ field :email, :type => String
9
+ field :crypted_password, :type => String
10
+ field :role, :type => String
11
+
12
+ # Validations
13
+ validates_presence_of :email, :role
14
+ validates_presence_of :password, :if => :password_required
15
+ validates_presence_of :password_confirmation, :if => :password_required
16
+ validates_length_of :password, :within => 4..40, :if => :password_required
17
+ validates_confirmation_of :password, :if => :password_required
18
+ validates_length_of :email, :within => 3..100
19
+ validates_uniqueness_of :email, :case_sensitive => false
20
+ validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
21
+ validates_format_of :role, :with => /[A-Za-z]/
22
+
23
+ # Callbacks
24
+ before_save :encrypt_password, :if => :password_required
25
+
26
+ ##
27
+ # This method is for authentication purpose
28
+ #
29
+ def self.authenticate(email, password)
30
+ account = first(:conditions => { :email => email }) if email.present?
31
+ account && account.has_password?(password) ? account : nil
32
+ end
33
+
34
+ ##
35
+ # This method is used by AuthenticationHelper
36
+ #
37
+ def self.find_by_id(id)
38
+ find(id) rescue nil
39
+ end
40
+
41
+ def has_password?(password)
42
+ ::BCrypt::Password.new(crypted_password) == password
43
+ end
44
+
45
+ private
46
+ def encrypt_password
47
+ self.crypted_password = ::BCrypt::Password.create(self.password)
48
+ end
49
+
50
+ def password_required
51
+ crypted_password.blank? || self.password.present?
52
+ end
53
+ end
@@ -0,0 +1,46 @@
1
+ class <%= @model_name %>
2
+ include MongoMapper::Document
3
+ attr_accessor :password, :password_confirmation
4
+
5
+ # Keys
6
+ key :name, String
7
+ key :surname, String
8
+ key :email, String
9
+ key :crypted_password, String
10
+ key :role, String
11
+
12
+ # Validations
13
+ validates_presence_of :email, :role
14
+ validates_presence_of :password, :if => :password_required
15
+ validates_presence_of :password_confirmation, :if => :password_required
16
+ validates_length_of :password, :within => 4..40, :if => :password_required
17
+ validates_confirmation_of :password, :if => :password_required
18
+ validates_length_of :email, :within => 3..100
19
+ validates_uniqueness_of :email, :case_sensitive => false
20
+ validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
21
+ validates_format_of :role, :with => /[A-Za-z]/
22
+
23
+ # Callbacks
24
+ before_save :encrypt_password, :if => :password_required
25
+
26
+ ##
27
+ # This method is for authentication purpose
28
+ #
29
+ def self.authenticate(email, password)
30
+ account = first(:email => email) if email.present?
31
+ account && account.has_password?(password) ? account : nil
32
+ end
33
+
34
+ def has_password?(password)
35
+ ::BCrypt::Password.new(crypted_password) == password
36
+ end
37
+
38
+ private
39
+ def encrypt_password
40
+ self.crypted_password = ::BCrypt::Password.create(password)
41
+ end
42
+
43
+ def password_required
44
+ crypted_password.blank? || password.present?
45
+ end
46
+ end
@@ -0,0 +1,28 @@
1
+ # Seed add you the ability to populate your db.
2
+ # We provide you a basic shell for interaction with the end user.
3
+ # So try some code like below:
4
+ #
5
+ # name = shell.ask("What's your name?")
6
+ # shell.say name
7
+ #
8
+ email = shell.ask "Which email do you want use for logging into admin?"
9
+ password = shell.ask "Tell me the password to use:"
10
+
11
+ shell.say ""
12
+
13
+ account = <%= @model_name %>.create(:email => email, :name => "Foo", :surname => "Bar", :password => password, :password_confirmation => password, :role => "admin")
14
+
15
+ if account.valid?
16
+ shell.say "================================================================="
17
+ shell.say "<%= @model_name %> has been successfully created, now you can login with:"
18
+ shell.say "================================================================="
19
+ shell.say " email: #{email}"
20
+ shell.say " password: #{password}"
21
+ shell.say "================================================================="
22
+ else
23
+ shell.say "Sorry but some thing went wrong!"
24
+ shell.say ""
25
+ account.errors.full_messages.each { |m| shell.say " - #{m}" }
26
+ end
27
+
28
+ shell.say ""
@@ -0,0 +1,52 @@
1
+ class <%= @model_name %> < ::Sequel::Model
2
+
3
+ plugin :validation_helpers
4
+
5
+ attr_accessor :password, :password_confirmation
6
+
7
+ def validate
8
+ validates_presence :email
9
+ validates_presence :role
10
+ validates_presence :password if password_required
11
+ validates_presence :password_confirmation if password_required
12
+ validates_length_range 4..40, :password unless password.blank?
13
+ errors.add(:password_confirmation, 'must confirm password') if !password.blank? && password != password_confirmation
14
+ validates_length_range 3..100, :email unless email.blank?
15
+ validates_unique :email unless email.blank?
16
+ validates_format /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :email unless email.blank?
17
+ validates_format /[A-Za-z]/, :role unless role.blank?
18
+ end
19
+
20
+ # Callbacks
21
+ def before_save
22
+ encrypt_password
23
+ end
24
+
25
+ ##
26
+ # This method is for authentication purpose
27
+ #
28
+ def self.authenticate(email, password)
29
+ account = filter(:email => email).first
30
+ account && account.has_password?(password) ? account : nil
31
+ end
32
+
33
+ ##
34
+ # Replace AR method
35
+ #
36
+ def self.find_by_id(id)
37
+ self[id] rescue nil
38
+ end
39
+
40
+ def has_password?(password)
41
+ ::BCrypt::Password.new(self.crypted_password) == password
42
+ end
43
+
44
+ private
45
+ def encrypt_password
46
+ self.crypted_password = ::BCrypt::Password.create(password) if password.present?
47
+ end
48
+
49
+ def password_required
50
+ self.crypted_password.blank? || password.present?
51
+ end
52
+ end