Class: Epuber::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/epuber/config.rb

Constant Summary collapse

WORKING_PATH =
'.epuber'

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.testObject

Returns the value of attribute test.



149
150
151
# File 'lib/epuber/config.rb', line 149

def test
  @test
end

Instance Attribute Details

#bookspecEpuber::Book

Returns:



50
51
52
# File 'lib/epuber/config.rb', line 50

def bookspec
  @bookspec ||= self.class.load_bookspec(bookspec_path)
end

#release_buildBoolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/epuber/config.rb', line 62

def release_build
  @release_build
end

Class Method Details

.clear_instance!Object



163
164
165
# File 'lib/epuber/config.rb', line 163

def clear_instance!
  @instance = nil
end

.find_bookspec_files(dir) ⇒ Object

Find all bookspec files in given directory

Parameters:

  • dir (String)


185
186
187
188
189
190
191
# File 'lib/epuber/config.rb', line 185

def find_bookspec_files(dir)
  Dir.chdir(dir) do
    Dir.glob('*.bookspec').map do |path|
      File.expand_path(path)
    end
  end
end

.find_project_dir(dir) ⇒ String?

Find project directory by searching for .bookspec files in current and parent directories

Parameters:

  • dir (String)

Returns:

  • (String, nil)


198
199
200
201
202
203
204
205
# File 'lib/epuber/config.rb', line 198

def find_project_dir(dir)
  return dir if find_bookspec_files(dir).any?

  parent = File.dirname(dir)
  return nil if parent == dir

  find_project_dir(parent)
end

.instanceEpuber::Config

Singleton

Returns:



159
160
161
# File 'lib/epuber/config.rb', line 159

def instance
  @instance ||= new
end

.load_bookspec(path, frozen: true) ⇒ Epuber::Book

Returns:



169
170
171
172
173
174
175
176
177
178
179
# File 'lib/epuber/config.rb', line 169

def load_bookspec(path, frozen: true)
  require_relative 'book'

  book = Epuber::Book.from_file(path)
  book.finish_toc
  book.validate

  book.freeze if frozen

  book
end

.test?Boolean

Returns:

  • (Boolean)


151
152
153
# File 'lib/epuber/config.rb', line 151

def test?
  test
end

Instance Method Details

#bookspec_lockfileEpuber::Lockfile

Returns:



66
67
68
69
70
71
# File 'lib/epuber/config.rb', line 66

def bookspec_lockfile
  @bookspec_lockfile ||= Lockfile.from_file(bookspec_lockfile_path) do |lockfile|
    lockfile.epuber_version = Epuber::VERSION
    lockfile.bade_version = Bade::VERSION
  end
end

#bookspec_lockfile_pathString

Returns:

  • (String)


44
45
46
# File 'lib/epuber/config.rb', line 44

def bookspec_lockfile_path
  "#{bookspec_path}.lock"
end

#bookspec_pathString

Returns:

  • (String)


38
39
40
# File 'lib/epuber/config.rb', line 38

def bookspec_path
  @bookspec_path ||= self.class.find_bookspec_files(project_path).first
end

#build_cache_path(cache_name) ⇒ String

Parameters:

  • cache_name (String)

Returns:

  • (String)


102
103
104
# File 'lib/epuber/config.rb', line 102

def build_cache_path(cache_name)
  File.join(working_path, 'build_cache', cache_name)
end

#build_path(target) ⇒ String

Parameters:

Returns:

  • (String)


86
87
88
# File 'lib/epuber/config.rb', line 86

def build_path(target)
  File.join(working_path, 'build', target.name.to_s)
end

#file_stat_database_pathString

Returns:

  • (String)


108
109
110
# File 'lib/epuber/config.rb', line 108

def file_stat_database_path
  File.join(working_path, 'metadata', 'source_file_stats.yml')
end

#pretty_path_from_project(of_file) ⇒ String

Returns relative path to file from root of project.

Parameters:

  • of_file (String)

    absolute path to file

Returns:

  • (String)

    relative path to file from root of project



24
25
26
27
28
# File 'lib/epuber/config.rb', line 24

def pretty_path_from_project(of_file)
  Pathname.new(of_file.unicode_normalize)
          .relative_path_from(Pathname.new(project_path))
          .to_s
end

#project_pathString

Returns path to project directory (where .bookspec file is located or current directory if not found).

Returns:

  • (String)

    path to project directory (where .bookspec file is located or current directory if not found)



13
14
15
16
17
18
# File 'lib/epuber/config.rb', line 13

def project_path
  @project_path ||= begin
    path = self.class.find_project_dir(Dir.pwd) || Dir.pwd
    path.unicode_normalize
  end
end

#release_build_path(target) ⇒ String

Parameters:

Returns:

  • (String)


94
95
96
# File 'lib/epuber/config.rb', line 94

def release_build_path(target)
  File.join(working_path, 'release_build', target.name.to_s)
end

#remove_build_cachesObject



140
141
142
143
144
# File 'lib/epuber/config.rb', line 140

def remove_build_caches
  FileUtils.rm_rf(File.join(working_path, 'build_cache'))
  FileUtils.rm_rf(File.join(working_path, 'build'))
  FileUtils.rm_rf(File.join(working_path, 'metadata'))
end

#same_version_as_last_run?Boolean

Returns:

  • (Boolean)


134
135
136
137
138
# File 'lib/epuber/config.rb', line 134

def same_version_as_last_run?
  !(bookspec_lockfile.epuber_version != Epuber::VERSION ||
      bookspec_lockfile.bade_version.nil? ||
      bookspec_lockfile.bade_version != Bade::VERSION)
end

#save_lockfileObject

Returns nil.

Returns:

  • nil



75
76
77
78
79
80
# File 'lib/epuber/config.rb', line 75

def save_lockfile
  bookspec_lockfile.epuber_version = Epuber::VERSION
  bookspec_lockfile.bade_version = Bade::VERSION

  bookspec_lockfile.write_to_file
end

#target_file_stat_database_path(target) ⇒ String

Parameters:

Returns:

  • (String)


116
117
118
# File 'lib/epuber/config.rb', line 116

def target_file_stat_database_path(target)
  File.join(working_path, 'metadata', 'target_stats', target.name.to_s, 'file_stats.yml')
end

#warn_for_outdated_versions!Object



120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/epuber/config.rb', line 120

def warn_for_outdated_versions!
  if bookspec_lockfile.epuber_version > Epuber::VERSION
    UI.warning(<<~MSG.rstrip)
      Warning: the running version of Epuber is older than the version that created the lockfile. We suggest you upgrade to the latest version of Epuber by running `gem install epuber`.
    MSG
  end

  return unless bookspec_lockfile.bade_version && bookspec_lockfile.bade_version > Bade::VERSION

  UI.warning(<<~MSG.rstrip)
    Warning: the running version of Bade is older than the version that created the lockfile. We suggest you upgrade to the latest version of Bade by running `gem install bade`.
  MSG
end

#working_pathString

Returns:

  • (String)


32
33
34
# File 'lib/epuber/config.rb', line 32

def working_path
  @working_path ||= File.join(project_path, WORKING_PATH)
end