paper_trail_manager 0.6.0 → 0.8.0

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 (144) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/test.yml +54 -0
  3. data/.gitignore +3 -2
  4. data/.rubocop.yml +33 -0
  5. data/.ruby-version +1 -0
  6. data/Appraisals +15 -12
  7. data/CHANGES.md +24 -0
  8. data/Gemfile +2 -1
  9. data/README.md +130 -66
  10. data/Rakefile +19 -5
  11. data/app/controllers/paper_trail_manager/changes_controller.rb +119 -101
  12. data/app/helpers/paper_trail_manager/changes_helper.rb +17 -13
  13. data/app/views/paper_trail_manager/changes/_version.html.erb +1 -1
  14. data/app/views/paper_trail_manager/changes/index.atom.builder +23 -19
  15. data/app/views/paper_trail_manager/changes/index.html.erb +41 -28
  16. data/app/views/paper_trail_manager/changes/show.html.erb +9 -6
  17. data/gemfiles/rails_6.1_paper_trail_12.0_kaminari.gemfile +10 -0
  18. data/gemfiles/rails_6.1_paper_trail_12.0_will_paginate.gemfile +10 -0
  19. data/gemfiles/rails_7.0_paper_trail_12.0_kaminari.gemfile +10 -0
  20. data/gemfiles/rails_7.0_paper_trail_12.0_will_paginate.gemfile +10 -0
  21. data/gemfiles/rails_7.0_paper_trail_15.0_kaminari.gemfile +10 -0
  22. data/gemfiles/rails_7.0_paper_trail_15.0_will_paginate.gemfile +10 -0
  23. data/gemfiles/rails_7.1_paper_trail_15.0_kaminari.gemfile +10 -0
  24. data/gemfiles/rails_7.1_paper_trail_15.0_will_paginate.gemfile +10 -0
  25. data/lib/paper_trail_manager.rb +11 -9
  26. data/paper_trail_manager.gemspec +25 -24
  27. data/spec/app_template.rb +39 -0
  28. data/spec/integration/authorization_spec.rb +84 -0
  29. data/spec/integration/date_filter_spec.rb +84 -0
  30. data/spec/integration/navigation_spec.rb +5 -3
  31. data/spec/integration/paper_trail_manager_spec.rb +94 -110
  32. data/spec/integration/response_formats_spec.rb +73 -0
  33. data/spec/rails_helper.rb +6 -4
  34. data/spec/spec_helper.rb +7 -5
  35. data/spec/support/factories.rb +4 -3
  36. data/spec/support/rspec_html_matchers.rb +7 -0
  37. data/spec/unit/authorization_spec.rb +42 -0
  38. data/spec/unit/changes_helper_spec.rb +81 -0
  39. metadata +103 -238
  40. data/.travis.yml +0 -23
  41. data/gemfiles/rails_3.2.0_paper_trail_3.0_kaminari.gemfile +0 -10
  42. data/gemfiles/rails_3.2.0_paper_trail_3.0_will_paginate.gemfile +0 -10
  43. data/gemfiles/rails_3.2.0_paper_trail_4.0_kaminari.gemfile +0 -10
  44. data/gemfiles/rails_3.2.0_paper_trail_4.0_will_paginate.gemfile +0 -10
  45. data/gemfiles/rails_4.0.0_paper_trail_3.0_kaminari.gemfile +0 -9
  46. data/gemfiles/rails_4.0.0_paper_trail_3.0_will_paginate.gemfile +0 -9
  47. data/gemfiles/rails_4.0.0_paper_trail_4.0_kaminari.gemfile +0 -9
  48. data/gemfiles/rails_4.0.0_paper_trail_4.0_will_paginate.gemfile +0 -9
  49. data/gemfiles/rails_4.1.0_paper_trail_3.0_kaminari.gemfile +0 -9
  50. data/gemfiles/rails_4.1.0_paper_trail_3.0_will_paginate.gemfile +0 -9
  51. data/gemfiles/rails_4.1.0_paper_trail_4.0_kaminari.gemfile +0 -9
  52. data/gemfiles/rails_4.1.0_paper_trail_4.0_will_paginate.gemfile +0 -9
  53. data/gemfiles/rails_4.2.2_paper_trail_3.0_kaminari.gemfile +0 -9
  54. data/gemfiles/rails_4.2.2_paper_trail_3.0_will_paginate.gemfile +0 -9
  55. data/gemfiles/rails_4.2.2_paper_trail_4.0_kaminari.gemfile +0 -9
  56. data/gemfiles/rails_4.2.2_paper_trail_4.0_will_paginate.gemfile +0 -9
  57. data/spec/controllers/entities_controller_spec.rb +0 -125
  58. data/spec/controllers/platforms_controller_spec.rb +0 -125
  59. data/spec/dummy/.gitignore +0 -15
  60. data/spec/dummy/Gemfile +0 -9
  61. data/spec/dummy/README.rdoc +0 -261
  62. data/spec/dummy/Rakefile +0 -7
  63. data/spec/dummy/app/assets/images/rails.png +0 -0
  64. data/spec/dummy/app/assets/javascripts/application.js +0 -15
  65. data/spec/dummy/app/assets/stylesheets/application.css +0 -13
  66. data/spec/dummy/app/controllers/application_controller.rb +0 -6
  67. data/spec/dummy/app/controllers/entities_controller.rb +0 -83
  68. data/spec/dummy/app/controllers/platforms_controller.rb +0 -83
  69. data/spec/dummy/app/helpers/application_helper.rb +0 -2
  70. data/spec/dummy/app/helpers/entities_helper.rb +0 -2
  71. data/spec/dummy/app/helpers/platforms_helper.rb +0 -2
  72. data/spec/dummy/app/mailers/.gitkeep +0 -0
  73. data/spec/dummy/app/models/.gitkeep +0 -0
  74. data/spec/dummy/app/models/entity.rb +0 -6
  75. data/spec/dummy/app/models/platform.rb +0 -6
  76. data/spec/dummy/app/views/application/index.html.erb +0 -6
  77. data/spec/dummy/app/views/entities/_form.html.erb +0 -17
  78. data/spec/dummy/app/views/entities/edit.html.erb +0 -6
  79. data/spec/dummy/app/views/entities/index.html.erb +0 -21
  80. data/spec/dummy/app/views/entities/new.html.erb +0 -5
  81. data/spec/dummy/app/views/entities/show.html.erb +0 -5
  82. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  83. data/spec/dummy/app/views/platforms/_form.html.erb +0 -17
  84. data/spec/dummy/app/views/platforms/edit.html.erb +0 -6
  85. data/spec/dummy/app/views/platforms/index.html.erb +0 -21
  86. data/spec/dummy/app/views/platforms/new.html.erb +0 -5
  87. data/spec/dummy/app/views/platforms/show.html.erb +0 -5
  88. data/spec/dummy/config/application.rb +0 -64
  89. data/spec/dummy/config/boot.rb +0 -6
  90. data/spec/dummy/config/database.yml +0 -22
  91. data/spec/dummy/config/environment.rb +0 -5
  92. data/spec/dummy/config/environments/development.rb +0 -37
  93. data/spec/dummy/config/environments/production.rb +0 -67
  94. data/spec/dummy/config/environments/test.rb +0 -36
  95. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  96. data/spec/dummy/config/initializers/inflections.rb +0 -15
  97. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  98. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  99. data/spec/dummy/config/initializers/session_store.rb +0 -8
  100. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  101. data/spec/dummy/config/locales/en.yml +0 -5
  102. data/spec/dummy/config/routes.rb +0 -8
  103. data/spec/dummy/config.ru +0 -4
  104. data/spec/dummy/db/migrate/20110228091428_create_entities.rb +0 -14
  105. data/spec/dummy/db/migrate/20110228093241_create_platforms.rb +0 -14
  106. data/spec/dummy/db/migrate/20110228094444_create_versions.rb +0 -18
  107. data/spec/dummy/db/schema.rb +0 -41
  108. data/spec/dummy/db/seeds.rb +0 -7
  109. data/spec/dummy/doc/README_FOR_APP +0 -2
  110. data/spec/dummy/lib/assets/.gitkeep +0 -0
  111. data/spec/dummy/lib/tasks/.gitkeep +0 -0
  112. data/spec/dummy/log/.gitkeep +0 -0
  113. data/spec/dummy/public/404.html +0 -26
  114. data/spec/dummy/public/422.html +0 -26
  115. data/spec/dummy/public/500.html +0 -25
  116. data/spec/dummy/public/favicon.ico +0 -0
  117. data/spec/dummy/public/index.html +0 -241
  118. data/spec/dummy/public/robots.txt +0 -5
  119. data/spec/dummy/script/rails +0 -6
  120. data/spec/dummy/test/fixtures/.gitkeep +0 -0
  121. data/spec/dummy/test/functional/.gitkeep +0 -0
  122. data/spec/dummy/test/integration/.gitkeep +0 -0
  123. data/spec/dummy/test/performance/browsing_test.rb +0 -12
  124. data/spec/dummy/test/test_helper.rb +0 -13
  125. data/spec/dummy/test/unit/.gitkeep +0 -0
  126. data/spec/dummy/vendor/assets/javascripts/.gitkeep +0 -0
  127. data/spec/dummy/vendor/assets/stylesheets/.gitkeep +0 -0
  128. data/spec/dummy/vendor/plugins/.gitkeep +0 -0
  129. data/spec/helpers/entities_helper_spec.rb +0 -15
  130. data/spec/helpers/platforms_helper_spec.rb +0 -15
  131. data/spec/models/entity_spec.rb +0 -14
  132. data/spec/models/platform_spec.rb +0 -14
  133. data/spec/requests/entities_spec.rb +0 -11
  134. data/spec/requests/platforms_spec.rb +0 -11
  135. data/spec/routing/entities_routing_spec.rb +0 -35
  136. data/spec/routing/platforms_routing_spec.rb +0 -35
  137. data/spec/views/entities/edit.html.erb_spec.rb +0 -15
  138. data/spec/views/entities/index.html.erb_spec.rb +0 -14
  139. data/spec/views/entities/new.html.erb_spec.rb +0 -15
  140. data/spec/views/entities/show.html.erb_spec.rb +0 -11
  141. data/spec/views/platforms/edit.html.erb_spec.rb +0 -15
  142. data/spec/views/platforms/index.html.erb_spec.rb +0 -14
  143. data/spec/views/platforms/new.html.erb_spec.rb +0 -15
  144. data/spec/views/platforms/show.html.erb_spec.rb +0 -11
