rsscache 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e7cfe15e402c2718309c7b4e58fb3090482480a2
4
+ data.tar.gz: 4ddb22d9f20f1045f70037fae6ff8b56a5a0d660
5
+ SHA512:
6
+ metadata.gz: d359f70f0c63a2a1e424e6db93bd3b82e2e095329771c6afee348b091f6ad39b9b2bf2f0e53e59be1a47ad3e63733ffb840bf09364c9f533a1691dd2882b8a04
7
+ data.tar.gz: 2e3de31653a64184d6bbf6fe74d1a991c25013cd72fc4505734811be754d18cef756394b80abfd74ff1ff1aaaf9d4f03328670f5fcbb22c437cee1c012252586
checksums.yaml.gz.sig ADDED
@@ -0,0 +1,3 @@
1
+ E��*��Oݿ[�q�)��7���+�ˑ��K�z ��Sĵ��<�Lr���n��!��H����� ��6! mG[5?���S]� |�|�ben���v<E�3�5�A��vSz��5z�<�F"���P^�����c�5MFL #�'�I���>��YD��7�s)tD
2
+ ����GU�S�F
3
+ a��󱯁̲Eyp��Wx�n��\ф�U�F�^T�!"�\��E�W����A3� �����\�K�?r�g�q.��\UU�0��U
data/lib/rsscache.rb ADDED
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: rsscache.rb
4
+
5
+ require 'dynarex'
6
+ require 'open-uri'
7
+ require 'simple-rss'
8
+ require 'fileutils'
9
+
10
+
11
+ class RSScache
12
+
13
+ def initialize(rsslist, feedsfilepath=Dir.pwd)
14
+
15
+ @dx = open_dynarex(rsslist)
16
+ @rsslist, @feedsfilepath = rsslist, feedsfilepath
17
+ FileUtils.mkdir_p feedsfilepath
18
+
19
+ end
20
+
21
+ def refresh
22
+
23
+ @dx.all.each do |feed|
24
+
25
+ if feed.next_refresh.empty? or \
26
+ Time.now >= Time.parse(feed.next_refresh) then
27
+
28
+ any_new_items = updates? feed
29
+
30
+ feed.refresh_rate = if feed.refresh_rate.empty? then
31
+
32
+ 10
33
+
34
+ else
35
+
36
+ if Time.now > Time.parse(feed.next_refresh) + \
37
+ feed.refresh_rate.to_i and not any_new_items then
38
+ feed.refresh_rate.to_i + 10
39
+ end
40
+
41
+ end
42
+
43
+
44
+ feed.next_refresh = Time.now + feed.refresh_rate.to_i * 60
45
+
46
+
47
+ else
48
+
49
+ feed.refresh_rate = feed.refresh_rate.to_i - 10 if feed.refresh_rate.to_i > 10
50
+
51
+ end
52
+ end
53
+
54
+ save_dynarex()
55
+
56
+ end
57
+
58
+ alias update refresh
59
+
60
+ def open_dynarex(x)
61
+
62
+ if x.lines.length == 1 and File.exists?(x) and \
63
+ File.extname(x) == '.txt'then
64
+ Dynarex.new.import x
65
+ else
66
+ Dynarex.new x
67
+ end
68
+ end
69
+
70
+ def save_dynarex()
71
+
72
+ if @rsslist.lines.length == 1 and File.exists?(@rsslist)
73
+
74
+ if File.extname(@rsslist) == '.txt'then
75
+
76
+ File.write @rsslist, @dx.to_s
77
+
78
+ else
79
+
80
+ @dx.save
81
+
82
+ end
83
+
84
+ end
85
+ end
86
+
87
+ # checks for any updates and saves the latest RSS file to
88
+ # the cache if there is
89
+ #
90
+ def updates?(feed)
91
+
92
+ # fetch the feeds from the web
93
+ rss = SimpleRSS.parse(open(feed.url))
94
+
95
+ rssfile = File.join(@feedsfilepath, feed.url[6..-1].gsub(/\W+/,'').\
96
+ reverse.slice(0,40).reverse).downcase + '.xml'
97
+
98
+ if File.exists? rssfile then
99
+
100
+ rss_cache = SimpleRSS.parse File.read(rssfile)
101
+ new_rss_items = rss.items - rss_cache.items
102
+ (File.write rssfile, rss.source; return true) if new_rss_items.any?
103
+
104
+ else
105
+
106
+ File.write rssfile, rss.source
107
+ feed.title = rss.title if feed.title.empty?
108
+ return true
109
+
110
+ end
111
+
112
+ return false
113
+ end
114
+ end
data.tar.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ !^���!Wc�wBb�c���;�<�(^)�j`IW̋9In¡��)"����I��J�x[��e�1G�YAKt�wk�g)t�+�#�o��K��40�Ť�&k���q��p��q�� o�x|���VU�u�
2
+ Iy��Pm�'~#��*���7��U3��ЃGv 26í�(�V��﹜>`�Pe��H���b}Ȧ^�;�P޺�)0tV@K�ާh��]ld#�����8d-Чs��������n
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rsscache
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Robertson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
14
+ YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
+ 8ixkARkWAmV1MB4XDTE1MTEwNjE0MzkwM1oXDTE2MTEwNTE0MzkwM1owSDESMBAG
16
+ A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
+ EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
+ ggEBAMgkQKulRgufn0SSYnKQ+qgJx7DZdJNAqqYbnxQmACxXX1+LBrdhjvIa4f+8
19
+ hFEywDRz/chnEGZVkL5el+mgP33rrFKBD85DqHWFNoCeaa9abdyoQFttTnmOwmVS
20
+ 8vMqEAqdOsRH5P+86Hi3GxaB4nvjOJ3OI6cPL2hFNTOErjAenRe8GQOoQmnRooor
21
+ eqHSi/PJpymK2qAnRMT0YhJcWUPsqX2wyvoqhCdHGWDI3zh05f6IZaK2KO4J+PEj
22
+ mS/xsVPqNZei6iaHsjOfkSY0Nquji62PUcfSfTSpz8tm6IiNVzI4RwzOzLSHjfrd
23
+ 86jvSW3Zg4+/wV9SpDlqoE5hO70CAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
+ DwQEAwIEsDAdBgNVHQ4EFgQUOhUHHP9MNyXcPfRUB25xNPgimREwJgYDVR0RBB8w
25
+ HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
26
+ c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEAdGd2rZPC
27
+ kfnLVCNDZqAAUBePQN7af/mYKLHDRGhQR2J3+aeFm6DCY5aQJd9Fult1Nf+oHJnI
28
+ AJbq8GMkoKc1QQU+YjAIb6UgtL2qXo9VXZ3QXumQgkpbP7p4GQpH1ZQJ8m87bfms
29
+ oGDGtNn7F0b5EyTBTgDBBaVdgLDtPOMaED/yclJt6rUP//z3hGwP05NFANcjMw9c
30
+ x+u8RcmzdQ19ot55B/mN7gP/BTY6m/WiZWOkrg9NMRjrJTVknbDfL1aKparYCyoi
31
+ Fw4DQ6y8iLPuqjr0KqV/BO7FClXyXx4M+1Sejnchk0P5TEPx428bZqGPTakJNidM
32
+ 6QO+pqPpZdfWfw==
33
+ -----END CERTIFICATE-----
34
+ date: 2015-11-06 00:00:00.000000000 Z
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ name: dynarex
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '1.2'
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 1.2.90
46
+ type: :runtime
47
+ prerelease: false
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '1.2'
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 1.2.90
56
+ - !ruby/object:Gem::Dependency
57
+ name: simple-rss
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '1.3'
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: 1.3.1
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '1.3'
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 1.3.1
76
+ description:
77
+ email: james@r0bertson.co.uk
78
+ executables: []
79
+ extensions: []
80
+ extra_rdoc_files: []
81
+ files:
82
+ - lib/rsscache.rb
83
+ homepage: https://github.com/jrobertson/rsscache
84
+ licenses:
85
+ - MIT
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.4.8
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: This gem helps reduce unnessecary requests to webservers by caching RSS feeds
107
+ where the RSS feeds are updated infrequently
108
+ test_files: []
metadata.gz.sig ADDED
Binary file