motion 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 63f815dc74ec8255bd6b7b07fae885691253e7903397ec2b6f1e79cc675c7261
4
- data.tar.gz: 758239f08e068912a6e213773c0cc3d86338ecec6f738650f19f1a9d83656995
3
+ metadata.gz: c1b1922ab9d0ef3ead51f333bf255e48f1f470a475ccc2463726e7d805d26344
4
+ data.tar.gz: 57204e95779dfffb7413bb5080da1fb97f8d0bd519a6ae5f07cce80e4bad58f7
5
5
  SHA512:
6
- metadata.gz: dfc01de3b79448af437bc4a0386ab2a9800e75ecb7d0231dc565d2bb6e3a21699fc9d7e6b58932824f0dc9ced1c59ae4426e40b9486198f7d082dcf0a5d7ee68
7
- data.tar.gz: 86223b046b0957a69d4d7301a0a6c5d85a51cdacd4b088eaa4b65fdd57643043bde5970aaa5de55fd093257b66f5cd2e06c320b891c02f7ec255ba1b3d7a824b
6
+ metadata.gz: 3240417ce4c5928aa52c17fb1eb89aa641983d1c119d0ad38b7ec05e60c29172ac95fac9b1ab5cba6ef35ea94b7df819b2b917213cfb193dbb749484b485a33a
7
+ data.tar.gz: b7c973c8a93f0c9fac94fffa21a6b597635e064c4363b55d6718704bfdc5936125956e9116ebafb2936d5c555c95c34dff7e474a873605d49b36b7e0bebefeac
@@ -5,13 +5,16 @@ Motion.configure do |config|
5
5
  # version of your application. By default, the commit hash from git is used,
6
6
  # but depending on your deployment, this may not be available in production.
7
7
  #
8
- # If you are sure that git is available in your production enviorment, you can
9
- # uncomment this line:
8
+ # Motion automatically calculates your revision by hashing the contents of
9
+ # files in `revision_paths` The defaults revision paths are:
10
+ # rails paths, bin, and Gemfile.lock.
10
11
  #
11
- # config.revision = `git rev-parse HEAD`.chomp
12
+ # To change or add to your revision paths, uncomment this line:
12
13
  #
13
- # If git is not available in your production enviorment, you must identify
14
- # your application version some other way:
14
+ # config.revision_paths += w(additional_path another_path)
15
+ #
16
+ # If you prefer to use git or an environmental variable for the revision
17
+ # in production, define the revision directly below.
15
18
  #
16
19
  # config.revision =
17
20
  # ENV.fetch("MY_DEPLOYMENT_NUMBER") { `git rev-parse HEAD`.chomp }
@@ -14,6 +14,7 @@ module Motion
14
14
  autoload :LogHelper, "motion/log_helper"
15
15
  autoload :MarkupTransformer, "motion/markup_transformer"
16
16
  autoload :Railtie, "motion/railtie"
17
+ autoload :RevisionCalculator, "motion/revision_calculator"
17
18
  autoload :Serializer, "motion/serializer"
18
19
  autoload :TestHelpers, "motion/test_helpers"
19
20
 
@@ -62,7 +62,7 @@ module Motion
62
62
  #
63
63
  # See `ActionCable::Channel::PeriodicTimers` for details.
64
64
  def _setup_declarative_notifcation_timer(notification, interval)
65
- return if connection.is_a?(ActionCable::Channel::ConnectionStub) ||
65
+ return if _stubbed_connection? ||
66
66
  @_declarative_notifications_timers.include?(notification)
67
67
 
68
68
  callback = proc do
@@ -77,6 +77,11 @@ module Motion
77
77
  active_periodic_timers << timer
78
78
  end
79
79
 
80
+ def _stubbed_connection?
81
+ defined?(ActionCable::Channel::ConnectionStub) &&
82
+ connection.is_a?(ActionCable::Channel::ConnectionStub)
83
+ end
84
+
80
85
  def _shutdown_declarative_notifcation_timer(notification, *)