@@ -1,128 +1,146 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Allow the parent class of ChangesController to be configured in the host app
2
4
  PaperTrailManager::ChangesController = Class.new(PaperTrailManager.base_controller.constantize)
3
5
 
4
- class PaperTrailManager::ChangesController
5
- # Default number of changes to list on a pagenated index page.
6
- PER_PAGE = 50
6
+ class PaperTrailManager
7
+ class ChangesController
8
+ # Default number of changes to list on a pagenated index page.
9
+ PER_PAGE = 50
7
10
 
8
- helper PaperTrailManager.route_helpers if PaperTrailManager.route_helpers
9
- helper PaperTrailManager::ChangesHelper
10
- layout PaperTrailManager.layout if PaperTrailManager.layout
11
+ helper PaperTrailManager.route_helpers if PaperTrailManager.route_helpers
12
+ helper PaperTrailManager::ChangesHelper
13
+ layout PaperTrailManager.layout if PaperTrailManager.layout
11
14
 
12
- # List changes
13
- def index
14
- unless change_index_allowed?
15
- flash[:error] = "You do not have permission to list changes."
16
- return(redirect_to root_url)
17
- end
15
+ # List changes
16
+ def index
17
+ unless change_index_allowed?
18
+ flash[:error] = 'You do not have permission to list changes.'
19
+ return(redirect_to root_url)
20
+ end
18
21
 
