
Security News
Nx npm Packages Compromised in Supply Chain Attack Weaponizing AI CLI Tools
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.
A simple helper for creating calendars. It includes a method to sort objects by date and an helpers to display events/meetings and other objects.
The gem provides calendrier
helper to display calendars
# Simple example
<%= calendrier(:year => 2012, :month => 5, :day => 25, :start_on_monday => true, :display => :week, :title => "My calendar title") %>
# Complex example
<%= calendrier(:year => 2012, :month => 5, :day => 25, :start_on_monday => true, :display => :month) do |cell_begin_time, cell_end_time| %>
<!-- this code is run for every cell of the calendar -->
<!-- you have access to `cell_begin_time` and `cell_end_time` which let you create links or custom content -->
<%= content_tag(:span, "Add meeting/event at #{l(cell_begin_time)} ?") %>
<% end %>
Now you have a calendar, but you may need to display events inside. If you have many events to display, the gem provides a method sort_events
for the controller to create a hash of events.
This avoid the calendar to check every events of the month to display every single cell.
To use that method, you could pass as argument a mix of any objects which respond_to?
one of the following method sets :
year
, month
, day
begin_time
, end_time
This method will return an array like this :
events_by_date => {"2012"=>{"5"=>{"21"=>[#<Event>, #<Event>],
"22"=>[#<Event>, #<Event>, #<Event>],
"23"=>[#<Meeting>],
"25"=>[#<Event>, #<Meeting>],
"26"=>[#<Event>],
"27"=>[#<Meeting>, #<Event>]}}}
In your controller :
class HomeController < ApplicationController
include Calendrier::EventExtension
def index
arr = Meeting.all
arr << Event.all
@events_by_date = sort_events(arr)
end
end
In your view :
<%= calendrier(:year => 2012, :month => 5, :day => 25, :start_on_monday => true, :display => :month) do |cell_begin_time, cell_end_time| %>
<!-- this code is run for every cell of the calendar -->
<% if count_sorted_events(@events_by_date, cell_begin_time, cell_end_time) > 0 %>
<!-- this code is run only there is at least one event between cell begin and end -->
<ul>
<% yield_sorted_events(@events_by_date, cell_begin_time, cell_end_time) do |obj| %>
<!-- you may handle event/meeting/... with the obj variable -->
<li><%= obj.title %></li>
<% end %>
</ul>
<% end %>
<% end %>
If you need a more complex calendar, you'll need to define a custom builder. To create such builder, add a file like the following.
# /lib/calendrier/calendrier_builder/custom_builder.rb
module Calendrier
module CalendrierBuilder
class CustomBuilder < Builder
def render(header, content)
# header is an array like this, having Date object of each columns
# [Mon, 21 May 2012,
# Tue, 22 May 2012,
# Wed, 23 May 2012,
# Thu, 24 May 2012,
# Fri, 25 May 2012,
# Sat, 26 May 2012,
# Sun, 27 May 2012]
#
# content is a double array like that, containing one Hash for each cell : {:time => Time.utc(<cell_begin_time>), :content => '<block content of this cell>' }
# [ [ 7 Hash for one week ], [ 7 Hash for the next week ], ... ]
#
# [[{:time=>nil, :content=>nil}, # time could be nil on monthly display if week do not starts on monday/sunday (first day of week)
# {:time=>2012-05-01 00:00:00 +0200, :content=>nil},
# {:time=>2012-05-02 00:00:00 +0200, :content=>nil},
# {:time=>2012-05-03 00:00:00 +0200, :content=>nil},
# {:time=>2012-05-04 00:00:00 +0200, :content=>nil},
# {:time=>2012-05-05 00:00:00 +0200, :content=>nil},
# {:time=>2012-05-06 00:00:00 +0200, :content=>nil}],
# ...
#
end
end
end
end
And do not forget to add /lib to rails autoload_paths by adding the following line.
# config/application.rb
module MyNiceRailsApplication
class Application < Rails::Application
...
# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras)
config.autoload_paths += %W( #{config.root}/lib )
...
end
end
Use your new builder by adding the builder option to the renderer.
<%= calendrier(:year => 2012, :month => 5, :day => 25, :start_on_monday => true, :display => :month, :builder => Calendrier::CalendrierBuilder::CustomBuilder) %>
Add this line to your application's Gemfile :
gem 'calendrier', :git => "git://github.com/lafourmi/calendrier.git", :branch => "master"
And then execute :
$ bundle install
Or install it yourself as :
$ gem install calendrier
Calendrier is Copyright (c) 2013 La Fourmi Immo.
FAQs
Unknown package
We found that calendrier demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.
Security News
CISA’s 2025 draft SBOM guidance adds new fields like hashes, licenses, and tool metadata to make software inventories more actionable.
Security News
A clarification on our recent research investigating 60 malicious Ruby gems.