00:00:25.279
Hello, my name is Bryan Liles. I work at Thunderbolt Labs, and today I'm doing a talk on ActiveSupport and ActiveModel.
00:00:31.920
Just to give you a little bit of a forewarning, this is an introductory talk. If you know a lot about Rails, this might be a review, but we could all use a review.
00:00:44.079
So, what's the first thing you do whenever you want to build a Rails app? Your first Rails app should, of course, be a blog.
00:00:51.520
Today, we're going to build a blog. Because I don't believe in typing live due to my limited talent, I've created a bunch of screencasts. I wanted to show you that everything I'll demonstrate today is possible because it's all live code.
00:01:07.720
I'm creating a blog application using Rails 3.2. It goes by really fast, and I'm using Rails Bootstrap. If you buy Michael Hartl's course or look at it, you'll see he actually uses Rails Bootstrap.
00:01:27.720
The reason we use Bootstrap is that I am a developer, not a designer, and I wanted something that at least looked presentable for you all. Now I'm generating a post. A blog needs a post model, and I'm using a scaffold for demonstration purposes. You can choose whether or not to use a scaffold, but it's useful for this purpose.
00:02:14.440
Now I'm configuring Bootstrap to style my post.
00:02:19.640
This configuration serves two purposes: for my demonstration today and for my website, where I'll host these screencasts so you can revisit this content later.
00:02:27.360
Thanks for coming, everyone! It's been really fun. This is a new record for me, even shorter than my lightning talk yesterday.
00:02:33.120
There's something interesting about Rails. People get started with Rails and feel confident after working with models, views, controllers, and helpers. They believe they really know Rails. But do they?
00:02:45.280
If I gave everyone here flour, sugar, and water, would everyone make a beautiful cake? Probably not. We have to think like chefs. Chefs can take basic ingredients and create beautiful things, so we need to know our tools well.
00:03:03.959
That being said, let me introduce ActiveSupport. ActiveSupport makes Ruby better. It provides many useful enhancements, and what I’m showing you here is a word cloud of the files and directories under the ActiveSupport and ActiveModel directories in the new Rails source.
00:03:15.799
I don't expect anyone to know all of this. It's now over two minutes and forty seconds into this talk, and there's no way I'll cover all of it today, but I will pick the good ones.
00:03:34.840
Firstly, who here doesn’t know Ruby? This is great! You all know what an attribute accessor is, but let me tell you about what ActiveSupport does. ActiveSupport enhances Ruby.
00:03:49.360
ActiveSupport provides something called `cattr_accessor`, which gives you easy class-level accessors. Every one of you could write this, and I could probably show you three different ways to do this. Why write it from scratch when ActiveSupport provides it for you?
00:04:01.599
In addition, there’s `mattr_accessor` for modules and `add_accessor` with defaults. These are hidden gems within ActiveSupport.
00:04:13.599
In ActiveSupport, one of my favorite features is the Rails inflector. Back in 2005 and 2006, Rails could take a string and convert it programmatically. For example, let’s take the string 'module', which ActiveSupport turns into a constant named 'module'.
00:04:30.039
Another example is converting between snake_case and camelCase. This transformation is very straightforward, but it’s given for free.
00:04:41.240
The cool thing is that Rails knows pluralization rules. For example, what is the plural of cow? It's 'cattle', not 'cows'. And what about 'oxes'? There's no such thing; it’s 'oxen'. ActiveSupport is aware of these linguistic rules, enabling you to manage your data more effectively.
00:05:04.240
While building our blog, I should also mention that you will spend a lot of time in your Rails console. You'll find yourself typing `rails c` or `rails console` quite often, and since you'll be using it a lot, it should be pleasant to work in.
00:05:30.000
Pry is a significant upgrade over IRB, and I want to show you how it works. When I was explaining this to my wife, who doesn’t code, she asked me, 'What’s this IRB thing?' Let’s have a deeper look into Pry.
00:05:50.360
To get started, we’ll add Pry to our Gemfile in the development group and run `bundle install`. Now, when we open the console, we will see a Pry console instead of IRB.
00:06:09.000
While using Pry, I can navigate into String and list the methods available. I can also view the source of any method and see documentation, which all runs in my console.
00:06:16.759
Using the `edit` command in the Pry console allows me to launch my editor directly within the console. For example, I can create a new class named 'Foo' with a 'bar' method to output 'Hello, world!'. This interactive feature is extremely productive.
00:06:38.920
This kind of editing capability makes writing Rails applications easier. I went back to edit my code live within the Rails app, and any changes I made were reflected instantly in the console.
00:07:21.400
Now, let’s transition back to ActiveSupport. ActiveSupport provides a helpful benchmarking library that can simplify measuring performance.
00:07:49.760
There is a standard Benchmark library in Ruby, but ActiveSupport makes it even easier to use in your Rails projects. You can use it to log how long methods take to run—very handy in assessing performance.
00:08:06.920
This is useful especially when you're running long-running processes. For example, if I have a method that significantly delays, I can easily track how long each process takes.
00:08:29.040
ActiveSupport's benchmark is a great tool, and you’ll encounter this multi-method logging across your Rails applications. Without ActiveSupport and its benchmarking features, Rails would not function as effectively, hence why it’s vitally important.
00:09:02.991
Now, let's get back on track with our blog app that we haven't quite gotten to yet. What can we do with our app? It allows the creation of posts using very little code thanks to the scaffolding feature.
00:09:21.600
Through scaffolding, we quickly got a functional front-end using Twitter Bootstrap without needing to style anything manually. If you’re looking for a decent-looking application of Rails without much hassle, definitely consider using this.
00:09:49.919
Moving forward, let’s talk about callbacks, which are a powerful feature of ActiveSupport. Callbacks can run certain methods before or after specific actions, like saving a record, and you can automate a follow-up action once something has been done.
00:10:07.440
For instance, if I wanted to share a post after saving it, I can set up a callback to log a message indicating the post was shared.
00:10:28.240
In this example, after creating a post, I can call a service like Hacker News to automatically share the post once it's saved.
00:10:47.760
So let’s try this in our console. If we create a new instance of a web share and call the `announce_share` method, it logs that the post was shared.
00:11:15.360
The beauty of callbacks is how they can tie together actions and maintain a fluid workflow without much extra coding on your part.
00:11:38.720
As we saw before with active record callbacks, they allow you to create a method before or after certain actions. For instance, you can run a method after a post has been saved.
00:12:02.560
By using callbacks within our code, we can streamline our applications in a way that makes sense in real-world applications, logging or triggering external services.
00:12:23.880
Just so you know, Rails uses this all the time with its active record. In addition, it's important to recognize that the callbacks can also be utilized for any custom Ruby objects you create.
00:12:42.640
As a recap, ActiveSupport makes your Rails applications better by adding benchmarks, callbacks, and many additional functionalities.
00:13:09.439
While we've focused on Active Support, I've barely touched on Active Model, which is another core part of Rails.
00:13:24.720
To keep it brief, Active Model allows you to create your own Ruby classes that behave like Active Record in your views. This is especially useful for forms where you want to treat data flexibly, without the overhead of a full database model.
00:13:45.880
Active Model lets you create compliant objects that can be backed by various data sources like flat files, NoSQL databases, or remote services.
00:14:10.399
The flexibility offered by Active Model (`valid?,` `errors`) makes it easy for developers to maintain cleaner code and integrate various data sources seamlessly.
00:14:36.720
With the right tests, you ensure your model adheres to certain rules, making it simpler to validate and manage data irrespective of its source.
00:14:56.160
By creating a simple test first, you can guide the design of your Active Model-compliant object effectively. This demonstrates a key principle in Ruby development: testing first guarantees better structure.
00:15:10.160
Once your test run successfully, you can have a compliant object easily created, reducing complexity and ensuring robustness.
00:15:34.600
With Rails 4, Active Model compliance is made much easier than before. You can include Active Model modules to reduce boilerplate code.
00:15:54.880
Active Model enhances the handling of diverse data types and sources, ensuring that data management across various contexts feels consistent and organized.
00:16:14.920
By incorporating Active Models in your Rails applications, you're armed with the capability to manage data effectively, no matter its origin.
00:16:33.840
It's crucial to understand how integrating these features from ActiveSupport and ActiveModel can enhance your capabilities as a Rails developer.
00:16:55.040
Do take a look at the Rails sources on GitHub where you can find detailed documentation and examples, enhancing your opportunities and understanding.
00:17:11.880
Active Support and Active Model are essential features part of Rails, offering powerful tools to streamline and enhance your development process.
00:17:31.880
I thank you all for your time today. Let’s open the floor to any questions you may have or discussions about the content we've covered.
00:17:52.480
If you have any complaints or suggestions regarding my presentation, feel free to reach out via email. I'm open to feedback.