Fueling Curiosity, One Insight at a Time
At Codemancers, we believe every day is an opportunity to grow. This section is where our team shares bite-sized discoveries, technical breakthroughs and fascinating nuggets of wisdom we've stumbled upon in our work.
Jan 13, 2025
Shared Context in RSpec
Shared Context: A shared context in RSpec is a way to define common setup code that can be reused across multiple test examples or groups. Instead of duplicating setup code, we define it once in a shared context and include it wherever needed. It helps keep our tests DRY.
In the example, the shared context
By including the shared context with
#rspec #rubyonrails
Shared Context: A shared context in RSpec is a way to define common setup code that can be reused across multiple test examples or groups. Instead of duplicating setup code, we define it once in a shared context and include it wherever needed. It helps keep our tests DRY.
RSpec.shared_context "user and post setup", shared_context: :metadata do
let(:user) { User.create(name: "Alice") }
let(:post) { Post.create(title: "First Post", user: user) }
end
RSpec.describe "Using shared context in tests" do
include_context "user and post setup"
it "has a user with a name" do
expect(user.name).to eq("Alice")
end
it "has a post with a title" do
expect(post.title).to eq("First Post")
end
endIn the example, the shared context
user and post setup defines let variables for a user and a post.By including the shared context with
include_context, we gain access to those let variables in the test examples.#rspec #rubyonrails
Syed Sibtain
System Analyst
Jan 10, 2025
Using
When using
For example:
Key points:
•
•
• Additional columns in
Mistakenly not matching the
#postgres #sql #database
DISTINCT ON in PostgreSQLWhen using
DISTINCT ON in PostgreSQL, the columns specified in the DISTINCT ON clause must appear first in the ORDER BY clause and in the same order. This is a requirement to ensure PostgreSQL knows how to determine the "first" row for each distinct group.For example:
SELECT DISTINCT ON (user_id, event_name) id, user_id, event_name, inquiry_id, created_at
FROM public.persona_inquiry
ORDER BY user_id, event_name, created_at DESC;Key points:
•
DISTINCT ON (user_id, event_name) selects the first row for each unique (user_id, event_name) combination.•
ORDER BY user_id, event_name ensures that the sorting starts with the same columns as the DISTINCT ON clause.• Additional columns in
ORDER BY (like created_at DESC) determine which row to pick when there are duplicates.Mistakenly not matching the
DISTINCT ON columns with the start of the ORDER BY clause will result in an error:SELECT DISTINCT ON expressions must match initial ORDER BY expressions.#postgres #sql #database
Vaibhav Yadav
Senior System Analyst
Jan 9, 2025
ActiveSupport::CurrentAttributes provides a thread-isolated attributes singleton, perfect for request-specific data like current user, role, or locale.create a
current.rb in models directory and add the attributes we want to set
class Current < ActiveSupport::CurrentAttributes
attribute :role
endthen in application controller we can set it like this
class ApplicationController < ActionController::Base
before_action :set_current_attributes
def set_current_attributes
Current.role = session[:role]
// ... other attributes
end
endnow in your application we can directly access and use like
Current.role#CU6U0R822 #rails-current-attributes
Satya
Dec 27, 2024
Mise
Mise is a fast, lightweight (thanks to Rust :happy_pepe:), language agnostic version manager that can be used instead of having separate language based version managers like rbenv for Ruby, npm for Node.js and Pyenv for Python etc.
Installing a Ruby version globally is as simple as follows:
Installing mise is as easy as following in MacOS
Proceed with following to configure the Shell Initialisation
Reload the shell configuration changes in current tab
#mise #ruby-version-manager #version-manager #C04HPTKNZ8R #ruby #python #CCT1JMA0Z
Mise is a fast, lightweight (thanks to Rust :happy_pepe:), language agnostic version manager that can be used instead of having separate language based version managers like rbenv for Ruby, npm for Node.js and Pyenv for Python etc.
Installing a Ruby version globally is as simple as follows:
mise use -g ruby@3Installing mise is as easy as following in MacOS
curl https://mise.run | shProceed with following to configure the Shell Initialisation
echo 'eval "$(~/.local/bin/mise activate)"' >> ~/.zshrcReload the shell configuration changes in current tab
source ~/.zshrc#mise #ruby-version-manager #version-manager #C04HPTKNZ8R #ruby #python #CCT1JMA0Z
Aditya Vishwakarma
System Analyst
Dec 22, 2024
mattr_accessor is a Rails utility method that creates a class-level accessor for a variable.
When we define
1. A getter method for the class.
2. A setter method for the class.
Eg:
This is equivalent to:
It also works on module-level classes, which makes it particularly useful for defining global configuration in gems.
#CU6U0R822
When we define
mattr_accessor for a variable, it creates1. A getter method for the class.
2. A setter method for the class.
Eg:
class MyClass
mattr_accessor :my_variable
endThis is equivalent to:
class MyClass
@my_variable = nil
def self.my_variable
@my_variable
end
def self.my_variable=(value)
@my_variable = value
end
endIt also works on module-level classes, which makes it particularly useful for defining global configuration in gems.
#CU6U0R822
Nived Hari
System Analyst
Dec 18, 2024
accepts_nested_attributes_for is a Rails method that allows you to easily manage the creation, updating, and destruction of associated models through the parent model's attributes. This is particularly useful when you have nested forms or when you want to handle multiple models in a single operation (e.g., creating or updating a User and its associated Profile in one form submission).
class User < ApplicationRecord
has_one :profile
accepts_nested_attributes_for :profile
endGiven the
User model has a has_one :profile association, and you want to create or update a User and their Profile at the same time, you can use accepts_nested_attributes_for to pass attributes for both models:
user_params = {
name: "John Doe",
profile_attributes: { bio: "Developer", age: 30 }
}
user = User.create(user_params)In this example, Rails will create both a new
User and a new Profile with the attributes provided in profile_attributes.#CU6U0R822
Ayush Srivastava
System Analyst
Dec 17, 2024
When working with paginated data in Ruby on Rails, we might encounter situations where we need to paginate an array rather than an Active Record collection. The
Require the Pagy Extras Array:
And then use the
#rubyonrails #pagination #pagy
pagy gem provides an efficient and flexible way to handle pagination, and it includes an extras/array feature specifically for arrays.Require the Pagy Extras Array:
# config/initializers/pagy.rb
require "pagy/extras/array"And then use the
pagy_array method to paginate your array in the controller
def index
// some code
@pagy, @purchase_order_attachments = pagy_array(orders_with_attachments, items: params[:limit] || 10)
end#rubyonrails #pagination #pagy
Syed Sibtain
System Analyst
Dec 3, 2024
In Python,
Example:
Output:
dir() lists the attributes and methods of an object, such as a class or instance.Example:
class MyClass:
class_variable = "Class Variable"
def __init__(self):
self.instance_variable = "Instance Variable"
def my_method(self):
pass
obj = MyClass()
print(dir(obj))Output:
dir(obj) shows a list of attributes (class_variable, instance_variable) and methods (my_method), along with special methods (e.g., __init__). It helps explore what’s available in an object.Adithya Hebbar
System Analyst
Nov 29, 2024
Test SSH connection detailed logs to debug #ssh #CCTJN6PK4
This will output detailed logs
ssh -vT "git@gitlab.com"This will output detailed logs
Nisanth
Nov 29, 2024
Definite Assignment Checks in TypeScript 5
• Before TypeScript 5:
• After TypeScript 5:
• The
• Use of
• Before TypeScript 5:
let value: string;
console.log(value); // TS4.x: This was allowed but could lead to runtime undefined• After TypeScript 5:
let value: string;
console.log(value); // TS5.x: Error - Variable 'value' is used before being assigned
// To fix, either initialize:
let value = "initial";
// Or use definite assignment assertion:
let value!: string;• The
! is a promise to TypeScript that we'll assign a value before using it• Use of
! should be avoided as it bypasses TypeScript's safety checksAshwani Kumar Jha
Senior System Analyst
Showing 10 to 12 of 82 results
Ready to Build Something Amazing?
Codemancers can bring your vision to life and help you achieve your goals
- Address
2nd Floor, Zee Plaza,
No. 1678, 27th Main Rd,
Sector 2, HSR Layout,
Bengaluru, Karnataka 560102 - Contact
hello@codemancers.com
+91-9731601276