registrar-client 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. data/LICENSE +19 -0
  2. data/Readme.md +70 -0
  3. data/Spec.md +55 -0
  4. data/examples/enom.example.yml +4 -0
  5. data/examples/purchase_com.rb +7 -0
  6. data/lib/registrar-client.rb +1 -0
  7. data/lib/registrar.rb +14 -0
  8. data/lib/registrar/client.rb +224 -0
  9. data/lib/registrar/contact.rb +31 -0
  10. data/lib/registrar/domain.rb +26 -0
  11. data/lib/registrar/extended_attribute.rb +12 -0
  12. data/lib/registrar/extended_attribute_descriptor.rb +31 -0
  13. data/lib/registrar/extended_attribute_option_descriptor.rb +7 -0
  14. data/lib/registrar/name_server.rb +16 -0
  15. data/lib/registrar/order.rb +43 -0
  16. data/lib/registrar/provider/enom.rb +430 -0
  17. data/lib/registrar/provider/enom/contact.rb +68 -0
  18. data/lib/registrar/provider/enom/extended_attribute.rb +64 -0
  19. data/lib/registrar/provider/enom/extended_attribute_be.rb +0 -0
  20. data/lib/registrar/provider/enom/extended_attribute_ca.rb +40 -0
  21. data/lib/registrar/provider/enom/extended_attribute_io.rb +18 -0
  22. data/lib/registrar/provider/enom/extended_attribute_us.rb +29 -0
  23. data/lib/registrar/provider/enom/order.rb +41 -0
  24. data/lib/registrar/provider/opensrs.rb +133 -0
  25. data/lib/registrar/provider/opensrs/contact.rb +30 -0
  26. data/lib/registrar/provider/opensrs/contact_set.rb +24 -0
  27. data/lib/registrar/provider/opensrs/name_server_list.rb +26 -0
  28. data/lib/registrar/provider/opensrs/operation.rb +42 -0
  29. data/lib/registrar/provider/opensrs/order.rb +59 -0
  30. data/lib/registrar/provider/opensrs/tld_data.rb +29 -0
  31. data/lib/registrar/provider/opensrs/tld_data_us.rb +48 -0
  32. data/lib/registrar/purchase_options.rb +29 -0
  33. data/lib/registrar/renewal_options.rb +8 -0
  34. metadata +177 -0
