viewable 0.5.17 → 0.5.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +10 -10
  3. data/.gitignore +27 -27
  4. data/.travis.yml +22 -22
  5. data/AUTHORS.md +6 -6
  6. data/CONTRIBUTING.md +22 -22
  7. data/Gemfile +7 -7
  8. data/LICENSE.md +23 -23
  9. data/README.md +38 -38
  10. data/Rakefile +6 -6
  11. data/lib/viewable/generators/viewable/controller_generator.rb +22 -22
  12. data/lib/viewable/generators/viewable/css_generator.rb +11 -11
  13. data/lib/viewable/generators/viewable/install_generator.rb +17 -17
  14. data/lib/viewable/generators/viewable/js_generator.rb +17 -17
  15. data/lib/viewable/generators/viewable/resource_model_generator.rb +21 -21
  16. data/lib/viewable/generators/viewable/templates/assets/javascript/calendar-editable.js +6991 -6991
  17. data/lib/viewable/generators/viewable/templates/assets/javascript/custom.js +126 -126
  18. data/lib/viewable/generators/viewable/templates/assets/javascript/fullcalendar.js +6110 -6110
  19. data/lib/viewable/generators/viewable/templates/assets/stylesheets/fullcalendar.css +587 -587
  20. data/lib/viewable/generators/viewable/templates/controllers/resource_controller.rb +50 -50
  21. data/lib/viewable/generators/viewable/templates/controllers/viewing_controller.rb +77 -77
  22. data/lib/viewable/generators/viewable/templates/models/datetime.rb +6 -6
  23. data/lib/viewable/generators/viewable/templates/models/resource.rb +4 -4
  24. data/lib/viewable/generators/viewable/templates/models/viewable.rb +85 -85
  25. data/lib/viewable/generators/viewable/templates/models/viewing.rb +4 -4
  26. data/lib/viewable/generators/viewable/templates/views/_errors.html.erb +13 -13
  27. data/lib/viewable/generators/viewable/templates/views/_form.html.erb +6 -6
  28. data/lib/viewable/generators/viewable/templates/views/edit.html.erb +1 -1
  29. data/lib/viewable/generators/viewable/templates/views/index.html.erb +12 -12
  30. data/lib/viewable/generators/viewable/templates/views/new.html.erb +1 -1
  31. data/lib/viewable/generators/viewable/templates/views/viewings/_errors.html.erb +12 -12
  32. data/lib/viewable/generators/viewable/templates/views/viewings/_form.html.erb +11 -11
  33. data/lib/viewable/generators/viewable/templates/views/viewings/edit.html.erb +9 -9
  34. data/lib/viewable/generators/viewable/templates/views/viewings/index.html.erb +22 -22
  35. data/lib/viewable/generators/viewable/templates/views/viewings/new.html.erb +9 -9
  36. data/lib/viewable/generators/viewable/templates/views/viewings/show.html.erb +6 -6
  37. data/lib/viewable/generators/viewable/viewing_model_generator.rb +25 -25
  38. data/lib/viewable/generators/viewable/views_generator.rb +21 -21
  39. data/lib/viewable/railtie.rb +8 -8
  40. data/lib/viewable/viewable.rb +1 -1
  41. data/viewable.gemspec +33 -33
  42. 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