cinchize 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010 Victor Bergöö
1
+ Copyright (c) 2010-2012 Victor Bergöö
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -18,13 +18,13 @@ The config file can either be in the current working directory or in /etc and sh
18
18
 
19
19
  cinchize -s --start network
20
20
 
21
- To daemonzize, use -d
21
+ To daemonize, use -d
22
22
 
23
23
  cinchize -d --start network
24
24
 
25
25
  Network is the name you call the a server config in the servers part of the config file, i.e. "freenode", "super_duper_amazing_network", "quakenet" or similar.
26
26
 
27
- --start, --restart, --stop and --status assumes that the config file is located in the current working directory unless -s is used.
27
+ --start, --restart, --stop and --status assumes that "cinchize.yml" is located in the current working directory unless -s is used, then we assume that it's located in "/etc/cinchize.yml" as stated above.
28
28
 
29
29
  == Config-file
30
30
 
@@ -43,18 +43,12 @@ All config options to each server object is optional, except for the channels an
43
43
  - "#cinchbots"
44
44
  plugins:
45
45
  -
46
- module: "cinch/plugins/some_plugin"
47
46
  class: "Cinch::Plugins::SomePlugin"
48
47
  options:
49
48
  option: value
50
49
  -
51
- module: "cinch/plugins/another_plugin"
52
50
  class: "Cinch::Plugins::AnotherPlugin"
53
51
 
54
- === JSON deprecation
55
-
56
- The JSON format has been deprecated and will be removed in a future release, YaML is the preferred format hence forth.
57
-
58
52
  === Options explained
59
53
 
60
54
  dir: the save path, absolute or relative to either /var/run or to the current working directory
data/Rakefile CHANGED
@@ -1,8 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- require 'rubygems'
4
- require 'rake'
5
-
6
3
  begin
7
4
  require 'jeweler'
8
5
  Jeweler::Tasks.new do |gem|
@@ -11,13 +8,11 @@ begin
11
8
  gem.description = %Q{Create dynamic Cinch IRC-bots and daemonize them, without the need of writing any code}
12
9
  gem.email = "victor.bergoo@gmail.com"
13
10
  gem.homepage = "http://github.com/netfeed/cinchize"
14
- gem.authors = ["Victor Bergöö"]
15
- gem.add_dependency "cinch"
11
+ gem.authors = ["Victor Bergoo"]
12
+ gem.add_dependency "cinch", ">= 2.0.1"
16
13
  gem.add_dependency "daemons"
17
- gem.add_dependency "json"
18
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
19
14
  end
20
- Jeweler::GemcutterTasks.new
15
+ Jeweler::RubygemsDotOrgTasks.new
21
16
  rescue LoadError
22
17
  puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
23
18
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
@@ -1,8 +1,79 @@
1
1
  #!/usr/bin/env ruby
2
2
  # -*- coding: utf-8 -*-
3
- # Copyright (c) 2010 Victor Bergöö
3
+ # Copyright (c) 2010-2012 Victor Bergöö
4
4
  # This program is made available under the terms of the MIT License.
5
5
 
6
6
  require File.expand_path('../../lib/cinchize', __FILE__)
7
7
 