19
- @versions = PaperTrail::Version.order('created_at DESC, id DESC')
20
- if params[:type]
21
- @versions = @versions.where(:item_type => params[:type])
22
- end
23
- if params[:id]
24
- @versions = @versions.where(:item_id => params[:id])
22
+ @versions = PaperTrail::Version.order('created_at DESC, id DESC')
23
+ @versions = @versions.where(item_type: params[:type]) if params[:type]
24
+ @versions = @versions.where(item_id: params[:id]) if params[:id]
25
+
26
+ # Date range filtering
27
+ @from = parse_date(params[:from])
28
+ @to = parse_date(params[:to])
29
+ @versions = @versions.where('created_at >= ?', @from.beginning_of_day) if @from
30
+ @versions = @versions.where('created_at <= ?', @to.end_of_day) if @to
31
+
32
+ # Ensure pagination parameters have sensible values
33
+ @page = params[:page].to_i
34
+ @page = nil if @page.zero?
35
+
36
+ @per_page = params[:per_page].to_i
37
+ @per_page = PER_PAGE if @per_page.zero?
38
+
39
+ @versions = if defined?(WillPaginate)
40
+ @versions.paginate(page: @page, per_page: @per_page)
41
+ else
42
+ @versions.page(@page).per(@per_page)
43
+ end
44
+
45
+ respond_to do |format|
46
+ format.html # index.html.erb
47
+ format.atom # index.atom.builder
48
+ format.json { render json: @versions }
49
+ end
25
50
  end
