rails_lite 0.1.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 (80) hide show
  1. checksums.yaml +7 -0
  2. data/.DS_Store +0 -0
  3. data/.gitignore +8 -0
  4. data/Gemfile +6 -0
  5. data/Gemfile.lock +22 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +39 -0
  8. data/Rakefile +2 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/exe/railslite +4 -0
  12. data/lib/.DS_Store +0 -0
  13. data/lib/rails_lite.rb +6 -0
  14. data/lib/rails_lite/.DS_Store +0 -0
  15. data/lib/rails_lite/cli.rb +65 -0
  16. data/lib/rails_lite/version.rb +3 -0
  17. data/lib/scaffold/.DS_Store +0 -0
  18. data/lib/scaffold/Gemfile +12 -0
  19. data/lib/scaffold/app/controllers/albums_controller.rb +55 -0
  20. data/lib/scaffold/app/controllers/application_controller.rb +45 -0
  21. data/lib/scaffold/app/controllers/bands_controller.rb +62 -0
  22. data/lib/scaffold/app/controllers/notes_controller.rb +26 -0
  23. data/lib/scaffold/app/controllers/sessions_controller.rb +34 -0
  24. data/lib/scaffold/app/controllers/tracks_controller.rb +55 -0
  25. data/lib/scaffold/app/controllers/users_controller.rb +41 -0
  26. data/lib/scaffold/app/models/album.rb +14 -0
  27. data/lib/scaffold/app/models/application_model.rb +5 -0
  28. data/lib/scaffold/app/models/band.rb +7 -0
  29. data/lib/scaffold/app/models/note.rb +7 -0
  30. data/lib/scaffold/app/models/track.rb +20 -0
  31. data/lib/scaffold/app/models/user.rb +42 -0
  32. data/lib/scaffold/app/views/albums_controller/edit.html.erb +51 -0
  33. data/lib/scaffold/app/views/albums_controller/new.html.erb +50 -0
  34. data/lib/scaffold/app/views/albums_controller/show.html.erb +25 -0
  35. data/lib/scaffold/app/views/application.html.erb +41 -0
  36. data/lib/scaffold/app/views/bands_controller/edit.html.erb +16 -0
  37. data/lib/scaffold/app/views/bands_controller/index.html.erb +12 -0
  38. data/lib/scaffold/app/views/bands_controller/json.json.jbuilder +3 -0
  39. data/lib/scaffold/app/views/bands_controller/new.html.erb +15 -0
  40. data/lib/scaffold/app/views/bands_controller/show.html.erb +27 -0
  41. data/lib/scaffold/app/views/sessions_controller/new.html.erb +22 -0
  42. data/lib/scaffold/app/views/tracks_controller/edit.html.erb +60 -0
  43. data/lib/scaffold/app/views/tracks_controller/new.html.erb +59 -0
  44. data/lib/scaffold/app/views/tracks_controller/show.html.erb +56 -0
  45. data/lib/scaffold/app/views/users_controller/new.html.erb +22 -0
  46. data/lib/scaffold/app/views/users_controller/show.html.erb +4 -0
  47. data/lib/scaffold/bin/pry +13 -0
  48. data/lib/scaffold/bin/routes +10 -0
  49. data/lib/scaffold/bin/server +32 -0
  50. data/lib/scaffold/config/routes.rb +26 -0
  51. data/lib/scaffold/db/database.db +0 -0
  52. data/lib/scaffold/db/database.sql +48 -0
  53. data/lib/scaffold/lib/.DS_Store +0 -0
  54. data/lib/scaffold/lib/controller/controller_base.rb +183 -0
  55. data/lib/scaffold/lib/controller/controller_callbacks.rb +17 -0
  56. data/lib/scaffold/lib/controller/cookies/flash.rb +33 -0
  57. data/lib/scaffold/lib/controller/cookies/flash_now.rb +15 -0
  58. data/lib/scaffold/lib/controller/cookies/session.rb +29 -0
  59. data/lib/scaffold/lib/controller/strong_params.rb +40 -0
  60. data/lib/scaffold/lib/middleware/file_server.rb +42 -0
  61. data/lib/scaffold/lib/middleware/show_exceptions.rb +62 -0
  62. data/lib/scaffold/lib/middleware/static.rb +31 -0
  63. data/lib/scaffold/lib/middleware/templates/rescue.html.erb +49 -0
  64. data/lib/scaffold/lib/model/associations/assoc_options.rb +16 -0
  65. data/lib/scaffold/lib/model/associations/associatable.rb +120 -0
  66. data/lib/scaffold/lib/model/associations/belongs_to_options.rb +18 -0
  67. data/lib/scaffold/lib/model/associations/has_many_options.rb +17 -0
  68. data/lib/scaffold/lib/model/db_connection.rb +59 -0
  69. data/lib/scaffold/lib/model/model_base.rb +183 -0
  70. data/lib/scaffold/lib/model/model_callbacks.rb +46 -0
  71. data/lib/scaffold/lib/model/relations/relation.rb +151 -0
  72. data/lib/scaffold/lib/model/relations/searchable.rb +27 -0
  73. data/lib/scaffold/lib/model/validations/validations.rb +31 -0
  74. data/lib/scaffold/lib/model/validations/validator.rb +81 -0
  75. data/lib/scaffold/lib/router/route.rb +24 -0
  76. data/lib/scaffold/lib/router/router.rb +192 -0
  77. data/lib/scaffold/lib/utils/url_helpers.rb +96 -0
  78. data/lib/scaffold/public/main.css +165 -0
  79. data/rails_lite.gemspec +41 -0
  80. metadata +168 -0