81
86
  timer = @_declarative_notifications_timers.delete(notification)
82
87
  return unless timer
@@ -59,16 +59,17 @@ module Motion
59
59
  Rails.application.key_generator.generate_key("motion:secret")
60
60
  end
61
61
 
62
+ option :revision_paths do
63
+ require "rails"
64
+
65
+ Rails.application.config.paths.dup.tap do |paths|
66
+ paths.add "bin", glob: "*"
67
+ paths.add "Gemfile.lock"
68
+ end
69
+ end
70
+
62
71
  option :revision do
63
- warn <<~MSG # TODO: Better message (Focus on "How do I fix this?")
64
- Motion is automatically inferring the application's revision from git.
65
- Depending on your deployment, this may not work for you in production.
66
- If it does, add "config.revision = `git rev-parse HEAD`.chomp" to your
67
- Motion initializer. If it does not, do something else (probably read an
68
- env var or something).
69
- MSG
70
-
71
- `git rev-parse HEAD`.chomp
72
+ RevisionCalculator.new(revision_paths: revision_paths).perform
72
73
  end
73
74
 
74
75
  option :renderer_for_connection_proc do
@@ -148,4 +148,14 @@ module Motion
148
148
  super("The revision cannot contain a NULL byte")
149
149
  end
150
150
  end
151
+
152
+ class BadRevisionPathsError < Error
153
+ def initialize
154
+ super(<<~MSG)
155
+ Revision paths must be a Rails::Paths::Root object or an object
156
+ that responds to `all_paths.flat_map(&:existent)` and returns an
157
+ Array of strings representing full paths.
158
+ MSG
159
+ end
160
+ end
151
161
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "digest"
4
+ require "motion"
5
+
6
+ module Motion
7
+ class RevisionCalculator
8
+ attr_reader :revision_paths
9
+
10
+ def initialize(revision_paths:)
11
+ @revision_paths = revision_paths
12
+ end
13
+
14
+ def perform
15
+ derive_file_hash
16
+ end
17
+
18
+ private
19
+
20
+ def derive_file_hash
21
+ digest = Digest::MD5.new
22
+
23
+ files.each do |file|
24
+ digest << file # include filename as well as contents
25
+ digest << File.read(file)
26
+ end
27
+
28
+ digest.hexdigest
29
+ end
30
+
31
+ def existent_paths
32
+ @existent_paths ||=
33
+ begin
34
+ revision_paths.all_paths.flat_map(&:existent)
35
+ rescue
36
+ raise BadRevisionPathsError
37
+ end
38
+ end
39
+
40
+ def existent_files(path)
41
+ Dir["#{path}/**/*", path].reject { |f| File.directory?(f) }.uniq
42
+ end
43
+
44
+ def files
45
+ @files ||= existent_paths.flat_map { |path| existent_files(path) }.sort
46
+ end
47
+ end
48
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Motion
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.2"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alec Larsen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-07-03 00:00:00.000000000 Z
12
+ date: 2020-07-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -74,6 +74,7 @@ files:
74
74
  - lib/motion/log_helper.rb
75
75
  - lib/motion/markup_transformer.rb
76
76
  - lib/motion/railtie.rb
77
+ - lib/motion/revision_calculator.rb
77
78
  - lib/motion/serializer.rb
78
79
  - lib/motion/test_helpers.rb
79
80
  - lib/motion/version.rb
@@ -85,7 +86,7 @@ metadata:
85
86
  source_code_uri: https://github.com/unabridged/motion
86
87
  post_install_message: |
87
88
  Friendly reminder: When updating the motion gem, don't forget to update the
88
- NPM package as well (`bin/yarn add '@unabridged/motion@0.2.1'`).
89
+ NPM package as well (`bin/yarn add '@unabridged/motion@0.2.2'`).
89
90
  rdoc_options: []
90
91
  require_paths:
91
92
  - lib