26
51
 
27
- # Ensure pagination parameters have sensible values
28
- @page = (v = params[:page].to_i; v == 0 ? nil : v)
29
- @per_page = (v = params[:per_page].to_i; v == 0 ? PER_PAGE : v)
52
+ # Show a change
53
+ def show
54
+ begin
55
+ @version = PaperTrail::Version.find(params[:id])
56
+ rescue ActiveRecord::RecordNotFound
57
+ flash[:error] = 'No such version.'
58
+ return(redirect_to action: :index)
59
+ end
30
60
 
31
- if defined?(WillPaginate)
32
- @versions = @versions.paginate(:page => @page, :per_page => @per_page)
33
- else
34
- @versions = @versions.page(@page).per(@per_page)
35
- end
61
+ unless change_show_allowed?(@version)
62
+ flash[:error] = 'You do not have permission to show that change.'
63
+ return(redirect_to action: :index)
64
+ end
36
65
 
37
- respond_to do |format|
38
- format.html # index.html.erb
39
- format.atom # index.atom.builder
40
- format.json { render :json => @versions }
66
+ respond_to do |format|
67
+ format.html # show.html.erb
68
+ format.json { render json: @version }
69
+ end
41
70
  end
42
- end
43
71
 
44
- # Show a change
45
- def show
46
- begin
47
- @version = PaperTrail::Version.find(params[:id])
48
- rescue ActiveRecord::RecordNotFound
49
- flash[:error] = "No such version."
50
- return(redirect_to :action => :index)
51
- end
72
+ # Rollback a change
73
+ def update
74
+ begin
75
+ @version = PaperTrail::Version.find(params[:id])
76
+ rescue ActiveRecord::RecordNotFound
77
+ flash[:error] = 'No such version.'
78
+ return(redirect_to(changes_path))
79
+ end
52
80
 
53
- unless change_show_allowed?(@version)
54
- flash[:error] = "You do not have permission to show that change."
55
- return(redirect_to :action => :index)
56
- end
81
+ unless change_revert_allowed?(@version)
82
+ flash[:error] = 'You do not have permission to revert this change.'
83
+ return(redirect_to changes_path)
84
+ end
57
85
 
58
- respond_to do |format|
59
- format.html # show.html.erb
60
- format.json { render :json => @version }
61
- end
62
- end
86
+ if @version.event == 'create'
87
+ @record = @version.item_type.constantize.find(@version.item_id)
88
+ @result = @record.destroy
89
+ else
90
+ @record = @version.reify
91
+ @result = @record.save
92
+ end
63
93
 
64
- # Rollback a change
65
- def update
66
- begin
67
- @version = PaperTrail::Version.find(params[:id])
68
- rescue ActiveRecord::RecordNotFound
69
- flash[:error] = "No such version."
70
- return(redirect_to(changes_path))
94
+ if @result
95
+ if @version.event == 'create'
96
+ flash[:notice] = 'Rolled back newly-created record by destroying it.'
97
+ redirect_to changes_path
98
+ else
99
+ flash[:notice] = 'Rolled back changes to this record.'
100
+ redirect_to change_item_url(@version)
101
+ end
102
+ else
103
+ flash[:error] = "Couldn't rollback. Sorry."
104
+ redirect_to changes_path
105
+ end
71
106
  end
72
107
 
73
- unless change_revert_allowed?(@version)
74
- flash[:error] = "You do not have permission to revert this change."
75
- return(redirect_to changes_path)
76
- end
108
+ protected
77
109
 