@@ -0,0 +1,34 @@
1
+ class SessionsController < ApplicationController
2
+ protect_from_forgery
3
+
4
+ def new
5
+ @user = User.new
6
+ end
7
+
8
+ def create
9
+ username = session_params[:username]
10
+ password = session_params[:password]
11
+
12
+ @user = User.find_by_credentials(username, password)
13
+ if @user
14
+ login(@user)
15
+ redirect_to root_url
16
+ else
17
+ flash.now[:errors] = ['invalid username/password']
18
+ render :new
19
+ end
20
+ end
21
+
22
+ def destroy
23
+ logout
24
+ redirect_to new_sessions_url
25
+ end
26
+
27
+ private
28
+
29
+ def session_params
30
+ params.require(:user).permit(:username, :password)
31
+ end
32
+
33
+ before_action :ensure_logout, only: [:new, :create]
34
+ end
@@ -0,0 +1,55 @@
1
+ class TracksController < ApplicationController
2
+ protect_from_forgery
3
+
4
+ def show
5
+ @track = Track.find(params[:id])
6
+ render :show
7
+ end
8
+
9
+ def new
10
+ @album = Album.find(params[:album_id])
11
+ @track = Track.new(album_id: params[:album_id])
12
+ render :new
13
+ end
14
+
15
+ def create
16
+ @track = Track.new(track_params)
17
+
18
+ if @track.save
19
+ redirect_to track_url(@track)
20
+ else
21
+ @album = @track.album
22
+ flash.now[:errors] = @track.errors
23
+ render :new
24
+ end
25
+ end
26
+
27
+ def edit
28
+ @track = Track.find(params[:id])
29
+ render :edit
30
+ end
31
+
32
+ def update
33
+ @track = Track.find(params[:id])
34
+ if @track.update_attributes(track_params)
35
+ redirect_to track_url(@track)
36
+ else
37
+ flash.now[:errors] = @track.errors
38
+ render :edit
39
+ end
40
+ end
41
+
42
+ def destroy
43
+ @track = Track.find(params[:id])
44
+ @track.destroy
45
+ redirect_to album_url(@track.album_id)
46
+ end
47
+
48
+ private
49
+
50
+ def track_params
51
+ params.require(:track).permit(:album_id, :bonus, :lyrics, :name, :ord)
52
+ end
53
+
54
+ before_action :ensure_login, except: [:index]
55
+ end
@@ -0,0 +1,41 @@
1
+ class UsersController < ApplicationController
2
+ protect_from_forgery
3
+
4
+ def index
5
+ @users = User.all
6
+ end
7
+
8
+ def show
9
+ @user = User.find(params[:id])
10
+ end
11
+
12
+ def new
13
+ @user = User.new
14
+ end
15
+
16
+ def create
17
+ @user = User.new(user_params)
18
+ if @user.save
19
+ login(@user)
20
+ redirect_to bands_url
21
+ else
22
+ flash.now[:errors] = @user.errors
23
+ render :new
24
+ end
25
+ end
26
+
27
+ def destroy
28
+ user = User.find(params[:id])
29
+ user.destroy
30
+ redirect_to users_url
31
+ end
32
+
33
+ private
34
+
35
+ def user_params
36
+ params.require(:user).permit(:username, :password)
37
+ end
38
+
39
+ before_action :ensure_logout, only: [:new, :create]
40
+ before_action :ensure_login, only: [:index, :show, :destroy]
41
+ end
@@ -0,0 +1,14 @@
1
+ class Album < ApplicationModel
2
+ belongs_to :band
3
+ has_many :tracks
4
+
5
+ validates :band, presence: true
6
+ validates :name, presence: true
7
+ validates :year, presence: true
8
+
9
+ after_initialize :set_defaults
10
+
11
+ def set_defaults
12
+ self.live ||= false
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ require_relative '../../lib/model/model_base'
2
+
3
+ class ApplicationModel < ModelBase
4
+
5
+ end
@@ -0,0 +1,7 @@
1
+ # require_relative '../lib/sql_object'
2
+
3
+ class Band < ApplicationModel
4
+ validates :name, presence: true, uniqueness: true
5
+
6
+ has_many :albums
7
+ end
@@ -0,0 +1,7 @@
1
+ class Note < ApplicationModel
2
+
3
+ validates :content, presence: true
4
+
5
+ belongs_to :user
6
+ belongs_to :track
7
+ end
@@ -0,0 +1,20 @@
1
+ class Track < ApplicationModel
2
+
3
+ validates :lyrics, presence: true
4
+ validates :name, presence: true
5
+ validates :ord, presence: true
6
+
7
+ belongs_to :album
8
+
9
+ has_one :band,
10
+ through: :album,
11
+ source: :band
12
+
13
+ has_many :notes
14
+
15
+ after_initialize :set_defaults
16
+
17
+ def set_defaults
18
+ self.bonus ||= false
19
+ end
20
+ end
@@ -0,0 +1,42 @@
1
+ require 'bcrypt'
2
+
3
+ class User < ApplicationModel
4
+ validates :username, presence: true, class: String, uniqueness: true
5
+ validates :password_digest, presence: true
6
+ validates :password, length: { minimum: 6, allow_nil: true }
7
+ validates :session_token, presence: true, uniqueness: true
8
+
9
+ has_many :notes
10
+
11
+ after_initialize :ensure_token
12
+
13
+ attr_reader :password
14
+
15
+ def self.find_by_credentials(username, password)
16
+ user = User.find_by(username: username)
17
+ user && user.is_password?(password) ? user : nil
18
+ end
19
+
20
+ def self.generate_token
21
+ SecureRandom::urlsafe_base64
22
+ end
23
+
24
+ def password=(password)
25
+ @password = password
26
+ self.password_digest = BCrypt::Password.create(password)
27
+ end
28
+
29
+ def ensure_token
30
+ self.session_token ||= User.generate_token
31
+ end
32
+
33
+ def reset_token!
34
+ self.session_token = User.generate_token
35
+ self.save!
36
+ self.session_token
37
+ end
38
+
39
+ def is_password?(password)
40
+ BCrypt::Password.new(self.password_digest).is_password?(password)
41
+ end
42
+ end
@@ -0,0 +1,51 @@
1
+ <h1 class='page-header'>Edit <%= @album.name %></h1>
2
+
3
+ <form class='form' action="<%= album_url(@album) %>" method="POST">
4
+ <input type="hidden" name="_method" value="PATCH">
5
+ <input
6
+ type="hidden"
7
+ name="authenticity_token"
8
+ value="<%= form_authenticity_token %>">
9
+
10
+ <p>
11
+ <label for='album-name'>Name</label>
12
+ <input id='album-name' type="text" name="album[name]" value="<%= @album.name %>">
13
+ </p>
14
+
15
+ <p>
16
+ <label for='album-band'>Band</label>
17
+ <select id='album-band' name="album[band_id]">
18
+ <% Band.all.each do |band| %>
19
+ <option
20
+ <%= "selected" if @album.band_id == band.id %>
21
+ value="<%= band.id %>">
22
+ <%= band.name %>
23
+ </option>
24
+ <% end %>
25
+ </select>
26
+ </p>
27
+
28
+ <p>
29
+ <label for="album_live_t">Live</label>
30
+ <input
31
+ type="radio"
32
+ name="album[live]"
33
+ value="t"
34
+ id="album_live_t"
35
+ <%= "checked" if @album.live %>>
36
+ <label for="album_live_f">Studio</label>
37
+ <input
38
+ type="radio"
39
+ name="album[live]"
40
+ value="f"
41
+ id="album_live_f"
42
+ <%= "checked" if !@album.live %>>
43
+ </p>
44
+
45
+ <p>
46
+ <label for='album-year'>Year</label>
47
+ <input id='album-year' type="number" name="album[year]" value="<%= @album.year %>">
48
+ </p>
49
+
50
+ <input type="submit" value="Update Album!">
51
+ </form>
@@ -0,0 +1,50 @@
1
+ <h1 class='page-header'>New <%= @band.name %> Album!</h1>
2
+
3
+ <form class='form' action="<%= albums_url %>" method="POST">
4
+ <input
5
+ type="hidden"
6
+ name="authenticity_token"
7
+ value="<%= form_authenticity_token %>">
8
+
9
+ <p>
10
+ <label for='album-name'>Name</label>
11
+ <input id='album-name' type="text" name="album[name]" value="<%= @album.name %>">
12
+ </p>
13
+
14
+ <p>
15
+ <label for='album-band'>Band</label>
16
+ <select id='album-band' name="album[band_id]">
17
+ <% Band.all.each do |band| %>
18
+ <option
19
+ <%= "selected" if @album.band_id == band.id %>
20
+ value="<%= band.id %>">
21
+ <%= band.name %>
22
+ </option>
23
+ <% end %>
24
+ </select>
25
+ </p>
26
+
27
+ <p>
28
+ <label for="album_live_t">Live</label>
29
+ <input
30
+ type="radio"
31
+ name="album[live]"
32
+ value="t"
33
+ id="album_live_t"
34
+ <%= "checked" if @album.live %>>
35
+ <label for="album_live_f">Studio</label>
36
+ <input
37
+ type="radio"
38
+ name="album[live]"
39
+ value="f"
40
+ id="album_live_f"
41
+ <%= "checked" if !@album.live %>>
42
+ </p>
43
+
44
+ <p>
45
+ <label for='album-year'>Year</label>
46
+ <input id='album-year' type="number" name="album[year]" value="<%= @album.year %>">
47
+ </p>
48
+
49
+ <input type="submit" value="Create Album!">
50
+ </form>
@@ -0,0 +1,25 @@
1
+ <h1 class='page-header'><%= @album.name %></h1>
2
+
3
+ <% if @album.tracks.length > 0 %>
4
+ <ul class='main-list'>
5
+ <% @album.tracks.each do |track| %>
6
+ <li><a href="<%= track_url(track) %>"><p><%= track.name %></p></a></li>
7
+ <% end %>
8
+ </ul>
9
+ <% else %>
10
+ <p>This album has no tracks... yet!</p>
11
+ <% end %>
12
+
13
+ <h4 class='sub-header'>Links</h4>
14
+ <ul class='page-links'>
15
+ <li><a class='button' href="<%= new_album_tracks_url(@album) %>">New track</a></li>
16
+ <li><a class='button' href="<%= edit_album_url(@album) %>">Edit album</a></li>
17
+ <li>
18
+ <form action="<%= album_url(@album) %>" method="POST">
19
+ <input type="hidden" name="_method" value="DELETE">
20
+ <input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>" >
21
+ <input type="submit" value="Destroy Album">
22
+ </form>
23
+ </li>
24
+ <li><a class='button' href="<%= band_url(@album.band) %>">Back to <%= @album.band.name %></a></li>
25
+ </ul>
@@ -0,0 +1,41 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
5
+ <link rel="stylesheet" type="text/css" href="/public/main.css" />
6
+ </head>
7
+
8
+ <body>
9
+ <div class='main-content'>
10
+ <h1 class='main-logo'>Music App</h1>
11
+
12
+ <% if logged_in? %>
13
+ <nav>
14
+ <a class='button' href="<%= bands_url %>">Take me Home</a>
15
+
16
+ <div class='user-detail'>
17
+ <p>Logged in as: <%= current_user.username %></p>
18
+ <form action=<%= sessions_url %> method='post'>
19
+ <input
20
+ type="hidden"
21
+ name="_method"
22
+ value="delete">
23
+ <input
24
+ type="hidden"
25
+ name="authenticity_token"
26
+ value="<%= form_authenticity_token %>">
27
+ <input
28
+ type="submit" value="Sign Out">
29
+ </form>
30
+ </div>
31
+ </nav>
32
+ <% end %>
33
+
34
+ <% if flash[:errors] %>
35
+ <p><%= flash[:errors].join(", ") %></p>
36
+ <% end %>
37
+
38
+ <%= yield %>
39
+ </div>
40
+ </body>
41
+ </html>
@@ -0,0 +1,16 @@
1
+ <h1 class='page-header'>Edit <%= @band.name %></h1>
2
+
3
+ <form class='form' action="<%= band_url(@band) %>" method="POST">
4
+ <input type="hidden" name="_method" value="PATCH">
5
+ <input
6
+ type="hidden"
7
+ name="authenticity_token"
8
+ value="<%= form_authenticity_token %>">
9
+
10
+ <p>
11
+ <label for='band-name'>Name</label>
12
+ <input id='band-name' type="text" name="band[name]" value="<%= @band.name %>">
13
+ </p>
14
+
15
+ <input type="submit">
16
+ </form>
@@ -0,0 +1,12 @@
1
+ <h1 class='page-header'>Bands</h1>
2
+
3
+ <ul class='main-list'>
4
+ <% @bands.each do |band| %>
5
+ <li><a href="<%= band_url(band) %>"><p><%= band.name %></p></a></li>
6
+ <% end %>
7
+ </ul>
8
+
9
+ <h4 class='sub-header'>Links</h4>
10
+ <ul class='page-links'>
11
+ <li><a class='button' href="<%= new_bands_url %>" >New band</a></li>
12
+ </ul>