8
- Cinchize.run
8
+ require 'optparse'
9
+
10
+ Options = {
11
+ :ontop => true,
12
+ :system => false,
13
+ :local_config => File.join(Dir.pwd, 'cinchize.yml'),
14
+ :system_config => '/etc/cinchize.yml',
15
+ :action => nil,
16
+ }
17
+
18
+ options = Options.dup
19
+
20
+ ARGV.options do |o|
21
+ o.set_summary_indent ' '
22
+ o.banner = "Usage: #{File.basename $0} [Options] network"
23
+
24
+ o.on("-d", "--daemonize", "Daemonize") {
25
+ options[:ontop] = false
26
+ }
27
+
28
+ o.on("-r", "--running", "Show status for all bots") {
29
+ options[:action] = :show_running
30
+ }
31
+
32
+ o.on("-s", "--system-config", "Use system config") {
33
+ options[:system] = true
34
+ }
35
+
36
+ o.on("--start", "Start the bot") {
37
+ options[:action] = :start
38
+ }
39
+
40
+ o.on("--status", "Status of the bot") {
41
+ options[:action] = :status
42
+ }
43
+
44
+ o.on("--stop", "Stop the bot") {
45
+ options[:action] = :stop
46
+ }
47
+
48
+ o.on("--restart", "Restart the bot") {
49
+ options[:action] = :restart
50
+ }
51
+
52
+ o.parse!
53
+ end
54
+
55
+ begin
56
+ if options[:action] == :show_running
57
+ config_file = options[:system] ? options[:system_config]: options[:local_config]
58
+
59
+ raise ArgumentError.new "no such file: #{config_file}" unless File.exists? config_file
60
+ cfg = YAML.load_file config_file
61
+
62
+ raise ArgumentError.new "#{config_file} doesn't seem to be a YaML file" unless cfg
63
+ raise ArgumentError.new "cinchize isn't configured correctly, please recheck #{config_file}" unless cfg.key? "servers"
64
+ raise ArgumentError.new "there's no networks configured, please recheck #{config_file}" unless cfg["servers"]
65
+ cfg["servers"].keys.sort.each do |key|
66
+ daemon = Cinchize::Cinchize.new *Cinchize.config(options, key)
67
+ daemon.status
68
+ end
69
+ else
70
+ daemon = Cinchize::Cinchize.new *Cinchize.config(options, ARGV.first)
71
+ daemon.send options[:action]
72
+ end
73
+ rescue NoMethodError => e
74
+ puts "Error: no such method"
75
+ exit 1
76
+ rescue ArgumentError => e
77
+ puts "Error: #{e}"
78
+ exit 1
79
+ end
@@ -4,15 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{cinchize}
8
- s.version = "0.3.0"
7
+ s.name = "cinchize"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Victor Bergöö"]
12
- s.date = %q{2011-02-26}
13
- s.default_executable = %q{cinchize}
14
- s.description = %q{Create dynamic Cinch IRC-bots and daemonize them, without the need of writing any code}
15
- s.email = %q{victor.bergoo@gmail.com}
11
+ s.authors = ["Victor Bergoo"]
12
+ s.date = "2012-03-27"
13
+ s.description = "Create dynamic Cinch IRC-bots and daemonize them, without the need of writing any code"
14
+ s.email = "victor.bergoo@gmail.com"
16
15
  s.executables = ["cinchize"]
17
16
  s.extra_rdoc_files = [
18
17
  "LICENSE",
@@ -28,28 +27,27 @@ Gem::Specification.new do |s|
28
27
  "examples/cinchize.init",
29
28
  "lib/cinchize.rb"
30
29
  ]