78
- if @version.event == "create"
79
- @record = @version.item_type.constantize.find(@version.item_id)
80
- @result = @record.destroy
81
- else
82
- @record = @version.reify
83
- @result = @record.save
110
+ # Return the URL for the item represented by the +version+, e.g. a Company record instance referenced by a version.
111
+ def change_item_url(version)
112
+ version_type = version.item_type.underscore.split('/').last
113
+ send("#{version_type}_url", version.item_id)
114
+ rescue NoMethodError
115
+ nil
84
116
  end
117
+ helper_method :change_item_url
85
118
 
86
- if @result
87
- if @version.event == "create"
88
- flash[:notice] = "Rolled back newly-created record by destroying it."
89
- redirect_to changes_path
90
- else
91
- flash[:notice] = "Rolled back changes to this record."
92
- redirect_to change_item_url(@version)
93
- end
94
- else
95
- flash[:error] = "Couldn't rollback. Sorry."
96
- redirect_to changes_path
119
+ # Allow index?
120
+ def change_index_allowed?
121
+ PaperTrailManager.allow_index?(self)
97
122
  end
98
- end
99
-
100
- protected
123
+ helper_method :change_index_allowed?
101
124
 
102
- # Return the URL for the item represented by the +version+, e.g. a Company record instance referenced by a version.
103
- def change_item_url(version)
104
- version_type = version.item_type.underscore.split('/').last
105
- return send("#{version_type}_url", version.item_id)
106
- rescue NoMethodError
107
- return nil
108
- end
109
- helper_method :change_item_url
125
+ # Allow show?
126
+ def change_show_allowed?(version)
127
+ PaperTrailManager.allow_show?(self, version)
128
+ end
129
+ helper_method :change_show_allowed?
110
130
 
111
- # Allow index?
112
- def change_index_allowed?
113
- return PaperTrailManager.allow_index?(self)
114
- end
115
- helper_method :change_index_allowed?
131
+ # Allow revert?
132
+ def change_revert_allowed?(version)
133
+ PaperTrailManager.allow_revert?(self, version)
134
+ end
135
+ helper_method :change_revert_allowed?
116
136
 
117
- # Allow show?
118
- def change_show_allowed?(version)
119
- return PaperTrailManager.allow_show?(self, version)
120
- end
121
- helper_method :change_show_allowed?
137
+ # Parse a date string, returning nil for invalid/missing values
138
+ def parse_date(value)
139
+ return nil if value.blank?
122
140
 
123
- # Allow revert?
124
- def change_revert_allowed?(version)
125
- return PaperTrailManager.allow_revert?(self, version)
141
+ Date.parse(value)
142
+ rescue Date::Error, ArgumentError
143
+ nil
144
+ end
126
145
  end
127
- helper_method :change_revert_allowed?
128
146
  end
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PaperTrailManager
2
4
  module ChangesHelper
3
5
  # Return HTML representing the +object+, which is either its text or a stylized "nil".
4
6
  def text_or_nil(object)
5
7
  if object.nil?
6
- return content_tag("em", "nil")
8
+ content_tag('em', 'nil')
7
9
  else
8
- return h(object)
10
+ h(object)
9
11
  end
10
12
  end
11
13
 
@@ -26,16 +28,18 @@ class PaperTrailManager
26
28
  # }
27
29
  def changes_for(version)
28
30
  case version.event
29
- when "create", "update"
31
+ when 'create', 'update'
30
32
  return {} unless version.changeset
33
+
31
34
  version.changeset.inject({}) do |changes, (attr, (prev, curr))|
32
- changes.store(attr, {previous: prev, current: curr}) && changes
35
+ changes.store(attr, { previous: prev, current: curr }) && changes
33
36
  end
34
- when "destroy"
37
+ when 'destroy'
35
38
  record = version_reify(version)
36
39
  return {} unless record
37
- record.attributes.reject{|k,v| v.nil?}.inject({}) do |changes, (attr, value)|
38
- changes.store(attr, {previous: value, current: nil}) && changes
40
+
41
+ record.attributes.reject { |_k, v| v.nil? }.inject({}) do |changes, (attr, value)|
42
+ changes.store(attr, { previous: value, current: nil }) && changes
39
43
  end
