pepper 0.0.1 → 0.0.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.
@@ -56,6 +56,97 @@ module Pepper
56
56
  hash.merge( domain => r.response.resdata.chkdata.domain_names_avail.shift == "1")
57
57
  }
58
58
  end
59
+
60
+ def info(name)
61
+ login unless @logged_in
62
+ builder = Nokogiri::XML::Builder.new do |xml|
63
+ xml.epp("xmlns" => "urn:ietf:params:xml:ns:epp-1.0",
64
+ "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
65
+ "xsi:schemaLocation" => "urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd" ) {
66
+ xml.command {
67
+ xml.info {
68
+ xml.info("xmlns:domain" => "http://www.nominet.org.uk/epp/xml/nom-domain-2.0",
69
+ "xsi:schemaLocation" => "urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd") {
70
+ xml.parent.namespace = xml.parent.namespace_definitions.first
71
+ xml["domain"].name name
72
+ }
73
+ }
74
+ }
75
+ }
76
+ end
77
+ r = self.write( builder.to_xml )
78
+ r.response.resdata.infdata.to_hash
79
+ end
80
+
81
+ def create(opts = {})
82
+ # OPTIMIZE: Break this up - it's way to clunky
83
+ login unless @logged_in
84
+ builder = Nokogiri::XML::Builder.new do |xml|
85
+ xml.epp("xmlns" => "urn:ietf:params:xml:ns:epp-1.0",
86
+ "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
87
+ "xsi:schemaLocation" => "urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd" ) {
88
+ xml.command {
89
+ xml.create {
90
+ xml.create("xmlns:domain" => "http://www.nominet.org.uk/epp/xml/nom-domain-2.0",
91
+ "xsi:schemaLocation" => "http://www.nominet.org.uk/epp/xml/nom-domain-2.0 nom-domain-2.0.xsd") {
92
+ xml.parent.namespace = xml.parent.namespace_definitions.first
93
+ xml["domain"].send(:"name", opts["name"])
94
+ xml["domain"].send(:"period", opts["period"]) if opts.has_key? "period"
95
+ xml["domain"].send(:"first-bill", opts["first_bill"]) if opts.has_key? "first_bill"
96
+ xml["domain"].send(:"recur-bill", opts["recur_bill"]) if opts.has_key? "recur_bill"
97
+ xml["domain"].send(:"auto-bill", opts["auto_bill"]) if opts.has_key? "auto_bill"
98
+ xml["domain"].send(:"next-bill", opts["next_bill"]) if opts.has_key? "next_bill"
99
+ xml["domain"].send(:"notes", opts["notes"]) if opts.has_key? "notes"
100
+ xml["domain"].account {
101
+ xml.create("xmlns:account" => "http://www.nominet.org.uk/epp/xml/nom-account-2.0",
102
+ "xmlns:contact" => "http://www.nominet.org.uk/epp/xml/nom-contact-2.0"){
103
+ account = opts["account"]
104
+ xml.parent.namespace = xml.parent.namespace_definitions.select{|ns| ns.prefix == "account"}.first
105
+ xml["account"].send(:"name", account["name"]) if account.has_key? "name"
106
+ xml["account"].send(:"trad-name", account["trad_name"]) if account.has_key? "trad_name"
107
+ xml["account"].send(:"type_", account["type"]) if account.has_key? "type"
108
+ xml["account"].send(:"co-no", account["co_no"]) if account.has_key? "co_no"
109
+ xml["account"].send(:"opt-out", account["opt_out"]) if account.has_key? "opt_out"
110
+ xml["account"].addr {
111
+ addr = account["addr"]
112
+ Array[*opts["account"]["addr"]["street"]].each{|s| # Allows either a single string passed in or an array to work
113
+ xml.street s
114
+ }
115
+ %w(locality city county postcode country).each {|f|
116
+ xml.send(f.to_sym, addr[f]) if addr.has_key?(f)
117
+ }
118
+ }
119
+ account["contacts"].each_with_index {|c,i|
120
+ xml["account"].contact(:order => i+1) {
121
+ xml["contact"].create {
122
+ %w(name phone email mobile).each {|f|
123
+ xml["contact"].send(f.to_sym, c[f]) if c.has_key?(f)
124
+ }
125
+ }
126
+ }
127
+ }
128
+ }
129
+ }
130
+ if opts.has_key? "ns"
131
+ xml["domain"].ns {
132
+ opts["ns"]["hosts"].each {|host|
133
+ xml["domain"].host {
134
+ xml["domain"].hostName host["hostname"] if host.has_key? "hostname"
135
+ xml["domain"].hostAddr(:ip => "v4"){ host["hostaddress_ipv4"] } if host.has_key? "hostaddress_ipv4"
136
+ xml["domain"].hostAddr(:ip => "v6"){ host["hostaddress_ipv6"] } if host.has_key? "hostaddress_ipv6"
137
+ }
138
+ }
139
+ }
140
+ end
141
+ }
142
+ }
143
+ }
144
+ }
145
+ end
146
+ r = self.write( builder.to_xml )
147
+ r.response.to_hash
148
+ end
149
+
59
150
  end