31
- s.homepage = %q{http://github.com/netfeed/cinchize}
30
+ s.homepage = "http://github.com/netfeed/cinchize"
32
31
  s.require_paths = ["lib"]
33
- s.rubygems_version = %q{1.3.7}
34
- s.summary = %q{Create dynamic Cinch IRC-bots and daemonize them}
32
+ s.rubygems_version = "1.8.10"
33
+ s.summary = "Create dynamic Cinch IRC-bots and daemonize them"
35
34
 
36
35
  if s.respond_to? :specification_version then
37
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
38
36
  s.specification_version = 3
39
37
 
40
38
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
41
- s.add_runtime_dependency(%q<cinch>, [">= 0"])
39
+ s.add_runtime_dependency(%q<jeweler>, [">= 0"])
40
+ s.add_runtime_dependency(%q<cinch>, [">= 2.0.1"])
42
41
  s.add_runtime_dependency(%q<daemons>, [">= 0"])
43
- s.add_runtime_dependency(%q<json>, [">= 0"])
44
42
  else
45
- s.add_dependency(%q<cinch>, [">= 0"])
43
+ s.add_dependency(%q<jeweler>, [">= 0"])
44
+ s.add_dependency(%q<cinch>, [">= 2.0.1"])
46
45
  s.add_dependency(%q<daemons>, [">= 0"])
47
- s.add_dependency(%q<json>, [">= 0"])
48
46
  end
49
47
  else
50
- s.add_dependency(%q<cinch>, [">= 0"])
48
+ s.add_dependency(%q<jeweler>, [">= 0"])
49
+ s.add_dependency(%q<cinch>, [">= 2.0.1"])
51
50
  s.add_dependency(%q<daemons>, [">= 0"])
52
- s.add_dependency(%q<json>, [">= 0"])
53
51
  end
54
52
  end
55
53
 
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- # Copyright (c) 2010 Victor Bergöö
2
+ # Copyright (c) 2010-2012 Victor Bergöö
3
3
  # This program is made available under the terms of the MIT License.
4
4
 
5
5
  dir = File.dirname(__FILE__)
@@ -8,92 +8,31 @@ $LOAD_PATH.unshift(dir) unless $LOAD_PATH.include? dir
8
8
  require 'cinch'
9
9
  require 'daemons'
10
10
  require 'yaml'
11
- require 'optparse'
12
11
 
13
12
  module Cinchize
14
- Options = {
15
- :ontop => true,
16
- :system => false,
17
- :local_config => File.join(Dir.pwd, 'cinchize.yml'),
18
- :system_config => '/etc/cinchize.yml',
19
- :action => nil,
20
- }
21
-
22
- def self.run
23
- options = Options.dup
24
-
25
- ARGV.options do |o|
26
- o.set_summary_indent ' '
27
- o.banner = "Usage: #{File.basename $0} [Options] network"
28
-
29
- o.on("-d", "--daemonize", "Daemonize") {
30
- options[:ontop] = false
31
- }
32
-
33
- o.on("-s", "--system-config", "Use system config") {
34
- options[:system] = true
35
- }
36
-
37
- o.on("--start", "Start the bot") {
38
- options[:action] = :start
39
- }
40
-
41
- o.on("--status", "Status of the bot") {
42
- options[:action] = :status
43
- }
44
-
45
- o.on("--stop", "Stop the bot") {
46
- options[:action] = :stop
47
- }
48
-
49
- o.on("--restart", "Restart the bot") {
50
- options[:action] = :restart
51
- }
52
-
53
- o.parse!
54
- end
55
-
56
- daemon = Cinchize.new *config(options, ARGV.first)
57
- daemon.send options[:action]
58
- rescue NoMethodError => e
59
- puts "Error: no such method"
60
- exit 1
61
- rescue ArgumentError => e
62
- puts "Error: #{e}"
63
- exit 1
64
- end
65
-
66
13
  def self.config options, network
67
14
  config_file = options[:system] ? options[:system_config]: options[:local_config]
68
- unless File.exists? config_file
69
- config_file.gsub! /yml$/, "json"
70
- end
71
15
 
72
- raise ArgumentError.new "there's no config file located at: #{config_file.gsub(/json$/, 'yml')}" unless File.exists? config_file
16
+ raise ArgumentError.new "there's no config file located at: #{config_file}" unless File.exists? config_file
73
17
  raise ArgumentError.new "needs a network" if network.nil? or network.empty?
74
18
 
75
- if File.extname(config_file) == ".yml"
76
- cfg = YAML.load_file config_file
77
- else
78
- require 'json'
79
- puts "WARNING: the json config format has be deprecated in favour of YaML"
80
- cfg = JSON.parse open(config_file, 'r').read()
81
- end
19
+ cfg = YAML.load_file config_file
82
20
 
83
21
  raise ArgumentError.new "there's no server config in the config file" unless cfg.has_key? "servers"
22
+ raise ArgumentError.new "there's no networks configured, please recheck #{config_file}" unless cfg["servers"]
84
23
  raise ArgumentError.new "the config file doesn't contain a config for #{network}" unless cfg["servers"].has_key? network
85
24
 
86
25
  ntw = cfg["servers"][network]
87
26
 
88
27
  plugins = []
89
28
  plugin_options = {}
90
-
29
+
30
+ ntw["plugins"] ||= []
91
31
  ntw.delete("plugins").each do |plugin|
92
32
  begin
93
- raise LoadError.new "the module can't be null" if plugin["module"].nil?
94
33
  raise NameError.new "the class can't be null" if plugin["class"].nil?
95
34
 
96
- require plugin["module"]
35
+ require plugin["class"].downcase.gsub('::', '/')
97
36
 
98
37
  clazz = nil
99
38
  plugin["class"].split("::").inject(Object) { |m,n| clazz = m.const_get(n) }
@@ -107,8 +46,6 @@ module Cinchize
107
46
  end
108
47
  end
109
48
 
110
- raise ArgumentError.new "no plugins loaded" if plugins.size == 0
111
-
112
49
  cfg["options"] ||= {}
113
50
  dir_mode = cfg["options"].key?("dir_mode") ? cfg["options"]["dir_mode"] : "normal"
114
51
 
@@ -165,14 +102,14 @@ module Cinchize
165
102
  app = daemon.new_application :mode => :none, :log_output => options[:log_output]
166
103
  app.start
167
104
 
168
- network = @network
105
+ network = @network.keys.inject({}) { |memo, key| memo[key.to_sym] = @network[key]; memo }
169
106
  plugins = @plugins
170
107
  plugin_options = @plugin_options
171
108
 
172
109
  loop do
173
110
  bot = Cinch::Bot.new do
174
111
  configure do |c|
175
- network.each_pair { |key, value| c.send("#{key}=".to_sym, value) }
112
+ c.load network
176
113
 
177
114
  c.plugins.plugins = plugins
178
115
  c.plugins.options = plugin_options
@@ -192,7 +129,7 @@ module Cinchize
192
129
  pidfile = Daemons::PidFile.new dir, app_name
193
130
  puts "* stopping #{clean_app_name}"
194
131
 
195
- Process.kill(9, pidfile.pid)
132
+ Process.kill("QUIT", pidfile.pid)
196
133
  File.delete(pidfile.filename)
197
134
  end
198
135
 
metadata CHANGED
@@ -1,71 +1,59 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: cinchize
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 3
8
- - 0
9
- version: 0.3.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
12
- - "Victor Berg\xC3\xB6\xC3\xB6"
7
+ authors:
8
+ - Victor Bergoo
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2011-02-26 00:00:00 +01:00
18
- default_executable: cinchize
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: cinch
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
12
+ date: 2012-03-27 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: jeweler
16
+ requirement: &70130010159940 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
31
22
  type: :runtime
32
- version_requirements: *id001
33
- - !ruby/object:Gem::Dependency
34
- name: daemons
35
23
  prerelease: false
36
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70130010159940
25
+ - !ruby/object:Gem::Dependency
26
+ name: cinch
27
+ requirement: &70130010157280 !ruby/object:Gem::Requirement
37
28
  none: false
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- segments:
42
- - 0
43
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 2.0.1
44
33
  type: :runtime
45
- version_requirements: *id002
46
- - !ruby/object:Gem::Dependency
47
- name: json
48
34
  prerelease: false
49
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70130010157280
36
+ - !ruby/object:Gem::Dependency
37
+ name: daemons
38
+ requirement: &70130010156080 !ruby/object:Gem::Requirement
50
39
  none: false
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- segments:
55
- - 0
56
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
57
44
  type: :runtime
58
- version_requirements: *id003
59
- description: Create dynamic Cinch IRC-bots and daemonize them, without the need of writing any code
45
+ prerelease: false
46
+ version_requirements: *70130010156080
47
+ description: Create dynamic Cinch IRC-bots and daemonize them, without the need of
48
+ writing any code
60
49
  email: victor.bergoo@gmail.com
61
- executables:
50
+ executables:
62
51
  - cinchize
63
52
  extensions: []
64
-
65
- extra_rdoc_files:
53
+ extra_rdoc_files:
66
54
  - LICENSE
67
55
  - README.rdoc
68
- files:
56
+ files:
69
57
  - LICENSE
70
58
  - README.rdoc
71
59
  - Rakefile
@@ -74,37 +62,31 @@ files:
74
62
  - cinchize.gemspec
75
63
  - examples/cinchize.init
76
64
  - lib/cinchize.rb
77
- has_rdoc: true
78
65
  homepage: http://github.com/netfeed/cinchize
79
66
  licenses: []
80
-
81
67
  post_install_message:
82
68
  rdoc_options: []
83
-
84
- require_paths:
69
+ require_paths:
85
70
  - lib
86
- required_ruby_version: !ruby/object:Gem::Requirement
71
+ required_ruby_version: !ruby/object:Gem::Requirement
87
72
  none: false
88
- requirements:
89
- - - ">="
90
- - !ruby/object:Gem::Version
91
- segments:
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ segments:
92
78
  - 0
93
- version: "0"
94
- required_rubygems_version: !ruby/object:Gem::Requirement
79
+ hash: -4552393900521943504
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
81
  none: false
96
- requirements:
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- segments:
100
- - 0
101
- version: "0"
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
102
86
  requirements: []
103
-
104
87
  rubyforge_project:
105
- rubygems_version: 1.3.7
88
+ rubygems_version: 1.8.10
106
89
  signing_key:
107
90
  specification_version: 3
108
91
  summary: Create dynamic Cinch IRC-bots and daemonize them
109
92
  test_files: []
110
-