Talks

ActiveSupport and ActiveModel

ActiveSupport and ActiveModel

by Bryan Liles

In the video 'ActiveSupport and ActiveModel' presented by Bryan Liles at RailsConf 2012, the speaker provides an introduction to two crucial components of the Rails framework. The session covers how ActiveSupport and ActiveModel enhance Ruby and Rails development capabilities.

Key points discussed in the video include:
- Introduction to Rails: Bryan begins by sharing his background and setting the context of building a simple blog application. He emphasizes the importance of understanding core elements of Rails, which many developers may overlook.

  • ActiveSupport Features: ActiveSupport is explained as a library that extends Ruby to provide essential utilities. Key features discussed include:

    • Accessors: ActiveSupport simplifies creating class-level and module accessors through methods like cattr_accessor and mattr_accessor.
    • Inflection: The inflector feature of ActiveSupport addresses string manipulation and provides correct pluralization and singularization.
    • Pry: Liles introduces Pry as a powerful alternative to IRB for debugging and console interaction within Rails, showcasing how it allows for enhanced navigation and editing of code directly from the console.
    • Benchmarking: ActiveSupport's benchmarking capabilities are highlighted as an easy way to measure and log performance, integral for optimizing Rails applications.
  • ActiveModel Overview: While more briefly covered, ActiveModel is presented as a way to create Ruby objects that can integrate seamlessly with Action Pack helpers, enabling developers to treat them like Active Record models. This section emphasizes how ActiveModel allows for PLMN integration with various data sources.

  • Callbacks and Validations: He demonstrates the use of callbacks within models to execute methods before or after certain actions, followed by a discussion on validations, showing how they can be applied beyond Active Record.

  • Practical Demonstration: Throughout the talk, Bryan walks through practical code examples illustrating each of the featured functionalities, which helps bridge the gap between theory and application.

  • Conclusion and Takeaways: Liles wraps up by reassuring developers about the utility of ActiveSupport and ActiveModel in enhancing their Ruby experience, urging them to explore the prebuilt capabilities present within Rails to avoid unnecessary complexity in their codebases.

The video serves as a refresher and a deeper dive for those looking to enhance their Rails projects utilizing these powerful libraries effectively.

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.