muzang-plugins 1.0.0 → 1.0.1

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.
@@ -1,40 +1,69 @@
1
1
  require "em-http-request"
2
2
  require "json"
3
+ require "pstore"
3
4
 
4
5
  class RubyGems
5
6
  include Muzang::Plugins::Helpers
6
7
 
7
- attr_accessor :last_gem
8
+ attr_accessor :last_gem, :store
8
9
 
9
10
  def initialize(bot)
10
11
  @bot = bot
11
- create_database("last_gem.yml", String.new, :last_gem)
12
+ @store = PStore.new("#{ENV["HOME"]}/.muzang/muzang.rubygems")
13
+ @store.transaction do
14
+ @store[:gems] ||= {}
15
+ end
12
16
  end
13
17
 
14
18
  def call(connection, message)
15
- if on_join?(connection, message)
16
- EventMachine.add_periodic_timer(period) do
17
- http = EventMachine::HttpRequest.new('http://rubygems.org/api/v1/gems/latest.json').get
19
+ message.message.match(/^watch! (.*?)$/) do |match|
20
+ @current_gem = match[1]
18
21
 
19
- http.errback {
20
- # exceptioner
21
- }
22
+ @store.transaction do
23
+ unless @store[:gems][@current_gem]
24
+ @store[:gems][match[1]] = {:name => @current_gem}
25
+ @new_gem = true
26
+ end
27
+ end
22
28
 
29
+ if @new_gem
30
+ http = EventMachine::HttpRequest.new("http://rubygems.org/api/v1/gems/#{@current_gem}.json").get
23
31
  http.callback {
24
- gems = JSON.parse(http.response)
25
- gem = gems.first
26
- unless @last_gem == gem["name"]
27
- @last_gem = gem["name"]
28
- connection.msg(message.channel, "Nowy gem! | #{gem["name"]} | #{gem["info"]} | #{gem["project_uri"]}")
29
- save
32
+ begin
33
+ gem = JSON.parse(http.response)
34
+ @store.transaction do
35
+ @store[:gems][@current_gem][:version] = gem["version"]
36
+ end
37
+ connection.msg(message.channel, "Dodalem gema #{@current_gem} do obserwowanych")
38
+ connection.msg(message.channel, "Aktualna wersja: #{@current_gem} (#{gem["version"]})")
39
+ @new_gem = false
40
+ rescue Exception
41
+ connection.msg(message.channel, "Niepoprawna nazwa gema")
30
42
  end
31
43
  }
44
+ else
45
+ connection.msg(message.channel, "Gem #{@current_gem} jest juz obserwowany")
32
46
  end
33
47
  end
34
- end
35
48
 
36
- def save
37
- file = File.open(@config + "/last_gem.yml", "w"){|f| f.write YAML::dump(@last_gem)}
49
+ if on_join?(connection, message)
50
+ EventMachine.add_periodic_timer(period) do
51
+ gems = @store.transaction{@store[:gems].values}
52
+ EM::Iterator.new(gems, 1).each do |gem, iter|
53
+ http = EventMachine::HttpRequest.new("http://rubygems.org/api/v1/gems/#{gem[:name]}.json").get
54
+ http.callback {
55
+ iter.next
56
+ current_gem = JSON.parse(http.response)
57
+ if Gem::Version.new(gem[:version]) < Gem::Version.new(current_gem["version"])
58
+ @store.transaction do
59
+ @store[:gems][gem[:name]][:version] = current_gem["version"]
60
+ end
61
+ connection.msg(message.channel, "Nowa wersja #{gem[:name]} (#{current_gem["version"]})")
62
+ end
63
+ }
64
+ end
65
+ end
66
+ end
38
67
  end
39
68
 
40
69
  def period
@@ -0,0 +1,12 @@
1
+ class Say
2
+ include Muzang::Plugins::Helpers
3
+
4
+ def initialize(bot)
5
+ @bot = bot
6
+ end
7
+
8
+ def call(connection, message)
9
+ message.match(/^say (.*?)$/) do |match|
10
+ end
11
+ end
12
+ end
@@ -1,5 +1,5 @@
1
1
  module Muzang
2
2
  module Plugins
3
- VERSION = "1.0.0"
3
+ VERSION = "1.0.1"
4
4
  end
5
5
  end
@@ -12,26 +12,64 @@ describe "RubyGems" do
12
12
  @bot = stub
13
13
  @rubygems = RubyGems.new(@bot)
14
14
  @connection = ConnectionMock.new(:nick => "DRUG-bot")
15
- @message = OpenStruct.new({ :command => :join, :channel => "#test", :nick => "DRUG-bot" })
16
- @file = File.expand_path('../support/responses/rubygems.response', __FILE__)
17
- EventMachine::MockHttpRequest.pass_through_requests = false
18
- EventMachine::MockHttpRequest.register_file('http://rubygems.org:80/api/v1/gems/latest.json', :get, @file)
15
+ @message = OpenStruct.new({ :command => :prvmsg, :channel => "#test", :nick => "DRUG-bot" })
16
+ @gem = File.expand_path('../support/responses/acts-as-messageable.response', __FILE__)
17
+ @gem2 = File.expand_path('../support/responses/acts-as-messageable2.response', __FILE__)
18
+ EventMachine::MockHttpRequest.pass_through_requests = true
19
+ EventMachine::MockHttpRequest.register_file('http://rubygems.org:80/api/v1/gems/acts-as-messageable.json', :get, @gem)
20
+ EventMachine::MockHttpRequest.register_file('http://rubygems.org:80/api/v1/gems/acts-as-messageable2.json', :get, @gem2)
19
21
  EventMachine::MockHttpRequest.activate!
20
22
  end
21
23
 
