class SoupCMS::CLI::Model::Base
Constants
- SEVERITY_COLOR_MAP
Attributes
file[R]
Public Class Methods
create_model(file)
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 12 def self.create_model(file) type = File.basename(file).split('.').last model = file.path.split('/')[2] case type when 'json' SoupCMS::CLI::Model::Base.new(file).create when 'yml' SoupCMS::CLI::Model::Yaml.new(file).create when 'md' case model when 'posts' SoupCMS::CLI::Model::Post.new(file).create when 'chapters' SoupCMS::CLI::Model::Chapter.new(file).create when 'pages' SoupCMS::CLI::Model::Page.new(file).create else SoupCMS::CLI::Model::Markdown.new(file).create end end end
new(file)
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 35 def initialize(file); @file = file; @logger = Logger.new(STDOUT) @logger.level = ENV['verbose'] == 'true' ? Logger::DEBUG : Logger::INFO @logger.formatter = proc do |severity, datetime, progname, msg| "#{severity}: #{msg}\n".colorize(SEVERITY_COLOR_MAP[severity] || :red) end end
Public Instance Methods
app_name()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 68 def app_name; file.path.split('/')[1] end
build()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 103 def build doc['doc_id'] = doc_name unless doc['doc_id'] timestamp = file.mtime.to_i doc['publish_datetime'] = doc['publish_datetime'].to_i || timestamp doc['version'] = timestamp unless doc['version'] doc['locale'] = 'en_US' unless doc['locale'] doc['update_datetime'] = timestamp doc['create_datetime'] = (old_doc.empty? ? timestamp : old_doc['create_datetime']) doc['create_by'] = 'seed' unless doc['create_by'] doc['state'] = publish_in_future? ? 'draft' : 'published' unless doc['state'] doc['latest'] = true unless doc['latest'] doc['slug'] = slug unless doc['slug'] doc['hero_image'] = {'url' => hero_image} if hero_image end
coll()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 76 def coll; db[model] end
conn()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 46 def conn return @conn if @conn mongo_uri = ENV["MONGODB_URI_#{app_name}"] || ENV["MONGOLAB_URI"] || "mongodb://localhost:27017/#{app_name}" @conn = Mongo::MongoClient.from_uri(mongo_uri) end
create()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 126 def create build if doc['update_datetime'] == old_doc['update_datetime'] @logger.debug "Skipping document '#{file.path}' since no changes" else @logger.info "Inserting document '#{file.path}'" @logger.debug "\n #{JSON.pretty_generate(doc)}" coll.insert(doc) update_old_doc end conn.close end
db()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 72 def db; conn.db end
doc()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 86 def doc; @doc ||= parse_file end
doc_name()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 52 def doc_name; File.basename(file).split('.').first end
hero_image()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 80 def hero_image image_path = File.join('public', app_name, model, "images/#{doc_name}.*") hero_image = Dir.glob(image_path).to_a return File.join('/assets', app_name, model, 'images', File.basename(hero_image[0])) unless hero_image.empty? end
model()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 64 def model; file.path.split('/')[2] end
old_doc()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 95 def old_doc @old_doc ||= (coll.find({'doc_id' => doc['doc_id'], 'latest' => true}).to_a[0] || {}) end
parse_file()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 90 def parse_file document_hash = JSON.parse(file.read) SoupCMS::CLI::ResolveFileReference.new(File.dirname(file)).parse(document_hash) end
publish_in_future?()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 122 def publish_in_future? doc['publish_datetime'] > Time.now.to_i end
slug()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 56 def slug; doc['slug'] || doc_name end
type()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 60 def type; File.basename(file).split('.').last end
update_old_doc()
click to toggle source
# File lib/soupcms/cli/model/base.rb, line 99 def update_old_doc coll.update({'_id' => old_doc['_id']}, {'$set' => {'latest' => false, 'state' => 'published_archive'}}) unless old_doc.empty? end