viewable 0.5.17 → 0.5.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.editorconfig +10 -10
- data/.gitignore +27 -27
- data/.travis.yml +22 -22
- data/AUTHORS.md +6 -6
- data/CONTRIBUTING.md +22 -22
- data/Gemfile +7 -7
- data/LICENSE.md +23 -23
- data/README.md +38 -38
- data/Rakefile +6 -6
- data/lib/viewable/generators/viewable/controller_generator.rb +22 -22
- data/lib/viewable/generators/viewable/css_generator.rb +11 -11
- data/lib/viewable/generators/viewable/install_generator.rb +17 -17
- data/lib/viewable/generators/viewable/js_generator.rb +17 -17
- data/lib/viewable/generators/viewable/resource_model_generator.rb +21 -21
- data/lib/viewable/generators/viewable/templates/assets/javascript/calendar-editable.js +6991 -6991
- data/lib/viewable/generators/viewable/templates/assets/javascript/custom.js +126 -126
- data/lib/viewable/generators/viewable/templates/assets/javascript/fullcalendar.js +6110 -6110
- data/lib/viewable/generators/viewable/templates/assets/stylesheets/fullcalendar.css +587 -587
- data/lib/viewable/generators/viewable/templates/controllers/resource_controller.rb +50 -50
- data/lib/viewable/generators/viewable/templates/controllers/viewing_controller.rb +77 -77
- data/lib/viewable/generators/viewable/templates/models/datetime.rb +6 -6
- data/lib/viewable/generators/viewable/templates/models/resource.rb +4 -4
- data/lib/viewable/generators/viewable/templates/models/viewable.rb +85 -85
- data/lib/viewable/generators/viewable/templates/models/viewing.rb +4 -4
- data/lib/viewable/generators/viewable/templates/views/_errors.html.erb +13 -13
- data/lib/viewable/generators/viewable/templates/views/_form.html.erb +6 -6
- data/lib/viewable/generators/viewable/templates/views/edit.html.erb +1 -1
- data/lib/viewable/generators/viewable/templates/views/index.html.erb +12 -12
- data/lib/viewable/generators/viewable/templates/views/new.html.erb +1 -1
- data/lib/viewable/generators/viewable/templates/views/viewings/_errors.html.erb +12 -12
- data/lib/viewable/generators/viewable/templates/views/viewings/_form.html.erb +11 -11
- data/lib/viewable/generators/viewable/templates/views/viewings/edit.html.erb +9 -9
- data/lib/viewable/generators/viewable/templates/views/viewings/index.html.erb +22 -22
- data/lib/viewable/generators/viewable/templates/views/viewings/new.html.erb +9 -9
- data/lib/viewable/generators/viewable/templates/views/viewings/show.html.erb +6 -6
- data/lib/viewable/generators/viewable/viewing_model_generator.rb +25 -25
- data/lib/viewable/generators/viewable/views_generator.rb +21 -21
- data/lib/viewable/railtie.rb +8 -8
- data/lib/viewable/viewable.rb +1 -1
- data/viewable.gemspec +33 -33
- metadata +3 -3
@@ -1,50 +1,50 @@
|
|
1
|
-
class <%=resource_name_camelize.singularize.pluralize%>Controller < ApplicationController
|
2
|
-
|
3
|
-
def index
|
4
|
-
@<%=resource_name_underscore.pluralize%> = <%=resource_name_camelize.singularize%>.all
|
5
|
-
end
|
6
|
-
|
7
|
-
def new
|
8
|
-
@<%=resource_name_underscore.singularize%> = <%=resource_name_camelize.singularize%>.new
|
9
|
-
end
|
10
|
-
|
11
|
-
def create
|
12
|
-
@<%=resource_name_underscore.singularize%> = <%=resource_name_camelize.singularize%>.create(<%=resource_name_underscore.singularize%>_params)
|
13
|
-
if @<%=resource_name_underscore.singularize%>.save
|
14
|
-
name = @<%=resource_name_underscore.singularize%>.name
|
15
|
-
redirect_to <%=resource_name_underscore.pluralize%>_path
|
16
|
-
flash[:notice] = "#{name} created"
|
17
|
-
else
|
18
|
-
render 'new'
|
19
|
-
flash[:error] = "Unable to create <%=resource_name_underscore.singularize.gsub(/(_)/, ' ')%>. Please try again"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def destroy
|
24
|
-
@<%=resource_name_underscore.singularize%> = <%= resource_name_camelize.singularize%>.find(params[:id])
|
25
|
-
@<%=resource_name_underscore.singularize%>.destroy
|
26
|
-
redirect_to <%=resource_name_underscore.pluralize%>_path
|
27
|
-
end
|
28
|
-
|
29
|
-
def edit
|
30
|
-
@<%=resource_name_underscore.singularize%> = <%=resource_name_camelize.singularize%>.find(params[:id])
|
31
|
-
end
|
32
|
-
|
33
|
-
def update
|
34
|
-
@<%=resource_name_underscore.singularize%> = <%=resource_name_camelize.singularize%>.find(params[:id])
|
35
|
-
@<%=resource_name_underscore.singularize%>.update <%=resource_name_underscore.singularize%>_params
|
36
|
-
if @<%=resource_name_underscore.singularize%>.save
|
37
|
-
flash[:notice] = "Your <%=resource_name_underscore.singularize.gsub(/(_)/, ' ')%> was updated succesfully"
|
38
|
-
redirect_to root_path
|
39
|
-
else
|
40
|
-
render 'edit'
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
private
|
45
|
-
|
46
|
-
def <%=resource_name_underscore.singularize%>_params
|
47
|
-
params.require(:<%=resource_name_underscore.singularize%>).permit(:name, :delete)
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
1
|
+
class <%=resource_name_camelize.singularize.pluralize%>Controller < ApplicationController
|
2
|
+
|
3
|
+
def index
|
4
|
+
@<%=resource_name_underscore.pluralize%> = <%=resource_name_camelize.singularize%>.all
|
5
|
+
end
|
6
|
+
|
7
|
+
def new
|
8
|
+
@<%=resource_name_underscore.singularize%> = <%=resource_name_camelize.singularize%>.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def create
|
12
|
+
@<%=resource_name_underscore.singularize%> = <%=resource_name_camelize.singularize%>.create(<%=resource_name_underscore.singularize%>_params)
|
13
|
+
if @<%=resource_name_underscore.singularize%>.save
|
14
|
+
name = @<%=resource_name_underscore.singularize%>.name
|
15
|
+
redirect_to <%=resource_name_underscore.pluralize%>_path
|
16
|
+
flash[:notice] = "#{name} created"
|
17
|
+
else
|
18
|
+
render 'new'
|
19
|
+
flash[:error] = "Unable to create <%=resource_name_underscore.singularize.gsub(/(_)/, ' ')%>. Please try again"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def destroy
|
24
|
+
@<%=resource_name_underscore.singularize%> = <%= resource_name_camelize.singularize%>.find(params[:id])
|
25
|
+
@<%=resource_name_underscore.singularize%>.destroy
|
26
|
+
redirect_to <%=resource_name_underscore.pluralize%>_path
|
27
|
+
end
|
28
|
+
|
29
|
+
def edit
|
30
|
+
@<%=resource_name_underscore.singularize%> = <%=resource_name_camelize.singularize%>.find(params[:id])
|
31
|
+
end
|
32
|
+
|
33
|
+
def update
|
34
|
+
@<%=resource_name_underscore.singularize%> = <%=resource_name_camelize.singularize%>.find(params[:id])
|
35
|
+
@<%=resource_name_underscore.singularize%>.update <%=resource_name_underscore.singularize%>_params
|
36
|
+
if @<%=resource_name_underscore.singularize%>.save
|
37
|
+
flash[:notice] = "Your <%=resource_name_underscore.singularize.gsub(/(_)/, ' ')%> was updated succesfully"
|
38
|
+
redirect_to root_path
|
39
|
+
else
|
40
|
+
render 'edit'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def <%=resource_name_underscore.singularize%>_params
|
47
|
+
params.require(:<%=resource_name_underscore.singularize%>).permit(:name, :delete)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -1,77 +1,77 @@
|
|
1
|
-
class ViewingsController < ApplicationController
|
2
|
-
respond_to :html, :xml, :json
|
3
|
-
|
4
|
-
before_action :find_<%=resource_name_underscore.singularize%>
|
5
|
-
|
6
|
-
def index
|
7
|
-
@viewings = Viewing.where("<%=resource_name.singularize%>_id = ? AND end_time >= ?", @<%=resource_name.singularize%>.id, Time.now).order(:start_time)
|
8
|
-
respond_with @viewings
|
9
|
-
end
|
10
|
-
|
11
|
-
def new
|
12
|
-
@viewing = Viewing.new(<%=resource_name.singularize%>_id: @<%=resource_name.singularize%>.id)
|
13
|
-
end
|
14
|
-
|
15
|
-
def create
|
16
|
-
@viewing = Viewing.new(params[:viewing].permit(:<%=resource_name.singularize%>_id, :start_time, :length))
|
17
|
-
@viewing.<%=resource_name.singularize%> = @<%=resource_name.singularize%>
|
18
|
-
if @viewing.save
|
19
|
-
redirect_to <%=resource_name.singularize%>_viewings_path(@<%=resource_name.singularize%>, method: :get)
|
20
|
-
else
|
21
|
-
render 'new'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def show
|
26
|
-
@viewing = Viewing.find(params[:id])
|
27
|
-
end
|
28
|
-
|
29
|
-
def destroy
|
30
|
-
@viewing = Viewing.find(params[:id]).destroy
|
31
|
-
if @viewing.destroy
|
32
|
-
flash[:notice] = "Viewing: #{@viewing.start_time.strftime('%e %b %Y %H:%M%p')} to #{@viewing.end_time.strftime('%e %b %Y %H:%M%p')} deleted"
|
33
|
-
redirect_to <%=resource_name.singularize%>_viewings_path(@<%=resource_name.singularize%>)
|
34
|
-
else
|
35
|
-
render 'index'
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def edit
|
40
|
-
@viewing = Viewing.find(params[:id])
|
41
|
-
end
|
42
|
-
|
43
|
-
def update
|
44
|
-
@viewing = Viewing.find(params[:id])
|
45
|
-
# @viewing.<%=resource_name%> = @<%=resource_name%>
|
46
|
-
|
47
|
-
if @viewing.update(params[:viewing].permit(:<%=resource_name.singularize%>_id, :start_time, :length))
|
48
|
-
flash[:notice] = 'Your viewing was updated succesfully'
|
49
|
-
|
50
|
-
if request.xhr?
|
51
|
-
render json: {status: :success}.to_json
|
52
|
-
else
|
53
|
-
redirect_to <%=resource_name.singularize%>_viewings_path(@<%=resource_name.singularize%>)
|
54
|
-
end
|
55
|
-
else
|
56
|
-
render 'edit'
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
private
|
61
|
-
|
62
|
-
def save viewing
|
63
|
-
if @viewing.save
|
64
|
-
flash[:notice] = 'viewing added'
|
65
|
-
redirect_to <%=resource_name.singularize%>_viewing_path(@<%=resource_name.singularize%>, @viewing)
|
66
|
-
else
|
67
|
-
render 'new'
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def find_<%=resource_name.singularize%>
|
72
|
-
if params[:<%=resource_name.singularize%>_id]
|
73
|
-
@<%=resource_name.singularize%> = <%=resource_name_camelize.singularize%>.find_by_id(params[:<%=resource_name.singularize%>_id])
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
end
|
1
|
+
class ViewingsController < ApplicationController
|
2
|
+
respond_to :html, :xml, :json
|
3
|
+
|
4
|
+
before_action :find_<%=resource_name_underscore.singularize%>
|
5
|
+
|
6
|
+
def index
|
7
|
+
@viewings = Viewing.where("<%=resource_name.singularize%>_id = ? AND end_time >= ?", @<%=resource_name.singularize%>.id, Time.now).order(:start_time)
|
8
|
+
respond_with @viewings
|
9
|
+
end
|
10
|
+
|
11
|
+
def new
|
12
|
+
@viewing = Viewing.new(<%=resource_name.singularize%>_id: @<%=resource_name.singularize%>.id)
|
13
|
+
end
|
14
|
+
|
15
|
+
def create
|
16
|
+
@viewing = Viewing.new(params[:viewing].permit(:<%=resource_name.singularize%>_id, :start_time, :length))
|
17
|
+
@viewing.<%=resource_name.singularize%> = @<%=resource_name.singularize%>
|
18
|
+
if @viewing.save
|
19
|
+
redirect_to <%=resource_name.singularize%>_viewings_path(@<%=resource_name.singularize%>, method: :get)
|
20
|
+
else
|
21
|
+
render 'new'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def show
|
26
|
+
@viewing = Viewing.find(params[:id])
|
27
|
+
end
|
28
|
+
|
29
|
+
def destroy
|
30
|
+
@viewing = Viewing.find(params[:id]).destroy
|
31
|
+
if @viewing.destroy
|
32
|
+
flash[:notice] = "Viewing: #{@viewing.start_time.strftime('%e %b %Y %H:%M%p')} to #{@viewing.end_time.strftime('%e %b %Y %H:%M%p')} deleted"
|
33
|
+
redirect_to <%=resource_name.singularize%>_viewings_path(@<%=resource_name.singularize%>)
|
34
|
+
else
|
35
|
+
render 'index'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def edit
|
40
|
+
@viewing = Viewing.find(params[:id])
|
41
|
+
end
|
42
|
+
|
43
|
+
def update
|
44
|
+
@viewing = Viewing.find(params[:id])
|
45
|
+
# @viewing.<%=resource_name%> = @<%=resource_name%>
|
46
|
+
|
47
|
+
if @viewing.update(params[:viewing].permit(:<%=resource_name.singularize%>_id, :start_time, :length))
|
48
|
+
flash[:notice] = 'Your viewing was updated succesfully'
|
49
|
+
|
50
|
+
if request.xhr?
|
51
|
+
render json: {status: :success}.to_json
|
52
|
+
else
|
53
|
+
redirect_to <%=resource_name.singularize%>_viewings_path(@<%=resource_name.singularize%>)
|
54
|
+
end
|
55
|
+
else
|
56
|
+
render 'edit'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def save viewing
|
63
|
+
if @viewing.save
|
64
|
+
flash[:notice] = 'viewing added'
|
65
|
+
redirect_to <%=resource_name.singularize%>_viewing_path(@<%=resource_name.singularize%>, @viewing)
|
66
|
+
else
|
67
|
+
render 'new'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def find_<%=resource_name.singularize%>
|
72
|
+
if params[:<%=resource_name.singularize%>_id]
|
73
|
+
@<%=resource_name.singularize%> = <%=resource_name_camelize.singularize%>.find_by_id(params[:<%=resource_name.singularize%>_id])
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
class ActiveSupport::HashWithIndifferentAccess
|
2
|
-
def to_datetime(name)
|
3
|
-
units = select{|k,v| k.match /#{name}\(..\)/}.map{|k,v| v.to_i}
|
4
|
-
DateTime.new(*units)
|
5
|
-
end
|
6
|
-
end
|
1
|
+
class ActiveSupport::HashWithIndifferentAccess
|
2
|
+
def to_datetime(name)
|
3
|
+
units = select{|k,v| k.match /#{name}\(..\)/}.map{|k,v| v.to_i}
|
4
|
+
DateTime.new(*units)
|
5
|
+
end
|
6
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class <%= resource_name_camelize.singularize %> < ActiveRecord::Base
|
2
|
-
validates :name, presence: true, uniqueness: true
|
3
|
-
has_many :viewings
|
4
|
-
end
|
1
|
+
class <%= resource_name_camelize.singularize %> < ActiveRecord::Base
|
2
|
+
validates :name, presence: true, uniqueness: true
|
3
|
+
has_many :viewings
|
4
|
+
end
|
@@ -1,85 +1,85 @@
|
|
1
|
-
module Viewable
|
2
|
-
extend ActiveSupport::Concern
|
3
|
-
|
4
|
-
included do
|
5
|
-
belongs_to :<%=resource_name_underscore.singularize%>
|
6
|
-
|
7
|
-
validates :start_time, presence: true
|
8
|
-
validates :length, presence: true, numericality: { greater_than: 0 }
|
9
|
-
validate :start_date_cannot_be_in_the_past
|
10
|
-
validate :overlaps
|
11
|
-
|
12
|
-
before_validation :calculate_end_time
|
13
|
-
|
14
|
-
|
15
|
-
scope :time_constraint, ->(c1, f1, c2, f2) do
|
16
|
-
return nil unless f1 && f2
|
17
|
-
where "%s ? AND %s ?" % [c1, c2], f1, f2
|
18
|
-
end
|
19
|
-
|
20
|
-
scope :end_during, ->(start_time, end_time) { time_constraint "end_time >", start_time, "end_time <", end_time }
|
21
|
-
scope :start_during, ->(start_time, end_time) { time_constraint "start_time >", start_time, "start_time <", end_time }
|
22
|
-
scope :happening_during, ->(start_time, end_time) { time_constraint "start_time >", start_time, "end_time <", end_time }
|
23
|
-
scope :enveloping, ->(start_time, end_time) { time_constraint "start_time <", start_time, "end_time >", end_time }
|
24
|
-
scope :identical, ->(start_time, end_time) { time_constraint "start_time =", start_time, "end_time =", end_time }
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
def overlaps
|
29
|
-
overlapping_viewings = [
|
30
|
-
<%=resource_name_underscore.singularize%>.viewings.end_during(start_time, end_time),
|
31
|
-
<%=resource_name_underscore.singularize%>.viewings.start_during(start_time, end_time),
|
32
|
-
<%=resource_name_underscore.singularize%>.viewings.happening_during(start_time, end_time),
|
33
|
-
<%=resource_name_underscore.singularize%>.viewings.enveloping(start_time, end_time),
|
34
|
-
<%=resource_name_underscore.singularize%>.viewings.identical(start_time, end_time)
|
35
|
-
].flatten
|
36
|
-
|
37
|
-
overlapping_viewings.delete self
|
38
|
-
if overlapping_viewings.any?
|
39
|
-
errors.add(:base, 'Slot has already been booked for viewing')
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def start_date_cannot_be_in_the_past
|
44
|
-
if start_time && start_time < DateTime.now + (15.minutes)
|
45
|
-
errors.add(:start_time, 'must be at least 15 minutes from present time')
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def calculate_end_time
|
50
|
-
start_time = validate_start_time
|
51
|
-
length = validate_length
|
52
|
-
if start_time && length
|
53
|
-
self.end_time = start_time + (length.hours - 60)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
|
-
def as_json(options = {})
|
59
|
-
{
|
60
|
-
:id => self.id,
|
61
|
-
:start => self.start_time,
|
62
|
-
:end => self.end_time + 60,
|
63
|
-
:recurring => false,
|
64
|
-
:allDay => false
|
65
|
-
}
|
66
|
-
end
|
67
|
-
|
68
|
-
private
|
69
|
-
|
70
|
-
def validate_start_time
|
71
|
-
if !self.start_time.nil?
|
72
|
-
start_time = self.start_time
|
73
|
-
else
|
74
|
-
return nil
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def validate_length
|
79
|
-
if !self.length.nil?
|
80
|
-
length = self.length.to_i
|
81
|
-
else
|
82
|
-
return nil
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
1
|
+
module Viewable
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
belongs_to :<%=resource_name_underscore.singularize%>
|
6
|
+
|
7
|
+
validates :start_time, presence: true
|
8
|
+
validates :length, presence: true, numericality: { greater_than: 0 }
|
9
|
+
validate :start_date_cannot_be_in_the_past
|
10
|
+
validate :overlaps
|
11
|
+
|
12
|
+
before_validation :calculate_end_time
|
13
|
+
|
14
|
+
|
15
|
+
scope :time_constraint, ->(c1, f1, c2, f2) do
|
16
|
+
return nil unless f1 && f2
|
17
|
+
where "%s ? AND %s ?" % [c1, c2], f1, f2
|
18
|
+
end
|
19
|
+
|
20
|
+
scope :end_during, ->(start_time, end_time) { time_constraint "end_time >", start_time, "end_time <", end_time }
|
21
|
+
scope :start_during, ->(start_time, end_time) { time_constraint "start_time >", start_time, "start_time <", end_time }
|
22
|
+
scope :happening_during, ->(start_time, end_time) { time_constraint "start_time >", start_time, "end_time <", end_time }
|
23
|
+
scope :enveloping, ->(start_time, end_time) { time_constraint "start_time <", start_time, "end_time >", end_time }
|
24
|
+
scope :identical, ->(start_time, end_time) { time_constraint "start_time =", start_time, "end_time =", end_time }
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
def overlaps
|
29
|
+
overlapping_viewings = [
|
30
|
+
<%=resource_name_underscore.singularize%>.viewings.end_during(start_time, end_time),
|
31
|
+
<%=resource_name_underscore.singularize%>.viewings.start_during(start_time, end_time),
|
32
|
+
<%=resource_name_underscore.singularize%>.viewings.happening_during(start_time, end_time),
|
33
|
+
<%=resource_name_underscore.singularize%>.viewings.enveloping(start_time, end_time),
|
34
|
+
<%=resource_name_underscore.singularize%>.viewings.identical(start_time, end_time)
|
35
|
+
].flatten
|
36
|
+
|
37
|
+
overlapping_viewings.delete self
|
38
|
+
if overlapping_viewings.any?
|
39
|
+
errors.add(:base, 'Slot has already been booked for viewing')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def start_date_cannot_be_in_the_past
|
44
|
+
if start_time && start_time < DateTime.now + (15.minutes)
|
45
|
+
errors.add(:start_time, 'must be at least 15 minutes from present time')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def calculate_end_time
|
50
|
+
start_time = validate_start_time
|
51
|
+
length = validate_length
|
52
|
+
if start_time && length
|
53
|
+
self.end_time = start_time + (length.hours - 60)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
def as_json(options = {})
|
59
|
+
{
|
60
|
+
:id => self.id,
|
61
|
+
:start => self.start_time,
|
62
|
+
:end => self.end_time + 60,
|
63
|
+
:recurring => false,
|
64
|
+
:allDay => false
|
65
|
+
}
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def validate_start_time
|
71
|
+
if !self.start_time.nil?
|
72
|
+
start_time = self.start_time
|
73
|
+
else
|
74
|
+
return nil
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def validate_length
|
79
|
+
if !self.length.nil?
|
80
|
+
length = self.length.to_i
|
81
|
+
else
|
82
|
+
return nil
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative './concerns/viewable'
|
2
|
-
class Viewing < ActiveRecord::Base
|
3
|
-
include Viewable
|
4
|
-
end
|
1
|
+
require_relative './concerns/viewable'
|
2
|
+
class Viewing < ActiveRecord::Base
|
3
|
+
include Viewable
|
4
|
+
end
|