syndi 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +12 -0
  3. data/CHANGELOG.md +0 -0
  4. data/Gemfile +8 -0
  5. data/INSTALL.md +86 -0
  6. data/LICENSE +28 -0
  7. data/README.md +104 -0
  8. data/Rakefile +26 -0
  9. data/WINDOWS.md +64 -0
  10. data/bin/syndi +102 -0
  11. data/bin/syndi-conf +47 -0
  12. data/conf/example.yml +101 -0
  13. data/docs/Events.md +103 -0
  14. data/docs/Upgrade.md +16 -0
  15. data/ext/csyndi/events.c +50 -0
  16. data/ext/csyndi/extconf.rb +20 -0
  17. data/ext/csyndi/integer.c +53 -0
  18. data/ext/csyndi/libauto.c +37 -0
  19. data/ext/csyndi/logger.c +228 -0
  20. data/include/syndi/csyndi.h +38 -0
  21. data/include/syndi/events.h +19 -0
  22. data/include/syndi/integer.h +17 -0
  23. data/include/syndi/logger.h +57 -0
  24. data/include/syndi.h +22 -0
  25. data/lib/syndi/actress.rb +12 -0
  26. data/lib/syndi/api/events.rb +170 -0
  27. data/lib/syndi/api/object.rb +29 -0
  28. data/lib/syndi/api/plugin.rb +155 -0
  29. data/lib/syndi/api.rb +7 -0
  30. data/lib/syndi/bot.rb +270 -0
  31. data/lib/syndi/config.rb +113 -0
  32. data/lib/syndi/configure/cli.rb +23 -0
  33. data/lib/syndi/configure/generator.rb +410 -0
  34. data/lib/syndi/configure.rb +19 -0
  35. data/lib/syndi/dsl/base.rb +74 -0
  36. data/lib/syndi/dsl/irc.rb +13 -0
  37. data/lib/syndi/events.rb +114 -0
  38. data/lib/syndi/irc/common.rb +63 -0
  39. data/lib/syndi/irc/library.rb +89 -0
  40. data/lib/syndi/irc/object/channel.rb +21 -0
  41. data/lib/syndi/irc/object/entity.rb +90 -0
  42. data/lib/syndi/irc/object/message.rb +99 -0
  43. data/lib/syndi/irc/object/user.rb +139 -0
  44. data/lib/syndi/irc/protocol/numerics.rb +60 -0
  45. data/lib/syndi/irc/protocol.rb +164 -0
  46. data/lib/syndi/irc/sasl/diffie_hellman.rb +36 -0
  47. data/lib/syndi/irc/sasl/mech/dh_blowfish.rb +83 -0
  48. data/lib/syndi/irc/sasl/mech/plain.rb +39 -0
  49. data/lib/syndi/irc/sasl/mech.rb +15 -0
  50. data/lib/syndi/irc/server.rb +301 -0
  51. data/lib/syndi/irc/state/channel_manager.rb +6 -0
  52. data/lib/syndi/irc/state/support.rb +142 -0
  53. data/lib/syndi/irc/state/user_manager.rb +6 -0
  54. data/lib/syndi/irc/std/commands.rb +99 -0
  55. data/lib/syndi/irc/std/numerics.rb +216 -0
  56. data/lib/syndi/irc.rb +8 -0
  57. data/lib/syndi/jewel/specification.rb +121 -0
  58. data/lib/syndi/jewel/util.rb +27 -0
  59. data/lib/syndi/jewel.rb +5 -0
  60. data/lib/syndi/rubyext/string.rb +10 -0
  61. data/lib/syndi/verbosity.rb +10 -0
  62. data/lib/syndi/version.rb +38 -0
  63. data/lib/syndi.rb +129 -0
  64. data/spec/helper.rb +32 -0
  65. data/spec/syndi/events_spec.rb +43 -0
  66. data/tasks/compile.rake +15 -0
  67. data/tasks/install.rake +10 -0
  68. data/tasks/package.rake +13 -0
  69. data/tasks/spec.rake +12 -0
  70. metadata +101 -13
