blur 1.5.3 → 1.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,11 +1,30 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Blur
4
+ # The +Script+ class is used for encapsulating dynamically loaded ruby scripts.
5
+ #
6
+ # The {Script#Script} method is then used to shape the DSL-language to make
7
+ # writing Blur scripts a breeze.
8
+ #
9
+ # @todo add examples in the documentation
10
+ # @see Script#Script
4
11
  class Script < Module
5
- attr_accessor :__name, :__author, :__version, :__path, :__client
12
+ # @return the name of the script.
13
+ attr_accessor :__name
14
+ # @return the author of the script.
15
+ attr_accessor :__author
16
+ # @return the version of the script.
17
+ attr_accessor :__version
18
+ # @return the path in which the script remains.
19
+ attr_accessor :__path
20
+ # Can be used inside the script to act with the client itself.
21
+ # @return [Network::Client] the client delegate.
22
+ attr_accessor :__client
6
23
 
24
+ # Check to see if the script has been evaluated.
7
25
  def evaluated?; @__evaluated end
8
26
 
27
+ # Instantiates a script and evaluates the contents which remain in +path+.
9
28
  def initialize path
10
29
  @__path = path
11
30
  @__evaluated = false
@@ -17,6 +36,14 @@ module Blur
17
36
  end
18
37
  end
19
38
 
39
+ # Make it a DSL-way of writing a script.
40
+ #
41
+ # @example
42
+ # Script :example do
43
+ # def connection_ready network
44
+ # # …
45
+ # end
46
+ # end
20
47
  def Script name, version = [1,0], author = nil, &block
21
48
  @__name = name
22
49
  @__author = author
@@ -27,6 +54,7 @@ module Blur
27
54
  true
28
55
  end
29
56
 
57
+ # Unload the script and save the cache, if present.
30
58
  def unload!
31
59
  cache.save if @__cache
32
60
  __send__ :unloaded if respond_to? :unloaded
@@ -34,20 +62,26 @@ module Blur
34
62
  @__cache = nil
35
63
  end
36
64
 
65
+ # Access another script with name +name+.
66
+ #
67
+ # @return [Script] the script with the name +name+, or nil.
37
68
  def script name
38
69
  @__client.scripts.find { |script| script.__name == name }
39
70
  end
40
71
 
72
+ # Get the cache, if none, instantiate a new cache.
41
73
  def cache
42
74
  @__cache ||= Cache.new self
43
75
  end
44
76
 
77
+ # Convert it to a debug-friendly format.
45
78
  def inspect
