alarmable 0.1.2 → 1.0.0

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: 8407d8b2abfde673a08a43eed7a8528eeffb18c758a0cd99c9fb1415302b0d04
4
- data.tar.gz: 9932c5802171d9e656033810e1d2634fc0f980b10b0bd7e00f3a00e634c43a10
3
+ metadata.gz: '079b8b2c656b50417dde03ebcccbb4d7b55dc249d90cee9974b1eed7f5089415'
4
+ data.tar.gz: 476c6acbe31bda140cf04b3840e7db36328ad57f05734a95f43a9683986ee180
5
5
  SHA512:
6
- metadata.gz: e7eb172811653a246837aafb773f2f0b4def40ba520d08c2ff99da38e794e6596f7f86b8e3dce87e1f4e0de887f17cf323a618ebe53c00f50d2309b609964447
7
- data.tar.gz: 5baa3c2fcc45a7c3f9c8b1983145dfbd1c514a3161e415fc81be326d7244dc529dcbbb0ead62274a2680a534ce338bf81b9618f23ab482a6ef5323bbeb879d22
6
+ metadata.gz: 540427e743f6a1fff246966b2ddb29c12a86de7f0e537d62bc8be3d0b6d8ac1c21830949577b238a3b509acaa2b26f886bc931fe41f550757381752840351e16
7
+ data.tar.gz: 1fd04a3f3effb30f4db9fd2d2b47d0bd00fcd0bbbfcf82cc6da0466c9b90b4d6853807f8b8fcd10e360b7ebbfe0e3551c9152db0dbaa488b1cae52b5e93c414f
@@ -9,16 +9,17 @@ concurrency:
9
9
  jobs:
10
10
  docs:
11
11
  name: Build gem documentation
12
- runs-on: ubuntu-20.04
12
+ runs-on: ubuntu-22.04
13
13
  timeout-minutes: 5
14
14
  steps:
15
- - uses: actions/checkout@v2
15
+ - uses: actions/checkout@v3
16
16
 
17
17
  - name: Install the correct Ruby version
18
18
  uses: ruby/setup-ruby@v1
19
19
  with:
20
20
  ruby-version: 2.5
21
21
  bundler-cache: true
22
+ rubygems: '3.3.26'
22
23
 
23
24
  - name: Prepare the virtual environment
24
25
  uses: hausgold/actions/ci@master
@@ -13,23 +13,24 @@ concurrency:
13
13
  jobs:
14
14
  test:
15
15
  name: 'Test the gem (Ruby ${{ matrix.ruby }}, Rails ${{ matrix.rails }})'
16
- runs-on: ubuntu-20.04
16
+ runs-on: ubuntu-22.04
17
17
  timeout-minutes: 5
18
18
  strategy:
19
19
  fail-fast: false
20
20
  matrix:
21
- ruby: [2.3, 2.4, 2.5, 2.6]
22
- rails: [4, '5.0', 5.1, 5.2]
21
+ ruby: ['2.5', '2.7']
22
+ rails: ['5.2']
23
23
  env:
24
24
  BUNDLE_GEMFILE: 'gemfiles/rails_${{ matrix.rails }}.gemfile'
25
25
  steps:
26
- - uses: actions/checkout@v2
26
+ - uses: actions/checkout@v3
27
27
 
28
28
  - name: Install the correct Ruby version
29
29
  uses: ruby/setup-ruby@v1
30
30
  with:
31
31
  ruby-version: ${{ matrix.ruby }}
32
32
  bundler-cache: true
33
+ rubygems: '3.3.26'
33
34
 
34
35
  - name: Prepare the virtual environment
35
36
  uses: hausgold/actions/ci@master
@@ -55,7 +56,7 @@ jobs:
55
56
 
56
57
  trigger-docs:
57
58
  name: Trigger the documentation upload
58
- runs-on: ubuntu-20.04
59
+ runs-on: ubuntu-22.04
59
60
  timeout-minutes: 2
60
61
  needs: test
61
62
  if: github.ref == 'refs/heads/master'
data/.rspec CHANGED
@@ -1,2 +1,3 @@
1
+ --backtrace
2
+ --force-color
1
3
  --format documentation
2
- --color
data/.rubocop.yml CHANGED
@@ -1,14 +1,19 @@
1
- require: rubocop-rspec
1
+ require:
2
+ - rubocop-rspec
3
+ - rubocop-rails
2
4
 
3
5
  Rails:
4
6
  Enabled: true
5
7
 
6
- Documentation:
8
+ Style/Documentation:
7
9
  Enabled: true
8
10
 
9
11
  AllCops:
12
+ NewCops: enable
13
+ SuggestExtensions: false
10
14
  DisplayCopNames: true
11
15
  TargetRubyVersion: 2.5
16
+ TargetRailsVersion: 5.2
12
17
  Exclude:
13
18
  - bin/**/*
14
19
  - vendor/**/*
@@ -23,6 +28,10 @@ Metrics/BlockLength:
23
28
  - '**/*.rake'
24
29
  - doc/**/*.rb
25
30
 
31
+ # MFA is not yet enabled for our gems yet.
32
+ Gemspec/RequireMFA:
33
+ Enabled: false
34
+
26
35
  # Document all the things.
27
36
  Style/DocumentationMethod:
28
37
  Enabled: true
@@ -39,6 +48,10 @@ Lint/AmbiguousBlockAssociation:
39
48
  RSpec/MessageSpies:
40
49
  EnforcedStyle: receive
