taq_simple_calendar 0.0.1
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 +7 -0
- data/.gitignore +2 -0
- data/Gemfile +4 -0
- data/README.md +7 -0
- data/Rakefile +2 -0
- data/lib/taq_simple_calendar.rb +13 -0
- data/lib/taq_simple_calendar/railties.rb +7 -0
- data/lib/taq_simple_calendar/record.rb +26 -0
- data/lib/taq_simple_calendar/version.rb +3 -0
- data/lib/taq_simple_calendar/view_helper.rb +80 -0
- data/taq_simple_calendar.gemspec +21 -0
- data/test/event.rb +18 -0
- data/test/test_events.rb +34 -0
- metadata +55 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 623a68c4b42abdaabf2334a76485658376383139
|
4
|
+
data.tar.gz: 605cb20386851b7ffc753ad477298d4c6105fede
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0dd656744224b291e8639b08c15e0913be1b600d20012eb7eb9f33b20f5fa7f0c82af944a519063802574da434b65746e18face1d9d5c759805fc54247477c13
|
7
|
+
data.tar.gz: 88e998e76a41e650f34fa7cc61defa284a4e4aa089694111ab4110c6925c83272b405e2a646f669af1ecd28ae57c16586519bd33862e531492c7c4d311743529
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
# Simple Calendar
|
2
|
+
|
3
|
+
Just a gem used to create calendars from events of a certain app I use.
|
4
|
+
It includes some methods on Array and ActiveRelation to 'calendarize' events.
|
5
|
+
As it is used for a specific app here (and we need to keep the gem on the
|
6
|
+
rubygems repositories to install it) it is not made to a more global scope
|
7
|
+
and use.
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require "#{File.expand_path(File.dirname(__FILE__))}/taq_simple_calendar/railties.rb" if defined?(Rails)
|
2
|
+
require "#{File.expand_path(File.dirname(__FILE__))}/taq_simple_calendar/record.rb"
|
3
|
+
require "#{File.expand_path(File.dirname(__FILE__))}/taq_simple_calendar/view_helper.rb"
|
4
|
+
|
5
|
+
class Array
|
6
|
+
include TaQSimpleCalendar::Record
|
7
|
+
end
|
8
|
+
|
9
|
+
if defined?(ActiveRecord::Relation)
|
10
|
+
class ActiveRecord::Relation
|
11
|
+
include TaQSimpleCalendar::Record
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module TaQSimpleCalendar
|
2
|
+
module Record
|
3
|
+
def calendarize
|
4
|
+
collection = self.sort_by {|c| c.start_at}
|
5
|
+
months = collection.inject({}) do |memo,col|
|
6
|
+
%w(start_at end_at).each do |date|
|
7
|
+
key, name = col.send(date).strftime("%Y-%m %B").split
|
8
|
+
if !memo.key?(key)
|
9
|
+
memo[key] = {}
|
10
|
+
memo[key][:name] = name
|
11
|
+
memo[key][:collection] = collection.select do |c|
|
12
|
+
c.start_at.strftime("%Y-%m") == key ||
|
13
|
+
c.end_at.strftime("%Y-%m") == key
|
14
|
+
end.map do |c|
|
15
|
+
{:day => c.send(:start_at).strftime("%02d"),
|
16
|
+
:title => c.send(:title),
|
17
|
+
:bin_period => c.send(:bin_period)
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
memo
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module TaQSimpleCalendar
|
2
|
+
module ViewHelper
|
3
|
+
def calendarize(calendar,options={})
|
4
|
+
str = ""
|
5
|
+
attrib = options[:attribute] ? options[:attribute] : "title"
|
6
|
+
url = options[:url] ? options[:url] : "#"
|
7
|
+
sep = options[:separator] ? options[:separator] : " "
|
8
|
+
|
9
|
+
calendar.each do |key,val|
|
10
|
+
date = Date.parse("#{key}-01")
|
11
|
+
pmon = date.beginning_of_month-1.day
|
12
|
+
nmon = date.end_of_month+1.day
|
13
|
+
pmld = pmon.end_of_month
|
14
|
+
cmfd = date.beginning_of_month
|
15
|
+
cmld = date.end_of_month
|
16
|
+
daysb = Array.new
|
17
|
+
|
18
|
+
(cmfd.wday-1).downto(0) {|d| daysb << (pmld-d.days)}
|
19
|
+
0.upto(cmld.day-1) {|d| daysb << (cmfd+d.days)}
|
20
|
+
|
21
|
+
(7-(daysb.size%7)).times do |nxt|
|
22
|
+
daysb << nmon+nxt.days
|
23
|
+
end
|
24
|
+
day_groups = daysb.in_groups_of(7)
|
25
|
+
month = I18n.t("date.month_names")[Date::MONTHNAMES.index(val[:name])]
|
26
|
+
|
27
|
+
str += "<table class='calendar'><caption>#{month}</caption>"
|
28
|
+
str += "<thead><tr>"
|
29
|
+
dnam = I18n.t("date.abbr_day_names")
|
30
|
+
|
31
|
+
7.times do |day|
|
32
|
+
str << "<th>#{dnam[day]}</th>"
|
33
|
+
end
|
34
|
+
str << "</tr></thead>"
|
35
|
+
|
36
|
+
str << "<tbody>"
|
37
|
+
for day_group in day_groups
|
38
|
+
str << "<tr>"
|
39
|
+
for day in day_group
|
40
|
+
cls = []
|
41
|
+
if day
|
42
|
+
day_s = day.strftime("%02d")
|
43
|
+
evt_s = ""
|
44
|
+
url_s = (url % "#{key}-#{day_s}") if url!="#"
|
45
|
+
|
46
|
+
cls << "calendar_other_month" if day.month!=date.month
|
47
|
+
cls << "calendar_weekend" if [0,6].include?(day.wday)
|
48
|
+
|
49
|
+
if day.month==date.month
|
50
|
+
evts = val[:collection].select {|v| v[:day]==day_s}
|
51
|
+
evt_s = evts.map {|e| e[:title]}.join(sep)
|
52
|
+
if evts.size>0
|
53
|
+
cls << "calendar_event_#{evts.size}"
|
54
|
+
if evts.first.key?(:bin_period)
|
55
|
+
cls << "bp" + evts.map {|e| e[:bin_period]}.inject("000") do |m,v|
|
56
|
+
(m.to_i(2) | v.to_i(2)).to_s(2)
|
57
|
+
end.rjust(3,"0")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
str << "<td class=\"#{cls.join(' ')}\">"
|
63
|
+
if evt_s.strip.size>0
|
64
|
+
str << "<a href='#{url_s}' #{attrib}='#{evt_s}'>#{day_s}</a>"
|
65
|
+
else
|
66
|
+
str << day_s
|
67
|
+
end
|
68
|
+
str << "</td>"
|
69
|
+
else
|
70
|
+
str << "<td></td>"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
str << "</tr>"
|
74
|
+
end
|
75
|
+
str << "</tbody></table>"
|
76
|
+
end
|
77
|
+
str.html_safe
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "taq_simple_calendar/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "taq_simple_calendar"
|
7
|
+
s.version = TaQSimpleCalendar::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Eustaquio Rangel"]
|
10
|
+
s.email = ["eustaquiorangel@gmail.com"]
|
11
|
+
s.homepage = "http://github.com/taq/taq_simple_calendar"
|
12
|
+
s.summary = %q{Simple calendar gem for Rails}
|
13
|
+
s.description = %q{Simple calendar gem for Rails}
|
14
|
+
|
15
|
+
s.rubyforge_project = "taq_simple_calendar"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
end
|
data/test/event.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require "date"
|
2
|
+
require "#{File.expand_path(File.dirname(__FILE__))}/../lib/taq_simple_calendar.rb"
|
3
|
+
|
4
|
+
class Event
|
5
|
+
attr_reader :title, :url, :start_at, :end_at, :bin_period
|
6
|
+
|
7
|
+
def initialize(title,start_at,end_at,bin_period,url=nil)
|
8
|
+
@title, @start_at, @end_at, @bin_period, @url = title, start_at, end_at, bin_period, url
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.all
|
12
|
+
@events = [
|
13
|
+
Event.new("This is event 1",DateTime.parse("2011-01-30 09:00"),DateTime.parse("2011-01-30 10:00"),"100","/events/1"),
|
14
|
+
Event.new("This is event 2",DateTime.parse("2011-01-31 13:00"),DateTime.parse("2011-01-31 14:00"),"010","/events/2"),
|
15
|
+
Event.new("This is event 3",DateTime.parse("2011-02-01 20:00"),DateTime.parse("2011-02-01 21:00"),"001","/events/3")
|
16
|
+
]
|
17
|
+
end
|
18
|
+
end
|
data/test/test_events.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require "#{File.expand_path(File.dirname(__FILE__))}/../lib/taq_simple_calendar.rb"
|
3
|
+
require "#{File.expand_path(File.dirname(__FILE__))}/event.rb"
|
4
|
+
|
5
|
+
class EventTest < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@events = Event.all.calendarize
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_months
|
11
|
+
keys = @events.keys
|
12
|
+
assert_equal keys.size, 2
|
13
|
+
assert_equal keys.first, "2011-01"
|
14
|
+
assert_equal keys.last , "2011-02"
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_january_name
|
18
|
+
assert_equal @events["2011-01"][:name], "January"
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_january_days
|
22
|
+
days = @events["2011-01"][:collection].map {|day| day[:day]}
|
23
|
+
assert_equal days, %w(30 31)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_february_name
|
27
|
+
assert_equal @events["2011-02"][:name], "February"
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_february_days
|
31
|
+
days = @events["2011-02"][:collection].map {|day| day[:day]}
|
32
|
+
assert_equal days, %w(01)
|
33
|
+
end
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: taq_simple_calendar
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Eustaquio Rangel
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-05-15 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Simple calendar gem for Rails
|
14
|
+
email:
|
15
|
+
- eustaquiorangel@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- ".gitignore"
|
21
|
+
- Gemfile
|
22
|
+
- README.md
|
23
|
+
- Rakefile
|
24
|
+
- lib/taq_simple_calendar.rb
|
25
|
+
- lib/taq_simple_calendar/railties.rb
|
26
|
+
- lib/taq_simple_calendar/record.rb
|
27
|
+
- lib/taq_simple_calendar/version.rb
|
28
|
+
- lib/taq_simple_calendar/view_helper.rb
|
29
|
+
- taq_simple_calendar.gemspec
|
30
|
+
- test/event.rb
|
31
|
+
- test/test_events.rb
|
32
|
+
homepage: http://github.com/taq/taq_simple_calendar
|
33
|
+
licenses: []
|
34
|
+
metadata: {}
|
35
|
+
post_install_message:
|
36
|
+
rdoc_options: []
|
37
|
+
require_paths:
|
38
|
+
- lib
|
39
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
requirements: []
|
50
|
+
rubyforge_project: taq_simple_calendar
|
51
|
+
rubygems_version: 2.2.2
|
52
|
+
signing_key:
|
53
|
+
specification_version: 4
|
54
|
+
summary: Simple calendar gem for Rails
|
55
|
+
test_files: []
|