rpush 2.0.1-java → 2.1.0-java
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +24 -18
- data/bin/rpush +1 -42
- data/lib/generators/rpush_config_generator.rb +7 -0
- data/lib/generators/{rpush_generator.rb → rpush_migration_generator.rb} +6 -11
- data/lib/generators/templates/rpush.rb +12 -12
- data/lib/generators/templates/rpush_2_0_0_updates.rb +2 -1
- data/lib/generators/templates/rpush_2_1_0_updates.rb +11 -0
- data/lib/rpush.rb +12 -4
- data/lib/rpush/apns_feedback.rb +1 -1
- data/lib/rpush/cli.rb +133 -0
- data/lib/rpush/client/active_model/apns/binary_notification_validator.rb +2 -2
- data/lib/rpush/client/active_model/apns/notification.rb +4 -1
- data/lib/rpush/client/active_model/notification.rb +0 -4
- data/lib/rpush/client/active_record/apns/notification.rb +0 -6
- data/lib/rpush/client/active_record/notification.rb +3 -2
- data/lib/rpush/client/redis/notification.rb +2 -0
- data/lib/rpush/configuration.rb +16 -24
- data/lib/rpush/daemon.rb +28 -1
- data/lib/rpush/daemon/app_runner.rb +6 -1
- data/lib/rpush/daemon/proc_title.rb +1 -1
- data/lib/rpush/daemon/signal_handler.rb +13 -3
- data/lib/rpush/daemon/store/active_record.rb +1 -1
- data/lib/rpush/deprecatable.rb +2 -1
- data/lib/rpush/embed.rb +1 -1
- data/lib/rpush/logger.rb +32 -19
- data/lib/rpush/push.rb +1 -1
- data/lib/rpush/version.rb +1 -1
- data/lib/tasks/quality.rake +1 -1
- data/lib/tasks/test.rake +12 -0
- data/spec/functional/apns_spec.rb +13 -11
- data/spec/functional_spec_helper.rb +1 -4
- data/spec/spec_helper.rb +4 -4
- data/spec/support/active_record_setup.rb +2 -1
- data/spec/unit/client/active_record/apns/notification_spec.rb +29 -3
- data/spec/unit/configuration_spec.rb +0 -7
- data/spec/unit/daemon/app_runner_spec.rb +1 -1
- data/spec/unit/daemon/signal_handler_spec.rb +1 -1
- data/spec/unit/daemon_spec.rb +1 -1
- data/spec/unit/deprecatable_spec.rb +1 -1
- data/spec/unit/logger_spec.rb +4 -4
- metadata +48 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39bdc7bf081a339dd09353c0690a9e0cff7b67ac
|
4
|
+
data.tar.gz: 3dbee5a4f472b95d4ef419f21340a21b30d4a2f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60ccb8ff250b4bfab1da699cbd7f7433aa1ad9cf08087e1545bfc297835ba722a28aa2effeeea982a4823839e633609bf26415b4e549c5392f78e176c7b6ecd4
|
7
|
+
data.tar.gz: 3d7bb6dcfb36fa128b8d60975219598bce3656b05b70b9289a37135239a3a6fee3532700697cc76b8c0d3eddd02f7ea280a84a47ded27daa4c8af510dbb633e9
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## 2.1.0 (Oct 4, 2014)
|
2
|
+
* Bump APNs max payload size to 2048 for iOS 8.
|
3
|
+
* Add 'category' for iOS 8.
|
4
|
+
* Add url_args for Safari Push Notification Support (#77).
|
5
|
+
* Improved command-line interface.
|
6
|
+
* Rails integration is now optional.
|
7
|
+
* Added log_level config option.
|
8
|
+
* log_dir is now deprecated and has no effect, use log_file instead.
|
9
|
+
|
1
10
|
## 2.0.1 (Sept 13, 2014)
|
2
11
|
* Add ssl_certificate_revoked reflection (#68).
|
3
12
|
* Fix for Postgis support in 2.0.0 migration (#70).
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
[](http://travis-ci.org/rpush/rpush)
|
2
|
+
[](https://codeclimate.com/github/rpush/rpush)
|
3
|
+
[](https://codeclimate.com/github/rpush/rpush)
|
4
|
+
[](http://badge.fury.io/rb/rpush)
|
5
5
|
|
6
6
|
<img src="https://raw.github.com/rpush/rpush/master/logo.png" align="right" width="200px" />
|
7
7
|
|
@@ -9,16 +9,16 @@
|
|
9
9
|
|
10
10
|
* Supported services:
|
11
11
|
* [**Apple Push Notification Service**](#apple-push-notification-service)
|
12
|
+
* Including Safari Push Notifications.
|
12
13
|
* [**Google Cloud Messaging**](#google-cloud-messaging)
|
13
14
|
* [**Amazon Device Messaging**](#amazon-device-messaging)
|
14
15
|
* [**Windows Phone Push Notification Service**](#windows-phone-notification-service)
|
15
16
|
|
16
17
|
* Supported storage backends:
|
17
|
-
* **ActiveRecord**
|
18
|
-
* **Redis**
|
19
|
-
* More coming!
|
18
|
+
* [**ActiveRecord**](https://github.com/rpush/rpush/wiki/Using-ActiveRecord)
|
19
|
+
* [**Redis**](https://github.com/rpush/rpush/wiki/Using-Redis)
|
20
20
|
|
21
|
-
*
|
21
|
+
* Optional Rails integration (version 3 & 4).
|
22
22
|
* Scales vertically (threading) and horizontally (multiple processes).
|
23
23
|
* Designed for uptime - new apps are loaded automatically, signal `HUP` to update running apps.
|
24
24
|
* Run as a daemon or inside an [existing process](https://github.com/rpush/rpush/wiki/Embedding-API).
|
@@ -35,11 +35,11 @@ Add it to your Gemfile:
|
|
35
35
|
gem 'rpush'
|
36
36
|
```
|
37
37
|
|
38
|
-
|
38
|
+
Initialize Rpush into your project. Rails will be detected automatically.
|
39
39
|
|
40
40
|
```
|
41
|
-
|
42
|
-
|
41
|
+
cd /path/to/project
|
42
|
+
rpush init
|
43
43
|
```
|
44
44
|
|
45
45
|
### Create an App & Notification
|
@@ -67,6 +67,8 @@ n.data = { foo: :bar }
|
|
67
67
|
n.save!
|
68
68
|
```
|
69
69
|
|
70
|
+
The `url_args` attribute is available for Safari Push Notifications.
|
71
|
+
|
70
72
|
You should also implement the [ssl_certificate_will_expire](https://github.com/rpush/rpush/wiki/Reflection-API) reflection to monitor when your certificate is due to expire.
|
71
73
|
|
72
74
|
#### Google Cloud Messaging
|
@@ -134,13 +136,17 @@ It is recommended to run Rpush as a separate process in most cases, though embed
|
|
134
136
|
|
135
137
|
#### As a daemon (recommended):
|
136
138
|
|
137
|
-
|
138
|
-
|
139
|
+
```
|
140
|
+
cd /path/to/project
|
141
|
+
rpush start
|
142
|
+
```
|
143
|
+
|
144
|
+
See `rpush help` for all available commands and options.
|
139
145
|
|
140
146
|
#### Embedded inside an existing process
|
141
147
|
|
142
148
|
```ruby
|
143
|
-
# Call this during startup of your application, for example, by adding it to the end of config/
|
149
|
+
# Call this during startup of your application, for example, by adding it to the end of config/rpush.rb
|
144
150
|
Rpush.embed
|
145
151
|
```
|
146
152
|
|
@@ -157,11 +163,11 @@ See [Push API](https://github.com/rpush/rpush/wiki/Push-API) for more details.
|
|
157
163
|
|
158
164
|
### Configuration
|
159
165
|
|
160
|
-
See [Configuration](https://github.com/rpush/rpush/wiki/Configuration) for a list of options
|
166
|
+
See [Configuration](https://github.com/rpush/rpush/wiki/Configuration) for a list of options.
|
161
167
|
|
162
168
|
### Updating Rpush
|
163
169
|
|
164
|
-
|
170
|
+
You should run `rails init` after upgrading Rpush to check for configuration and migration changes.
|
165
171
|
|
166
172
|
### Wiki
|
167
173
|
|
@@ -191,8 +197,6 @@ If you're using ActiveRecord, you should run `rails g rpush` after upgrading Rpu
|
|
191
197
|
|
192
198
|
### Contributing
|
193
199
|
|
194
|
-
Fork as usual and go crazy!
|
195
|
-
|
196
200
|
When running specs, please note that the ActiveRecord adapter can be changed by setting the `ADAPTER` environment variable. For example: `ADAPTER=postgresql rake`.
|
197
201
|
|
198
202
|
Available adapters for testing are `mysql`, `mysql2` and `postgresql`.
|
@@ -200,3 +204,5 @@ Available adapters for testing are `mysql`, `mysql2` and `postgresql`.
|
|
200
204
|
Note that the database username is changed at runtime to be the currently logged in user's name. So if you're testing
|
201
205
|
with mysql and you're using a user named 'bob', you will need to grant a mysql user 'bob' access to the 'rpush_test'
|
202
206
|
mysql database.
|
207
|
+
|
208
|
+
To switch between ActiveRecord and Redis, set the `CLIENT` environment variable to either `:active_record` or `:redis`.
|
data/bin/rpush
CHANGED
@@ -1,45 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'optparse'
|
4
3
|
require 'rpush'
|
5
|
-
|
6
|
-
environment = ARGV[0]
|
7
|
-
|
8
|
-
config = Rpush::ConfigurationWithoutDefaults.new
|
9
|
-
|
10
|
-
options = ARGV.options do |opts|
|
11
|
-
opts.banner = 'Usage: rpush <Rails environment> [options]'
|
12
|
-
opts.on('-f', '--foreground', 'Run in the foreground.') { config.foreground = true }
|
13
|
-
opts.on('-P N', '--db-poll N', Integer, "Frequency in seconds to check for new notifications.") { |n| config.push_poll = n }
|
14
|
-
opts.on('-F N', '--feedback-poll N', Integer, "Frequency in seconds to check for feedback.") { |n| config.feedback_poll = n }
|
15
|
-
opts.on('-e', '--no-error-checks', 'Disable APNs error checking after notification delivery.') { config.check_for_errors = false } # deprecated
|
16
|
-
opts.on('-p PATH', '--pid-file PATH', String, 'Path to write PID file. Relative to Rails root unless absolute.') { |path| config.pid_file = path }
|
17
|
-
opts.on('-b N', '--batch-size N', Integer, 'Storage backend notification batch size.') { |n| config.batch_size = n }
|
18
|
-
opts.on('-B', '--[no-]batch-storage-updates', 'Perform storage updates in batches.') { |v| config.batch_storage_updates = v } # deprecated
|
19
|
-
opts.on('-v', '--version', 'Print the version.') do
|
20
|
-
puts "rpush #{Rpush::VERSION}"
|
21
|
-
exit
|
22
|
-
end
|
23
|
-
opts.on('-h', '--help', 'You\'re looking at it.') do
|
24
|
-
hidden_switches = %w(-e --no-error-checks)
|
25
|
-
puts opts.to_s.split("\n").delete_if do |line|
|
26
|
-
hidden_switches.any? { |s| line =~ /#{s}/ }
|
27
|
-
end.join("\n")
|
28
|
-
exit
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
if environment.nil? || environment =~ /^-/
|
33
|
-
puts options.to_s
|
34
|
-
exit 1
|
35
|
-
end
|
36
|
-
|
37
|
-
options.parse!
|
38
|
-
|
39
|
-
ENV['RAILS_ENV'] = environment
|
40
|
-
load 'config/environment.rb'
|
41
|
-
load 'config/initializers/rpush.rb' if File.exist?('config/initializers/rpush.rb')
|
42
|
-
|
43
|
-
Rpush.config.update(config)
|
44
|
-
Rpush.require_for_daemon
|
45
|
-
Rpush::Daemon.start
|
4
|
+
Rpush::CLI.start(ARGV)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class
|
1
|
+
class RpushMigrationGenerator < Rails::Generators::Base
|
2
2
|
include Rails::Generators::Migration
|
3
3
|
source_root File.expand_path('../templates', __FILE__)
|
4
4
|
|
@@ -25,22 +25,17 @@ class RpushGenerator < Rails::Generators::Base
|
|
25
25
|
end
|
26
26
|
|
27
27
|
add_rpush_migration('rpush_2_0_0_updates')
|
28
|
-
|
29
|
-
|
30
|
-
def copy_config
|
31
|
-
copy_file 'rpush.rb', 'config/initializers/rpush.rb'
|
28
|
+
add_rpush_migration('rpush_2_1_0_updates')
|
32
29
|
end
|
33
30
|
|
34
31
|
protected
|
35
32
|
|
36
|
-
def add_rpush_migration(template)
|
37
|
-
if !has_migration?(template)
|
38
|
-
migration_template "#{template}.rb", "db/migrate/#{template}.rb"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
33
|
def has_migration?(template)
|
43
34
|
migration_dir = File.expand_path('db/migrate')
|
44
35
|
self.class.migration_exists?(migration_dir, template)
|
36
|
+
end
|
37
|
+
|
38
|
+
def add_rpush_migration(template)
|
39
|
+
migration_template "#{template}.rb", "db/migrate/#{template}.rb"
|
45
40
|
end
|
46
41
|
end
|
@@ -1,30 +1,30 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
Rpush.configure do |config|
|
1
|
+
Rpush.configure do |config|
|
4
2
|
|
5
3
|
# Supported clients are :active_record and :redis.
|
6
|
-
|
4
|
+
config.client = :active_record
|
7
5
|
|
8
6
|
# Options passed to Redis.new
|
9
7
|
# config.redis_options = {}
|
10
8
|
|
11
|
-
# Run in the foreground?
|
12
|
-
# config.foreground = false
|
13
|
-
|
14
9
|
# Frequency in seconds to check for new notifications.
|
15
|
-
|
10
|
+
config.push_poll = 2
|
16
11
|
|
17
12
|
# Frequency in seconds to check for feedback
|
18
|
-
|
13
|
+
config.feedback_poll = 60
|
19
14
|
|
20
15
|
# The maximum number of notifications to load from the store every `push_poll` seconds.
|
21
16
|
# If some notifications are still enqueued internally, Rpush will load the batch_size less
|
22
17
|
# the number enqueued. An exception to this is if the service is able to receive multiple
|
23
18
|
# notification payloads over the connection with a single write, such as APNs.
|
24
|
-
|
19
|
+
config.batch_size = 100
|
20
|
+
|
21
|
+
# Path to write PID file. Relative to current directory unless absolute.
|
22
|
+
config.pid_file = 'tmp/rpush.pid'
|
23
|
+
|
24
|
+
# Path to log file. Relative to current directory unless absolute.
|
25
|
+
config.log_file = 'log/rpush.log'
|
25
26
|
|
26
|
-
|
27
|
-
# config.pid_file = '/path/to/rpush.pid'
|
27
|
+
config.log_level = (defined?(Rails) && Rails.logger) ? Rails.logger.level : ::Logger::Severity::INFO
|
28
28
|
|
29
29
|
# Define a custom logger.
|
30
30
|
# config.logger = MyLogger.new
|
@@ -33,7 +33,8 @@ class Rpush200Updates < ActiveRecord::Migration
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.adapter_name
|
36
|
-
|
36
|
+
env = (defined?(Rails) && Rails.env) ? Rails.env : 'development'
|
37
|
+
ActiveRecord::Base.configurations[env]['adapter']
|
37
38
|
end
|
38
39
|
|
39
40
|
def self.postgresql?
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class Rpush210Updates < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_column :rpush_notifications, :url_args, :text, null: true
|
4
|
+
add_column :rpush_notifications, :category, :string, null: true
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.down
|
8
|
+
remove_column :rpush_notifications, :url_args
|
9
|
+
remove_column :rpush_notifications, :category
|
10
|
+
end
|
11
|
+
end
|
data/lib/rpush.rb
CHANGED
@@ -1,14 +1,19 @@
|
|
1
|
+
require 'logger'
|
1
2
|
require 'multi_json'
|
2
3
|
require 'active_support/all'
|
3
4
|
|
4
5
|
module Rpush
|
5
6
|
def self.attr_accessible_available?
|
6
7
|
require 'rails'
|
8
|
+
rescue LoadError
|
9
|
+
false
|
10
|
+
else
|
7
11
|
::Rails::VERSION::STRING < '4' || defined?(::ActiveRecord::MassAssignmentSecurity)
|
8
12
|
end
|
9
13
|
end
|
10
14
|
|
11
15
|
require 'rpush/version'
|
16
|
+
require 'rpush/cli'
|
12
17
|
require 'rpush/deprecation'
|
13
18
|
require 'rpush/deprecatable'
|
14
19
|
require 'rpush/logger'
|
@@ -24,14 +29,17 @@ module Rpush
|
|
24
29
|
defined? JRUBY_VERSION
|
25
30
|
end
|
26
31
|
|
27
|
-
def self.require_for_daemon
|
28
|
-
require 'rpush/daemon'
|
29
|
-
end
|
30
|
-
|
31
32
|
def self.logger
|
32
33
|
@logger ||= Logger.new
|
33
34
|
end
|
34
35
|
|
36
|
+
def self.root
|
37
|
+
require 'rails'
|
38
|
+
Rails.root || Dir.pwd
|
39
|
+
rescue LoadError
|
40
|
+
Dir.pwd
|
41
|
+
end
|
42
|
+
|
35
43
|
class << self
|
36
44
|
attr_writer :logger
|
37
45
|
end
|
data/lib/rpush/apns_feedback.rb
CHANGED
data/lib/rpush/cli.rb
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'thor'
|
4
|
+
require 'term/ansicolor'
|
5
|
+
|
6
|
+
module Rpush
|
7
|
+
class CLI < Thor
|
8
|
+
include Term::ANSIColor
|
9
|
+
|
10
|
+
def self.detect_rails?
|
11
|
+
['bin/rails', 'script/rails'].any? { |path| File.exist?(path) }
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.default_config_path
|
15
|
+
detect_rails? ? 'config/initializers/rpush.rb' : 'config/rpush.rb'
|
16
|
+
end
|
17
|
+
|
18
|
+
class_option :config, type: :string, aliases: '-c', default: default_config_path
|
19
|
+
class_option :rails_env, type: :string, aliases: '-e', default: 'development'
|
20
|
+
|
21
|
+
option :foreground, type: :boolean, aliases: '-f', default: false
|
22
|
+
option 'pid-file', type: :string, aliases: '-p'
|
23
|
+
desc 'start', 'Start Rpush'
|
24
|
+
def start
|
25
|
+
check_ruby_version
|
26
|
+
|
27
|
+
if detect_rails? && options[:rails_env]
|
28
|
+
STDOUT.write "* Booting Rails '#{options[:rails_env]}' environment... "
|
29
|
+
STDOUT.flush
|
30
|
+
ENV['RAILS_ENV'] = options[:rails_env]
|
31
|
+
load 'config/environment.rb'
|
32
|
+
puts green('✔')
|
33
|
+
end
|
34
|
+
|
35
|
+
load_config
|
36
|
+
require 'rpush/daemon'
|
37
|
+
Rpush::Daemon.start
|
38
|
+
end
|
39
|
+
|
40
|
+
desc 'stop', 'Stop Rpush'
|
41
|
+
option 'pid-file', type: :string, aliases: '-p'
|
42
|
+
def stop
|
43
|
+
check_ruby_version
|
44
|
+
load_config
|
45
|
+
ensure_pid_file
|
46
|
+
|
47
|
+
if File.exist?(Rpush.config.pid_file)
|
48
|
+
pid = File.read(Rpush.config.pid_file).strip.to_i
|
49
|
+
STDOUT.write "* Stopping Rpush (pid #{pid})... "
|
50
|
+
STDOUT.flush
|
51
|
+
Process.kill('TERM', pid)
|
52
|
+
|
53
|
+
loop do
|
54
|
+
begin
|
55
|
+
Process.getpgid(pid)
|
56
|
+
sleep 0.05
|
57
|
+
rescue Errno::ESRCH
|
58
|
+
break
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
puts green('✔')
|
63
|
+
else
|
64
|
+
STDERR.puts("* Rpush isn't running? #{Rpush.config.pid_file} does not exist.")
|
65
|
+
return
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
desc 'init', 'Initialize Rpush into the current directory.'
|
70
|
+
option 'active-record', type: :boolean, desc: 'Install ActiveRecord migrations.'
|
71
|
+
def init
|
72
|
+
check_ruby_version
|
73
|
+
require 'rails/generators'
|
74
|
+
|
75
|
+
puts "* #{green('Installing config...')}"
|
76
|
+
$RPUSH_CONFIG_PATH = default_config_path # rubocop:disable Style/GlobalVars
|
77
|
+
Rails::Generators.invoke('rpush_config')
|
78
|
+
|
79
|
+
install_migrations = options['active-record']
|
80
|
+
|
81
|
+
unless options.key?('active-record')
|
82
|
+
has_answer = false
|
83
|
+
until has_answer
|
84
|
+
STDOUT.write "\n* #{green('Install ActiveRecord migrations?')} [y/n]: "
|
85
|
+
STDOUT.flush
|
86
|
+
answer = STDIN.gets.chomp.downcase
|
87
|
+
has_answer = %w(y n).include?(answer)
|
88
|
+
end
|
89
|
+
|
90
|
+
install_migrations = answer == 'y'
|
91
|
+
end
|
92
|
+
|
93
|
+
Rails::Generators.invoke('rpush_migration') if install_migrations
|
94
|
+
|
95
|
+
puts "\n* #{green('Next steps:')}"
|
96
|
+
puts " - Run 'db:migrate'." if install_migrations
|
97
|
+
puts " - Review and update your configuration in #{default_config_path}."
|
98
|
+
puts " - Create your first app, see https://github.com/rpush/rpush for examples."
|
99
|
+
puts " - Run 'rpush help' for commands and options."
|
100
|
+
end
|
101
|
+
|
102
|
+
private
|
103
|
+
|
104
|
+
def detect_rails?
|
105
|
+
self.class.detect_rails?
|
106
|
+
end
|
107
|
+
|
108
|
+
def default_config_path
|
109
|
+
self.class.default_config_path
|
110
|
+
end
|
111
|
+
|
112
|
+
def ensure_pid_file
|
113
|
+
return if Rpush.config.pid_file.blank?
|
114
|
+
|
115
|
+
STDERR.puts(red('ERROR: ') + 'config.pid_file is not set.')
|
116
|
+
exit 1
|
117
|
+
end
|
118
|
+
|
119
|
+
def load_config
|
120
|
+
if !File.exist?(options[:config])
|
121
|
+
STDERR.puts(red('ERROR: ') + "#{options[:config]} does not exist. Please run 'rpush init' to generate it or specify the --config option.")
|
122
|
+
exit 1
|
123
|
+
else
|
124
|
+
load options[:config]
|
125
|
+
Rpush.config.update(options)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def check_ruby_version
|
130
|
+
STDERR.puts(yellow('WARNING: ') + "You are using an old and unsupported version of Ruby.") if RUBY_VERSION <= '1.9.3'
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|