60
151
  end
61
152
  end
@@ -1,6 +1,5 @@
1
1
  require "socket"
2
2
  require "openssl"
3
- require "eventmachine"
4
3
 
5
4
  module Pepper
6
5
  module Connection
@@ -1,6 +1 @@
1
- require "sax-machine"
2
- require "pepper/stanzas/chkdata"
3
- require "pepper/stanzas/resdata"
4
- require "pepper/stanzas/result"
5
- require "pepper/stanzas/response"
6
1
  require "pepper/stanzas/epp"
@@ -0,0 +1,17 @@
1
+ require "pepper/stanzas/sax_machinery"
2
+
3
+ module Pepper
4
+ module Stanzas
5
+ class AccountAddr
6
+ include SAXMachine
7
+
8
+ elements "account:street", :as => :street
9
+ element "account:locality", :as => :locality
10
+ element "account:city", :as => :city
11
+ element "account:county", :as => :county
12
+ element "account:postcode", :as => :postcode
13
+ element "account:country", :as => :country
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ require "pepper/stanzas/sax_machinery"
2
+ require "pepper/stanzas/account_addr"
3
+ require "pepper/stanzas/contact_infdata"
4
+
5
+ module Pepper
6
+ module Stanzas
7
+ class AccountInfdata
8
+ include SAXMachine
9
+
10
+ element "account:roid", :as => :roid
11
+ element "account:name", :as => :name
12
+ element "account:trad-name", :as => :trad_name
13
+ element "account:type", :as => :type
14
+ element "account:co-no", :as => :co_no
15
+ element "account:opt-out", :as => :opt_out
16
+ element "account:addr", :as => :addr, :class => AccountAddr
17
+
18
+ element "account:clID", :as => :cl_id
19
+ element "account:crID", :as => :cr_id
20
+ element "account:crDate", :as => :cr_date
21
+ element "account:upID", :as => :up_id
22
+ element "account:upDate", :as => :up_date
23
+
24
+ elements "contact:infData", :as => :contacts, :class => ContactInfdata
25
+ end
26
+ end
27
+ end
@@ -1,10 +1,12 @@
1
+ require "pepper/stanzas/sax_machinery"
2
+
1
3
  module Pepper
2
4
  module Stanzas
3
5
  class Chkdata
4
6
  include SAXMachine
5
7
 
6
8
  elements "domain:name", :as => :domain_names
7
- elements "domain:name", :value => :avail, :as => :domain_names_avail
9
+ elements "domain:name", :as => :domain_names_avail, :value => :avail
8
10
 
9
11
  end
10
12
  end
@@ -0,0 +1,21 @@
1
+ require "pepper/stanzas/sax_machinery"
2
+
3
+ module Pepper
4
+ module Stanzas
5
+ class ContactInfdata
6
+ include SAXMachine
7
+
8
+ element "contact:roid", :as => :roid
9
+ element "contact:name", :as => :name
10
+ element "contact:phone", :as => :phone
11
+ element "contact:email", :as => :email
12
+
13
+ element "contact:clID", :as => :cl_id
14
+ element "contact:crID", :as => :cr_id
15
+ element "contact:crDate", :as => :cr_date
16
+ element "contact:upID", :as => :up_id
17
+ element "contact:upDate", :as => :up_date
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,31 @@
1
+ require "pepper/stanzas/sax_machinery"
2
+ require "pepper/stanzas/account_infdata"
3
+ require "pepper/stanzas/ns"
4
+
5
+ module Pepper
6
+ module Stanzas
7
+ class DomainInfdata
8
+ include SAXMachine
9
+
10
+ element "domain:name", :as => :name
11
+ element "domain:reg-status", :as => :reg_status
12
+ element "account:infData", :as => :account, :class => AccountInfdata
13
+ element "domain:ns", :as => :ns, :class => Ns
14
+ element "domain:reg-status", :as => :reg_status
15
+ element "domain:clID", :as => :cl_id
16
+ element "domain:crID", :as => :cr_id
17
+ element "domain:crDate", :as => :cr_date
18
+ element "domain:upID", :as => :up_id
19
+ element "domain:upDate", :as => :up_date
20
+ element "domain:exDate", :as => :ex_date
21
+
22
+ element "domain:first-bill", :as => :first_bill
23
+ element "domain:recur-bill", :as => :recur_bill
24
+ element "domain:auto-bill", :as => :auto_bill
25
+ element "domain:next-bill", :as => :next_bill
26
+ element "domain:notes", :as => :notes
27
+ element "domain:renew-not-required", :as => :renew_not_required
28
+ element "domain:reseller", :as => :reseller
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,6 @@
1
+ require "pepper/stanzas/sax_machinery"
2
+ require "pepper/stanzas/response"
3
+
1
4
  module Pepper