@@ -0,0 +1,26 @@
1
+ module Registrar
2
+ module Provider
3
+ class OpenSRS
4
+ class NameServerList
5
+ attr_reader :nameservers
6
+
7
+ def initialize(purchase_options)
8
+ @nameservers = purchase_options.name_servers
9
+ end
10
+
11
+ def to_xml(context)
12
+ context.dt_array do |dt_array|
13
+ @nameservers.each_with_index do |nameserver, index|
14
+ dt_array.item(key: index) do |item|
15
+ item.dt_assoc do |dt_assoc|
16
+ dt_assoc.item(key: 'sortorder') { |item| item.text! "#{index + 1}" }
17
+ dt_assoc.item(key: 'name') {|item| item.text! nameserver.name }
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,42 @@
1
+ module Registrar
2
+ module Provider
3
+ class OpenSRS
4
+ class Operation
5
+ attr_reader :action, :object, :attributes
6
+ def initialize(action, attributes)
7
+ @action = action
8
+ @object = :domain
9
+ @attributes = attributes
10
+ end
11
+ def to_xml
12
+ builder = Builder::XmlMarkup.new
13
+ builder.OPS_envelope { |b|
14
+ b.header { |b| b.version('0.9') }
15
+ b.body { |b|
16
+ b.data_block { |b|
17
+ b.dt_assoc { |b|
18
+ b.item("XCP", :key => "protocol")
19
+ b.item(action.to_s.upcase, :key => "action")
20
+ b.item(object.to_s.upcase, :key => "object")
21
+ b.item(:key => "attributes") { |b|
22
+ b.dt_assoc { |b|
23
+ attributes.each do |key, value|
24
+ if (value.respond_to?(:to_xml))
25
+ b.item(:key => key.to_s) {
26
+ value.to_xml(b)
27
+ }
28
+ else
29
+ b.item(value.to_s, :key => key.to_s)
30
+ end
31
+ end
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
37
+ }
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,59 @@
1
+ module Registrar
2
+ module Provider
3
+ class OpenSRS
4
+ class Order
5
+
6
+ def initialize(xml)
7
+ @xml = Nokogiri::XML(xml)
8
+ @domains = []
9
+ end
10
+
11
+ def id
12
+ field_hash_element('id').inner_text
13
+ end
14
+
15
+ def successful?
16
+ element("is_success").inner_text == '1'
17
+ end
18
+
19
+ def complete?
20
+ status = field_hash_element("status").inner_text
21
+ status != 'pending' || status != 'waiting_ca_owner_approval'
22
+ end
23
+
24
+ def domains
25
+ @domains
26
+ end
27
+
28
+ def add_domain(domain_name, registrant)
29
+ @domains << create_domain(domain_name, registrant)
30
+ self
31
+ end
32
+
33
+ def to_order
34
+ order = Registrar::Order.new(id)
35
+ order.successful= successful?
36
+ order.status= complete? ? :closed : :open
37
+ domains.each { |domain| order.domains<< domain }
38
+ order
39
+ end
40
+
41
+ private
42
+ def create_domain(domain_name, registrant)
43
+ domain = Registrar::Domain.new(domain_name)
44
+ domain.registrant = registrant
45
+ domain.order = self
46
+ domain
47
+ end
48
+
49
+ def element(element)
50
+ @xml.xpath("//body/data_block/dt_assoc/item[@key='#{element}']")
51
+ end
52
+
53
+ def field_hash_element(element)
54
+ @xml.xpath("//item[@key='field_hash']/dt_assoc/item[@key='#{element}']")
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,29 @@
1
+ require 'registrar/provider/opensrs/tld_data_us'
2
+
3
+ module Registrar
4
+ module Provider
5
+ class OpenSRS
6
+ class TldData
7
+ TLDS = {
8
+ ['us'] => ->(options)do
9
+ us_options = options.extended_attributes.select do |attribute|
10
+ attribute.tld == 'us'
11
+ end
12
+ TldDataUs.new(us_options)
13
+ end
14
+ }
15
+
16
+ class << self
17
+ def build_with(options)
18
+ TLDS[tld(options)].call(options)
19
+ end
20
+
21
+ private
22
+ def tld(options)
23
+ options.extended_attributes.inject([]) { |a, b| a<< b.tld}.uniq
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,48 @@
1
+ module Registrar
2
+ module Provider
3
+ class OpenSRS
4
+ class TldDataUs
5
+
6
+ attr_reader :category
7
+ attr_reader :app_purpose
8
+
9
+ DEFINITIONS = {
10
+ :"US Citizen" => 'C11',
11
+ :"Business Entity" => 'C21',
12
+ :"Foreign Entity" => 'C31',
13
+ :"Permanent Resident" => 'C12',
14
+ :"US Based Office" => 'C22',
15
+ :"For Profit" => 'P1',
16
+ :"Non Profit" => 'P2',
17
+ :Personal => 'P3',
18
+ :Educational => 'P4',
19
+ :Government => 'P5'
20
+ }
21
+
22
+ SELECT_OPTION = ->(options, name){
23
+ options.select { |option| option.name == name }.first.value
24
+ }
25
+
26
+ def initialize options
27
+ @category = DEFINITIONS[SELECT_OPTION.call(options, :Nexus)]
28
+ @app_purpose = DEFINITIONS[SELECT_OPTION.call(options, :Purpose)]
29
+ end
30
+
31
+ def to_xml(context)
32
+ context.dt_assoc do |dt_assoc|
33
+ dt_assoc.item(key: 'nexus') do |item|
34
+ item.dt_assoc do |inner_dt_assoc|
35
+ inner_dt_assoc.item(key: 'category') do |category|
36
+ category.text! @category
37
+ end
38
+ inner_dt_assoc.item(key: 'app_purpose') do
39
+ |purpose| purpose.text! @app_purpose
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,29 @@
1
+ module Registrar
2
+ class PurchaseOptions
3
+ attr_writer :name_servers
4
+ attr_writer :extended_attributes
5
+ attr_writer :number_of_years
6
+ attr_accessor :language
7
+
8
+ def has_name_servers?
9
+ !name_servers.empty?
10
+ end
11
+
12
+ def name_servers
13
+ @name_servers ||= []
14
+ end
15
+
16
+ def has_extended_attributes?
17
+ !extended_attributes.empty?
18
+ end
19
+
20
+ def extended_attributes
21
+ @extended_attributes ||= []
22
+ end
23
+
24
+ def number_of_years
25
+ @number_of_years
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ module Registrar
2
+ class RenewalOptions
3
+ attr_accessor :number_of_years
4
+ def initialize
5
+ @number_of_years = 1
6
+ end
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,177 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: registrar-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Anthony Eden
9
+ - Enrique Comba
10
+ - Javier Acero
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2012-04-20 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: httparty
18
+ requirement: !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ! '>='
22
+ - !ruby/object:Gem::Version
23
+ version: '0'
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ! '>='
30
+ - !ruby/object:Gem::Version
31
+ version: '0'
32
+ - !ruby/object:Gem::Dependency
33
+ name: tzinfo
34
+ requirement: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ - !ruby/object:Gem::Dependency
49
+ name: nokogiri
50
+ requirement: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ - !ruby/object:Gem::Dependency
65
+ name: builder
66
+ requirement: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ type: :runtime
73
+ prerelease: false
74
+ version_requirements: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ - !ruby/object:Gem::Dependency
81
+ name: rspec
82
+ requirement: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: mocha
98
+ requirement: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ description: Abstract interface and implementations for working with various domain
113
+ registrars.
114
+ email:
115
+ - anthony.eden@dnsimple.com
116
+ executables: []
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - examples/enom.example.yml
121
+ - examples/purchase_com.rb
122
+ - lib/registrar/client.rb
123
+ - lib/registrar/contact.rb
124
+ - lib/registrar/domain.rb
125
+ - lib/registrar/extended_attribute.rb
126
+ - lib/registrar/extended_attribute_descriptor.rb
127
+ - lib/registrar/extended_attribute_option_descriptor.rb
128
+ - lib/registrar/name_server.rb
129
+ - lib/registrar/order.rb
130
+ - lib/registrar/provider/enom/contact.rb
131
+ - lib/registrar/provider/enom/extended_attribute.rb
132
+ - lib/registrar/provider/enom/extended_attribute_be.rb
133
+ - lib/registrar/provider/enom/extended_attribute_ca.rb
134
+ - lib/registrar/provider/enom/extended_attribute_io.rb
135
+ - lib/registrar/provider/enom/extended_attribute_us.rb
136
+ - lib/registrar/provider/enom/order.rb
137
+ - lib/registrar/provider/enom.rb
138
+ - lib/registrar/provider/opensrs/contact.rb
139
+ - lib/registrar/provider/opensrs/contact_set.rb
140
+ - lib/registrar/provider/opensrs/name_server_list.rb
141
+ - lib/registrar/provider/opensrs/operation.rb
142
+ - lib/registrar/provider/opensrs/order.rb
143
+ - lib/registrar/provider/opensrs/tld_data.rb
144
+ - lib/registrar/provider/opensrs/tld_data_us.rb
145
+ - lib/registrar/provider/opensrs.rb
146
+ - lib/registrar/purchase_options.rb
147
+ - lib/registrar/renewal_options.rb
148
+ - lib/registrar-client.rb
149
+ - lib/registrar.rb
150
+ - LICENSE
151
+ - Readme.md
152
+ - Spec.md
153
+ homepage: http://github.com/aeden/registrar-client
154
+ licenses: []
155
+ post_install_message:
156
+ rdoc_options: []
157
+ require_paths:
158
+ - lib
159
+ required_ruby_version: !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ required_rubygems_version: !ruby/object:Gem::Requirement
166
+ none: false
167
+ requirements:
168
+ - - ! '>='
169
+ - !ruby/object:Gem::Version
170
+ version: 1.3.6
171
+ requirements: []
172
+ rubyforge_project:
173
+ rubygems_version: 1.8.21
174
+ signing_key:
175
+ specification_version: 3
176
+ summary: Abstract interface and implementations for working with various domain registrars
177
+ test_files: []