registrar-client 0.1.0

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.
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: []