pluto-models 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,42 +0,0 @@
1
- module Pluto
2
-
3
- class Lister
4
-
5
- include LogUtils::Logging
6
-
7
- include ManifestHelper
8
-
9
- def initialize( opts )
10
- @opts = opts
11
- end
12
-
13
- attr_reader :opts
14
-
15
- def list
16
- home = Env.home
17
- ## replace home w/ ~ (to make out more readable (shorter))
18
- ## e.g. use gsub( home, '~' )
19
-
20
- puts ''
21
- puts 'Installed template packs in search path'
22
-
23
- installed_template_manifest_patterns.each_with_index do |pattern,i|
24
- puts " [#{i+1}] #{pattern.gsub(home,'~')}"
25
- end
26
- puts ' include:'
27
-
28
- manifests = installed_template_manifests
29
- if manifests.empty?
30
- puts " -- none --"
31
- else
32
- manifests.each do |manifest|
33
- pakname = manifest[0].gsub('.txt','')
34
- manifestpath = manifest[1].gsub(home,'~')
35
- puts "%16s (%s)" % [pakname,manifestpath]
36
- end
37
- end
38
- end # method list
39
-
40
- end # class Lister
41
-
42
- end # module Pluto
@@ -1,51 +0,0 @@
1
- module Pluto
2
-
3
- module ManifestHelper
4
-
5
- ## shared methods for handling manifest lookups
6
- ##
7
- # note: required attribs (in host class) include:
8
- # - opts.config_path
9
-
10
- def installed_template_manifest_patterns
11
-
12
- # 1) search . # that is, working/current dir
13
- # 2) search <config_dir>
14
- # 3) search <gem>/templates
15
-
16
- ###
17
- # Note
18
- # -- for now - no longer ship w/ builtin template packs
19
- # - download on demand if needed
20
-
21
- builtin_patterns = [
22
- ## "#{Pluto.root}/templates/*.txt"
23
- ]
24
- config_patterns = [
25
- ## "#{File.expand_path(opts.config_path)}/*.txt",
26
- "#{File.expand_path(opts.config_path)}/*/*.txt"
27
- ]
28
- current_patterns = [
29
- ## "*.txt",
30
- "*/*.txt",
31
- "node_modules/*/*.txt", # note: add support for npm installs - use/make slideshow required in name? for namespace in the future???
32
- ]
33
-
34
- patterns = []
35
- patterns += current_patterns
36
- patterns += config_patterns
37
- patterns += builtin_patterns
38
- end
39
-
40
- def installed_template_manifests
41
- excludes = [
42
- "Manifest.txt",
43
- "*/Manifest.txt"
44
- ]
45
-
46
- Pakman::Finder.new.find_manifests( installed_template_manifest_patterns, excludes )
47
- end
48
-
49
-
50
- end # module Manifest
51
- end # module Slideshow
@@ -1,8 +0,0 @@
1
- module Pluto
2
- module Models
3
-
4
- # add shortcut/alias
5
- Activity = ActivityDb::Models::Activity
6
-
7
- end # module Models
8
- end # module Pluto
@@ -1,130 +0,0 @@
1
- module Pluto
2
-
3
- class Refresher
4
-
5
- include LogUtils::Logging
6
-
7
- include Models
8
-
9
- def initialize
10
- @worker = Fetcher.new
11
- end
12
-
13
- def debug=(value) @debug = value; end
14
- def debug?() @debug || false; end
15
-
16
-
17
- def update_sites( opts={} ) # update all site configs
18
- if debug?
19
- ## turn on logging for sql too
20
- ActiveRecord::Base.logger = Logger.new( STDOUT )
21
- @worker.debug = true # also pass along worker debug flag if set
22
- end
23
-
24
- # -- log update activity
25
- Activity.create!( text: "update sites (#{Site.count})" )
26
-
27
- #### - hack - use order(:id) instead of .all - avoids rails/activerecord 4 warnings
28
-
29
- Site.order(:id).each do |site|
30
- update_site_worker( site ) if site.url.present? # note: only update if (source) url present
31
- end
32
- end
33
-
34
-
35
- def update_feeds( opts={} ) # update all feeds
36
- if debug?
37
- ## turn on logging for sql too
38
- ActiveRecord::Base.logger = Logger.new( STDOUT )
39
- @worker.debug = true # also pass along worker debug flag if set
40
- end
41
-
42
- # -- log update activity
43
- Activity.create!( text: "update feeds (#{Feed.count})" )
44
-
45
- #### - hack - use order(:id) instead of .all - avoids rails/activerecord 4 warnings
46
-
47
- Feed.order(:id).each do |feed|
48
- update_feed_worker( feed )
49
- end
50
- end
51
-
52
-
53
- def update_feeds_for( site_key, opts={} )
54
- if debug?
55
- ## turn on logging for sql too
56
- ActiveRecord::Base.logger = Logger.new( STDOUT )
57
- @worker.debug = true # also pass along worker debug flag if set
58
- end
59
-
60
- # -- log update activity
61
- Activity.create!( text: "update feeds >#{site_key}<" )
62
-
63
- site = Site.find_by_key!( site_key )
64
-
65
- site.feeds.each do |feed|
66
- update_feed_worker( feed )
67
- end
68
-
69
- end # method update_feeds
70
-
71
-
72
- private
73
- def update_site_worker( site_rec )
74
- site_config = @worker.site_by_rec_if_modified( site_rec )
75
-
76
- # on error or if http-not modified etc. skip update/processing
77
- return if site_config.nil?
78
-
79
- subscriber = Subscriber.new
80
- subscriber.debug = debug? ? true : false # pass along debug flag
81
-
82
- site_key = site_rec.key
83
- subscriber.update_subscriptions_for( site_key, site_config )
84
- end
85
-
86
-
87
- def update_feed_worker( feed_rec )
88
- feed = @worker.feed_by_rec_if_modified( feed_rec )
89
-
90
- # on error or if http-not modified etc. skip update/processing
91
- return if feed.nil?
92
-
93
- ## fix/todo: reload feed_red - fetched date updated etc.
94
- ## check if needed for access to fetched date
95
-
96
-
97
- ## todo/check: move feed_rec update to the end (after item updates??)
98
-
99
- # update feed attribs e.g.
100
- # generator
101
- # published_at,built_at,touched_at,fetched_at
102
- # summary,title2
103
-
104
- ## fix:
105
- ## weird rss exception error on windows w/ dates
106
- # e.g. /lib/ruby/1.9.1/rss/rss.rb:37:in `w3cdtf': wrong number of arguments (1 for 0) (ArgumentError)
107
- #
108
- # move to_datetime to feedutils!! if it works
109
- ## todo: move this comments to feedutils??
110
-
111
-
112
- feed_rec.debug = debug? ? true : false # pass along debug flag
113
- ## fix/todo: pass debug flag as opts - debug: true|false !!!!!!
114
- feed_rec.save_from_struct!( feed ) # todo: find a better name - why? why not??
115
-
116
-
117
- # update cached value last published for item
118
- last_item_rec = feed_rec.items.latest.limit(1).first # note limit(1) will return relation/arrar - use first to get first element or nil from ary
119
- if last_item_rec.present?
120
- if last_item_rec.published?
121
- feed_rec.update_attributes!( last_published: last_item_rec.published )
122
- else # try touched
123
- feed_rec.update_attributes!( last_published: last_item_rec.touched )
124
- end
125
- end
126
- end # method update_feed_worker
127
-
128
- end # class Refresher
129
-
130
- end # module Pluto
@@ -1,102 +0,0 @@
1
- module Pluto
2
-
3
- class Subscriber
4
-
5
- include LogUtils::Logging
6
-
7
- include Models
8
-
9
- def debug=(value) @debug = value; end
10
- def debug?() @debug || false; end
11
-
12
-
13
- def update_subscriptions( config, opts={} )
14
- # !!!! -- depreciated API - remove - do NOT use anymore
15
- puts "*** warn - [Pluto::Subscriber] depreciated API -- use update_subscriptions_for( site_key )"
16
- update_subscriptions_for( 'planet', config, opts ) # default to planet site_key
17
- end
18
-
19
-
20
- def update_subscriptions_for( site_key, config, opts={} )
21
- site_attribs = {
22
- title: config['title'] || config['name'], # support either title or name
23
- url: config['source'] || config['url'] # support source or url for source url for auto-update (optional)
24
- }
25
-
26
- logger.debug "site_attribs: #{site_attribs.inspect}"
27
-
28
- site_rec = Site.find_by_key( site_key )
29
- if site_rec.nil?
30
- site_rec = Site.new
31
- site_attribs[ :key ] = site_key
32
-
33
- ## use object_id: site.id and object_type: Site
34
- ## change - model/table/schema!!!
35
- Activity.create!( text: "new site >#{site_key}< - #{site_attribs[ :title ]}" )
36
- end
37
- site_rec.update_attributes!( site_attribs )
38
-
39
- # -- log update activity
40
- Activity.create!( text: "update subscriptions >#{site_key}<" )
41
-
42
- # clean out subscriptions and add again
43
- logger.debug "before site.subscriptions.delete_all - count: #{site_rec.subscriptions.count}"
44
- site_rec.subscriptions.destroy_all # note: use destroy_all NOT delete_all (delete_all tries by default only nullify)
45
- logger.debug "after site.subscriptions.delete_all - count: #{site_rec.subscriptions.count}"
46
-
47
- config.each do |key, value|
48
-
49
- ## todo: downcase key - why ??? why not???
50
-
51
- # skip "top-level" feed keys e.g. title, etc. or planet planet sections (e.g. planet,defaults)
52
- next if ['title','title2','name',
53
- 'source', 'url',
54
- 'include','includes','exclude','excludes',
55
- 'feeds',
56
- 'planet','defaults'].include?( key )
57
-
58
- ### todo/check:
59
- ## check value - must be hash
60
- # check if url or feed_url present
61
- # that is, check for required props/key-value pairs
62
-
63
- feed_key = key.to_s.dup
64
- feed_hash = value
65
-
66
- # todo/fix: use title from feed?
67
- # e.g. fill up auto_title, auto_url, etc.
68
-
69
- feed_attribs = {
70
- feed_url: feed_hash[ 'feed' ] || feed_hash[ 'feed_url' ],
71
- url: feed_hash[ 'link' ] || feed_hash[ 'url' ],
72
- title: feed_hash[ 'title' ] || feed_hash[ 'name' ],
73
- title2: feed_hash[ 'title2' ],
74
- includes: feed_hash[ 'includes' ] || feed_hash[ 'include' ],
75
- excludes: feed_hash[ 'excludes' ] || feed_hash[ 'exclude' ]
76
- }
77
-
78
- puts "Updating feed subscription >#{feed_key}< - >#{feed_attribs[:feed_url]}<..."
79
-
80
- feed_rec = Feed.find_by_key( feed_key )
81
- if feed_rec.nil?
82
- feed_rec = Feed.new
83
- feed_attribs[ :key ] = feed_key
84
-
85
- ## use object_id: feed.id and object_type: Feed
86
- ## change - model/table/schema!!!
87
- ## todo: add parent_action_id - why? why not?
88
- Activity.create!( text: "new feed >#{feed_key}< - #{feed_attribs[ :title ]}" )
89
- end
90
-
91
- feed_rec.update_attributes!( feed_attribs )
92
-
93
- # add subscription record
94
- # note: subscriptions get cleaned out on update first (see above)
95
- site_rec.subscriptions.create!( feed_id: feed_rec.id )
96
- end
97
-
98
- end # method update_subscriptions
99
-
100
- end # class Subscriber
101
-
102
- end # module Pluto
@@ -1,25 +0,0 @@
1
-
2
-
3
- task :env do
4
- LogUtils::Logger.root.level = :debug
5
-
6
- Pluto.connect!
7
- end
8
-
9
-
10
- #########
11
- # for debugging
12
-
13
- desc 'pluto - debug site setup'
14
- task :site => :env do
15
- site = Pluto::Models::Site.first # FIX: for now assume one planet per DB (fix later; allow planet key or similar)
16
- if site.present?
17
- puts "site found:"
18
- pp site
19
- else
20
- puts "no site found"
21
- end
22
- end
23
-
24
- ### todo: add new task :sites
25
-
@@ -1,40 +0,0 @@
1
-
2
-
3
- desc 'pluto -=- setup/update feed subscriptions'
4
- task :setup => :env do
5
-
6
- ## check if PLANET key passed in
7
- if ENV['PLANET'].present?
8
- key = ENV['PLANET']
9
- puts "setup planet for key >#{key}<"
10
- else
11
- puts 'no PLANET=key passed along; try defaults'
12
- # try pluto.yml or planet.yml if exist
13
-
14
- if File.exists?( './pluto.ini' ) || File.exists?( './pluto.yml' ) # check if pluto.yml exists, if yes add/use it
15
- key ='pluto'
16
- elsif File.exists?( './planet.ini' ) || File.exists?( './planet.yml' ) # check if planet.yml exists, if yes add/use it
17
- key = 'planet'
18
- else
19
- puts '*** note: no arg passed in; no pluto.ini|yml or planet.ini|yml found in working folder'
20
- end
21
- end
22
-
23
-
24
- config_path = "./#{key}.ini"
25
- if File.exists?( config_path )
26
- config = INI.load_file( config_path )
27
- else ## assume .yml
28
- config_path = "./#{key}.yml"
29
- config = YAML.load_file( config_path )
30
- end
31
-
32
-
33
- puts "dump planet setup settings >#{config_path}<:"
34
- pp config
35
-
36
- # note: allow multiple planets (sites) for a single install
37
- Pluto::Subscriber.new.update_subscriptions_for( key, config )
38
-
39
- puts 'Done.'
40
- end
@@ -1,10 +0,0 @@
1
-
2
-
3
- desc 'pluto - show planet (feed) stats'
4
- task :stats => :env do
5
- puts "stats:"
6
- puts " Feeds: #{Pluto::Models::Feed.count}"
7
- puts " Items: #{Pluto::Models::Item.count}"
8
- puts " Sites: #{Pluto::Models::Site.count}"
9
- puts " Subscriptions: #{Pluto::Models::Subscription.count}"
10
- end
@@ -1,24 +0,0 @@
1
-
2
-
3
- desc 'pluto -=- update planet (site configs)'
4
- task :update_sites => :env do
5
-
6
- Pluto.update_sites # update all site configs if source (url) present/specified
7
-
8
- puts 'Done (Update Sites).'
9
- end
10
-
11
-
12
- desc 'pluto -=- update planet (feeds)'
13
- task :update_feeds => :env do
14
-
15
- Pluto.update_feeds
16
-
17
- puts 'Done (Update Feeds).'
18
- end
19
-
20
-
21
- desc 'pluto -=- update planet (site configs + feeds)'
22
- task :update => [:update_sites, :update_feeds] do
23
- puts 'Done.'
24
- end
@@ -1,50 +0,0 @@
1
- module Pluto
2
-
3
- class Updater
4
-
5
- include LogUtils::Logging
6
-
7
- ### fix!!!!!: change config to text - yes/no - why? why not??
8
- # or pass along struct
9
- # - with hash and text and format(e.g. ini/yml) as fields???
10
- #
11
- # - why? - we need to get handle on md5 digest/hash plus on plain text, ideally to store in db
12
- ## - pass along unparsed text!! - not hash struct
13
- # - will get saved in db plus we need to generate md5 hash
14
- # - add filename e.g. ruby.ini|ruby.conf|ruby.yml as opt ??
15
- # or add config format as opt e.g. ini or yml?
16
-
17
- def initialize( opts, config )
18
- @opts = opts
19
- @config = config
20
- end
21
-
22
- attr_reader :opts, :config
23
-
24
- def run( arg )
25
- arg = arg.downcase.gsub('.ini','').gsub('.yml','') # remove file extension if present
26
-
27
- update_for( arg )
28
- end
29
-
30
- def update_for( site_key )
31
- ###################
32
- # step 1) update subscriptions
33
- subscriber = Subscriber.new
34
-
35
- # pass along debug/verbose setting/switch
36
- subscriber.debug = true if opts.verbose?
37
- subscriber.update_subscriptions_for( site_key, config )
38
-
39
- ##############################
40
- # step 2) update feeds
41
- refresher = Refresher.new
42
-
43
- # pass along debug/verbose setting/switch
44
- refresher.debug = true if opts.verbose?
45
- refresher.update_feeds_for( site_key )
46
- end # method run
47
-
48
- end # class Updater
49
-
50
- end # module Pluto