41
50
 
51
+ # We stay with the original Ruby Style Guide recommendation.
52
+ Layout/LineLength:
53
+ Max: 80
54
+
42
55
  # Because nesting makes sense here to group the feature tests
43
56
  # more effective. This increases maintainability.
44
57
  RSpec/NestedGroups:
@@ -64,3 +77,7 @@ Rails/ApplicationJob:
64
77
  # so when first evaluated it won't change.
65
78
  RSpec/ExpectChange:
66
79
  Enabled: false
80
+
81
+ # We highly depend on memoized helpers across the specs.
82
+ RSpec/MultipleMemoizedHelpers:
83
+ Enabled: false
data/.simplecov CHANGED
@@ -1,3 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'simplecov-html'
4
+ require 'simplecov_json_formatter'
5
+
6
+ SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter.new(
7
+ [
8
+ SimpleCov::Formatter::HTMLFormatter,
9
+ SimpleCov::Formatter::JSONFormatter
10
+ ]
11
+ )
12
+
1
13
  SimpleCov.start 'test_frameworks' do
2
14
  add_filter '/vendor/bundle/'
3
15
  end
data/Appraisals CHANGED
@@ -1,25 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- appraise 'rails-4' do
4
- gem 'activejob', '4.2.10'
5
- gem 'activerecord', '4.2.10'
6
- gem 'activesupport', '4.2.10'
7
- end
8
-
9
- appraise 'rails-5.0' do
10
- gem 'activejob', '5.0.6'
11
- gem 'activerecord', '5.0.6'
12
- gem 'activesupport', '5.0.6'
13
- end
14
-
15
- appraise 'rails-5.1' do
16
- gem 'activejob', '5.1.4'
17
- gem 'activerecord', '5.1.4'
18
- gem 'activesupport', '5.1.4'
19
- end
20
-
21
3
  appraise 'rails-5.2' do
