program-tv 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,62 @@
1
+ # USAGE: Hash.from_xml:(YOUR_XML_STRING)
2
+ require 'nokogiri'
3
+ # modified from http://stackoverflow.com/questions/1230741/convert-a-nokogiri-document-to-a-ruby-hash/1231297#1231297
4
+
5
+ class Hash
6
+ class << self
7
+ def from_xml(xml_io)
8
+ begin
9
+ result = Nokogiri::XML(xml_io)
10
+ return { result.root.name.to_sym => xml_node_to_hash(result.root)}
11
+ rescue Exception => e
12
+ # raise your custom exception here
13
+ end
14
+ end
15
+
16
+ def xml_node_to_hash(node)
17
+ # If we are at the root of the document, start the hash
18
+ if node.element?
19
+ result_hash = {}
20
+ if node.attributes != {}
21
+ result_hash[:attributes] = {}
22
+ node.attributes.keys.each do |key|
23
+ result_hash[:attributes][node.attributes[key].name.to_sym] = prepare(node.attributes[key].value)
24
+ end
25
+ end
26
+ if node.children.size > 0
27
+ node.children.each do |child|
28
+ result = xml_node_to_hash(child)
29
+
30
+ if child.name == "text"
31
+ unless child.next_sibling || child.previous_sibling
32
+ return prepare(result)
33
+ end
34
+ elsif result_hash[child.name.to_sym]
35
+ if result_hash[child.name.to_sym].is_a?(Object::Array)
36
+ result_hash[child.name.to_sym] << prepare(result)
37
+ else
38
+ result_hash[child.name.to_sym] = [result_hash[child.name.to_sym]] << prepare(result)
39
+ end
40
+ else
41
+ result_hash[child.name.to_sym] = prepare(result)
42
+ end
43
+ end
44
+
45
+ return result_hash
46
+ else
47
+ return result_hash
48
+ end
49
+ else
50
+ return prepare(node.content.to_s)
51
+ end
52
+ end
53
+
54
+ def prepare(data)
55
+ (data.class == String && data.to_i.to_s == data) ? data.to_i : data
56
+ end
57
+ end
58
+
59
+ def to_struct(struct_name)
60
+ Struct.new(struct_name,*keys).new(*values)
61
+ end
62
+ end
@@ -1,5 +1,4 @@
1
1
  require 'builder'
2
- require 'pry'
3
2
  require_relative 'hash_helper'
4
3
 
5
4
  module ProgramTV
@@ -46,4 +45,4 @@ module ProgramTV
46
45
  end
47
46
  end
48
47
  end
49
- end
48
+ end
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: program-tv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Maciej Walusiak
@@ -13,43 +14,49 @@ dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: builder
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - '>='
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: '0'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - '>='
27
+ - - ! '>='
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0'
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: mechanize
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - '>='
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
37
  version: '0'
34
38
  type: :runtime
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - '>='
43
+ - - ! '>='
39
44
  - !ruby/object:Gem::Version
40
45
  version: '0'
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: nokogiri
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
- - - '>='
51
+ - - ! '>='
46
52
  - !ruby/object:Gem::Version
47
53
  version: '0'
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
- - - '>='
59
+ - - ! '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: '0'
55
62
  description: Downloads TV channel schedule in XML format
@@ -63,29 +70,31 @@ files:
63
70
  - lib/program-tv.rb
64
71
  - lib/program-tv/parser.rb
65
72
  - lib/program-tv/writer.rb
73
+ - lib/program-tv/hash_helper.rb
66
74
  - channels.yml
67
75
  homepage: https://github.com/Rabsztok/program-tv
68
76
  licenses:
69
77
  - GPL
70
- metadata: {}
71
78
  post_install_message:
72
79
  rdoc_options: []
73
80
  require_paths:
74
81
  - lib
75
82
  required_ruby_version: !ruby/object:Gem::Requirement
83
+ none: false
76
84
  requirements:
77
- - - '>='
85
+ - - ! '>='
78
86
  - !ruby/object:Gem::Version
79
87
  version: '0'
80
88
  required_rubygems_version: !ruby/object:Gem::Requirement
89
+ none: false
81
90
  requirements:
82
- - - '>='
91
+ - - ! '>='
83
92
  - !ruby/object:Gem::Version
84
93
  version: '0'
85
94
  requirements: []
86
95
  rubyforge_project:
87
- rubygems_version: 2.1.4
96
+ rubygems_version: 1.8.23
88
97
  signing_key:
89
- specification_version: 4
98
+ specification_version: 3
90
99
  summary: TV Channel parser
91
100
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 11ad4f25b58b9672f4774ca2521d46f01cf81f15
4
- data.tar.gz: 6fb5c11984c2096528e30e2c2347226c0df554a9
5
- SHA512:
6
- metadata.gz: 7682ef5601e90399f4a30277b720bfd56d59dcb7aef2f298f6a279323d33d41b41d433218d6bc96539919ec1052c3a728b46171ae49e7bc22996bda20a597caf
7
- data.tar.gz: d6d3cb6c68020b8a1f3d8864cca328ad79e8e69e0bd2c19191cb591e5a9b384675ecc141b9d6b3cba9d06b8536da260bc5c2a3072b4c379ac23a28f766e74ced