rails_lite 0.1.2 → 0.1.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7759a770dc9602ef49cb194ca84f76800a38187f0fc77ebd8ab249695064a51e
4
- data.tar.gz: c3670509e07359ba58f390ff14ac32481fd6385d3601d958f0431d8973391b18
3
+ metadata.gz: dbcf381a06732d23f274997af2d2e67977087cb6b59d773189e2ee766684f9dc
4
+ data.tar.gz: bc3332186e697520dc19a42dc922549222cbe6f7ec0926cd176299eb4ff00d10
5
5
  SHA512:
6
- metadata.gz: 2add2ce2b42b6d29051dea795cbc08b660e7339fb12e97a0acc48d7587a58a39d0c709d193b8c338424f6f685d44d197a74578a690f951ebf0638736e477a1d1
7
- data.tar.gz: 0b5d8c6e7e47507619d1137dd1d0ea98b24c521076f1dd6f46507dd784e8a5998a89b730b183998d84948edf92b77eccac6d70493ccded75916184df490e5a91
6
+ metadata.gz: 403808d65334e44514bd141b1a0982379425be91252cb36aa3e861ee3afdedb7b36ba611c793198701c573cc91311cca92d5e2186782c011b22935828223d5fb
7
+ data.tar.gz: ee7286b773cc84d8d532c1fcf809258f8f2c429b2a71226c9c5fb874c197d615bcc5039201dd3c7b52898db1cdea9c99a90f723a3883769364b0291ffb88241c
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # RailsLite
2
2
 
3
- Lyle is an MVC framework for building web applications. Some features include:
3
+ RailsLite is an MVC framework for building web applications. Some features include:
4
4
 
5
5
  * SQLite or PostgreSQL ORM with associations and search
6
6
  * Controllers with Session and Flash Management
@@ -33,13 +33,229 @@ Or install it yourself as:
33
33
 
34
34
  ## Usage
35
35
 
36
- TODO: Write usage instructions here
36
+ ### Creating a Project
37
37
 
38
- ## Development
38
+ To create a new project navigate the directory you would like to create the project and run:
39
39
 