40
44
  else
41
45
  raise ArgumentError, "Unknown event: #{version.event}"
@@ -51,21 +55,21 @@ class PaperTrailManager
51
55
  name = "#{version.item_type} #{version.item_id}"
52
56
  end
53
57
 
54
- return h(name)
58
+ h(name)
55
59
  end
56
60
 
57
61
  def change_item_types
58
- ActiveRecord::Base.subclasses.select do |klass|
62
+ ActiveRecord::Base.descendants.select do |klass|
59
63
  klass.include?(PaperTrail::Model::InstanceMethods)
60
- end.map(&:to_s)
64
+ end.map(&:to_s).sort
61
65
  end
62
66
 
63
67
  # Returns HTML link for the item stored in the version, e.g. a link to a Company record stored in the version.
64
68
  def change_item_link(version)
65
- if url = change_item_url(version)
66
- return link_to(change_title_for(version), url, :class => 'change_item')
69
+ if (url = change_item_url(version))
70
+ link_to(change_title_for(version), url, class: 'change_item')
67
71
  else
68
- return content_tag(:span, change_title_for(version), :class => 'change_item')
72
+ content_tag(:span, change_title_for(version), class: 'change_item')
69
73
  end
70
74
  end
71
75
 
@@ -20,7 +20,7 @@
20
20
  <% end %>
21
21
  <% end %>
22
22
  <% if change_revert_allowed?(version) %>
23
- <%= link_to 'Roll back', change_path(version), :method => 'put', :class => 'rollback', :data => { :confirm => 'Are you sure?' } %>
23
+ <%= button_to 'Roll back', change_path(version), method: :put, class: 'rollback', form: { data: { turbo_confirm: 'Are you sure?' } } %>
24
24
  <% end %>
25
25
  </p>
26
26
  <% if version.event == 'update' or version.event == 'create' %>
@@ -1,44 +1,48 @@
1
+ # frozen_string_literal: true
2
+
1
3
  atom_feed do |feed|
2
- feed.title("Changes")
3
- date = @versions.first.try(:created_at) || Time.at(0)
4
+ feed.title('Changes')
5
+ date = @versions.first.try(:created_at) || Time.zone.at(0)
4
6
  feed.updated(date)
5
7
 
6
8
  @versions.each do |version|
7
9
  next unless change_show_allowed?(version)
8
10
 
9
- feed.entry(version, :url => change_url(version)) do |entry|
11
+ feed.entry(version, url: change_url(version)) do |entry|
10
12
  changes = changes_for(version)
11
13
 
12
- if PaperTrailManager.whodunnit_class && version.whodunnit
13
- user = PaperTrailManager.whodunnit_class.find(version.whodunnit) rescue nil
14
- else
15
- user = nil
16
- end
14
+ user = if PaperTrailManager.whodunnit_class && version.whodunnit
15
+ begin
16
+ PaperTrailManager.whodunnit_class.find(version.whodunnit)
17
+ rescue StandardError
18
+ nil
19
+ end
20
+ end
17
21
 
18
- entry.title "#{version.event.upcase} #{version.item_type} «#{change_title_for(version)}» #{user ? 'by '+user.send(PaperTrailManager.whodunnit_name_method) : ''}"
22
+ entry.title "#{version.event.upcase} #{version.item_type} «#{change_title_for(version)}» #{user ? 'by ' + user.send(PaperTrailManager.whodunnit_name_method) : ''}"
19
23
  entry.updated version.created_at.utc.xmlschema
20
24
 
21
25
  xm = ::Builder::XmlMarkup.new
22
- xm.div {
23
- xm.p {
26
+ xm.div do
27
+ xm.p do
24
28
  xm.span << 'Go to: '
25
29
  xm.span << link_to('Change', change_url(version))
26
30
  xm.span << ' | '
27
31
  xm.span << link_to('Record', change_item_url(version))
28
- }
29
- xm.table {
32
+ end
33
+ xm.table do
30
34
  changes.keys.sort.each do |key|
31
- xm.tr {
35
+ xm.tr do
32
36
  xm.td { xm.b key }
33
37
  xm.td changes[key][:previous].inspect
34
- xm.td { xm.span << "&rarr;" }
38
+ xm.td { xm.span << '&rarr;' }
35
39
  xm.td changes[key][:current].inspect
36
- }
40
+ end
37
41
  end
38
- }
39
- }
42
+ end
43
+ end
40
44
 