data/lib/syndi.rb ADDED
@@ -0,0 +1,129 @@
1
+ # Copyright (c) 2013, Autumn Perrault, et al. All rights reserved.
2
+ # This free software is distributed under the FreeBSD license (see LICENSE).
3
+
4
+ require 'syndi/rubyext/string'
5
+ require 'syndi/version'
6
+
7
+ module Syndi
8
+ extend self
9
+
10
+ # @return [Boolean] Whether we're installed as a gem.
11
+ def gem?
12
+ begin
13
+ # If we already checked, just return the result of that.
14
+ return @gem if defined? @gem
15
+
16
+ # Otherwise, check.
17
+ result = Gem.path.each do |gempath|
18
+ break true if __FILE__ =~ /^#{Regexp.escape gempath}/
19
+ end
20
+ @gem = (result == true ? true : false)
21
+ ensure
22
+ @gem ||= false
23
+ end
24
+ end
25
+
26
+ # @return [Boolean] Whether we're running on Microsoft Windows.
27
+ def windows?
28
+ begin
29
+ return @windows if defined? @windows
30
+ if ::RbConfig::CONFIG['host_os'] =~ /bccwin|djgpp|mswin|mingw|cygwin|wince/i
31
+ @windows = true
32
+ else
33
+ @windows = false
34
+ end
35
+ ensure
36
+ @windows ||= false
37
+ end
38
+ end
39
+
40
+ # This fixes coloring issues on Windows--or at least, the ones with which we
41
+ # need be concerned.
42
+ def windows_colored
43
+ colors = [:black, :red, :green, :yellow, :blue, :magenta, :cyan, :white]
44
+ extras = [:clear, :bold, :underline, :reversed]
45
+
46
+ colors.each do |col|
47
+ String.send(:define_method, col, proc { self })
48
+ end
49
+ extras.each do |extr|
50
+ String.send(:define_method, extr, proc { self })
51
+ end
52
+ end
53
+
54
+ ###################
55
+ # central methods #
56
+ ###################
57
+
58
+ # Retrieve the application data directory.
59
+ #
60
+ # @return [String]
61
+ def dir
62
+ @app_dir ||= File.join ENV['HOME'], '.syndi'
63
+ end
64
+
65
+ # Initiate Syndi with command-line +options+.
66
+ #
67
+ # @param [Slop] options The command-line options.
68
+ def go options
69
+
70
+ end
71
+
72
+ # Logger access.
73
+ #
74
+ # @return [Syndi::Logger]
75
+ def log
76
+ @logger ||= Syndi::Logger.new
77
+ end
78
+
79
+ # Central event system access.
80
+ #
81
+ # @return [Syndi::Events]
82
+ def events
83
+ @event_manager ||= Syndi::Events.new
84
+ end
85
+
86
+ # Configuration access.
87
+ #
88
+ # @return [Syndi::Config]
89
+ def conf
90
+ @configuration ||= Syndi::Config.new
91
+ end
92
+
93
+ # Central Syndi Celluloid actor.
94
+ #
95
+ # @return [Syndi::Actress] Subclass of {Celluloid::Actor}.
96
+ def actress
97
+ @actress ||= Syndi::Actress.new
98
+ end
99
+
100
+ # Execute some code after the given interval.
101
+ #
102
+ # @param [Integer] interval
103
+ #
104
+ # @return [Celluloid::Timer]
105
+ def after interval, &prc
106
+ actress.after interval, &prc
107
+ end
108
+
109
+ # Execute some code every +interval+.
110
+ #
111
+ # @param [Integer] interval
112
+ #
113
+ # @return [Celluloid::Timer]
114
+ def every interval, &prc
115
+ actress.every interval, &prc
116
+ end
117
+
118
+ end
119
+
120
+ if Syndi.windows?
121
+ Syndi.windows_colored
122
+ else
123
+ require 'colored'
124
+ end
125
+
126
+ require 'libsyndi'
127
+ %w[events actress config bot].each { |lib| require "syndi/#{lib}" }
128
+
129
+ # vim: set ts=4 sts=2 sw=2 et:
data/spec/helper.rb ADDED
@@ -0,0 +1,32 @@
1
+ # Copyright (c) 2013, Autumn Perrault, et al. All rights reserved.
2
+ # This free software is distributed under the FreeBSD license (see LICENSE).
3
+
4
+ require 'English'
5
+ $LOAD_PATH.unshift File.join __dir__, '..', 'lib'
6
+
7
+ require 'rspec/core'
8
+ require 'rspec/expectations'
9
+ require 'rspec/mocks'
10
+ require 'fileutils'
11
+ require 'stringio'
12
+
13
+ require 'syndi'
14
+
15
+ $temp_dir = Dir.mktmpdir 'syndi-rspec'
16
+ Syndi.app_dir = $temp_dir
17
+ $VERBOSITY = Float::INFINITY
18
+
19
+ module Helper
20
+
21
+ end
22
+
23
+ RSpec.configure do |conf|
24
+ conf.syntax = :expect
25
+ conf.include Helper
26
+
27
+ conf.after(:all) do
28
+ FileUtils.remove_entry $temp_dir
29
+ end
30
+ end
31
+
32
+ # vim: set ts=4 sts=2 sw=2 et:
@@ -0,0 +1,43 @@
1
+ # Copyright (c) 2013, Autumn Perrault, et al. All rights reserved.
2
+ # This free software is distributed under the FreeBSD license (see LICENSE).
3
+
4
+ require 'syndi/events'
5
+
6
+ describe Syndi::Events do
7
+
8
+ before do
9
+ @events = Syndi::Events.new
10
+ end
11
+
12
+ describe '#on' do
13
+
14
+ it 'listens for an event' do
15
+ @events.on(:moo) do |magic|
16
+ magic = true
17
+ end
18
+
19
+ rawr = false
20
+ @events.emit :moo, rawr
21
+
22
+ expect { rawr }.to be_true
23
+ end
24
+
25
+ it 'returns a listener' do
26
+ expect do
27
+ @events.on(:cows) { nil }
28
+ end.to be_an_instance_of Syndi::Events::Listener
29
+ end
30
+
31
+ end
32
+
33
+ describe '#emit'
34
+
35
+ describe Syndi::Events::Listener
36
+
37
+ describe '#deaf'
38
+
39
+ end
40
+
41
+ end
42
+
43
+ # vim: set ts=4 sts=2 sw=2 et:
@@ -0,0 +1,15 @@
1
+ # Copyright (c) 2013, Autumn Perrault, et al. All rights reserved.
2
+ # This free software is distributed under the FreeBSD license (see LICENSE).
3
+
4
+ require 'rake/extensiontask'
5
+
6
+ desc 'Compile the native extension.'
7
+ Rake::ExtensionTask.new 'libsyndi', $gemspec do |ext|
8
+ ext.cross_compile = true
9
+
10
+ ext.cross_compiling do |spec|
11
+ spec.post_install_message << "\r\nNOTICE: You have installed the binary distribution of this gem."
12
+ end
13
+ end
14
+
15
+ # vim: set ts=4 sts=2 sw=2 et:
@@ -0,0 +1,10 @@
1
+ # Copyright (c) 2013, Autumn Perrault, et al. All rights reserved.
2
+ # This free software is distributed under the FreeBSD license (see LICENSE).
3
+
4
+ desc 'Install the gem.'
5
+ task :install => :gem do
6
+ gempkg = Dir["pkg/Syndi-#{$gemspec.version}.gem"].last
7
+ sh "gem install #{gempkg}"
8
+ end
9
+
10
+ # vim: set ts=4 sts=2 sw=2 et:
@@ -0,0 +1,13 @@
1
+ # Copyright (c) 2013, Autumn Perrault, et al. All rights reserved.
2
+ # This free software is distributed under the FreeBSD license (see LICENSE).
3
+
4
+ require 'rubygems'
5
+ require 'rubygems/package_task'
6
+
7
+ desc 'Package the gem.'
8
+ Gem::PackageTask.new($gemspec) do |pkg|
9
+ pkg.need_zip = true
10
+ pkg.need_tar = true
11
+ end
12
+
13
+ # vim: set ts=4 sts=2 sw=2 et:
data/tasks/spec.rake ADDED
@@ -0,0 +1,12 @@
1
+ # Copyright (c) 2013, Autumn Perrault, et al. All rights reserved.
2
+ # This free software is distributed under the FreeBSD license (see LICENSE).
3
+
4
+ require 'rspec/core/rake_task'
5
+
6
+ desc 'Test the application.'
7
+ RSpec::Core::RakeTask.new do |t|
8
+ t.pattern = "#{__dir__}/../spec/**/*_spec.rb"
9
+ t.rspec_opts = ["-I #{__dir__}/../lib", "-r #{__dir__}/../spec/helper.rb"]
10
+ end
11
+
12
+ # vim: set ts=4 sts=2 sw=2 et:
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: syndi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Autumn Perrault
@@ -9,8 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-05 00:00:00.000000000 Z
12
+ date: 2013-02-06 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.2'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.2'
14
28
  - !ruby/object:Gem::Dependency
