Class: Pluto::Model::Site
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Pluto::Model::Site
- Defined in:
- lib/pluto/models/site.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#author_email ⇒ Object
alias(2) for email.
-
#author_name ⇒ Object
alias(3) for author.
- #deep_update_from_hash!(config, opts = {}) ⇒ Object
-
#name ⇒ Object
attribute reader aliases.
-
#owner ⇒ Object
alias(2) for author.
-
#owner_email ⇒ Object
alias for email.
-
#owner_name ⇒ Object
alias for author.
Class Method Details
.deep_create_or_update_from_hash!(name, config, opts = {}) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/pluto/models/site.rb', line 29 def self.deep_create_or_update_from_hash!( name, config, opts={} ) ## note: allow (optional) config of site key too site_key = config['key'] || config['slug'] if site_key.nil? ## if no key configured; use (file)name; remove -_ chars ## e.g. jekyll-meta becomes jekyllmeta etc. site_key = name.downcase.gsub( /[\-_]/, '' ) end site_rec = Site.find_by_key( site_key ) if site_rec.nil? site_rec = Site.new site_rec.key = site_key end site_rec.deep_update_from_hash!( config, opts ) site_rec end |
Instance Method Details
#author_email ⇒ Object
alias(2) for email
25 |
# File 'lib/pluto/models/site.rb', line 25 def () email; end |
#author_name ⇒ Object
alias(3) for author
22 |
# File 'lib/pluto/models/site.rb', line 22 def () ; end |
#deep_update_from_hash!(config, opts = {}) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/pluto/models/site.rb', line 50 def deep_update_from_hash!( config, opts={} ) logger = LogUtils::Logger.root site_attribs = { title: config['title'] || config['name'], # support either title or name url: config['source'] || config['url'], # support source or url for source url for auto-update (optional) author: config['author'] || config['owner'], email: config['email'], updated: Time.now, ## track last_update via pluto (w/ update_subscription_for fn) } ## note: allow (optional) config of site key too site_key = config['key'] || config['slug'] site_attribs[:key] = site_key if site_key logger.debug "site_attribs: #{site_attribs.inspect}" if new_record? ## use object_id: site.id and object_type: Site ## change - model/table/schema!!! Activity.create!( text: "new site >#{key}< - #{title}" ) end update_attributes!( site_attribs ) # -- log update activity ## Activity.create!( text: "update subscriptions for site >#{key}<" ) #### todo/fix: ## double check - how to handle delete ## feeds might get referenced by other sites ## cannot just delete feeds; only save to delete join table (subscriptions) ## check if feed "lingers" on with no reference (to site)??? # clean out subscriptions and add again logger.debug "before site.subscriptions.delete_all - count: #{subscriptions.count}" # note: use destroy_all NOT delete_all (delete_all tries by default only nullify) subscriptions.destroy_all logger.debug "after site.subscriptions.delete_all - count: #{subscriptions.count}" config.each do |k, v| ## todo: downcase key - why ??? why not??? # skip "top-level" feed keys e.g. title, etc. or planet planet sections (e.g. planet,defaults) next if ['key','slug', 'title','name','name2','title2','subtitle', 'source', 'url', 'include','includes','exclude','excludes', 'feeds', 'author', 'owner', 'email', 'planet','defaults'].include?( k ) ### todo/check: ## check value - must be hash # check if url or feed_url present # that is, check for required props/key-value pairs feed_key = k.to_s.dup feed_hash = v # todo/fix: use title from feed? # e.g. fill up auto_title, auto_url, etc. feed_attribs = { feed_url: feed_hash[ 'feed' ] || feed_hash[ 'feed_url' ] || feed_hash[ 'xml_url' ], url: feed_hash[ 'link' ] || feed_hash[ 'url' ] || feed_hash[ 'html_url' ], title: feed_hash[ 'title' ] || feed_hash[ 'name' ], ## note: title2 no longer supported; use summary or subtitle? ### title2: feed_hash[ 'title2' ] || feed_hash[ 'name2' ] || feed_hash[ 'subtitle'], includes: feed_hash[ 'includes' ] || feed_hash[ 'include' ], excludes: feed_hash[ 'excludes' ] || feed_hash[ 'exclude' ], author: feed_hash[ 'author' ] || feed_hash[ 'owner' ], email: feed_hash[ 'email' ], avatar: feed_hash[ 'avatar' ] || feed_hash[ 'face'], location: feed_hash[ 'location' ], github: feed_hash[ 'github' ], twitter: feed_hash[ 'twitter' ], rubygems: feed_hash[ 'rubygems' ], meetup: feed_hash[ 'meetup' ], ### -- remove from schema - virtual attrib ?? - why? why not?? } feed_attribs[:encoding] = feed_hash['encoding']||feed_hash['charset'] if feed_hash['encoding']||feed_hash['charset'] ##### ## # auto-fill; convenience helpers if feed_hash['meetup'] ## link/url = http://www.meetup.com/vienna-rb ## feed/feed_url = http://www.meetup.com/vienna-rb/events/rss/vienna.rb/ feed_attribs[:url] = "http://www.meetup.com/#{feed_hash['meetup']}" if feed_attribs[:url].nil? feed_attribs[:feed_url] = "http://www.meetup.com/#{feed_hash['meetup']}/events/rss/#{feed_hash['meetup']}/" if feed_attribs[:feed_url].nil? end if feed_hash['googlegroups'] ## link/url = https://groups.google.com/group/beerdb or ## https://groups.google.com/forum/#!forum/beerdb ## feed/feed_url = https://groups.google.com/forum/feed/beerdb/topics/atom.xml?num=15 feed_attribs[:url] = "https://groups.google.com/group/#{feed_hash['googlegroups']}" if feed_attribs[:url].nil? feed_attribs[:feed_url] = "https://groups.google.com/forum/feed//#{feed_hash['googlegroups']}/topics/atom.xml?num=15" if feed_attribs[:feed_url].nil? end if feed_hash['github'] && feed_hash['github'].index('/') ## e.g. jekyll/jekyll ## link/url = https://github.com/jekyll/jekyll ## feed/feed_url = https://github.com/jekyll/jekyll/commits/master.atom feed_attribs[:url] = "https://github.com/#{feed_hash['github']}" if feed_attribs[:url].nil? feed_attribs[:feed_url] = "https://github.com/#{feed_hash['github']}/commits/master.atom" if feed_attribs[:feed_url].nil? end if feed_hash['rubygems'] && feed_attribs[:url].nil? && feed_attribs[:feed_url].nil? ## link/url = http://rubygems.org/gems/jekyll ## feed/feed_url = http://rubygems.org/gems/jekyll/versions.atom feed_attribs[:url] = "http://rubygems.org/gems/#{feed_hash['rubygems']}" if feed_attribs[:url].nil? feed_attribs[:feed_url] = "http://rubygems.org/gems/#{feed_hash['rubygems']}/versions.atom" if feed_attribs[:feed_url].nil? end logger.info "Updating feed subscription >#{feed_key}< - >#{feed_attribs[:feed_url]}<..." feed_rec = Feed.find_by_key( feed_key ) if feed_rec.nil? feed_rec = Feed.new feed_attribs[:key] = feed_key ## use object_id: feed.id and object_type: Feed ## change - model/table/schema!!! ## todo: add parent_action_id - why? why not? Activity.create!( text: "new feed >#{feed_key}< - #{feed_attribs[:title]}" ) end feed_rec.update_attributes!( feed_attribs ) # add subscription record # note: subscriptions get cleaned out on update first (see above) subscriptions.create!( feed_id: feed_rec.id ) end end |
#name ⇒ Object
attribute reader aliases
18 |
# File 'lib/pluto/models/site.rb', line 18 def name() title; end |
#owner ⇒ Object
alias(2) for author
21 |
# File 'lib/pluto/models/site.rb', line 21 def owner() ; end |
#owner_email ⇒ Object
alias for email
24 |
# File 'lib/pluto/models/site.rb', line 24 def owner_email() email; end |
#owner_name ⇒ Object
alias for author
20 |
# File 'lib/pluto/models/site.rb', line 20 def owner_name() ; end |