40
- After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
40
+ $ railslite new [PROJECT_NAME]
41
+
42
+ To start a local server run either:
43
+
44
+ $ railslite server
45
+ $ railslite s
46
+
47
+ To open pry for your project run either:
48
+
49
+ $ railslite console
50
+ $ railslite c
51
+
52
+ ### Database
53
+
54
+ RailsLite's ORM works with SQLite, so you will need to edit the `db/database.sql` file to reflect your schema and include your seeds. Then run:
55
+
56
+ $ railslite dbreset
57
+
58
+ ### Routes
59
+
60
+ Routes go in the `config/routes.rb` file. Routes work exactly like they do in rails.
61
+
62
+ ```ruby
63
+ root to: 'bands#index'
64
+
65
+ resource :sessions, only: [:new, :create, :destroy]
66
+
67
+ resources :users, only: [:show, :new, :create] do
68
+ member do
69
+ get :[CUSTOM_ROUTE]
70
+ end
71
+ end
72
+
73
+ resources :bands do
74
+ collection do
75
+ get :[CUSTOM_ROUTE]
76
+ end
77
+ resources :albums, only: [:new]
78
+ end
79
+
80
+ resources :albums, except: [:index, :new] do
81
+ resources :tracks, only: [:new]
82
+ end
83
+
84
+ resources :tracks, only: [:show, :create, :edit, :update, :destroy,]
85
+
86
+ resources :notes, only: [:create, :destroy]
87
+ patch '/[CUSTOM_ROUTE]/:id', to: 'notes#[CUSTOM_METHOD]'
88
+ get '/[CUSTOM_ROUTE]', to: 'notes#[CUSTOM_METHOD]'
89
+ ```
90
+
91
+ URL helper methods are created for your routes. To view these methods and all of your routes run:
92
+
93
+ $ railslite routes
94
+
95
+ ### Models
96
+
97
+ Models go in `app/models` and inherit from ApplicationModel. You can add methods to ApplicationModel at `app/models/application_model.rb`. Models have access to validations on presence, uniqueness and length, as well as, the lifecyle methods `after_initialize` and `before_validation`. Models also can have `belongs_to`, `has_many` and `has_one` using the same syntax as rails. Creating a `belongs_to` association will automatically create a validation for the presence of the `foreign_key` unless `optional: true` is included.
98
+
99
+ ```ruby
100
+ require 'bcrypt'
101
+
102
+ class User < ApplicationModel
103
+ validates :username, presence: true, uniqueness: true
104
+ validates :password_digest, presence: true
105
+ validates :password, length: { minimum: 6, allow_nil: true }
106
+ validates :session_token, presence: true, uniqueness: true
107
+
108
+ has_many :notes
109
+
110
+ after_initialize :ensure_token
111
+
112
+ attr_reader :password
113
+
114
+ def self.find_by_credentials(username, password)
115
+ user = User.find_by(username: username)
116
+ user && user.is_password?(password) ? user : nil
117
+ end
118
+
119
+ def self.generate_token
120
+ SecureRandom::urlsafe_base64
121
+ end
122
+
123
+ def password=(password)
124
+ @password = password
125
+ self.password_digest = BCrypt::Password.create(password)
126
+ end
127
+
128
+ def ensure_token
129
+ self.session_token ||= User.generate_token
130
+ end
131
+
132
+ def reset_token!
133
+ self.session_token = User.generate_token
134
+ self.save!
135
+ self.session_token
136
+ end
137
+
138
+ def is_password?(password)
139
+ BCrypt::Password.new(self.password_digest).is_password?(password)
140
+ end
141
+ end
142
+ ```
143
+
144
+ ### Controllers
145
+
146
+ Models go in `app/controllers` and inherit from ApplicationController. You can add methods to ApplicationController at `app/controllers/application_model.rb`. Contoller methods will automatically render their corrosponding view if no render or redirect is specified. Controllers also support strong params and have a `before_action` lifecycle method. Including `protect_from_forgery` in a controller will implement CSRF protection. Include `<input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>">` in any of your forms when `protect_from_forgery` is enabled.
147
+
148
+ ```ruby
149
+ class BandsController < ApplicationController
150
+ protect_from_forgery
151
+
152
+ def index
153
+ @bands = Band.all
154
+ end
155
+
156
+ def show
157
+ @band = Band.find(params[:id])
158
+ end
159
+
160
+ def new
161
+ @band = Band.new
162
+ end
163
+
164
+ def create
165
+ @band = Band.new(band_params)
166
+
167
+ if @band.save
168
+ redirect_to band_url(@band)
169
+ else
170
+ flash.now[:errors] = @band.errors
171
+ render :new
172
+ end
173
+ end
174
+
175
+ def edit
176
+ @band = Band.find(params[:id])
177
+ end
178
+
179
+ def update
180
+ @band = Band.find(params[:id])
181
+ if @band.update_attributes(band_params)
182
+ redirect_to band_url(@band)
183
+ else
184
+ flash.now[:errors] = @band.errors
185
+ render :edit
186
+ end
187
+ end
188
+
189
+ def destroy
190
+ @band = Band.find(params[:id])
191
+ @band.destroy
192
+ redirect_to bands_url
193
+ end
194
+
195
+ def json
196
+ @bands = Band.all
197
+ end
198
+
199
+ private
200
+
201
+ def band_params
202
+ params.require(:band).permit(:name)
203
+ end
204
+
205
+ before_action :ensure_login
206
+ end
207
+
208
+ ```
209
+
210
+ ### Views
211
+
212
+ Create your views at `app/views/[CONTROLLER_NAME]/[ACTION].html.erb` or `app/views/[CONTROLLER_NAME]/[ACTION].json.jbuilder`. Place any code you want shared between all your HTML views in `app/views/application.html.erb`.
213
+
214
+ ```ruby
215
+ <h1 class='page-header'>Bands</h1>
216
+
217
+ <ul class='main-list'>
218
+ <% @bands.each do |band| %>
219
+ <li><a href="<%= band_url(band) %>"><p><%= band.name %></p></a></li>
220
+ <% end %>
221
+ </ul>
222
+
223
+ <h4 class='sub-header'>Links</h4>
224
+ <ul class='page-links'>
225
+ <li><a class='button' href="<%= new_bands_url %>" >New band</a></li>
226
+ </ul>
227
+ ```
228
+ ```ruby
229
+ Jbuilder.encode do |json|
230
+ json.array! @bands
231
+ end
232
+ ```
233
+
234
+ ### Relation
235
+
236
+ RailsLite includes a `Relation` class that searches the database with SQL queiries similar to active record. The Relation methods include:
237
+
238
+ * `where`
239
+ * `joins`
240
+ * `left_joins`
241
+ * `select`
242
+ * `find_by`
243
+ * `find`
244
+ * `first`
245
+ * `last`
246
+ * `all`
247
+ * `save`
248
+ * `save!`
249
+ * `update`
250
+ * `update_attributes`
251
+ * `destroy`
252
+
253
+ Relation methods are lazy and stackable. For example:
254
+
255
+ ```ruby
256
+ User.joins(:bands).where(band_id: 1)
257
+ ```
41
258
 
42
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
43
259
 
44
260
  ## Contributing
45
261
 
@@ -1,3 +1,3 @@
1
1
  module RailsLite
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -22,7 +22,7 @@ class BandsController < ApplicationController
22
22
  if @band.save
23
23
  redirect_to band_url(@band)
24
24
  else
25
- flash.now[:errors] = @band.errors.full_messages
25
+ flash.now[:errors] = @band.errors
26
26
  render :new
27
27
  end
28
28
  end
@@ -37,7 +37,7 @@ class BandsController < ApplicationController
37
37
  if @band.update_attributes(band_params)
38
38
  redirect_to band_url(@band)
39
39
  else
40
- flash.now[:errors] = @band.errors.full_messages
40
+ flash.now[:errors] = @band.errors
41
41
  render :edit
42
42
  end
43
43
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_lite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff DeLiso