Class: Dev::Project

Inherits:
Object
  • Object
show all
Defined in:
lib/dev/project.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config_file) ⇒ Project

Returns a new instance of Project.



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/dev/project.rb', line 19

def initialize(config_file)
  config = YAML.load_file(config_file).deep_symbolize_keys!
  self.name = config[:dev][:project_name]
  self.type = config[:dev][:project_type]
  self.folder = config[:dev][:project_folder]
  if self.type == :multi
    self.main_apps = config[:dev][:main_apps] || []
    self.engines = config[:dev][:engines] || []
  else
    self.main_apps = [ self.name ]
    self.engines = []
  end
end

Instance Attribute Details

#current_appString

Cerca di determinare l’app corrente.

Returns:

  • (String)

    l’app corrente.



13
14
15
# File 'lib/dev/project.rb', line 13

def current_app
  @current_app
end

#enginesArray<String>

Returns gli engines del progetto.

Returns:

  • (Array<String>)

    gli engines del progetto.



17
18
19
# File 'lib/dev/project.rb', line 17

def engines
  @engines
end

#folderString

Returns la cartella del progetto.

Returns:

  • (String)

    la cartella del progetto.



11
12
13
# File 'lib/dev/project.rb', line 11

def folder
  @folder
end

#main_appsArray<String>

Returns le main apps del progetto.

Returns:

  • (Array<String>)

    le main apps del progetto.



15
16
17
# File 'lib/dev/project.rb', line 15

def main_apps
  @main_apps
end

#nameString

Returns il nome del progetto.

Returns:

  • (String)

    il nome del progetto.



7
8
9
# File 'lib/dev/project.rb', line 7

def name
  @name
end

#typeString

Returns il tipo del progetto (multi folder o single folder).

Returns:

  • (String)

    il tipo del progetto (multi folder o single folder).



9
10
11
# File 'lib/dev/project.rb', line 9

def type
  @type
end

Instance Method Details

#app_version(app_name = self.current_app) ⇒ String

Ritorna la versione dell’app. Prende l’app corrente se non viene specificata nessuna app.

Parameters:

  • app_name (String) (defaults to: self.current_app)

    il nome dell’app.

Returns:

  • (String)

    la versione dell’app.



103
104
105
106
107
108
109
110
111
112
# File 'lib/dev/project.rb', line 103

def app_version(app_name = self.current_app)
  chdir_app(app_name)
  if File.exists? "lib/#{app_name}/version.rb"
    File.read("lib/#{app_name}/version.rb")
      .match(/VERSION = '([0-9\.]+)'\n/)
      .try(:captures).try(:first)
  else
    `git tag`.split("\n").first
  end
end

#app_version_file(app_name = self.current_app) ⇒ String

Determina il file di versione dell’app. Prende l’app corrente se non viene specificata nessuna app.

Parameters:

  • app_name (String) (defaults to: self.current_app)

    il nome dell’app.

Returns:

  • (String)

    il file di versione dell’app.



92
93
94
# File 'lib/dev/project.rb', line 92

def app_version_file(app_name = self.current_app)
  "lib/#{app_name}/version.rb"
end

#appsArray<String>

Ritorna tutte le app del progetto.

Returns:

  • (Array<String>)

    le app del progetto.



37
38
39
# File 'lib/dev/project.rb', line 37

def apps
  self.main_apps + self.engines
end

#bump_app_version_to(version) ⇒ nil

Alza la versione dell’app corrente a quella specificata.

Parameters:

  • version (String)

    la versione a cui arrivare.

Returns:

  • (nil)


120
121
122
123
124
125
126
127
128
# File 'lib/dev/project.rb', line 120

def bump_app_version_to(version)
  if File.exists? self.app_version_file
    version_file = self.app_version_file
    version_content = File.read("#{version_file}")
    File.open(version_file, 'w+') do |f|
      f.puts version_content.gsub(/VERSION = '[0-9\.]+'\n/, "VERSION = '#{version}'\n")
    end
  end
end

#chdir_app(app_name = self.current_app) ⇒ nil

Sposta la directory corrente nella cartella dell’app specificata. Prende l’app corrente se non viene specificata nessuna app.

Parameters:

  • app_name (String) (defaults to: self.current_app)

    il nome dell’app.

Returns:

  • (nil)


73
74
75
76
77
78
79
80
81
82
83
# File 'lib/dev/project.rb', line 73

def chdir_app(app_name = self.current_app)
  if self.type == :multi
    if app_name.in? self.main_apps
      Dir.chdir "#{project.folder}/main_apps/#{app_name}"
    elsif app_name.in? self.engines
      Dir.chdir "#{project.folder}/engines/#{app_name}"
    end
  elsif self.type == :single
    Dir.chdir project.folder
  end
end

#valid_app?(app_name = self.current_app) ⇒ Boolean

Determina se l’app è valida. Prende l’app corrente se non viene specificata nessuna app.

Parameters:

  • app_name (String) (defaults to: self.current_app)

    il nome dell’app.

Returns:

  • (Boolean)

    se l’app è fra quelle esistenti.



56
57
58
59
60
61
62
63
# File 'lib/dev/project.rb', line 56

def valid_app?(app_name = self.current_app)
  if app_name.in? self.apps
    true
  else
    raise ExecutionError.new "The app '#{app_name}' is neither a main app nor an engine "\
      "within the project '#{self.name}'."
  end
end