micalender 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 88cbadbf2982860f10b64e81633aa89c1bbec4e7
4
+ data.tar.gz: b46bbe0ec0b7500b89ae2dc8d3457910ec1a697e
5
+ SHA512:
6
+ metadata.gz: b116e4c9ce55412b60d7d5d5ddc058bbcc0e10c209a4c150fcdb963e17c285f310c59291c647de7be4c9758f24701e049f924716051cbb0f8a00426bb61b034d
7
+ data.tar.gz: d6bb41bb59cb0774cdbf66f49e0b5c66a268173a6c685d7e2e4c44b9afab6a567412996d03db0c3007c903822d03428220cdb1ddb4c12325c73c2c73bc332f75
@@ -0,0 +1,9 @@
1
+ require 'rails'
2
+
3
+ module Micalender
4
+ class Railtie < Rails::Railtie
5
+ initializer "micalender.view_helpers" do
6
+ ActionView::Base.send :include, ViewHelpers
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Micalender
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,150 @@
1
+ module Micalender
2
+ module ViewHelpers
3
+ def month_calendar(param_name=:start_date, options={}, &block)
4
+ start_date = (params[param_name] || Time.zone.now).to_date
5
+
6
+ options.reverse_merge!(
7
+ td: day_classes,
8
+ prev_link: ->(range) { link_to raw("&laquo;"), param_name => range.first - 1.day },
9
+ header: month_header,
10
+ next_link: ->(range) { link_to raw("&raquo;"), param_name => range.last + 1.day },
11
+ start_date: start_date,
12
+ )
13
+ render_calendar month_range(start_date), options, &block
14
+ end
15
+
16
+ def week_calendar(param_name=:start_date, options={}, &block)
17
+ start_date = (params[param_name] || Time.zone.now).to_date
18
+ number_of_weeks = options.fetch(:number_of_weeks, 1)
19
+
20
+ options.reverse_merge!(
21
+ td: day_classes,
22
+ prev_link: ->(range) { link_to raw("&laquo;"), param_name => range.first - 1.day },
23
+ header: false,
24
+ next_link: ->(range) { link_to raw("&raquo;"), param_name => range.last + 1.day },
25
+ start_date: start_date,
26
+ )
27
+ render_calendar week_range(start_date, number_of_weeks), options, &block
28
+ end
29
+
30
+ def calendar(param_name=:start_date, options={}, &block)
31
+ start_date = (params[param_name] || Time.zone.now).to_date
32
+ number_of_days_to_advance = options.fetch(:number_of_days, 4) - 1
33
+
34
+ options.reverse_merge!(
35
+ td: day_classes,
36
+ prev_link: ->(range) { link_to raw("&laquo;"), param_name => range.first - 1.day },
37
+ header: false,
38
+ next_link: ->(range) { link_to raw("&raquo;"), param_name => range.last + 1.day },
39
+ start_date: start_date,
40
+ )
41
+ render_calendar calendar_range(start_date, number_of_days_to_advance), options, &block
42
+ end
43
+
44
+ def month_range(start_date)
45
+ start_date.beginning_of_month.beginning_of_week.to_date..start_date.end_of_month.end_of_week.to_date
46
+ end
47
+
48
+ def week_range(start_date, number_of_weeks)
49
+ number_of_days_to_advance = (number_of_weeks * 7) - 1
50
+ starting_day = start_date.beginning_of_week.to_date
51
+ ending_day = starting_day + number_of_days_to_advance.days
52
+ starting_day..ending_day
53
+ end
54
+
55
+ def calendar_range(start_date, number_of_days_to_advance)
56
+ start_date..(start_date + number_of_days_to_advance.days)
57
+ end
58
+
59
+ def render_calendar(range, options, &block)
60
+ raise 'SimpleCalendar requires a block' unless block_given?
61
+
62
+ @block = block
63
+ @options = options.reverse_merge default_options
64
+ @start_date = options.fetch(:start_date)
65
+
66
+ capture do
67
+ concat render_header(@start_date, range)
68
+ concat render_table(range)
69
+ end
70
+ end
71
+
72
+ def render_header(start_date, range)
73
+ capture do
74
+ content_tag :div do
75
+ concat get_options(@options[:prev_link], range)
76
+ concat get_options(@options[:header], start_date)
77
+ concat get_options(@options[:next_link], range)
78
+ end
79
+ end
80
+ end
81
+
82
+ def render_table(range)
83
+ content_tag(:table, get_options(@options[:table])) do
84
+ content_tag(:tbody) do
85
+ render_weeks(range)
86
+ end
87
+ end
88
+ end
89
+
90
+
91
+ def render_weeks(range)
92
+ weeks = []
93
+ range.each_slice(7) do |week|
94
+ weeks << content_tag(:tr, get_options(@options[:tr], week)) do
95
+ render_week(week)
96
+ end
97
+ end
98
+ safe_join weeks
99
+ end
100
+
101
+ def render_week(week)
102
+ results = week.map do |day|
103
+ content_tag :td, get_options(@options[:td], @start_date, day) do
104
+ @block.call(day)
105
+ end
106
+ end
107
+ safe_join results
108
+ end
109
+
110
+ def get_options(options, *params)
111
+ case options
112
+ when Hash
113
+ options
114
+ when String
115
+ send(options, *params)
116
+ when Symbol
117
+ send(options, *params)
118
+ else
119
+ options.call(*params) if options.respond_to? :call
120
+ end
121
+ end
122
+
123
+ def default_options
124
+ { table: {}, tr: {}, td: {}, }
125
+ end
126
+
127
+ def day_classes
128
+ ->(start_date, current_calendar_date) {
129
+ today = Time.zone.now.to_date
130
+ td_class = ["day"]
131
+
132
+ td_class << "today" if today == current_calendar_date
133
+ td_class << "past" if today > current_calendar_date
134
+ td_class << "future" if today < current_calendar_date
135
+ td_class << "prev-month" if start_date.month != current_calendar_date.month && current_calendar_date < start_date
136
+ td_class << "next-month" if start_date.month != current_calendar_date.month && current_calendar_date > start_date
137
+ td_class << "current-month" if start_date.month == current_calendar_date.month
138
+ td_class << "wday-#{current_calendar_date.wday.to_s}"
139
+
140
+ { class: td_class.join(" ") }
141
+ }
142
+ end
143
+
144
+ def month_header
145
+ ->(start_date) {
146
+ content_tag :span, "#{I18n.t("date.month_names")[start_date.month]} #{start_date.year}", class: "calendar-header"
147
+ }
148
+ end
149
+ end
150
+ end
data/lib/micalender.rb ADDED
@@ -0,0 +1,8 @@
1
+ require "micalender/version"
2
+ require_relative "./micalender/view_helpers"
3
+ require_relative "./micalender/railtie"
4
+
5
+ module Micalender
6
+ class Engine < Rails::Engine
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: micalender
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Mukesh Kumar
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-03-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ description: calender.
70
+ email:
71
+ - karanraj9042@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - lib/micalender.rb
77
+ - lib/micalender/railtie.rb
78
+ - lib/micalender/version.rb
79
+ - lib/micalender/view_helpers.rb
80
+ homepage: https://github.com/karanraj9042/holiday_calender
81
+ licenses:
82
+ - MIT
83
+ metadata: {}
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubyforge_project:
100
+ rubygems_version: 2.6.8
101
+ signing_key:
102
+ specification_version: 4
103
+ summary: calender gem.
104
+ test_files: []