yast 0.0.1

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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in yast.gemspec
4
+ gemspec
@@ -0,0 +1,5 @@
1
+ This gem will allow you to connect to the http://www.yast.com API.
2
+
3
+ This is just a first release and all you can do now is log in, get folders, get projects, and get records.
4
+
5
+ I haven't added any tests yet, as I'm not sure how to do that agains an API that requires login.
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,150 @@
1
+ require "yast/version"
2
+ require "builder"
3
+ require "net/http"
4
+ require "xmlsimple"
5
+
6
+ module Yast
7
+ mattr_accessor :username, :password, :hash,
8
+ :timefrom, :timeto, :typeid, :parentid
9
+
10
+
11
+ class Record
12
+ attr_accessor :id, :typeId, :timeCreated, :timeUpdated, :project,
13
+ :creator, :flags, :startTime, :endTime, :comment,
14
+ :isRunning, :phoneNumber, :outgoing
15
+ end
16
+
17
+ class Project
18
+ attr_accessor :id, :name, :description, :primaryColor, :parentId,
19
+ :privileges, :timeCreated, :creator
20
+ end
21
+
22
+ class Folder
23
+ attr_accessor :id, :name, :description, :primaryColor, :parentId,
24
+ :privileges, :timeCreated, :creator
25
+ end
26
+
27
+
28
+ def self.login
29
+ unless username.nil? or password.nil?
30
+ xml_string = generate_request('auth.login', {:user => username, :password => password})
31
+ xml = get_xml(xml_string)
32
+ self.hash = xml['hash'].first if xml.has_key? ('hash')
33
+ end
34
+
35
+ return !self.hash.nil?
36
+ end
37
+
38
+ def self.get_xml(xml_string)
39
+ url = URI.parse( "http://www.yast.com/1.0/" )
40
+
41
+ response = Net::HTTP.start(url.host, url.port) do |http|
42
+ http.post("http://www.yast.com/1.0/", "request=#{xml_string}")
43
+ end
44
+ XmlSimple.xml_in(response.body)
45
+ end
46
+
47
+ def self.generate_request(request, list)
48
+ target_object = ''
49
+ xml = Builder::XmlMarkup.new( :target => target_object, :indent => 2 )
50
+
51
+ xml.instruct! :xml
52
+ xml.request('req' => request, 'id' => 133) do |b|
53
+ list.each do |k, v|
54
+ b.tag!( k, v)
55
+ end
56
+ end
57
+ target_object
58
+ end
59
+
60
+
61
+ def self.get_records
62
+ records = []
63
+ unless username.nil? or hash.nil?
64
+ request_hash = { :user => username, :hash => hash }
65
+ request_hash['timeFrom'] = timefrom if timefrom
66
+ request_hash['timeTo'] = timefrom if timeto
67
+ request_hash['typeId'] = typeid if typeid
68
+ request_hash['parentId'] = parentid if parentid
69
+
70
+ xml_string = generate_request('data.getRecords', request_hash)
71
+ xml = get_xml(xml_string)
72
+
73
+ unless xml['objects'][0]['record'].nil?
74
+ xml['objects'][0]['record'].each do |record|
75
+ puts record.to_json
76
+ r = Yast::Record.new
77
+
78
+ r.id = record['id']
79
+ r.typeId = record['typeId']
80
+ r.timeCreated = Time.at(record['timeCreated'][0].to_i)
81
+ r.timeUpdated = Time.at(record['timeUpdated'][0].to_i)
82
+ r.project = record['project']
83
+ r.startTime = Time.at(record['variables'][0]['v'][0].to_i)
84
+ r.endTime = Time.at(record['variables'][0]['v'][1].to_i)
85
+ r.comment = record['variables'][0]['v'][2]
86
+ r.isRunning = record['variables'][0]['v'][3] == 1
87
+ r.phoneNumber = record['variables'][0]['v'][4]
88
+ r.outgoing = record['variables'][0]['v'][5] == 1
89
+
90
+ records << r
91
+ end
92
+ end
93
+ end
94
+ records
95
+ end
96
+
97
+ def self.get_projects
98
+ projects = []
99
+
100
+ unless username.nil? or hash.nil?
101
+ xml_string = generate_request( 'data.getProjects', {:user => username, :hash => hash} )
102
+ xml = get_xml(xml_string)
103
+
104
+ unless xml['objects'][0]['project'].nil?
105
+ xml['objects'][0]['project'].each do |project|
106
+ p = Yast::Project.new
107
+
108
+ p.id = project['id']
109
+ p.name = project['name']
110
+ p.description = project['description']
111
+ p.primaryColor = project['primaryColor']
112
+ p.parentId = project['parentId']
113
+ p.privileges = project['privileges']
114
+ p.timeCreated = Time.at(project['timeCreated'][0].to_i)
115
+ p.creator = project['creator']
116
+
117
+ projects << p
118
+ end
119
+ end
120
+ end
121
+ projects
122
+ end
123
+
124
+ def self.get_folders
125
+ folders = []
126
+
127
+ unless username.nil? or hash.nil?
128
+ xml_string = generate_request( 'data.getFolders', {:user => username, :hash => hash} )
129
+ xml = get_xml(xml_string)
130
+
131
+ unless xml['objects'][0]['folder'].nil?
132
+ xml['objects'][0]['folder'].each do |folder|
133
+ p = Yast::Project.new
134
+
135
+ p.id = folder['id']
136
+ p.name = folder['name']
137
+ p.description = folder['description']
138
+ p.primaryColor = folder['primaryColor']
139
+ p.parentId = folder['parentId']
140
+ p.privileges = folder['privileges']
141
+ p.timeCreated = Time.at(folder['timeCreated'][0].to_i)
142
+ p.creator = folder['creator']
143
+
144
+ folders << p
145
+ end
146
+ end
147
+ end
148
+ folders
149
+ end
150
+ end
@@ -0,0 +1,3 @@
1
+ module Yast
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "yast/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "yast"
7
+ s.version = Yast::VERSION
8
+ s.authors = ["Thomas Smestad"]
9
+ s.email = ["smestad.thomas@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{API to http://www-yast.com}
12
+ s.description = %q{Gem to use Yast API}
13
+
14
+ s.rubyforge_project = "yast"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_dependency('builder')
22
+ s.add_dependency('xml-simple')
23
+ # s.add_dependency('net/http')
24
+ end
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yast
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Thomas Smestad
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-17 00:00:00.000000000 +01:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: builder
17
+ requirement: &18839500 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *18839500
26
+ - !ruby/object:Gem::Dependency
27
+ name: xml-simple
28
+ requirement: &18838960 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *18838960
37
+ description: Gem to use Yast API
38
+ email:
39
+ - smestad.thomas@gmail.com
40
+ executables: []
41
+ extensions: []
42
+ extra_rdoc_files: []
43
+ files:
44
+ - .gitignore
45
+ - Gemfile
46
+ - README.markdown
47
+ - Rakefile
48
+ - lib/yast.rb
49
+ - lib/yast/version.rb
50
+ - yast.gemspec
51
+ has_rdoc: true
52
+ homepage: ''
53
+ licenses: []
54
+ post_install_message:
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ requirements: []
71
+ rubyforge_project: yast
72
+ rubygems_version: 1.6.2
73
+ signing_key:
74
+ specification_version: 3
75
+ summary: API to http://www-yast.com
76
+ test_files: []