win32_service_manager 0.1.1 → 0.1.2

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/Manifest.txt CHANGED
@@ -4,6 +4,8 @@ README.rdoc
4
4
  Rakefile
5
5
  bin/win32_service_manager
6
6
  lib/win32_service_manager.rb
7
+ lib/win32_service_manager/core_ext/struct_to_hash.rb
8
+ spec/.bacon
7
9
  spec/helper.rb
8
10
  spec/runner
9
11
  spec/spec_win32_service_manager.rb
data/Rakefile CHANGED
@@ -11,3 +11,6 @@ PROJ.email = 'raggi@rubyforge.org'
11
11
  PROJ.url = 'http://github.com/raggi/win32_service_manager'
12
12
  PROJ.rubyforge.name = 'libraggi'
13
13
  PROJ.version = Win32ServiceManager.version
14
+
15
+ desc 'cleanup and rebuild everything'
16
+ task :full => %w(clean clobber manifest:create gem:spec gem doc)
@@ -2,7 +2,7 @@ require 'win32_service_manager/core_ext/struct_to_hash'
2
2
 
3
3
  class Win32ServiceManager
4
4
 
5
- VERSION = '0.1.1'
5
+ VERSION = '0.1.2'
6
6
  def self.version; VERSION; end
7
7
  def self.load_dependencies; require 'win32/service'; end
8
8
 
@@ -0,0 +1,108 @@
1
+ class Struct
2
+ module ToHash
3
+ module Ruby187
4
+ def to_hash
5
+ hashable!
6
+ Hash[each_pair.to_a]
7
+ end
8
+ end
9
+
10
+ module RubyOld
11
+ def to_hash
12
+ hashable!
13
+ vals = []
14
+ each_pair{|k,v| vals << k; vals << v}
15
+ Hash[*vals]
16
+ end
17
+ end
18
+
19
+ if RUBY_VERSION >= '1.8.7'
20
+ include Ruby187
21
+ else
22
+ include RubyOld
23
+ end
24
+
25
+ def hashable?
26
+ self.class.members.uniq == self.class.members
27
+ end
28
+
29
+ def hashable!
30
+ raise ArgumentError, "#{self.inspect} has duplicate keys" unless hashable?
31
+ end
32
+ end
33
+
34
+ include ToHash
35
+ end
36
+
37
+ if __FILE__ == $0
38
+
39
+ require "benchmark"
40
+
41
+ TESTS = 10_000
42
+ Benchmark.bmbm do |results|
43
+ ABC = Struct.new(:a,:b,:c)
44
+ if RUBY_VERSION >= '1.8.7'
45
+ a = ABC.new(1,2,3)
46
+ a.extend Struct::ToHash::Ruby187
47
+ results.report("new:") { TESTS.times { a.to_hash } }
48
+ end
49
+ b = ABC.new(1,2,3)
50
+ b.extend Struct::ToHash::RubyOld
51
+ results.report("old:") { TESTS.times { b.to_hash } }
52
+ end
53
+
54
+ puts
55
+
56
+ begin; require 'rubygems'; rescue LoadError; end
57
+ require 'bacon'
58
+ Bacon.summary_on_exit
59
+
60
+
61
+ describe "Struct#to_hash" do
62
+ should 'not raise an error when calling to_hash on a new struct' do
63
+ should.not.raise do
64
+ Struct.new(:a).new(1).to_hash
65
+ end
66
+ end
67
+ end
68
+
69
+ describe "Struct#hashable?" do
70
+ should 'return true if #to_hash will not raise' do
71
+ Struct.new(:a).new(1).should.be.hashable
72
+ end
73
+ should 'return false if there are duplicate keys' do
74
+ Struct.new(:a, :a).new(1, 2).should.not.be.hashable
75
+ end
76
+ end
77
+
78
+ describe "Struct#hashable!" do
79
+ should 'raise an ArgumentError when there are duplicate keys' do
80
+ should.raise(ArgumentError) do
81
+ Struct.new(:a, :a).new(1, 2).hashable!
82
+ end
83
+ end
84
+ end
85
+
86
+ supported_versions = [Struct::ToHash::RubyOld]
87
+ supported_versions << Struct::ToHash::Ruby187 if RUBY_VERSION >= '1.8.7'
88
+ supported_versions.each do |mod|
89
+ describe mod do
90
+ should 'raise an argument error when the struct has duplicate keys' do
91
+ should.raise(ArgumentError) do
92
+ s = Struct.new(:a, :a).new(1,2)
93
+ s.extend mod
94
+ s.to_hash
95
+ end
96
+ end
97
+ should 'return a hash with keys associated with their values' do
98
+ keys = %w(a b c d e).map { |k| k.to_sym }
99
+ values = [1,2,3,4,5]
100
+ result = Hash[*keys.zip(values).flatten]
101
+ s = Struct.new(*keys).new(*values)
102
+ s.extend mod
103
+ s.to_hash.should.== result
104
+ end
105
+ end
106
+ end
107
+
108
+ end
data/spec/.bacon ADDED
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: win32_service_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Tucker
@@ -59,6 +59,8 @@ files:
59
59
  - Rakefile
60
60
  - bin/win32_service_manager
61
61
  - lib/win32_service_manager.rb
62
+ - lib/win32_service_manager/core_ext/struct_to_hash.rb
63
+ - spec/.bacon
62
64
  - spec/helper.rb
63
65
  - spec/runner
64
66
  - spec/spec_win32_service_manager.rb