15
29
  name: celluloid
16
30
  requirement: !ruby/object:Gem::Requirement
@@ -113,24 +127,95 @@ dependencies:
113
127
  name: rspec
114
128
  requirement: !ruby/object:Gem::Requirement
115
129
  requirements:
116
- - - "~>"
130
+ - - ">="
117
131
  - !ruby/object:Gem::Version
118
- version: '2.12'
132
+ version: '0'
119
133
  type: :development
120
134
  prerelease: false
121
135
  version_requirements: !ruby/object:Gem::Requirement
122
136
  requirements:
123
- - - "~>"
137
+ - - ">="
124
138
  - !ruby/object:Gem::Version
125
- version: '2.12'
139
+ version: '0'
126
140
  description: |2
127
- An elegant, modern, multithreaded, event-driven, modular, chat bot
141
+ An elegant, modern, multithreaded, event-driven, modular chat bot
128
142
  designed upon a multi-protocol model.
129
- email: autumn@destellae.net
130
- executables: []
131
- extensions: []
143
+ email: syndibot@googlegroups.com
144
+ executables:
145
+ - syndi
146
+ - syndi-conf
147
+ extensions:
148
+ - ext/csyndi/extconf.rb
132
149
  extra_rdoc_files: []
133
- files: []
150
+ files:
151
+ - bin/syndi-conf
152
+ - bin/syndi
153
+ - lib/syndi/dsl/irc.rb
154
+ - lib/syndi/dsl/base.rb
155
+ - lib/syndi/configure.rb
156
+ - lib/syndi/verbosity.rb
157
+ - lib/syndi/api.rb
158
+ - lib/syndi/rubyext/string.rb
159
+ - lib/syndi/irc.rb
160
+ - lib/syndi/configure/generator.rb
161
+ - lib/syndi/configure/cli.rb
162
+ - lib/syndi/api/plugin.rb
163
+ - lib/syndi/api/events.rb
164
+ - lib/syndi/api/object.rb
165
+ - lib/syndi/config.rb
166
+ - lib/syndi/version.rb
167
+ - lib/syndi/actress.rb
168
+ - lib/syndi/jewel/specification.rb
169
+ - lib/syndi/jewel/util.rb
170
+ - lib/syndi/events.rb
171
+ - lib/syndi/jewel.rb
172
+ - lib/syndi/irc/protocol.rb
173
+ - lib/syndi/irc/library.rb
174
+ - lib/syndi/irc/object/message.rb
175
+ - lib/syndi/irc/object/entity.rb
176
+ - lib/syndi/irc/object/user.rb
177
+ - lib/syndi/irc/object/channel.rb
178
+ - lib/syndi/irc/sasl/mech.rb
179
+ - lib/syndi/irc/sasl/diffie_hellman.rb
180
+ - lib/syndi/irc/sasl/mech/dh_blowfish.rb
181
+ - lib/syndi/irc/sasl/mech/plain.rb
182
+ - lib/syndi/irc/protocol/numerics.rb
183
+ - lib/syndi/irc/state/support.rb
184
+ - lib/syndi/irc/state/channel_manager.rb
185
+ - lib/syndi/irc/state/user_manager.rb
186
+ - lib/syndi/irc/common.rb
187
+ - lib/syndi/irc/server.rb
188
+ - lib/syndi/irc/std/numerics.rb
189
+ - lib/syndi/irc/std/commands.rb
190
+ - lib/syndi/bot.rb
191
+ - lib/syndi.rb
192
+ - ext/csyndi/events.c
193
+ - ext/csyndi/logger.c
194
+ - ext/csyndi/extconf.rb
195
+ - ext/csyndi/integer.c
196
+ - ext/csyndi/libauto.c
197
+ - docs/Upgrade.md
198
+ - docs/Events.md
199
+ - include/syndi/integer.h
200
+ - include/syndi/logger.h
201
+ - include/syndi/csyndi.h
202
+ - include/syndi/events.h
203
+ - include/syndi.h
204
+ - tasks/spec.rake
205
+ - tasks/compile.rake
206
+ - tasks/package.rake
207
+ - tasks/install.rake
208
+ - README.md
209
+ - LICENSE
210
+ - WINDOWS.md
211
+ - INSTALL.md
212
+ - CHANGELOG.md
213
+ - Gemfile
214
+ - Rakefile
215
+ - ".yardopts"
216
+ - conf/example.yml
217
+ - spec/helper.rb
218
+ - spec/syndi/events_spec.rb
134
219
  homepage: http://syndibot.com
135
220
  licenses:
136
221
  - FreeBSD
@@ -141,7 +226,7 @@ post_install_message: |
141
226
  We suggest that, if you're not already consulting it, you read the Syndi Handbook:
142
227
  https://github.com/syndibot/syndi/wiki/Handbook
143
228
 
144
- Moreover, you should typically now run `auto-conf` to produce a configuration file.
229
+ Moreover, you should typically now run `syndi-conf` to produce a configuration file.
145
230
  rdoc_options: []
146
231
  require_paths:
147
232
  - lib
@@ -161,4 +246,7 @@ rubygems_version: 2.0.0.rc.1
161
246
  signing_key:
162
247
  specification_version: 4
163
248
  summary: A modern, elegant, extensible multi-protocol bot.
164
- test_files: []
249
+ test_files:
250
+ - spec/helper.rb
251
+ - spec/syndi/events_spec.rb
252
+ - Rakefile