notification_server 0.2.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.
- data/README.md +4 -0
- data/lib/generators/notification_server/config/config_generator.rb +12 -0
- data/lib/generators/notification_server/config/templates/config.yml +11 -0
- data/lib/notification_server/action_view/script_helper.rb +58 -0
- data/lib/notification_server/action_view.rb +7 -0
- data/lib/notification_server/configuration.rb +47 -0
- data/lib/notification_server/engine.rb +14 -0
- data/lib/notification_server.rb +4 -0
- data/lib/tasks/server.rake +113 -0
- metadata +78 -0
data/README.md
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
module NotificationServer
|
2
|
+
module Generators
|
3
|
+
class ConfigGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
|
6
|
+
def generate_config
|
7
|
+
copy_file 'config.yml', 'config/notification_server.yml'
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module NotificationServer
|
2
|
+
module ActionView
|
3
|
+
module ScriptHelper
|
4
|
+
|
5
|
+
#
|
6
|
+
# Generate script tag for including notification server script
|
7
|
+
def javascript_include_notification_server
|
8
|
+
html = if defined?(content_tag)
|
9
|
+
content_tag 'script', '',
|
10
|
+
src: NotificationServer::Configuration.script_path,
|
11
|
+
type: 'text/javascript'
|
12
|
+
else
|
13
|
+
"<script type='text/javascript' " +
|
14
|
+
" src=\"#{NotificationServer::Configuration.script_path}\">" +
|
15
|
+
"</script>"
|
16
|
+
end
|
17
|
+
|
18
|
+
_safe html
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
# Generate async javascript embeddable code
|
23
|
+
#
|
24
|
+
# If you use this method remember you can't get "now" variable immediately
|
25
|
+
# you have to wait for "now" variable.
|
26
|
+
def javascript_include_async_notification_server
|
27
|
+
html = <<HTML
|
28
|
+
<script type='text/javascript' id='__notification_server'></script>
|
29
|
+
<script type="text/javascript">
|
30
|
+
(function() {
|
31
|
+
if (typeof(jQuery) != 'undefined') {
|
32
|
+
setTimeout(function() {
|
33
|
+
jQuery('head').append(jQuery('<script />', {
|
34
|
+
type: "text/javascript",
|
35
|
+
src: "#{NotificationServer::Configuration.script_path}"
|
36
|
+
}));
|
37
|
+
} , 1000);
|
38
|
+
} else {
|
39
|
+
document.getElementById('__notification_server').src = "#{NotificationServer::Configuration.script_path}";
|
40
|
+
}
|
41
|
+
})();
|
42
|
+
</script>
|
43
|
+
HTML
|
44
|
+
_safe html
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
def _safe html
|
49
|
+
if html.respond_to? :html_safe
|
50
|
+
html.html_safe
|
51
|
+
else
|
52
|
+
html
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module NotificationServer
|
2
|
+
class Configuration
|
3
|
+
class << self
|
4
|
+
|
5
|
+
def hostname; _config['hostname'] end
|
6
|
+
def port; _config['port'] end
|
7
|
+
def forever; _config['forever'] end
|
8
|
+
def secure; _config['secure'] end
|
9
|
+
def script_path; "#{secure ? 'https' : 'http'}://#{hostname}:#{port}/nowjs/now.js" end
|
10
|
+
|
11
|
+
private
|
12
|
+
def _config
|
13
|
+
if defined?(@@_config).nil?
|
14
|
+
_load_config_file(_file_join('config', 'notification_server.yml'))
|
15
|
+
else
|
16
|
+
@@_config
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def _file_join(*paths)
|
21
|
+
if defined?(Rails)
|
22
|
+
Rails.root.join(*paths)
|
23
|
+
else
|
24
|
+
File.join(paths)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def _load_config_file(config_file)
|
29
|
+
if File.exist?(config_file)
|
30
|
+
yaml = YAML.load(File.read(config_file))
|
31
|
+
@@_config = yaml[_config_env]
|
32
|
+
else
|
33
|
+
puts "#{config_file} not found. please execute `rails g notification_server:config`"
|
34
|
+
@@_config = {}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def _config_env
|
39
|
+
if defined?(Rails)
|
40
|
+
Rails.env
|
41
|
+
else
|
42
|
+
'test'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rails'
|
2
|
+
require 'notification_server/action_view'
|
3
|
+
|
4
|
+
module NotificationServer
|
5
|
+
class Engine < Rails::Engine
|
6
|
+
engine_name 'notification_server'
|
7
|
+
|
8
|
+
initializer 'notification_server.helpers' do |app|
|
9
|
+
ActiveSupport.on_load :action_controller do |ac|
|
10
|
+
ac.helper NotificationServer::ActionView
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module NotificationServer
|
4
|
+
module Tasks
|
5
|
+
class Server
|
6
|
+
class << self
|
7
|
+
|
8
|
+
def start(_env)
|
9
|
+
_config = config(_env)
|
10
|
+
_argv = []
|
11
|
+
_argv << "-p #{_config['port']}"
|
12
|
+
|
13
|
+
if _config['host'].present?
|
14
|
+
_argv << "-H #{_config['host']}"
|
15
|
+
end
|
16
|
+
|
17
|
+
if cmd_exist?
|
18
|
+
_pid = create_pid(spawn("/usr/bin/env notification-server #{_argv.join(' ')}"), _env)
|
19
|
+
STDOUT.puts "Process id - #{_pid}"
|
20
|
+
else
|
21
|
+
STDERR.puts "`notification-server` command not found, please install `npm install -g notification-server`"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def stop(_env)
|
26
|
+
existing_pid = read_pid(_env)
|
27
|
+
if existing_pid.present?
|
28
|
+
output = `kill #{existing_pid}`
|
29
|
+
STDOUT.puts output
|
30
|
+
STDOUT.puts 'Notification server stopped.'
|
31
|
+
remove_pid(_env)
|
32
|
+
else
|
33
|
+
STDERR.puts "No such existing notification server process found"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def remove_pid(_env)
|
38
|
+
FileUtils.remove pid_file(_env)
|
39
|
+
end
|
40
|
+
|
41
|
+
def create_pid(_pid, _env)
|
42
|
+
File.open(pid_file(_env), 'w') do |f|
|
43
|
+
f.puts _pid
|
44
|
+
end
|
45
|
+
|
46
|
+
_pid
|
47
|
+
end
|
48
|
+
|
49
|
+
def read_pid(_env)
|
50
|
+
if File.exist?(pid_file(_env))
|
51
|
+
File.read(pid_file(_env))
|
52
|
+
else
|
53
|
+
nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def pid_file(_env)
|
58
|
+
pids_path = Rails.root.join('tmp', 'pids')
|
59
|
+
FileUtils.makedirs(pids_path)
|
60
|
+
|
61
|
+
File.join(pids_path, "notification_server_#{_env}.pid")
|
62
|
+
end
|
63
|
+
|
64
|
+
def cmd_exist?
|
65
|
+
_output = `which notification-server`
|
66
|
+
_output.present?
|
67
|
+
end
|
68
|
+
|
69
|
+
def config_exist?
|
70
|
+
File.exist? config_file
|
71
|
+
end
|
72
|
+
|
73
|
+
def config(_env)
|
74
|
+
if config_exist?
|
75
|
+
yaml = YAML.load(File.read(config_file))
|
76
|
+
if valid_config? yaml[_env]
|
77
|
+
yaml[_env]
|
78
|
+
else
|
79
|
+
raise "notification-server >> `port` is not defined in #{config_file}"
|
80
|
+
end
|
81
|
+
else
|
82
|
+
raise "notification-server >> config not found, please run `rails g notification_server:config`"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def config_file
|
87
|
+
Rails.root.join('config', 'notification_server.yml')
|
88
|
+
end
|
89
|
+
|
90
|
+
def valid_config?(_config)
|
91
|
+
_config.is_a?(Hash) && _config.keys.include?('port')
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
namespace :notification_server do
|
99
|
+
desc 'Start notification server'
|
100
|
+
task :start => :environment do
|
101
|
+
NotificationServer::Tasks::Server.start(Rails.env)
|
102
|
+
end
|
103
|
+
|
104
|
+
desc 'Stop notification server'
|
105
|
+
task :stop => :environment do
|
106
|
+
NotificationServer::Tasks::Server.stop(Rails.env)
|
107
|
+
end
|
108
|
+
|
109
|
+
desc 'Restart notification server'
|
110
|
+
task :restart => [:stop, :start] do
|
111
|
+
puts 'Restarted notification server.'
|
112
|
+
end
|
113
|
+
end
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: notification_server
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- nhm tanveer hossain khan
|
9
|
+
- nafi ul karim
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-05-10 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rake
|
17
|
+
requirement: &2154091460 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *2154091460
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: jeweler
|
28
|
+
requirement: &2154107600 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *2154107600
|
37
|
+
description: Node notification server integration library for ruby project
|
38
|
+
email:
|
39
|
+
- hasan@somewherein.net
|
40
|
+
executables: []
|
41
|
+
extensions: []
|
42
|
+
extra_rdoc_files:
|
43
|
+
- README.md
|
44
|
+
files:
|
45
|
+
- lib/generators/notification_server/config/config_generator.rb
|
46
|
+
- lib/generators/notification_server/config/templates/config.yml
|
47
|
+
- lib/notification_server.rb
|
48
|
+
- lib/notification_server/action_view.rb
|
49
|
+
- lib/notification_server/action_view/script_helper.rb
|
50
|
+
- lib/notification_server/configuration.rb
|
51
|
+
- lib/notification_server/engine.rb
|
52
|
+
- lib/tasks/server.rake
|
53
|
+
- README.md
|
54
|
+
homepage: https://github.com/we4tech/ruby-notification-server
|
55
|
+
licenses: []
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
requirements: []
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 1.8.10
|
75
|
+
signing_key:
|
76
|
+
specification_version: 3
|
77
|
+
summary: An extension for integrating node 'notification-server' with ruby project
|
78
|
+
test_files: []
|