2
5
  module Stanzas
3
6
  class Epp
@@ -0,0 +1,14 @@
1
+ require "pepper/stanzas/sax_machinery"
2
+
3
+ module Pepper
4
+ module Stanzas
5
+ class Host
6
+ include SAXMachine
7
+
8
+ element "domain:hostName", :as => :hostname
9
+ element "domain:hostAddr", :as => :hostaddress_ipv4, :with => {:ip => "v4"}
10
+ element "domain:hostAddr", :as => :hostaddress_ipv6, :with => {:ip => "v6"}
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ require "pepper/stanzas/sax_machinery"
2
+ require "pepper/stanzas/host"
3
+
4
+ module Pepper
5
+ module Stanzas
6
+ class Ns
7
+ include SAXMachine
8
+
9
+ elements "domain:host", :as => :hosts, :class => Host
10
+
11
+ end
12
+ end
13
+ end
@@ -1,9 +1,14 @@
1
+ require "pepper/stanzas/sax_machinery"
2
+ require "pepper/stanzas/chkdata"
3
+ require "pepper/stanzas/domain_infdata"
4
+
1
5
  module Pepper
2
6
  module Stanzas
3
7
  class Resdata
4
8
  include SAXMachine
5
9
 
6
10
  element "domain:chkData", :as => :chkdata, :class => Chkdata
11
+ element "domain:infData", :as => :infdata, :class => DomainInfdata
7
12
  end
8
13
  end
9
14
  end
@@ -1,11 +1,15 @@
1
+ require "pepper/stanzas/sax_machinery"
2
+ require "pepper/stanzas/result"
3
+ require "pepper/stanzas/resdata"
4
+
1
5
  module Pepper
2
6
  module Stanzas
3
7
  class Response
4
8
  include SAXMachine
5
9
 
6
- element :result, :class => Result
7
- element :result, :as => :result_code, :value => :code
8
- element :resData, :as => :resdata, :class => Resdata
10
+ element :result, :class => Result
11
+ element :result, :as => :result_code, :value => :code
12
+ element :resData, :as => :resdata, :class => Resdata
9
13
  end
10
14
  end
11
15
  end
@@ -1,3 +1,5 @@
1
+ require "pepper/stanzas/sax_machinery"
2
+
1
3
  module Pepper
2
4
  module Stanzas
3
5
  class Result
@@ -0,0 +1,20 @@
1
+ require "sax-machine"
2
+
3
+ # Mixup the mixin - to add functionality for simplifying results down to a hash
4
+ module SAXMachine
5
+ def to_hash
6
+ convert = Proc.new {|v|
7
+ if v.methods.include? "to_hash"
8
+ v.to_hash
9
+ elsif v.is_a? Array
10
+ v.map {|e| convert.call e }
11
+ else
12
+ v
13
+ end
14
+ }
15
+
16
+ instance_variables.inject({}) do |h,v|
17
+ h.merge v.gsub("@","") => convert.call( instance_variable_get v )
18
+ end
19
+ end
20
+ end
@@ -46,6 +46,91 @@ class LivePepperTest < Test::Unit::TestCase
46
46
  assert_equal domains, Pepper.check( *domains.keys )
47
47
  end
48
48
  end
