rainman 0.1.0 → 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/.travis.yml +1 -1
- data/README.md +28 -2
- data/example/domain.rb +1 -1
- data/lib/rainman/driver.rb +12 -3
- data/lib/rainman/support.rb +20 -0
- data/lib/rainman/version.rb +1 -1
- data/rainman.gemspec +1 -1
- data/spec/integration_spec.rb +2 -0
- data/spec/rainman/driver_spec.rb +44 -6
- data/spec/rainman/support_spec.rb +5 -0
- metadata +12 -14
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -40,8 +40,12 @@ module Domain
|
|
40
40
|
# Register Domain.create as a public method
|
41
41
|
define_action :create
|
42
42
|
|
43
|
-
# Register Domain.destroy as a public method
|
44
|
-
define_action :destroy
|
43
|
+
# Register Domain.destroy as a public method; Alias Domain.delete to it
|
44
|
+
define_action :destroy, :alias => :delete
|
45
|
+
|
46
|
+
# Register Domain.cancel as a public method; it delegates to a handler's
|
47
|
+
# :cancel_account method.
|
48
|
+
define_action :cancel, :delegate_to => :cancel_account
|
45
49
|
|
46
50
|
# Register Domain.namservers.list as a public method
|
47
51
|
namespace :nameservers do
|
@@ -69,6 +73,12 @@ class Domain::Abc
|
|
69
73
|
# Returns true or false.
|
70
74
|
def destroy(params = {})
|
71
75
|
end
|
76
|
+
|
77
|
+
# Public: Cancel a domain account
|
78
|
+
#
|
79
|
+
# Returns true or false.
|
80
|
+
def cancel_account(params = {})
|
81
|
+
end
|
72
82
|
end
|
73
83
|
|
74
84
|
class Domain::Xyz
|
@@ -83,6 +93,12 @@ class Domain::Xyz
|
|
83
93
|
# Returns true or false.
|
84
94
|
def destroy(params = {})
|
85
95
|
end
|
96
|
+
|
97
|
+
# Public: Cancel a domain account
|
98
|
+
#
|
99
|
+
# Returns true or false.
|
100
|
+
def cancel_account(params = {})
|
101
|
+
end
|
86
102
|
end
|
87
103
|
```
|
88
104
|
|
@@ -149,6 +165,10 @@ Domain.create({})
|
|
149
165
|
|
150
166
|
# Destroy a domain
|
151
167
|
Domain.destroy({})
|
168
|
+
Domain.delete({})
|
169
|
+
|
170
|
+
# Cancel domain acconut
|
171
|
+
Domain.cancel
|
152
172
|
|
153
173
|
# List domain nameservers
|
154
174
|
Domain.nameservers.list({})
|
@@ -197,6 +217,9 @@ s = Service.new
|
|
197
217
|
s.create
|
198
218
|
|
199
219
|
s.destroy
|
220
|
+
s.delete
|
221
|
+
|
222
|
+
s.cancel
|
200
223
|
|
201
224
|
s.nameservers.list
|
202
225
|
|
@@ -222,6 +245,9 @@ s = Service.new
|
|
222
245
|
s.domain.create
|
223
246
|
|
224
247
|
s.domain.destroy
|
248
|
+
s.domain.delete
|
249
|
+
|
250
|
+
s.domain.cancel
|
225
251
|
|
226
252
|
s.domain.nameservers.list
|
227
253
|
|
data/example/domain.rb
CHANGED
data/lib/rainman/driver.rb
CHANGED
@@ -171,7 +171,7 @@ module Rainman
|
|
171
171
|
:class_name => "#{self.name}::#{name.to_s.camelize}"
|
172
172
|
)
|
173
173
|
|
174
|
-
klass = opts[:class_name].constantize
|
174
|
+
klass = opts[:class_name].to_s.constantize
|
175
175
|
|
176
176
|
handlers[name] = inject_handler_methods(klass, name.to_sym)
|
177
177
|
end
|
@@ -245,17 +245,26 @@ module Rainman
|
|
245
245
|
# Private: Define a new action.
|
246
246
|
#
|
247
247
|
# name - The Symbol handler name.
|
248
|
-
# opts -
|
248
|
+
# opts - A Hash of options used for creating the method:
|
249
|
+
# :delegate_to - The method name to run on the handler. Defaults
|
250
|
+
# to the action's name.
|
251
|
+
# :alias - If supplied, an alias will be created for the
|
252
|
+
# defined method.
|
249
253
|
#
|
250
254
|
# Example
|
251
255
|
#
|
252
256
|
# define_action :blah
|
253
257
|
#
|
258
|
+
# define_action :destroy, :alias => :delete
|
259
|
+
#
|
254
260
|
# Returns a Proc.
|
255
261
|
def define_action(name, opts = {})
|
256
262
|
create_method(name) do |*args, &block|
|
257
|
-
|
263
|
+
method = opts[:delegate_to] || name
|
264
|
+
current_handler_instance.runner.send(method, *args, &block)
|
258
265
|
end
|
266
|
+
|
267
|
+
alias_method opts[:alias], name if opts[:alias]
|
259
268
|
end
|
260
269
|
|
261
270
|
# Private: Creates a new method.
|
data/lib/rainman/support.rb
CHANGED
@@ -36,6 +36,26 @@ class String
|
|
36
36
|
self[0].chr.downcase + camelize(self)[1..-1]
|
37
37
|
end
|
38
38
|
end unless respond_to?(:camelize)
|
39
|
+
|
40
|
+
# Makes an underscored, lowercase form from the expression in the string.
|
41
|
+
#
|
42
|
+
# Changes '::' to '/' to convert namespaces to paths.
|
43
|
+
#
|
44
|
+
# Examples:
|
45
|
+
# "ActiveModel".underscore # => "active_model"
|
46
|
+
# "ActiveModel::Errors".underscore # => "active_model/errors"
|
47
|
+
#
|
48
|
+
# As a rule of thumb you can think of +underscore+ as the inverse of +camelize+,
|
49
|
+
# though there are cases where that does not hold:
|
50
|
+
#
|
51
|
+
# "SSLError".underscore.camelize # => "SslError"
|
52
|
+
def underscore
|
53
|
+
gsub(/::/, '/').
|
54
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
55
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
56
|
+
tr("-", "_").
|
57
|
+
downcase
|
58
|
+
end
|
39
59
|
end
|
40
60
|
|
41
61
|
# From lib/active_support/core_ext/hash/reverse_merge.rb
|
data/lib/rainman/version.rb
CHANGED
data/rainman.gemspec
CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |gem|
|
|
14
14
|
gem.require_paths = ["lib"]
|
15
15
|
gem.version = Rainman::VERSION
|
16
16
|
|
17
|
-
gem.add_development_dependency 'rspec', '~> 2.
|
17
|
+
gem.add_development_dependency 'rspec', '~> 2.8.0'
|
18
18
|
gem.add_development_dependency 'autotest-standalone', '~> 4.5.8'
|
19
19
|
gem.add_development_dependency 'rake', '~> 0.9.2.2'
|
20
20
|
end
|
data/spec/integration_spec.rb
CHANGED
@@ -19,6 +19,7 @@ describe "Rainman integration" do
|
|
19
19
|
|
20
20
|
describe "Opensrs integration" do
|
21
21
|
its(:list) { should == :opensrs_list }
|
22
|
+
its(:all) { should == :opensrs_list }
|
22
23
|
its(:transfer) { should == :opensrs_transfer }
|
23
24
|
its("nameservers.list") { should == :opensrs_ns_list }
|
24
25
|
end
|
@@ -33,6 +34,7 @@ describe "Rainman integration" do
|
|
33
34
|
end
|
34
35
|
|
35
36
|
its(:list) { should == :enom_list }
|
37
|
+
its(:all) { should == :enom_list }
|
36
38
|
its(:transfer) { should == :enom_transfer }
|
37
39
|
its("nameservers.list") { should == :enom_ns_list }
|
38
40
|
end
|
data/spec/rainman/driver_spec.rb
CHANGED
@@ -198,22 +198,60 @@ describe "Rainman::Driver" do
|
|
198
198
|
@bob.should_receive(:extend).with(Rainman::Handler)
|
199
199
|
@module.send(:register_handler, :bob)
|
200
200
|
end
|
201
|
+
|
202
|
+
describe ":class_name option" do
|
203
|
+
it "allows a string" do
|
204
|
+
@module.send(:register_handler, :bob, :class_name => 'MissDaisy::Bob')
|
205
|
+
@module.handlers.should have_key(:bob)
|
206
|
+
@module.handlers[:bob].should == @bob
|
207
|
+
end
|
208
|
+
|
209
|
+
it "allows a constant" do
|
210
|
+
@module.send(:register_handler, :bob, :class_name => MissDaisy::Bob)
|
211
|
+
@module.handlers.should have_key(:bob)
|
212
|
+
@module.handlers[:bob].should == @bob
|
213
|
+
end
|
214
|
+
end
|
201
215
|
end
|
202
216
|
|
203
217
|
describe "#define_action" do
|
218
|
+
before do
|
219
|
+
@klass = Class.new do
|
220
|
+
def self.name; 'Bob'; end
|
221
|
+
def profile; :bob_is_cool; end
|
222
|
+
def self.parent_klass; end
|
223
|
+
end
|
224
|
+
|
225
|
+
@module.const_set(:Bob, @klass)
|
226
|
+
|
227
|
+
@runner = Rainman::Runner.new(MissDaisy::Bob.new)
|
228
|
+
@klass.stub(:runner).and_return(@runner)
|
229
|
+
@module.stub(:current_handler_instance).and_return(@klass)
|
230
|
+
end
|
231
|
+
|
204
232
|
it "creates the method" do
|
205
233
|
@module.should_not respond_to(:blah)
|
206
234
|
@module.send(:define_action, :blah)
|
207
235
|
@module.should respond_to(:blah)
|
208
|
-
|
209
|
-
klass = Class.new.new
|
210
|
-
runner = Rainman::Runner.new(klass)
|
211
|
-
klass.stub(:runner).and_return(runner)
|
212
|
-
@module.stub(:current_handler_instance).and_return(klass)
|
213
|
-
runner.should_receive(:send).with(:blah)
|
236
|
+
@runner.should_receive(:send).with(:blah)
|
214
237
|
|
215
238
|
@module.blah
|
216
239
|
end
|
240
|
+
|
241
|
+
it "aliases the method if :alias is supplied" do
|
242
|
+
@module.should_not respond_to(:blah)
|
243
|
+
@module.send(:define_action, :blah, :alias => :superBLAH)
|
244
|
+
@module.should respond_to(:blah)
|
245
|
+
@module.should respond_to(:superBLAH)
|
246
|
+
@runner.stub(:blah).and_return(:this_is_the_blah)
|
247
|
+
@module.superBLAH.should == :this_is_the_blah
|
248
|
+
end
|
249
|
+
|
250
|
+
it "delegates the method if :delegate_to is supplied" do
|
251
|
+
@module.send(:define_action, :description, :delegate_to => :profile)
|
252
|
+
@module.should respond_to(:description)
|
253
|
+
@module.description.should == :bob_is_cool
|
254
|
+
end
|
217
255
|
end
|
218
256
|
|
219
257
|
describe "#create_method" do
|
@@ -14,6 +14,11 @@ describe "Rainman support" do
|
|
14
14
|
"some_module/some_class".camelize.should == "SomeModule::SomeClass"
|
15
15
|
end
|
16
16
|
|
17
|
+
describe "String#underscore" do
|
18
|
+
"FooBar".underscore.should == "foo_bar"
|
19
|
+
"SomeModule::SomeClass".underscore.should == "some_module/some_class"
|
20
|
+
end
|
21
|
+
|
17
22
|
describe "Hash#reverse_merge" do
|
18
23
|
a = { :first => :ABC, :a => :a }
|
19
24
|
b = { :first => :XYZ, :b => :b }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rainman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,23 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
-
default_executable:
|
12
|
+
date: 2012-02-03 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: rspec
|
17
|
-
requirement: &
|
16
|
+
requirement: &20366820 !ruby/object:Gem::Requirement
|
18
17
|
none: false
|
19
18
|
requirements:
|
20
19
|
- - ~>
|
21
20
|
- !ruby/object:Gem::Version
|
22
|
-
version: 2.
|
21
|
+
version: 2.8.0
|
23
22
|
type: :development
|
24
23
|
prerelease: false
|
25
|
-
version_requirements: *
|
24
|
+
version_requirements: *20366820
|
26
25
|
- !ruby/object:Gem::Dependency
|
27
26
|
name: autotest-standalone
|
28
|
-
requirement: &
|
27
|
+
requirement: &20366160 !ruby/object:Gem::Requirement
|
29
28
|
none: false
|
30
29
|
requirements:
|
31
30
|
- - ~>
|
@@ -33,10 +32,10 @@ dependencies:
|
|
33
32
|
version: 4.5.8
|
34
33
|
type: :development
|
35
34
|
prerelease: false
|
36
|
-
version_requirements: *
|
35
|
+
version_requirements: *20366160
|
37
36
|
- !ruby/object:Gem::Dependency
|
38
37
|
name: rake
|
39
|
-
requirement: &
|
38
|
+
requirement: &20365100 !ruby/object:Gem::Requirement
|
40
39
|
none: false
|
41
40
|
requirements:
|
42
41
|
- - ~>
|
@@ -44,7 +43,7 @@ dependencies:
|
|
44
43
|
version: 0.9.2.2
|
45
44
|
type: :development
|
46
45
|
prerelease: false
|
47
|
-
version_requirements: *
|
46
|
+
version_requirements: *20365100
|
48
47
|
description: A library for writing drivers using the abstract factory pattern
|
49
48
|
email:
|
50
49
|
- jmazzi@gmail.com
|
@@ -80,7 +79,6 @@ files:
|
|
80
79
|
- spec/rainman/support_spec.rb
|
81
80
|
- spec/rainman_spec.rb
|
82
81
|
- spec/spec_helper.rb
|
83
|
-
has_rdoc: true
|
84
82
|
homepage: http://www.eng5.com
|
85
83
|
licenses: []
|
86
84
|
post_install_message:
|
@@ -95,7 +93,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
95
93
|
version: '0'
|
96
94
|
segments:
|
97
95
|
- 0
|
98
|
-
hash:
|
96
|
+
hash: 3481354872297427005
|
99
97
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
98
|
none: false
|
101
99
|
requirements:
|
@@ -104,10 +102,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
102
|
version: '0'
|
105
103
|
segments:
|
106
104
|
- 0
|
107
|
-
hash:
|
105
|
+
hash: 3481354872297427005
|
108
106
|
requirements: []
|
109
107
|
rubyforge_project:
|
110
|
-
rubygems_version: 1.
|
108
|
+
rubygems_version: 1.8.11
|
111
109
|
signing_key:
|
112
110
|
specification_version: 3
|
113
111
|
summary: Rainman is an experiment in writing drivers and handlers. It is a Ruby implementation
|