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]

Reply via email to