49
+
50
+ context "'info'" do
51
+ should "return correct hash for 'adriana-TAG.co.uk'" do
52
+ # We cannot predict exactly when it was created at
53
+ info = Pepper.info( "adriana-#{@hash[:tag]}.co.uk" )
54
+ created_at = Time.xmlschema(info["cr_date"])
55
+
56
+ expected = {
57
+ "reg_status" => "Registered until expiry date.",
58
+ "name" => "adriana-#{@hash[:tag].downcase}.co.uk",
59
+ "cr_id" => "psamathe@nominet.org.uk",
60
+ "first_bill" => "th",
61
+ "recur_bill" => "th",
62
+ "cl_id" => @hash[:tag],
63
+ "ex_date" => (created_at + 2 * 60*60*24*365).strftime("%FT%T"), # 2 years
64
+ "cr_date" => created_at.strftime("%FT%T"),
65
+ "account" => {
66
+ "trad_name" => "Simple Registrant Trading Ltd",
67
+ "name" => "Simple Registrant-#{@hash[:tag]}",
68
+ "cr_id" => "psamathe@nominet.org.uk",
69
+ "cl_id" => @hash[:tag],
70
+ "type" => "LTD",
71
+ "opt_out" => "N",
72
+ "roid" => "105097-UK",
73
+ "cr_date" => (created_at + 1 * 60*60*24*365).strftime("%FT%T"), # 1 year
74
+ "contacts" => [{
75
+ "name" => "Mary Smith",
76
+ "up_id" => "psamathe@nominet.org.uk",
77
+ "cl_id" => @hash[:tag],
78
+ "roid" => "C112040-UK",
79
+ "phone" => "01234 567890",
80
+ "up_date" => (created_at + 1 * 60*60*24*365).strftime("%FT%T"), # 1 year
81
+ "email" => "mary.smith@ariel-#{@hash[:tag].downcase}.co.uk"
82
+ }],
83
+ "addr" => {
84
+ "city" => "Test City",
85
+ "country" => "GB",
86
+ "postcode" => "TE57 1NG",
87
+ "street" => [ "2 Test Street" ],
88
+ "county" => "Testshire"
89
+ }
90
+ },
91
+ "ns" => {
92
+ "hosts" => [{
93
+ "hostname" => "ns1.ariel-#{@hash[:tag].downcase}.co.uk."
94
+ }]
95
+ }
96
+ }
97
+
98
+ assert_equal( expected, Pepper.info( "adriana-#{@hash[:tag]}.co.uk" ))
99
+ end
100
+ end
101
+
102
+ context "'create'" do
103
+ should "register a domain" do
104
+ expected = {
105
+ "result" => { "msg" => "Command completed successfully" },
106
+ "resdata" => { },
107
+ "result_code" => "1000"
108
+ }
109
+ options = {
110
+ "name" => "#{Time.now.to_i}-testingdomain-#{@hash[:tag]}.co.uk",
111
+ "account" => {
112
+ "name" => "Foo Bar",
113
+ "type" => "LTD",
114
+ "co_no" => "NI123456",
115
+ "opt_out" => "N",
116
+ "addr" => {
117
+ "street" => "1 Test",
118
+ "locality" => "Testville",
119
+ "city" => "Test",
120
+ "county" => "Testshire",
121
+ "postcode" => "TE57 7ES",
122
+ "country" => "GB"
123
+ },
124
+ "contacts" => [{
125
+ "name" => "Joe Test",
126
+ "phone" => "01234 567890",
127
+ "email" => "joe@test.com"
128
+ }]
129
+ }
130
+ }
131
+ assert_equal( expected, Pepper.create( options ) )
132
+ end
133
+ end
49
134
  end
50
135
 
51
136
  end
@@ -7,7 +7,7 @@ require "rubygems"
7
7
  require "test/unit"
8
8
  require "shoulda"
9
9
  require "rr"
10
- require 'stringio'
10
+ require "time"
11
11
 
12
12
  class Test::Unit::TestCase
13
13
  include RR::Adapters::TestUnit
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pepper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Theo Cushion
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-16 00:00:00 +00:00
12
+ date: 2010-01-24 00:00:00 +00:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -65,11 +65,18 @@ files:
65
65
  - lib/pepper/commands.rb
66
66
  - lib/pepper/connection.rb
67
67
  - lib/pepper/error.rb
68
+ - lib/pepper/stanzas/account_addr.rb
69
+ - lib/pepper/stanzas/account_infdata.rb
68
70
  - lib/pepper/stanzas/chkdata.rb
71
+ - lib/pepper/stanzas/contact_infdata.rb
72
+ - lib/pepper/stanzas/domain_infdata.rb
69
73
  - lib/pepper/stanzas/epp.rb
74
+ - lib/pepper/stanzas/host.rb
75
+ - lib/pepper/stanzas/ns.rb
70
76
  - lib/pepper/stanzas/resdata.rb
71
77
  - lib/pepper/stanzas/response.rb
72
78
  - lib/pepper/stanzas/result.rb
79
+ - lib/pepper/stanzas/sax_machinery.rb
73
80
  - lib/pepper/stanzas.rb
74
81
  - lib/pepper/stream_parser.rb
75
82
  - lib/pepper.rb