J.Daniel Schmidt write:
> ref: refs/heads/master
> commit 74c95aa98b5b072c3c6fd66c52039a7fc9497e0d
> Author: J. Daniel Schmidt <[email protected]>
> Date: Thu Oct 15 22:28:41 2009 +0200
>
> registration: cleanup views, render registration result in xml
> (currently static output) add context data and user arguments to
> registration process
> ---
> .../app/controllers/configuration_controller.rb | 56 +++++++-------
> .../app/controllers/registration_controller.rb | 42 +++++++++-
> plugins/registration/app/models/registration.rb | 83
> ++++++++++++++++---- .../app/views/registration/create.html.erb |
> 12 +---
> .../app/views/registration/create.json.erb | 1 +
> .../app/views/registration/create.xml.erb | 12 +---
> 6 files changed, 136 insertions(+), 70 deletions(-)
>
> diff --git
> a/plugins/registration/app/controllers/configuration_controller.rb
> b/plugins/registration/app/controllers/configuration_controller.rb index
> c692581..5f4f50d 100644
> --- a/plugins/registration/app/controllers/configuration_controller.rb
> +++ b/plugins/registration/app/controllers/configuration_controller.rb
> @@ -6,36 +6,34 @@ class ConfigurationController < ApplicationController
> before_filter :login_required
>
> def update
> -# FIXME remove static certificate file after testing!!
> -newca="-----BEGIN CERTIFICATE-----
> -MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
> -VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
> -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
> -dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
> -MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
> -KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
> -A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
> -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
> -5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
> -SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
> -JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
> -ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
> -AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
> -AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
> -CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
> -b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
> -7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
> -0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
> -nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
> -x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
> -33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
> ------END CERTIFICATE-----
> -"
> -
> - # PUT
> - puts params.inspect
> + #request.env.each do |k,v | puts "==#{k}== => ==#{v.inspect}==" end
> +
> + if request.env["rack.input"].size>0
> + req = Hash.from_xml request.env["rack.input"].read
> + else
> + req = Hash.new
> + end
> +
> + newurl = ''
> + newca = ''
> +
> + # read registration server url
> + if req['registrationconfig'] &&
> + req['registrationconfig']['server'] &&
> + req['registrationconfig']['server']['url']
> + newurl = req['registrationconfig']['server']['url'].strip
> + end
> +
> + # read ca certificate file
> + if req['registrationconfig'] &&
> + req['registrationconfig']['certificate'] &&
> + req['registrationconfig']['certificate']['data']
> + newca = req['registrationconfig']['certificate']['data'].strip +
> "\n" +
> + end
> +
> @registration = Registration.new( { } )
> - @registration.set_config 'https://static.test.server/test/path', newca
> + @registration.set_config newurl, newca
> render :show
> end
>
> diff --git
> a/plugins/registration/app/controllers/registration_controller.rb
> b/plugins/registration/app/controllers/registration_controller.rb index
> 7ce1c05..78ea36a 100644
> --- a/plugins/registration/app/controllers/registration_controller.rb
> +++ b/plugins/registration/app/controllers/registration_controller.rb
> @@ -9,14 +9,50 @@ class RegistrationController < ApplicationController
> # POST to registration => run registration
> @registration = Registration.new({})
>
> - # TODO overwrite context data if defined
> - #[email protected]_context( { } )
> + begin
> + if request.env["rack.input"].size>0
> + req = Hash.from_xml request.env["rack.input"].read
> + else
> + req = Hash.new
> + end
> + rescue
> + req = Hash.new
> + end
> +
> +
> +
> + valid_context_keys = %w[forcereg nooptional nohwdata yastcall
> norefresh logfile]
Hi,
This looks for me like constant. Constants in ruby is written whole upper
case, so you could use
VALID_CONTEXT_KEYS = %w[forcereg nooptional nohwdata yastcall norefresh
logfile]
and then ruby warn you during runtime if someone try to write to it ( just
shallow explanation, constant in ruby is little more complicated)
> + context = Hash.new
> +
> + #puts req.inspect
> +
> + if req['registration'] &&
> + req['registration']['options'] &&
> + req['registration']['options'].is_a?(Hash)
> + req['registration']['options'].each do |k, v|
> + case k
> + when 'debug'
> + context['debugMode'] = v
> + when 'restorerepos'
> + context['restoreRepos'] = v
> + else
> + context[k] = v if valid_context_keys.include? k
Maybe can be useful if key k is not valid to log it (as if customer send log
to see what happen)
> + end
> + end
> + end
> +
> + puts context.inspect
> +
> + # overwrite context data
> + @registration.set_context( context )
^^^^
This is not rubish. Your model is really not ruby. You set arguments like it
is perl or C++. Setters and getters is generated by attr_accessor - then you
use just @registration.context = context
If you want, I can change your module for learning purpose to use ruby way.
>
> # TODO: parse post data and set the arguments
> # @registration.set_arguments( { } )
>
> ret = @registration.register
> - headers["Status"] = "400 Bad Request" if ret == 3
> + #if (ret != 0)
> + # headers["Status"] = "400 Bad Request"
> + #end
> end
>
> def show
> diff --git a/plugins/registration/app/models/registration.rb
> b/plugins/registration/app/models/registration.rb index a0d41fe..0516163
> 100644
> --- a/plugins/registration/app/models/registration.rb
> +++ b/plugins/registration/app/models/registration.rb
> @@ -14,7 +14,12 @@ class Registration
>
> def initialize(hash)
> # cleanup arguments
> - @arguments = { 'test' => [ 'a{ss}', { 'value' => 'mytestvalue' } ] }
> + @arguments = { }
> + # initialize context
> + init_context hash
> + end
> +
> + def init_context(hash)
If your context is more complex data structure, then you can use class instead
of hash. (especially if it contain some logic relation between its values
> # set context defaults
> @context = { 'yastcall' => [ 'i', 1 ],
> 'norefresh' => [ 'i', 1 ],
> @@ -30,11 +35,10 @@ class Registration
>
> # merge custom context data
> raise "Invalid or missing registration initialization context data."
> unless hash.is_a?(Hash) -
> +
> hash.each do |k, v|
> - @context.merge!( { k => ['s', v.to_s] } )
> + @context.merge!( { k.to_s => ['s', v.to_s] } )
^^^
I don't know who start in Germany with this merge of single hash. It is not
merge purpose. Merge is to merge two hashes. If I want just correct this you
can use
@context[k.to_s] = ['s',v.to_s]
Better is to create separate class for context which could handle incoming
hash in simple method and hide internals).
> end
> -
> end
>
> def find
> @@ -48,11 +52,11 @@ class Registration
> end
>
> def set_context(hash)
> - self.initialize hash
> + self.init_context hash
> end
>
> def add_argument(key, value)
> - @arguments.merge!( { key => [ 'a{ss}',{ 'value' => "#{value.to_s}" } ]
> } ) + @arguments.merge!( { key.to_s => [ 'a{ss}',{ 'value' =>
> value.to_s } ] } ) end
same as above
>
> def add_arguments(hash)
> @@ -113,23 +117,70 @@ class Registration
>
>
> def to_xml( options = {} )
> - # TODO FIXME ... create the registration xml structure
> + # TODO FIXME ... create the output based on parsed data
> + # return static response during development
> +
> xml = options[:builder] ||= Builder::XmlMarkup.new(options)
> xml.instruct! unless options[:skip_instruct]
>
> xml.registration do
> - xml.tag!(:info, "infotest")
> - xml.tag!(:foobar, "foobartest" )
> - xml.arguments({:type => "array"}) do
> - { "eins" => 1, "zwei" => 2, "drei" => 3 }.each do |k,v|
> + if @reg then
> + xml.tag!(:status, 'missinginfo')
^^^ xml creator support name methods, use tag! only if name of xml element
conflict with some method
so you can use
xml.status 'missinginfo'
> + xml.tag!(:exitcode, 55)
> + xml.tag!(:guid, "abcdefg1234567")
> +
> +
> + xml.missingarguments do
> xml.argument do
> - xml.tag!( :name, k)
> - xml.tag!( :value, v)
> + xml.tag!(:name, 'regcode-SLES-13-SP5')
> + xml.tag!(:type, 'string')
> + end
> + xml.argument do
> + xml.tag!(:name, 'email')
> + xml.tag!(:type, 'string')
> + end
> + xml.argument do
> + xml.tag!(:name, 'moniker')
> + xml.tag!(:type, 'string')
Don't forget to properly document how it work, because it looks like some
registration magic, which should be enlightened.
> end
> end
> - end
> - end
> - end
> +
> + xml.changedrepos do
> + xml.repo do
> + xml.tag!(:name, 'foobar11n')
> + xml.tag!(:alias, 'foobar11a')
> + xml.tag!(:status, 'added')
> + end
> + xml.repo do
> + xml.tag!(:name, 'foobar22n')
> + xml.tag!(:alias, 'foobar22a')
> + xml.tag!(:status, 'deleted')
> + end
> + end
> +
> + xml.changedservices do
> + xml.service do
> + xml.tag!(:name, 'foobar33n')
> + xml.tag!(:alias, 'foobar33a')
> + xml.tag!(:status, 'deleted')
> + xml.catalogs do
> + xml.catalog do
> + xml.tag!(:name, 'foobar44n')
> + xml.tag!(:alias, 'foobar44a')
> + xml.tag!(:status, 'enabled')
> + end
> + xml.catalog do
> + xml.tag!(:name, 'foobar55n')
> + xml.tag!(:alias, 'foobar55a')
> + xml.tag!(:status, 'disabled')
> + end # cat
> + end # cats
> + end # service
> + end # changedservices
> +
> + end # if reg
> + end # xml-root
> + end # func
>
> def status_to_json( options = {} )
> hash = Hash.from_xml(status_to_xml())
> diff --git a/plugins/registration/app/views/registration/create.html.erb
> b/plugins/registration/app/views/registration/create.html.erb index
> 6ed6334..b02fb3c 100644
> --- a/plugins/registration/app/views/registration/create.html.erb
> +++ b/plugins/registration/app/views/registration/create.html.erb
> @@ -1,11 +1 @@
> -<%= # @registration == nil ? "@registration is nil - FIXME" :
> @registration.to_xml - -%>
> -<%= case @registration.class.to_s
> - when 'NilClass'
> - "@registration is nil"
> - when 'String'
> - @registration.to_s
> - when 'Registration'
> - @registration.to_xml
> - end
> - -%>
> +<%= @registration.to_xml if @registration -%>
> \ No newline at end of file
> diff --git a/plugins/registration/app/views/registration/create.json.erb
> b/plugins/registration/app/views/registration/create.json.erb new file
> mode 100644
> index 0000000..09982a7
> --- /dev/null
> +++ b/plugins/registration/app/views/registration/create.json.erb
> @@ -0,0 +1 @@
> +<%= @registration.to_json if @registration -%>
> \ No newline at end of file
> diff --git a/plugins/registration/app/views/registration/create.xml.erb
> b/plugins/registration/app/views/registration/create.xml.erb index
> 6ed6334..b02fb3c 100644
> --- a/plugins/registration/app/views/registration/create.xml.erb
> +++ b/plugins/registration/app/views/registration/create.xml.erb
> @@ -1,11 +1 @@
> -<%= # @registration == nil ? "@registration is nil - FIXME" :
> @registration.to_xml - -%>
> -<%= case @registration.class.to_s
> - when 'NilClass'
> - "@registration is nil"
> - when 'String'
> - @registration.to_s
> - when 'Registration'
> - @registration.to_xml
> - end
> - -%>
> +<%= @registration.to_xml if @registration -%>
> \ No newline at end of file
>
It's just my 2c. If you have any question feel free to ask.
--
Josef Reidinger
YaST team
maintainer of perl-Bootloader, YaST2-Repair, webyast modules language and time
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]