Module: Brief

Defined in:
lib/brief/briefcase.rb,
lib/brief.rb,
lib/brief/dsl.rb,
lib/brief/apps.rb,
lib/brief/data.rb,
lib/brief/model.rb,
lib/brief/version.rb,
lib/brief/document.rb,
lib/brief/repository.rb,
lib/brief/configuration.rb,
lib/brief/server/socket.rb,
lib/brief/model/definition.rb,
lib/brief/model/persistence.rb,
lib/brief/document/rendering.rb,
lib/brief/document/structure.rb,
lib/brief/document/attachments.rb,
lib/brief/document/transformer.rb,
lib/brief/document/front_matter.rb,
lib/brief/briefcase/documentation.rb,
lib/brief/document/content_extractor.rb,
lib/brief/cli/01_extensions.rb

Overview

The Document Transformer allows for special usage of markdown link and image embedding syntax. This lets us piggy back on these syntax and use them as include directives to embed other documents, or SVG diagrams.

Defined Under Namespace

Modules: Adapters, DSL, Data, DocumentMapper, Model, RemoteSyncing, Util Classes: Apps, Briefcase, Configuration, Document, GenericReport, Repository, Server

Class Method Summary collapse

Class Method Details

.activate_adapter(identifier) ⇒ Object

Adapters for Rails, Middleman, or Jekyll apps



112
113
114
115
116
117
# File 'lib/brief.rb', line 112

def self.activate_adapter(identifier)
  require "brief/adapters/#{ identifier }"
  (Brief::Adapters.const_get(identifier.camelize) rescue nil).tap do |adapter|
    raise "Invalid adapter: #{ identifier }" unless adapter
  end
end

.apps_pathObject



76
77
78
# File 'lib/brief.rb', line 76

def self.apps_path
  lib_root.join("..","apps")
end

.case(fire = false) ⇒ Object



39
40
41
42
43
44
45
46
47
# File 'lib/brief.rb', line 39

def self.case(fire=false)
  if @briefcase.is_a?(Brief::Briefcase)
    @briefcase
  elsif fire && @briefcase.respond_to?(:call)
    @briefcase = @briefcase.call()
  else
    @briefcase
  end
end

.case=(value) ⇒ Object



35
36
37
# File 'lib/brief.rb', line 35

def self.case=(value)
  @briefcase = value
end

.casesObject



31
32
33
# File 'lib/brief.rb', line 31

def self.cases
  @cases ||= {}
end

.commandsObject



53
54
55
# File 'lib/brief.rb', line 53

def self.commands
  @commands ||= {}
end

.configurationObject



68
69
70
# File 'lib/brief.rb', line 68

def self.configuration
  Brief::Configuration.instance
end

.create_command_dispatchersObject



85
86
87
88
89
90
91
92
93
94
# File 'lib/brief.rb', line 85

def self.create_command_dispatchers
  # Each Brief::Model can define certain "actions" which can be called on the documents.
  #
  # The Brief CLI interface lets users dispatch these actions to the documents specified by the PATH args.
  Brief::Model.classes.each do |klass|
    Array(klass.defined_actions).uniq.each do |action|
      Brief::Util.create_method_dispatcher_command_for(action, klass)
    end
  end
end

.default_cli_options(c) ⇒ Object



34
35
36
37
38
39
40
41
# File 'lib/brief/cli/01_extensions.rb', line 34

def self.default_cli_options(c)
  c.option '--root DIRECTORY', String, 'The root for the briefcase'
  c.option '--config FILE', String, 'Path to the config file for this briefcase'
  c.option '--config-filename', String, 'The default filename for a briefcase config: brief.rb'
  c.option '--output FILE', String, 'Save the output in the specified path'
  c.option '--format FORMAT', String, 'How to format the CLI output: defaults to printed, accepts printed,json'
  c.option '--prefix-output CONTENT', String, 'Prefix the generated output with the following content'
end

.default_model_classObject



96
97
98
99
100
101
102
# File 'lib/brief.rb', line 96

def self.default_model_class
  if defined?(Brief::DefaultModel)
    Brief::DefaultModel
  else
    Brief.const_set(:DefaultModel, Class.new { include Brief::Model; def self.type_alias; "default"; end })
  end
end

.environment_infoObject



57
58
59
60
61
62
63
64
65
66
# File 'lib/brief.rb', line 57

def self.environment_info
  {
    VERSION: Brief::VERSION,
    lib_root: Brief.lib_root.to_s,
    apps: {
      search_paths: Brief::Apps.search_paths.map(&:to_s),
      available: Brief::Apps.available_apps
    }
  }
end

.homeObject



23
24
25
# File 'lib/brief.rb', line 23

def self.home
  Pathname(ENV['HOME']).join(".brief")
end

.href_builderObject

This can be overridden so that you can generate uri values in the renderings that fit within the medium (e.g. website, electron app)



121
122
123
# File 'lib/brief.rb', line 121

def self.href_builder
  @href_builder || ->(o){o}
end

.href_builder=(value) ⇒ Object



125
126
127
# File 'lib/brief.rb', line 125

def self.href_builder= value
  @href_builder = value
end

.initialize_home!Object



27
28
29
# File 'lib/brief.rb', line 27

def self.initialize_home!
  FileUtils.mkdir_p(home)
end

.lib_rootObject



72
73
74
# File 'lib/brief.rb', line 72

def self.lib_root
  Pathname(File.dirname(__FILE__))
end

.load_commandsObject



80
81
82
83
# File 'lib/brief.rb', line 80

def self.load_commands
  Dir[lib_root.join('brief', 'cli', '**/*.rb')].each { |f| require(f) }
  create_command_dispatchers
end

.load_modules_from(folder) ⇒ Object



104
105
106
107
108
109
# File 'lib/brief.rb', line 104

def self.load_modules_from(folder)
  Dir[folder.join('**/*.rb')].each do |f|
    #puts "Loading model from #{ f }"
    require(f)
  end
end

.pwdObject

When packaging this up through the traveling ruby system Dir.pwd is not accurate because of the wrapper. We shim it by setting a special ENV variable in that file



19
20
21
# File 'lib/brief.rb', line 19

def self.pwd
  ENV.fetch('BRIEF_PWD') { Dir.pwd }
end

.viewsObject



49
50
51
# File 'lib/brief.rb', line 49

def self.views
  @views ||= {}
end