22
- gem 'activejob', '5.2.0'
23
- gem 'activerecord', '5.2.0'
24
- gem 'activesupport', '5.2.0'
4
+ gem 'activejob', '~> 5.2.0'
5
+ gem 'activerecord', '~> 5.2.0'
6
+ gem 'activesupport', '~> 5.2.0'
25
7
  end
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ### 1.0.0
2
+
3
+ * Bundler >= 2.3 is from now on required as minimal version (#4)
4
+ * Dropped support for Ruby < 2.5 (#4)
5
+ * Dropped support for Rails < 5.2 (#4)
6
+ * Updated all development/runtime gems to their latest
7
+ Ruby 2.5 compatible version (#4)
8
+
1
9
  ### 0.1.2
2
10
 
3
11
  * Migrated to Github Actions
data/Dockerfile ADDED
@@ -0,0 +1,28 @@
1
+ FROM hausgold/ruby:2.5
2
+ MAINTAINER Hermann Mayer <hermann.mayer@hausgold.de>
3
+
4
+ # Update system gem
5
+ RUN gem update --system '3.3.26'
6
+
7
+ # Install system packages and the latest bundler
8
+ RUN apt-get update -yqqq && \
9
+ apt-get install -y \
10
+ build-essential locales sudo vim \
11
+ ca-certificates \
12
+ bash-completion inotify-tools && \
13
+ echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen && /usr/sbin/locale-gen && \
14
+ gem install bundler -v '~> 2.3.0' --no-document --no-prerelease
15
+
16
+ # Add new web user
17
+ RUN mkdir /app && \
18
+ adduser web --home /home/web --shell /bin/bash \
19
+ --disabled-password --gecos ""
20
+ COPY config/docker/* /home/web/
21
+ RUN chown web:web -R /app /home/web /usr/local/bundle && \
22
+ mkdir -p /home/web/.ssh
23
+
24
+ # Set the root password and grant root access to web
25
+ RUN echo 'root:root' | chpasswd
26
+ RUN echo 'web ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
27
+
28
+ WORKDIR /app
data/Envfile ADDED
@@ -0,0 +1,3 @@
1
+ LANG=en_US.UTF-8
2
+ LANGUAGE=en_US.UTF-8
3
+ LC_ALL=en_US.UTF-8
data/Guardfile ADDED
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ # A sample Guardfile
4
+ # More info at https://github.com/guard/guard#readme
5
+
6
+ ## Uncomment and set this to only include directories you want to watch
7
+ (directories %w[lib spec]).select do |d|
8
+ if Dir.exist?(d)
9
+ d
10
+ else
11
+ UI.warning("Directory #{d} does not exist")
12
+ end
13
+ end
14
+
15
+ ## Note: if you are using the `directories` clause above and you are not
16
+ ## watching the project directory ('.'), then you will want to move
17
+ ## the Guardfile to a watched dir and symlink it back, e.g.
18
+ #
19
+ # $ mkdir config
20
+ # $ mv Guardfile config/
21
+ # $ ln -s config/Guardfile .
22
+ #
23
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
24
+
25
+ # NOTE: The cmd option is now required due to the increasing number of ways
26
+ # rspec may be run, below are examples of the most common uses.
27
+ # * bundler: 'bundle exec rspec'
28
+ # * bundler binstubs: 'bin/rspec'
29
+ # * spring: 'bin/rspec' (This will use spring if running and you have
30
+ # installed the spring binstubs per the docs)
31
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
32
+ # * 'just' rspec: 'rspec'
33
+
34
+ guard :rspec, cmd: 'bundle exec rspec' do
35
+ watch('spec/spec_helper.rb') { 'spec' }
36
+ watch(%r{^lib/alarmable.rb}) { 'spec' }
37
+ watch(%r{^spec/.+_spec\.rb$})
38
+ watch(%r{^lib/alarmable/([^\\]+)\.rb$}) do |m|
39
+ "spec/#{m[1]}_spec.rb"
40
+ end
41
+ watch(%r{^lib/alarmable/([^\\]+)/(.*)\.rb$}) do |m|
42
+ "spec/#{m[1]}/#{m[2]}_spec.rb"
43
+ end
44
+ end
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2017 Hausgold
3
+ Copyright (c) 2023 HAUSGOLD | talocasa GmbH
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/Makefile CHANGED
@@ -9,6 +9,7 @@ SHELL := bash
9
9
  # Environment switches
10
10
  MAKE_ENV ?= docker
11
11
  COMPOSE_RUN_SHELL_FLAGS ?= --rm
12
+ BASH_RUN_SHELL_FLAGS ?=
12
13
 
13
14
  # Directories
14
15
  VENDOR_DIR ?= vendor/bundle
@@ -22,9 +23,11 @@ MKDIR ?= mkdir
22
23
  RM ?= rm
23
24
 
24
25
  # Container binaries
25
- BUNDLE ?= bundle
26
26
  APPRAISAL ?= appraisal
27
+ BUNDLE ?= bundle
28
+ GUARD ?= guard
27
29
  RAKE ?= rake
30
+ RSPEC ?= rspec
28
31
  RUBOCOP ?= rubocop
29
32
  YARD ?= yard
30
33
 
@@ -39,8 +42,9 @@ ifeq ($(MAKE_ENV),docker)
39
42
  define run-shell
40
43
  $(COMPOSE) run $(COMPOSE_RUN_SHELL_FLAGS) \
41
44
  -e LANG=en_US.UTF-8 -e LANGUAGE=en_US.UTF-8 -e LC_ALL=en_US.UTF-8 \
42
- -e HOME=/tmp -e BUNDLE_APP_CONFIG=/app/.bundle \
43
- -u `$(ID) -u` test bash -c 'sleep 0.1; echo; $(1)'
45
+ -e HOME=/home/web -e BUNDLE_APP_CONFIG=/app/.bundle \
46
+ -u `$(ID) -u` test \
47
+ bash $(BASH_RUN_SHELL_FLAGS) -c 'sleep 0.1; echo; $(1)'
44
48
  endef
45
49
  else ifeq ($(MAKE_ENV),baremetal)
46
50
  define run-shell
@@ -52,9 +56,13 @@ all:
52
56
  # Alarmable
53
57
  #
54
58
  # install Install the dependencies
55
- # test Run the whole test suite
59
+ # update Update the local Gemset dependencies
56
60
  # clean Clean the dependencies
57
61
  #
62
+ # test Run the whole test suite
63
+ # test-style Test the code styles
64
+ # watch Watch for code changes and rerun the test suite
65
+ #
58
66
  # docs Generate the Ruby documentation of the library
59
67
  # stats Print the code statistics (library and test suite)
60
68
  # notes Print all the notes from the code
@@ -63,12 +71,25 @@ all:
63
71
  # shell Run an interactive shell on the container
64
72
  # shell-irb Run an interactive IRB shell on the container
65
73
 
74
+ .interactive:
75
+ @$(eval BASH_RUN_SHELL_FLAGS = --login)
76
+
66
77
  install:
67
78
  # Install the dependencies
68
79
  @$(MKDIR) -p $(VENDOR_DIR)
69
80
  @$(call run-shell,$(BUNDLE) check || $(BUNDLE) install --path $(VENDOR_DIR))
70
81
  @$(call run-shell,$(BUNDLE) exec $(APPRAISAL) install)
71
82
 
83
+ update:
84
+ # Install the dependencies
85
+ @$(MKDIR) -p $(VENDOR_DIR)
86
+ @$(call run-shell,$(BUNDLE) update)
87
+ @$(call run-shell,$(BUNDLE) exec $(APPRAISAL) update)
88
+
89
+ watch: install .interactive
90
+ # Watch for code changes and rerun the test suite
91
+ @$(call run-shell,$(BUNDLE) exec $(GUARD))
92
+
72
93
  test: \
73
94
  test-specs \
74
95
  test-style
@@ -80,7 +101,7 @@ test-specs:
80
101
  $(TEST_GEMFILES): GEMFILE=$(@:test-%=%)
81
102
  $(TEST_GEMFILES):
82
103
  # Run the whole test suite ($(GEMFILE))
83
- @$(call run-shell,$(BUNDLE) exec $(APPRAISAL) $(GEMFILE) $(RAKE))
104
+ @$(call run-shell,$(BUNDLE) exec $(APPRAISAL) $(GEMFILE) $(RSPEC))
84
105
 
85
106
  test-style: \
86
107
  test-style-ruby
@@ -92,6 +113,10 @@ test-style-ruby:
92
113
  clean:
93
114
  # Clean the dependencies
94
115
  @$(RM) -rf $(VENDOR_DIR)
116
+ @$(RM) -rf $(GEMFILES_DIR)/vendor
117
+ @$(RM) -rf $(GEMFILES_DIR)/*.lock
118
+ @$(RM) -rf .bundle .yardoc coverage pkg Gemfile.lock doc/api \
119
+ .rspec_status
95
120
 
96
121
  clean-containers:
97
122
  # Clean running containers
@@ -99,7 +124,16 @@ ifeq ($(MAKE_ENV),docker)
99
124
  @$(COMPOSE) down
100
125
  endif
101
126
 
102
- distclean: clean clean-containers
127
+ clean-images:
128
+ # Clean build images
129
+
130
+ ifeq ($(MAKE_ENV),docker)
131
+ @-$(DOCKER) images | $(GREP) $(shell basename "`pwd`") \
132
+ | $(AWK) '{ print $$3 }' \
133
+ | $(XARGS) -rn1 $(DOCKER) rmi -f
134
+ endif
135
+
136
+ distclean: clean clean-containers clean-images
103
137
 
104
138
  shell:
105
139
  # Run an interactive shell on the container
data/Rakefile CHANGED
@@ -2,71 +2,18 @@
2
2
 
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rspec/core/rake_task'
5
- require 'rails/code_statistics'
6
- require 'pp'
5
+ require 'countless/rake_tasks'
7
6
 
8
7
  RSpec::Core::RakeTask.new(:spec)
9
8
 
10
9
  task default: :spec
11
10
 
12
- # Load some railties tasks
13
- load 'rails/tasks/statistics.rake'
14
- load 'rails/tasks/annotations.rake'
15
-
16
- # Clear the default statistics directory constant
17
- #
18
- # rubocop:disable Style/MutableConstant because we define it
19
- Object.send(:remove_const, :STATS_DIRECTORIES)
20
- ::STATS_DIRECTORIES = []
21
- # rubocop:enable Style/MutableConstant
22
-
23
- # Monkey patch the Rails +CodeStatistics+ class to support configurable
24
- # patterns per path. This is reuqired to support top-level only file matches.
25
- class CodeStatistics
26
- DEFAULT_PATTERN = /^(?!\.).*?\.(rb|js|coffee|rake)$/.freeze
27
-
28
- # Pass the possible +pattern+ argument down to the
29
- # +calculate_directory_statistics+ method call.
30
- def calculate_statistics
31
- Hash[@pairs.map do |pair|
32
- [pair.first, calculate_directory_statistics(*pair[1..-1])]
33
- end]
34
- end
35
-
36
- # Match the pattern against the individual file name and the relative file
37
- # path. This allows top-level only matches.
38
- def calculate_directory_statistics(directory, pattern = DEFAULT_PATTERN)
39
- stats = CodeStatisticsCalculator.new
40
-
41
- Dir.foreach(directory) do |file_name|
42
- path = "#{directory}/#{file_name}"
43
-
44
- if File.directory?(path) && (/^\./ !~ file_name)
45
- stats.add(calculate_directory_statistics(path, pattern))
46
- elsif file_name =~ pattern || path =~ pattern
47
- stats.add_by_file_path(path)
48
- end
49
- end
50
-
51
- stats
52
- end
53
- end
54
-
55
11
  # Configure all code statistics directories
56
- vendors = [
57
- [:unshift, 'Top-levels', 'lib', %r{lib(/alarmable)?/[^/]+\.rb$}],
58
- [:unshift, 'Top-levels specs', 'spec', %r{spec/[^/]+_spec\.rb$}]
59
- ].reverse
60
-
61
- vendors.each do |method, type, dir, pattern|
62
- ::STATS_DIRECTORIES.send(method, [type, dir, pattern].compact)
63
- ::CodeStatistics::TEST_TYPES << type if type.include? 'specs'
64
- end
65
-
66
- # Setup annotations
67
- ENV['SOURCE_ANNOTATION_DIRECTORIES'] = 'spec,doc'
68
-
69
- desc 'Enumerate all annotations'
70
- task :notes do
71
- SourceAnnotationExtractor.enumerate '@?OPTIMIZE|@?FIXME|@?TODO', tag: true
12
+ Countless.configure do |config|
13
+ config.stats_base_directories = [
14
+ { name: 'Top-levels', dir: 'lib',
15
+ pattern: %r{/lib(/alarmable)?/[^/]+\.rb$} },
16
+ { name: 'Top-levels specs', test: true, dir: 'spec',
17
+ pattern: %r{/spec(/alarmable)?/[^/]+_spec\.rb$} }
18
+ ]
72
19
  end
data/alarmable.gemspec CHANGED
@@ -5,42 +5,55 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require 'alarmable/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = 'alarmable'
9
- spec.version = Alarmable::VERSION
10
- spec.authors = ['Hermann Mayer']
11
- spec.email = ['hermann.mayer@hausgold.de']
8
+ spec.name = 'alarmable'
9
+ spec.version = Alarmable::VERSION
10
+ spec.authors = ['Hermann Mayer']
11
+ spec.email = ['hermann.mayer92@gmail.com']
12
12
 
13
- spec.summary = 'A reusable alarm extension to Active Record models'
14
- spec.description = 'This is a reusable alarm concern for Active Record' \
15
- 'models. It adds support for the automatic maintenance' \
16
- 'of Active Job\'s which are scheduled for the given' \
17
- 'alarms.'
13
+ spec.license = 'MIT'
14
+ spec.summary = 'A reusable alarm extension to Active Record models'
15
+ spec.description = 'This is a reusable alarm concern for Active Record' \
16
+ 'models. It adds support for the automatic maintenance' \
17
+ 'of Active Job\'s which are scheduled for the given' \
18
+ 'alarms.'
18
19
 
19
- spec.homepage = 'https://github.com/hausgold/alarmable'
20
- spec.license = 'MIT'
20
+ base_uri = "https://github.com/hausgold/#{spec.name}"
21
+ spec.metadata = {
22
+ 'homepage_uri' => base_uri,
23
+ 'source_code_uri' => base_uri,
24
+ 'changelog_uri' => "#{base_uri}/blob/master/CHANGELOG.md",
25
+ 'bug_tracker_uri' => "#{base_uri}/issues",
26
+ 'documentation_uri' => "https://www.rubydoc.info/gems/#{spec.name}"
27
+ }
21
28
 
22
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
29
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
23
30
  f.match(%r{^(test|spec|features)/})
24
31
  end
25
- spec.bindir = 'exe'
26
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
+
33
+ spec.bindir = 'exe'
34
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
35
  spec.require_paths = ['lib']
28
36
 
29
- spec.add_dependency 'activejob', '>=3', '<6'
37
+ spec.required_ruby_version = '>= 2.5'
38
+
39
+ spec.add_dependency 'activejob', '>= 5.2'
30
40
  spec.add_dependency 'activejob-cancel', '~> 0.3'
31
- spec.add_dependency 'activerecord', '>=3', '<6'
32
- spec.add_dependency 'activesupport', '>=3', '<6'
33
- spec.add_dependency 'hashdiff', '~> 0.3.7'
34
-
35
- spec.add_development_dependency 'appraisal'
36
- spec.add_development_dependency 'bundler', '>= 1.16', '< 3'
37
- spec.add_development_dependency 'pg', '~> 0.18'
38
- spec.add_development_dependency 'railties', '>= 4.2.0', '< 6.1'
39
- spec.add_development_dependency 'rake', '~> 10.0'
40
- spec.add_development_dependency 'rspec', '~> 3.0'
41
- spec.add_development_dependency 'rubocop', '~> 0.63.1'
42
- spec.add_development_dependency 'rubocop-rspec', '~> 1.31'
43
- spec.add_development_dependency 'simplecov', '< 0.18'
44
- spec.add_development_dependency 'yard', '~> 0.9.18'
45
- spec.add_development_dependency 'yard-activesupport-concern', '~> 0.0.1'
41
+ spec.add_dependency 'activerecord', '>= 5.2'
42
+ spec.add_dependency 'activesupport', '>= 5.2'
43
+ spec.add_dependency 'hashdiff', '~> 1.0'
44
+
45
+ spec.add_development_dependency 'appraisal', '~> 2.4'
46
+ spec.add_development_dependency 'bundler', '~> 2.3'
47
+ spec.add_development_dependency 'countless', '~> 1.1'
48
+ spec.add_development_dependency 'guard-rspec', '~> 4.7'
49
+ spec.add_development_dependency 'pg', '~> 1.4'
50
+ spec.add_development_dependency 'railties', '>= 5.2'
51
+ spec.add_development_dependency 'rake', '~> 13.0'
52
+ spec.add_development_dependency 'rspec', '~> 3.12'
53
+ spec.add_development_dependency 'rubocop', '~> 1.28'
54
+ spec.add_development_dependency 'rubocop-rails', '~> 2.14'
55
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.10'
56
+ spec.add_development_dependency 'simplecov', '>= 0.22'
57
+ spec.add_development_dependency 'yard', '>= 0.9.28'
58
+ spec.add_development_dependency 'yard-activesupport-concern', '>= 0.0.1'
46
59
  end
@@ -0,0 +1,3 @@
1
+ if [ -f ~/.bashrc ]; then
2
+ . ~/.bashrc
3
+ fi
@@ -0,0 +1,48 @@
1
+ # ~/.bashrc: executed by bash(1) for non-login shells.
2
+ # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
3
+ # for examples
4
+
5
+ _GEM_PATHS=$(ls -d1 ${HOME}/.gem/ruby/*/bin 2>/dev/null | paste -sd ':')
6
+ _APP_PATHS=$(ls -d1 /app/vendor/bundle/ruby/*/bin 2>/dev/null | paste -sd ':')
7
+
8
+ export PATH="${_GEM_PATHS}:${_APP_PATHS}:${PATH}"
9
+ export PATH="/app/node_modules/.bin:${HOME}/.bin:/app/bin:${PATH}"
10
+ export MAKE_ENV=baremetal
11
+
12
+ # Disable the autostart of all supervisord units
13
+ sudo sed -i 's/autostart=.*/autostart=false/g' /etc/supervisor/conf.d/*
14
+
15
+ # Start the supervisord (empty, no units)
16
+ sudo supervisord >/dev/null 2>&1 &
17
+
18
+ # Wait for supervisord
19
+ while ! supervisorctl status >/dev/null 2>&1; do sleep 1; done
20
+
21
+ # Boot the mDNS stack
22
+ echo '# Start the mDNS stack'
23
+ sudo supervisorctl start dbus avahi
24
+ echo
25
+
26
+ function watch-make-test()
27
+ {
28
+ while [ 1 ]; do
29
+ inotifywait --quiet -r `pwd` -e close_write --format '%e -> %w%f'
30
+ make test
31
+ done
32
+ }
33
+
34
+ function watch-make()
35
+ {
36
+ while [ 1 ]; do
37
+ inotifywait --quiet -r `pwd` -e close_write --format '%e -> %w%f'
38
+ make $@
39
+ done
40
+ }
41
+
42
+ function watch-run()
43
+ {
44
+ while [ 1 ]; do
45
+ inotifywait --quiet -r `pwd` -e close_write --format '%e -> %w%f'
46
+ bash -c "$@"
47
+ done
48
+ }
@@ -0,0 +1,17 @@
1
+ # mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
2
+ "\e[1;5C": forward-word
3
+ "\e[1;5D": backward-word
4
+ "\e[5C": forward-word
5
+ "\e[5D": backward-word
6
+ "\e\e[C": forward-word
7
+ "\e\e[D": backward-word
8
+
9
+ # handle common Home/End escape codes
10
+ "\e[1~": beginning-of-line
11
+ "\e[4~": end-of-line
12
+ "\e[7~": beginning-of-line
13
+ "\e[8~": end-of-line
14
+ "\eOH": beginning-of-line
15
+ "\eOF": end-of-line
16
+ "\e[H": beginning-of-line
17
+ "\e[F": end-of-line
data/docker-compose.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  version: "3"
2
2
  services:
3
3
  db:
4
- image: hausgold/postgres:9.6
4
+ image: hausgold/postgres:14.4
5
5
  network_mode: bridge
6
6
  ports: ["5432"]
7
7
  volumes:
@@ -13,7 +13,8 @@ services:
13
13
  MDNS_HOSTNAME: db.alarmable.local
14
14
 
15
15
  test:
16
- image: ruby:2.3
16
+ build: .
17
+ env_file: Envfile
17
18
  network_mode: bridge
18
19
  working_dir: /app
19
20
  volumes:
@@ -2,8 +2,8 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activejob", "5.2.0"
6
- gem "activerecord", "5.2.0"
7
- gem "activesupport", "5.2.0"
5
+ gem "activejob", "~> 5.2.0"
6
+ gem "activerecord", "~> 5.2.0"
7
+ gem "activesupport", "~> 5.2.0"
8
8
 
9
9
  gemspec path: "../"
@@ -160,7 +160,7 @@ module Alarmable
160
160
  job = alarm_job.set(wait_until: notify_at).perform_later(self.id, alarm)
161
161
 
162
162
  # Construct a new alarm_jobs partial instance for this job
163
- Hash[id, job.job_id]
163
+ { id => job.job_id }
164
164
  end
165
165
  # rubocop:enable Metrics/AbcSize
166
166
 
@@ -177,7 +177,7 @@ module Alarmable
177
177
  # Detect the differences from the original alarm_jobs hash to the new
178
178
  # built (by partials) alarm_jobs hash. The jobs from negative differences
179
179
  # must be canceled.
180
- diff = HashDiff.diff(alarm_jobs, new_alarm_jobs)
180
+ diff = Hashdiff.diff(alarm_jobs, new_alarm_jobs)
181
181
 
182
182
  diff.select { |prop| prop.first == '-' }.each do |prop|
183
183
  alarm_job.cancel(prop.last)
@@ -1,5 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # The gem version details.
3
4
  module Alarmable
4
- VERSION = '0.1.2'
5
+ # The version of the +alarmable+ gem
6
+ VERSION = '1.0.0'
7
+
8
+ class << self
9
+ # Returns the version of gem as a string.
10
+ #
11
+ # @return [String] the gem version as string
12
+ def version
13
+ VERSION
14
+ end
15
+
16
+ # Returns the version of the gem as a +Gem::Version+.
17
+ #
18
+ # @return [Gem::Version] the gem version as object
19
+ def gem_version
20
+ Gem::Version.new VERSION
21
+ end
22
+ end
5
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alarmable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hermann Mayer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-15 00:00:00.000000000 Z
11
+ date: 2023-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activejob
@@ -16,20 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '6'
19
+ version: '5.2'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
- version: '3'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '6'
26
+ version: '5.2'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: activejob-cancel
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -50,224 +44,242 @@ dependencies:
50
44
  requirements:
51
45
  - - ">="
52
46
  - !ruby/object:Gem::Version
53
- version: '3'
54
- - - "<"
55
- - !ruby/object:Gem::Version
56
- version: '6'
47
+ version: '5.2'
57
48
  type: :runtime
58
49
  prerelease: false
59
50
  version_requirements: !ruby/object:Gem::Requirement
60
51
  requirements:
61
52
  - - ">="
62
53
  - !ruby/object:Gem::Version
63
- version: '3'
64
- - - "<"
65
- - !ruby/object:Gem::Version
66
- version: '6'
54
+ version: '5.2'
67
55
  - !ruby/object:Gem::Dependency
68
56
  name: activesupport
69
57
  requirement: !ruby/object:Gem::Requirement
70
58
  requirements:
71
59
  - - ">="
72
60
  - !ruby/object:Gem::Version
73
- version: '3'
74
- - - "<"
75
- - !ruby/object:Gem::Version
76
- version: '6'
61
+ version: '5.2'
77
62
  type: :runtime
78
63
  prerelease: false
79
64
  version_requirements: !ruby/object:Gem::Requirement
80
65
  requirements:
81
66
  - - ">="
82
67
  - !ruby/object:Gem::Version
83
- version: '3'
84
- - - "<"
85
- - !ruby/object:Gem::Version
86
- version: '6'
68
+ version: '5.2'
87
69
  - !ruby/object:Gem::Dependency
88
70
  name: hashdiff
89
71
  requirement: !ruby/object:Gem::Requirement
90
72
  requirements:
91
73
  - - "~>"
92
74
  - !ruby/object:Gem::Version
93
- version: 0.3.7
75
+ version: '1.0'
94
76
  type: :runtime
95
77
  prerelease: false
96
78
  version_requirements: !ruby/object:Gem::Requirement
97
79
  requirements:
98
80
  - - "~>"
99
81
  - !ruby/object:Gem::Version
100
- version: 0.3.7
82
+ version: '1.0'
101
83
  - !ruby/object:Gem::Dependency
102
84
  name: appraisal
103
85
  requirement: !ruby/object:Gem::Requirement
104
86
  requirements:
105
- - - ">="
87
+ - - "~>"
106
88
  - !ruby/object:Gem::Version
107
- version: '0'
89
+ version: '2.4'
108
90
  type: :development
109
91
  prerelease: false
110
92
  version_requirements: !ruby/object:Gem::Requirement
111
93
  requirements:
112
- - - ">="
94
+ - - "~>"
113
95
  - !ruby/object:Gem::Version
114
- version: '0'
96
+ version: '2.4'
115
97
  - !ruby/object:Gem::Dependency
116
98
  name: bundler
117
99
  requirement: !ruby/object:Gem::Requirement
118
100
  requirements:
119
- - - ">="
101
+ - - "~>"
120
102
  - !ruby/object:Gem::Version
121
- version: '1.16'
122
- - - "<"
103
+ version: '2.3'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.3'
111
+ - !ruby/object:Gem::Dependency
112
+ name: countless
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
123
116
  - !ruby/object:Gem::Version
124
- version: '3'
117
+ version: '1.1'
125
118
  type: :development
126
119
  prerelease: false
127
120
  version_requirements: !ruby/object:Gem::Requirement
128
121
  requirements:
129
- - - ">="
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: guard-rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '1.16'
132
- - - "<"
131
+ version: '4.7'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
133
137
  - !ruby/object:Gem::Version
134
- version: '3'
138
+ version: '4.7'
135
139
  - !ruby/object:Gem::Dependency
136
140
  name: pg
137
141
  requirement: !ruby/object:Gem::Requirement
138
142
  requirements:
139
143
  - - "~>"
140
144
  - !ruby/object:Gem::Version
141
- version: '0.18'
145
+ version: '1.4'
142
146
  type: :development
143
147
  prerelease: false
144
148
  version_requirements: !ruby/object:Gem::Requirement
145
149
  requirements:
146
150
  - - "~>"
147
151
  - !ruby/object:Gem::Version
148
- version: '0.18'
152
+ version: '1.4'
149
153
  - !ruby/object:Gem::Dependency
150
154
  name: railties
151
155
  requirement: !ruby/object:Gem::Requirement
152
156
  requirements:
153
157
  - - ">="
154
158
  - !ruby/object:Gem::Version
155
- version: 4.2.0
156
- - - "<"
157
- - !ruby/object:Gem::Version
158
- version: '6.1'
159
+ version: '5.2'
159
160
  type: :development
160
161
  prerelease: false
161
162
  version_requirements: !ruby/object:Gem::Requirement
162
163
  requirements:
163
164
  - - ">="
164
165
  - !ruby/object:Gem::Version
165
- version: 4.2.0
166
- - - "<"
167
- - !ruby/object:Gem::Version
168
- version: '6.1'
166
+ version: '5.2'
169
167
  - !ruby/object:Gem::Dependency
170
168
  name: rake
171
169
  requirement: !ruby/object:Gem::Requirement
172
170
  requirements:
173
171
  - - "~>"
174
172
  - !ruby/object:Gem::Version
175
- version: '10.0'
173
+ version: '13.0'
176
174
  type: :development
177
175
  prerelease: false
178
176
  version_requirements: !ruby/object:Gem::Requirement
179
177
  requirements:
180
178
  - - "~>"
181
179
  - !ruby/object:Gem::Version
182
- version: '10.0'
180
+ version: '13.0'
183
181
  - !ruby/object:Gem::Dependency
184
182
  name: rspec
185
183
  requirement: !ruby/object:Gem::Requirement
186
184
  requirements:
187
185
  - - "~>"
188
186
  - !ruby/object:Gem::Version
189
- version: '3.0'
187
+ version: '3.12'
190
188
  type: :development
191
189
  prerelease: false
192
190
  version_requirements: !ruby/object:Gem::Requirement
193
191
  requirements:
194
192
  - - "~>"
195
193
  - !ruby/object:Gem::Version
196
- version: '3.0'
194
+ version: '3.12'
197
195
  - !ruby/object:Gem::Dependency
198
196
  name: rubocop
199
197
  requirement: !ruby/object:Gem::Requirement
200
198
  requirements:
201
199
  - - "~>"
202
200
  - !ruby/object:Gem::Version
203
- version: 0.63.1
201
+ version: '1.28'
204
202
  type: :development
205
203
  prerelease: false
206
204
  version_requirements: !ruby/object:Gem::Requirement
207
205
  requirements:
208
206
  - - "~>"
209
207
  - !ruby/object:Gem::Version
210
- version: 0.63.1
208
+ version: '1.28'
209
+ - !ruby/object:Gem::Dependency
210
+ name: rubocop-rails
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '2.14'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '2.14'
211
223
  - !ruby/object:Gem::Dependency
212
224
  name: rubocop-rspec
213
225
  requirement: !ruby/object:Gem::Requirement
214
226
  requirements:
215
227
  - - "~>"
216
228
  - !ruby/object:Gem::Version
217
- version: '1.31'
229
+ version: '2.10'
218
230
  type: :development
219
231
  prerelease: false
220
232
  version_requirements: !ruby/object:Gem::Requirement
221
233
  requirements:
222
234
  - - "~>"
223
235
  - !ruby/object:Gem::Version
224
- version: '1.31'
236
+ version: '2.10'
225
237
  - !ruby/object:Gem::Dependency
226
238
  name: simplecov
227
239
  requirement: !ruby/object:Gem::Requirement
228
240
  requirements:
229
- - - "<"
241
+ - - ">="
230
242
  - !ruby/object:Gem::Version
231
- version: '0.18'
243
+ version: '0.22'
232
244
  type: :development
233
245
  prerelease: false
234
246
  version_requirements: !ruby/object:Gem::Requirement
235
247
  requirements:
236
- - - "<"
248
+ - - ">="
237
249
  - !ruby/object:Gem::Version
238
- version: '0.18'
250
+ version: '0.22'
239
251
  - !ruby/object:Gem::Dependency
240
252
  name: yard
241
253
  requirement: !ruby/object:Gem::Requirement
242
254
  requirements:
243
- - - "~>"
255
+ - - ">="
244
256
  - !ruby/object:Gem::Version
245
- version: 0.9.18
257
+ version: 0.9.28
246
258
  type: :development
247
259
  prerelease: false
248
260
  version_requirements: !ruby/object:Gem::Requirement
249
261
  requirements:
250
- - - "~>"
262
+ - - ">="
251
263
  - !ruby/object:Gem::Version
252
- version: 0.9.18
264
+ version: 0.9.28
253
265
  - !ruby/object:Gem::Dependency
254
266
  name: yard-activesupport-concern
255
267
  requirement: !ruby/object:Gem::Requirement
256
268
  requirements:
257
- - - "~>"
269
+ - - ">="
258
270
  - !ruby/object:Gem::Version
259
271
  version: 0.0.1
260
272
  type: :development
261
273
  prerelease: false
262
274
  version_requirements: !ruby/object:Gem::Requirement
263
275
  requirements:
264
- - - "~>"
276
+ - - ">="
265
277
  - !ruby/object:Gem::Version
266
278
  version: 0.0.1
267
279
  description: This is a reusable alarm concern for Active Recordmodels. It adds support
268
280
  for the automatic maintenanceof Active Job's which are scheduled for the givenalarms.
269
281
  email:
270
- - hermann.mayer@hausgold.de
282
+ - hermann.mayer92@gmail.com
271
283
  executables: []
272
284
  extensions: []
273
285
  extra_rdoc_files: []
@@ -283,7 +295,10 @@ files:
283
295
  - Appraisals
284
296
  - CHANGELOG.md
285
297
  - CODE_OF_CONDUCT.md
298
+ - Dockerfile
299
+ - Envfile
286
300
  - Gemfile
301
+ - Guardfile
287
302
  - LICENSE
288
303
  - Makefile
289
304
  - README.md
@@ -291,19 +306,24 @@ files:
291
306
  - alarmable.gemspec
292
307
  - bin/console
293
308
  - bin/setup
309
+ - config/docker/.bash_profile
310
+ - config/docker/.bashrc
311
+ - config/docker/.inputrc
294
312
  - doc/assets/project.svg
295
313
  - docker-compose.yml
296
- - gemfiles/rails_4.gemfile
297
- - gemfiles/rails_5.0.gemfile
298
- - gemfiles/rails_5.1.gemfile
299
314
  - gemfiles/rails_5.2.gemfile
300
315
  - lib/alarmable.rb
301
316
  - lib/alarmable/concern.rb
302
317
  - lib/alarmable/version.rb
303
- homepage: https://github.com/hausgold/alarmable
318
+ homepage:
304
319
  licenses:
305
320
  - MIT
306
- metadata: {}
321
+ metadata:
322
+ homepage_uri: https://github.com/hausgold/alarmable
323
+ source_code_uri: https://github.com/hausgold/alarmable
324
+ changelog_uri: https://github.com/hausgold/alarmable/blob/master/CHANGELOG.md
325
+ bug_tracker_uri: https://github.com/hausgold/alarmable/issues
326
+ documentation_uri: https://www.rubydoc.info/gems/alarmable
307
327
  post_install_message:
308
328
  rdoc_options: []
309
329
  require_paths:
@@ -312,14 +332,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
312
332
  requirements:
313
333
  - - ">="
314
334
  - !ruby/object:Gem::Version
315
- version: '0'
335
+ version: '2.5'
316
336
  required_rubygems_version: !ruby/object:Gem::Requirement
317
337
  requirements:
318
338
  - - ">="
319
339
  - !ruby/object:Gem::Version
320
340
  version: '0'
321
341
  requirements: []
322
- rubygems_version: 3.2.16
342
+ rubygems_version: 3.3.8
323
343
  signing_key:
324
344
  specification_version: 4
325
345
  summary: A reusable alarm extension to Active Record models
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activejob", "4.2.10"
6
- gem "activerecord", "4.2.10"
7
- gem "activesupport", "4.2.10"
8
-
9
- gemspec path: "../"
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activejob", "5.0.6"
6
- gem "activerecord", "5.0.6"
7
- gem "activesupport", "5.0.6"
8
-
9
- gemspec path: "../"
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activejob", "5.1.4"
6
- gem "activerecord", "5.1.4"
7
- gem "activesupport", "5.1.4"
8
-
9
- gemspec path: "../"