rails_lite 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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>