Class: RubyFly::RC

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_fly/rc.rb

Defined Under Namespace

Modules: Conversions Classes: Target, TargetAlreadyPresentError, TargetNotPresentError

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ RC

Returns a new instance of RC.



140
141
142
143
144
145
146
# File 'lib/ruby_fly/rc.rb', line 140

def initialize(options)
  @home = options[:home] || ENV['HOME']
  @name = options[:name] || '.flyrc'
  @targets = options[:targets].inject({}) do |acc, target|
    acc.merge(target.name => target)
  end
end

Class Method Details

.load(options) ⇒ Object



121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/ruby_fly/rc.rb', line 121

def self.load(options)
  home = options[:home] || ENV['HOME']
  name = options[:name] || '.flyrc'
  path = File.join(home, name)

  contents = options[:contents] ||
      (File.exist?(path) ?
          RubyFly::RC::Conversions.symbolize_keys(YAML.load_file(path)) :
          {})
  targets = File.exist?(path) ?
      contents[:targets].map { |n, t| Target.new(t.merge(name: n)) } :
      []

  RubyFly::RC.new(
      home: home,
      name: name,
      targets: targets)
end

Instance Method Details

#add_or_update_target(target_name, &block) ⇒ Object



177
178
179
180
181
182
183
184
# File 'lib/ruby_fly/rc.rb', line 177

def add_or_update_target(target_name, &block)
  mutable_target = has_target?(target_name) ?
      find_target(target_name) :
      Target.new({name: target_name})
  block.call(mutable_target)
  updated_target = Target.clone(mutable_target, name: target_name)
  @targets[target_name] = updated_target
end

#add_target(target) ⇒ Object



160
161
162
163
164
165
# File 'lib/ruby_fly/rc.rb', line 160

def add_target(target)
  if has_target?(target.name)
    raise TargetAlreadyPresentError.new(target.name)
  end
  @targets[target.name] = target
end

#find_target(target_name) ⇒ Object



152
153
154
# File 'lib/ruby_fly/rc.rb', line 152

def find_target(target_name)
  Target.clone(@targets[target_name.to_sym])
end

#has_target?(target_name) ⇒ Boolean

Returns:

  • (Boolean)


156
157
158
# File 'lib/ruby_fly/rc.rb', line 156

def has_target?(target_name)
  @targets.has_key?(target_name)
end

#remove_target(target_name) ⇒ Object



193
194
195
196
197
198
# File 'lib/ruby_fly/rc.rb', line 193

def remove_target(target_name)
  unless has_target?(target_name)
    raise TargetNotPresentError.new(target_name)
  end
  @targets.delete(target_name)
end

#rename_target(old_target_name, new_target_name) ⇒ Object



186
187
188
189
190
191
# File 'lib/ruby_fly/rc.rb', line 186

def rename_target(old_target_name, new_target_name)
  old_target = find_target(old_target_name)
  new_target = Target.clone(old_target, name: new_target_name)
  remove_target(old_target_name)
  add_target(new_target)
end

#targetsObject



148
149
150
# File 'lib/ruby_fly/rc.rb', line 148

def targets
  @targets.values
end

#to_yamlObject



200
201
202
203
204
# File 'lib/ruby_fly/rc.rb', line 200

def to_yaml
  RubyFly::RC::Conversions
      .stringify_keys({targets: @targets})
      .to_yaml
end

#update_target(target_name, &block) ⇒ Object



167
168
169
170
171
172
173
174
175
# File 'lib/ruby_fly/rc.rb', line 167

def update_target(target_name, &block)
  unless has_target?(target_name)
    raise TargetNotPresentError.new(target_name)
  end
  mutable_target = find_target(target_name)
  block.call(mutable_target)
  updated_target = Target.clone(mutable_target, name: target_name)
  @targets[target_name] = updated_target
end

#write!Object



206
207
208
209
210
211
# File 'lib/ruby_fly/rc.rb', line 206

def write!
  FileUtils.mkdir_p(@home)
  File.open(File.join(@home, @name), 'w') do |file|
    file.write(to_yaml)
  end
end