viewable 0.5.17 → 0.5.18

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.
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