46
79
  %{#<#{self.class.name} @name=#{@__name.inspect} @version=#{@__version.inspect} @author=#{@__author.inspect}>}
47
80
  end
48
81
 
49
82
  private
50
83
 
84
+ # Attempt to evaluate the contents of the script.
51
85
  def evaluate
52
86
  module_eval File.read(@__path), File.basename(@__path), 0
53
87
  @__evaluated = true
@@ -2,24 +2,42 @@
2
2
 
3
3
  module Blur
4
4
  class Script < Module
5
+ # The +Cache+ class enables data storing inside Blur and it scripts.
6
+ #
7
+ # What it does is simply store a hash, and act like it is that hash.
8
+ #
9
+ # When the client closes, it sends a message to all available scripts
10
+ # and then those scripts tells the cache to save, in order to remember
11
+ # that data and reload it at the next run.
12
+ #
13
+ # Cache can then save the contents of the hash to a yaml file that persists
14
+ # in the ./cache/ directory.
15
+ #
16
+ # That same file is then loaded once needed again.
5
17
  class Cache
6
-
18
+ # Get the path to the cache directory (./cache/)
7
19
  def self.path
8
20
  %{#{File.dirname File.expand_path $0}/cache}
9
21
  end
10
22
 
23
+ # Check if there exists a cache file for the script with name +name+.
11
24
  def self.exists? name
12
25
  File.exists? "#{path}/#{name}.yml"
13
26
  end
14
27
 
28
+ # Get a cache value by key.
15
29
  def [] key; @hash[key] end
30
+
31
+ # Set a cache value by key.
16
32
  def []= key, value; @hash[key] = value end
17
33
 
34
+ # Instantiate a cache with a script reference.
18
35
  def initialize script
19
36
  @hash = {}
20
37
  @script = script
21
38
  end
22
39
 
40
+ # Save all internal data to a yaml file in the cache directory.
23
41
  def save
24
42
  directory = File.dirname path
25
43
 
@@ -32,6 +50,9 @@ module Blur
32
50
  end
33
51
  end
34
52
 
53
+ # Load a yaml file as internal data from the cache directory.
54
+ #
55
+ # @return [Hash] the loaded data.
35
56
  def load
36
57
  if yaml = YAML.load_file(path)
37
58
  @hash = yaml
@@ -40,10 +61,14 @@ module Blur
40
61
  File.unlink path
41
62
  end
42
63
 
64
+ # Let Hash#to_s do the job.
43
65
  def to_s; @hash end
44
66
 
45
67
  private
46
68
 
69
+ # The current caches file path.
70
+ #
71
+ # @return [String] the file path.
47
72
  def path
48
73
  %{#{Cache.path}/#{@script.__name}.yml}
49
74
  end
@@ -2,9 +2,39 @@
2
2
 
3
3
  module Blur
4
4
  class Script < Module
5
+ # The +MessageParsing+ module is a module that gives the ability to turn a
6
+ # script into a DSL-like framework.
7
+ #
8
+ # What it does is automatically test to see if a message starts with a
9
+ # trigger, and then, if so, it sends the command-part of the message to
10
+ # the script object itself.
11
+ #
12
+ # This way, the plugin-writer doesn't need to have repetetive code like
13
+ # that in every script.
14
+ #
15
+ # @example
16
+ # Script :example do
17
+ # extend MessageParsing
18
+ #
19
+ # def command_test user, channel, message
20
+ # channel.say "I hear you."
21
+ # end
22
+ # end
23
+ #
24
+ # # And if a user were to send the message ".test my method", it would
25
+ # # trigger the #command_test method with the following arguments
26
+ # #
27
+ # # user => #<Blur::Network::User … >
28
+ # # channel => #<Blur::Network::Channel … >
29
+ # # message => ".test my method"
5
30
  module MessageParsing
31
+ # The prefix that turns it into a possible command.
6
32
  MessageTrigger = "."
7
33
 
34
+ # Handle all calls to the scripts +message+ method, check to see if
35
+ # the message containts a valid command, serialize it and pass it to
36
+ # the script as command_name with the parameters +user+, +channel+
37
+ # and +message+.
8
38
  def message user, channel, line
9
39
  return unless line.start_with? MessageTrigger
10
40
 
@@ -17,7 +47,8 @@ module Blur
17
47
  end
18
48
 
19
49
  protected
20
-
50
+
51
+ # Strip all non-word characters from the input command.
21
52
  def serialize name
22
53
  name.gsub /\W/, '' if name
23
54
  end
metadata CHANGED
@@ -1,20 +1,63 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blur
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 1.5.3
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 6
8
+ version: "1.6"
6
9
  platform: ruby
7
10
  authors:
8
11
  - Mikkel Kroman
9
12
  autorequire:
10
- bindir: executables
13
+ bindir: bin
11
14
  cert_chain: []
12
15
 
13
- date: 2011-02-14 00:00:00 +01:00
16
+ date: 2011-09-30 00:00:00 +02:00
14
17
  default_executable:
15
- dependencies: []
16
-
17
- description:
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
20
+ name: majic
21
+ prerelease: false
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 1
30
+ version: "0.1"
31
+ type: :runtime
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: crypt19
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :runtime
45
+ version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: eventmachine
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ">"
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ - 12
57
+ version: "0.12"
58
+ type: :runtime
59
+ version_requirements: *id003
60
+ description: " An event-driven IRC-framework in and for Ruby. Is extensible and supports script with (re)loading functionality during runtime.\n"
18
61
  email: mk@maero.dk
19
62
  executables: []
20
63
 
@@ -26,6 +69,7 @@ files:
26
69
  - library/blur.rb
27
70
  - library/blur/client.rb
28
71
  - library/blur/enhancements.rb
72
+ - library/blur/handling.rb
29
73
  - library/blur/network.rb
30
74
  - library/blur/network/channel.rb
31
75
  - library/blur/network/command.rb
@@ -34,11 +78,13 @@ files:
34
78
  - library/blur/script.rb
35
79
  - library/blur/script/cache.rb
36
80
  - library/blur/script/messageparsing.rb
37
- - library/blur/handling.rb
81
+ - library/blur/encryption/fish.rb
82
+ - library/blur/encryption/base64.rb
83
+ - library/blur/encryption.rb
38
84
  has_rdoc: true
39
- homepage:
40
- licenses: []
41
-
85
+ homepage: https://github.com/mkroman/blur
86
+ licenses:
87
+ - ISC
42
88
  post_install_message:
43
89
  rdoc_options: []
44
90
 
@@ -49,19 +95,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
49
95
  requirements:
50
96
  - - ">="
51
97
  - !ruby/object:Gem::Version
52
- version: 1.9.1
98
+ segments:
99
+ - 0
100
+ version: "0"
53
101
  required_rubygems_version: !ruby/object:Gem::Requirement
54
102
  none: false
55
103
  requirements:
56
104
  - - ">="
57
105
  - !ruby/object:Gem::Version
106
+ segments:
107
+ - 0
58
108
  version: "0"
59
109
  requirements: []
60
110
 
61
111
  rubyforge_project:
62
- rubygems_version: 1.5.0
112
+ rubygems_version: 1.3.7
63
113
  signing_key:
64
114
  specification_version: 3
65
- summary: Extensible IRC library
115
+ summary: An event-driven IRC-framework for Ruby.
66
116
  test_files: []
67
117