41
- entry.content(xm.to_s, :type => 'html')
45
+ entry.content(xm.to_s, type: 'html')
42
46
  end
43
47
  end
44
48
  end
@@ -1,35 +1,48 @@
1
1
  <h1>Changes</h1>
2
2
 
3
- <p class='changes_feed'><%= link_to 'Changes feed', changes_path(:format => 'atom') %></p>
4
-
5
3
  <p>
6
4
  Show:
7
- <%= ([link_to('All', changes_path)] + change_item_types.map { |type| link_to(type.pluralize, changes_path(:type => type)) }).join(' | ').html_safe %>
5
+ <%= ([link_to('All', changes_path)] + change_item_types.map { |type| link_to(type.pluralize, changes_path(type: type)) }).join(' | ').html_safe %>
8
6
  </p>
9
7
 
10
- <table class='changes_table'>
11
- <tfoot>
12
- <tr>
13
- <td colspan='2'>
14
- <%= paginate @versions %>
15
- </td>
16
- </tr>
17
- </tfoot>
18
- <thead>
19
- <tr class='changes_header'>
20
- <th class='change_time'>Time</th>
21
- <th class='change_details'>Attribute with previous and current values</th>
22
- </tr>
23
- </thead>
24
- <tbody>
25
- <% if @versions.any? %>
26
- <% @versions.each do |version| %>
27
- <% next unless change_show_allowed?(version) %>
28
- <%= render :partial => 'version', :object => version %>
8
+ <%= form_tag changes_path, method: :get, class: 'changes_date_filter' do %>
9
+ <%= hidden_field_tag :type, params[:type] if params[:type] %>
10
+ <%= hidden_field_tag :id, params[:id] if params[:id] %>
11
+ <label for="from">From:</label>
12
+ <%= date_field_tag :from, params[:from], id: 'from' %>
13
+ <label for="to">To:</label>
14
+ <%= date_field_tag :to, params[:to], id: 'to' %>
15
+ <%= submit_tag 'Filter', name: nil %>
16
+ <% if params[:from].present? || params[:to].present? %>
17
+ <%= link_to 'Clear', changes_path(type: params[:type], id: params[:id]), class: 'clear_filter' %>
18
+ <% end %>
19
+ <% end %>
20
+ <div class="table-responsive">
21
+ <table class='changes_table table table-bordered'>
22
+ <tfoot>
23
+ <tr>
24
+ <td colspan='2'>
25
+ <%= paginate @versions %>
26
+ </td>
27
+ </tr>
28
+ </tfoot>
29
+ <thead>
30
+ <tr class='changes_header'>
31
+ <th class='change_time'>Time</th>
32
+ <th class='change_details'>Attribute with previous and current values</th>
33
+ </tr>
34
+ </thead>
35
+ <tbody>
36
+ <% if @versions.any? %>
37
+ <% @versions.each do |version| %>
38
+ <% next unless change_show_allowed?(version) %>
39
+ <%= render partial: 'version', object: version %>
40
+ <% end %>
41
+ <% else %>
42
+ <tr>
43
+ <td colspan='2'> &mdash; No changes found &mdash; </td>
44
+ </tr>
29
45
  <% end %>
30
- <% else %>
31
- <td rowspan='2'> &mdash; No changes found &mdash; </td>
32
- <% end %>
33
- </tbody>
34
- </table>
35
-
46
+ </tbody>
47
+ </table>
48
+ </div>
@@ -1,10 +1,13 @@
1
1
  <h1>Change <%= @version.id %></h1>
2
2
 
3
3
  <table class='changes_table'>
4
- <tr class='changes_header'>
5
- <th class='change_time'>Time</th>
6
- <th class='change_details'>Attribute with previous and current values</th>
7
- <%= render :partial => 'version', :object => @version %>
8
- </tr>
4
+ <thead>
5
+ <tr class='changes_header'>
6
+ <th class='change_time'>Time</th>
7
+ <th class='change_details'>Attribute with previous and current values</th>
8
+ </tr>
9
+ </thead>
10
+ <tbody>
11
+ <%= render partial: 'version', object: @version %>
12
+ </tbody>
9
13
  </table>