22
- it "should print last gem" do
23
- @rubygems.last_gem = "fake_gem"
24
+ after do
25
+ FileUtils.rm("#{ENV["HOME"]}/.muzang/muzang.rubygems")
26
+ end
27
+
28
+ it "should add gem to watching list" do
29
+ @message.message = "watch! acts-as-messageable"
24
30
  EM.run do
25
31
  @rubygems.call(@connection, @message)
26
- eventually(1) { @connection.message_count }
32
+ eventually(true, :times => 10) do
33
+ @connection.messages.include? "Dodalem gema acts-as-messageable do obserwowanych" and
34
+ @connection.messages.include? "Aktualna wersja: acts-as-messageable (0.4.2)"
35
+ end
27
36
  end
28
37
  end
29
38
 
30
- it "should not print last gem" do
31
- @rubygems.last_gem = "action_links"
39
+ it "should raise error" do
40
+ @message.message = "watch! acts-as-messageable2"
32
41
  EM.run do
33
42
  @rubygems.call(@connection, @message)
34
- eventually(0) { @connection.message_count }
43
+ eventually(true) do
44
+ @connection.messages.include? "Niepoprawna nazwa gema"
45
+ end
46
+ end
47
+ end
48
+
49
+ it "should not add gem twice to store" do
50
+ @message.message = "watch! acts-as-messageable"
51
+ EM.run do
52
+ 2.times{ @rubygems.call(@connection, @message) }
53
+ eventually(true) do
54
+ @connection.messages.include? "Gem acts-as-messageable jest juz obserwowany"
55
+ end
56
+ end
57
+ end
58
+
59
+ it "should notice about new version of gem" do
60
+ @message.message = ""
61
+ @message.command = :join
62
+
63
+ EM.run do
64
+ @rubygems.call(@connection, @message)
65
+ @message.message = "watch! acts-as-messageable"
66
+ @rubygems.call(@connection, @message)
67
+
68
+ @rubygems.store.transaction{ @rubygems.store[:gems]["acts-as-messageable"][:version] = "0.4.1" }
69
+
70
+ eventually(true, :every => 0.1, :total => 100) do
71
+ @connection.messages.include? "Nowa wersja acts-as-messageable (0.4.2)"
72
+ end
35
73
  end
36
74
  end
37
75
  end
@@ -0,0 +1,5 @@
1
+ HTTP/1.1 200 OK
2
+ Status: 200
3
+ Content-Type: application/json; charset=utf-8
4
+
5
+ {"dependencies":{"runtime":[{"name":"activerecord","requirements":">= 3.0.0"},{"name":"activesupport","requirements":">= 3.0.0"},{"name":"ancestry","requirements":"~> 1.2.4"},{"name":"railties","requirements":">= 3.0.0"}],"development":[{"name":"jeweler","requirements":"~> 1.6.0"},{"name":"rspec","requirements":"~> 2.6.0"},{"name":"sqlite3-ruby","requirements":">= 0"}]},"name":"acts-as-messageable","downloads":3397,"info":"Make user messageable!;-)","version_downloads":14,"version":"0.4.2","homepage_uri":"http://github.com/LTe/acts-as-messageable","bug_tracker_uri":"https://github.com/LTe/acts-as-messageable/issues","source_code_uri":"","gem_uri":"http://rubygems.org/gems/acts-as-messageable-0.4.2.gem","project_uri":"http://rubygems.org/gems/acts-as-messageable","authors":"Piotr Nielacny","mailing_list_uri":"","documentation_uri":"http://rdoc.info/github/LTe/acts-as-messageable/","wiki_uri":"https://github.com/LTe/acts-as-messageable/wiki/_pages"}
@@ -0,0 +1,5 @@
1
+ HTTP/1.1 404 Not Found
2
+ Status: 404
3
+ Content-Type: application/json; charset=utf-8
4
+
5
+ This rubygem could not be found.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: muzang-plugins
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-15 00:00:00.000000000Z
12
+ date: 2011-11-20 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: em-http-request
16
- requirement: &69975752946020 !ruby/object:Gem::Requirement
16
+ requirement: &70167909877820 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *69975752946020
24
+ version_requirements: *70167909877820
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: muzang
27
- requirement: &69975752945340 !ruby/object:Gem::Requirement
27
+ requirement: &70167909875680 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *69975752945340
35
+ version_requirements: *70167909875680
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: em-ventually
38
- requirement: &69975752944420 !ruby/object:Gem::Requirement
38
+ requirement: &70167909874320 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.1.2
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *69975752944420
46
+ version_requirements: *70167909874320
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &69975752943780 !ruby/object:Gem::Requirement
49
+ requirement: &70167909873600 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: 2.6.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *69975752943780
57
+ version_requirements: *70167909873600
58
58
  description: Plugins for Muzang IRC bot
59
59
  email:
60
60
  - piotr.nielacny@gmail.com
@@ -217,6 +217,7 @@ files:
217
217
  - lib/muzang-plugins/muzang-plusone.rb
218
218
  - lib/muzang-plugins/muzang-reddit.rb
219
219
  - lib/muzang-plugins/muzang-rubygems.rb
220
+ - lib/muzang-plugins/muzang-say.rb
220
221
  - lib/muzang-plugins/version.rb
221
222
  - muzang-plugins.gemspec
222
223
  - spec/livereload_spec.rb
@@ -229,6 +230,8 @@ files:
229
230
  - spec/rubygems_spec.rb
230
231
  - spec/spec_helper.rb
231
232
  - spec/support/connection_mock.rb
233
+ - spec/support/responses/acts-as-messageable.response
234
+ - spec/support/responses/acts-as-messageable2.response
232
235
  - spec/support/responses/meme.response
233
236
  - spec/support/responses/reddit.response
234
237
  - spec/support/responses/rubygems.response