10
-
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 6.1.0"
6
+ gem "sqlite3", "~> 1.7"
7
+ gem "paper_trail", "~> 12.0"
8
+ gem "kaminari", ">= 1.0"
9
+
10
+ gemspec path: "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 6.1.0"
6
+ gem "sqlite3", "~> 1.7"
7
+ gem "paper_trail", "~> 12.0"
8
+ gem "will_paginate", "~> 4.0"
9
+
10
+ gemspec path: "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 7.0.0"
6
+ gem "sqlite3", "~> 1.7"
7
+ gem "paper_trail", "~> 12.0"
8
+ gem "kaminari", ">= 1.0"
9
+
10
+ gemspec path: "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 7.0.0"
6
+ gem "sqlite3", "~> 1.7"
7
+ gem "paper_trail", "~> 12.0"
8
+ gem "will_paginate", "~> 4.0"
9
+
10
+ gemspec path: "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 7.0.0"
6
+ gem "sqlite3", "~> 1.7"
7
+ gem "paper_trail", "~> 15.0"
8
+ gem "kaminari", ">= 1.0"
9
+
10
+ gemspec path: "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 7.0.0"
6
+ gem "sqlite3", "~> 1.7"
7
+ gem "paper_trail", "~> 15.0"
8
+ gem "will_paginate", "~> 4.0"
9
+
10
+ gemspec path: "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 7.1.0"
6
+ gem "sqlite3", "~> 1.7"
7
+ gem "paper_trail", "~> 15.0"
8
+ gem "kaminari", ">= 1.0"
9
+
10
+ gemspec path: "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 7.1.0"
6
+ gem "sqlite3", "~> 1.7"
7
+ gem "paper_trail", "~> 15.0"
8
+ gem "will_paginate", "~> 4.0"
9
+
10
+ gemspec path: "../"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rails'
2
4
  require 'paper_trail'
3
5
 
@@ -7,32 +9,32 @@ rescue LoadError
7
9
  begin
8
10
  require 'kaminari'
9
11
  rescue LoadError
10
- raise LoadError.new('will_paginate or kaminari must be in Gemfile or load_path')
12
+ raise LoadError, 'will_paginate or kaminari must be in Gemfile or load_path'
11
13
  end
12
14
  end
13
15
 
14
16
  class PaperTrailManager < Rails::Engine
15
- initializer "paper_trail_manager.pagination" do
17
+ initializer 'paper_trail_manager.pagination' do
16
18
  if defined?(WillPaginate)
17
- ::ActionView::Base.send(:alias_method, :paginate, :will_paginate)
19
+ ::ActionView::Base.define_method(:paginate) { |*args, **kwargs, &block| will_paginate(*args, **kwargs, &block) }
18
20
  end
19
21
  end
20
22
 
21
23
  @@whodunnit_name_method = :name
22
24
  cattr_accessor :whodunnit_class, :whodunnit_name_method, :route_helpers,
23
- :layout, :base_controller, :user_path_method, :item_name_method
25
+ :layout, :base_controller, :user_path_method, :item_name_method
24
26
 
25
- self.base_controller = "ApplicationController"
27
+ self.base_controller = 'ApplicationController'
26
28
  self.user_path_method = :user_path
27
29
 
28
30
  (Pathname(__FILE__).dirname + '..').tap do |base|
29
- paths["app/controller"] = base + 'app/controllers'
30
- paths["app/view"] = base + 'app/views'
31
+ paths['app/controller'] = base + 'app/controllers'
32
+ paths['app/view'] = base + 'app/views'
31
33
  end
32
34
 
33
35
  cattr_accessor :allow_index_block, :allow_show_block, :allow_revert_block
34
36
 
35
- block = Proc.new { true }
37
+ block = proc { true }
36
38
  self.allow_index_block = block
37
39
  self.allow_show_block = block
38
40
  self.allow_revert_block = block
@@ -50,7 +52,7 @@ class PaperTrailManager < Rails::Engine
50
52
  end
51
53
 
52
54
  def self.allow_show?(controller, version)
53
- allow_index_block.call controller, version
55
+ allow_show_block.call controller, version
54
56
  end
55
57
 
56
58
  # Describe when to allow reverts. Call this with a block that accepts