lorj 1.0.8 → 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7b230339c53324a35d70056924d04caf83361556
4
- data.tar.gz: 7e40d7041f4999a803f625a850067199ed1296ab
3
+ metadata.gz: 39a783a3bdefa0193225dbdeeffa904220c3e212
4
+ data.tar.gz: b5d15179e5989d20e02dec91bcb5f6fd6cafb530
5
5
  SHA512:
6
- metadata.gz: 3c4117298308f75daf06230285ec3971e555315c876007f548a3a3207a201655f030f61c52e87ffcb18a9ac10308b9048ee3d1128faff26551da995b573454c5
7
- data.tar.gz: b945fafa30d2f087c51a008ec3750d5f70fdb7e3bf05e5bbd161a4c073ff69fd466745c0324822d5be03be99094455ba9cf36942fc4d9ca399842a213bce1d70
6
+ metadata.gz: ed18aa7febd8d02e4e5d31bfa9b99407a40f5bc80a97d237bd0696281be2e330756e08d276fb4b77c7e6d90db239e569eb3fea4f661cffd0880ab04a89cb3bc1
7
+ data.tar.gz: 3c553c66bd2b48a15e0652c8b18c28ce2bafb4a7c37a47b3fef1712f71dccd761fed8ff992aedf41c8f9e89e9db3a8b230191bd38a6947cf137f9b4575f08ae0
@@ -217,14 +217,20 @@ module Lorj
217
217
  options = _get_meta_data(data)
218
218
  options = {} if options.nil?
219
219
 
220
+ Lorj.data.layer_add(:name => :setup)
221
+
220
222
  if options[:pre_step_function]
221
223
  proc = options[:pre_step_function]
222
224
  next unless @process.method(proc).call(data)
225
+ # Get any update from pre_step_function
226
+ options = _get_meta_data(data)
223
227
  end
224
228
 
225
229
  data_desc = _setup_display_data(data, options)
226
230
 
227
231
  _setup_ask_data(data_desc, data, options)
232
+
233
+ Lorj.data.layer_remove(:name => :setup)
228
234
  end
229
235
  end
230
236
  end
@@ -18,20 +18,6 @@
18
18
  # Lorj::BaseDefinition
19
19
  #
20
20
  module Lorj
21
- # This class limits ERC template to access only to config object data.
22
- class ERBConfig
23
- attr_reader :config
24
-
25
- def initialize(config)
26
- @config = config
27
- end
28
-
29
- # Bind this limited class with ERB templates
30
- def get_binding # rubocop: disable AccessorMethodName
31
- binding
32
- end
33
- end
34
-
35
21
  # Following class defines class levels function to
36
22
  # declare framework objects.
37
23
  # As each process needs to define new object to deal with
@@ -38,6 +38,7 @@ module Lorj
38
38
  # puts oKey.key[1] # => nil
39
39
  # puts oKey.fpath # => ':test'
40
40
  # puts oKey.tree # => [:test]
41
+ # puts oKey.key_tree # => :test
41
42
  #
42
43
  # oKey = KeyPath([:test,:test2,:test3])
43
44
  # puts oKey.to_s # => 'test/test2/test3'
@@ -46,6 +47,7 @@ module Lorj
46
47
  # puts oKey.key[1] # => :test2
47
48
  # puts oKey.fpath # => ':test/:test2/:test3'
48
49
  # puts oKey.tree # => [:test,:test2,:test3]
50
+ # puts oKey.key_tree # => ':test/:test2/:test3'
49
51
  #
50
52
  class KeyPath
51
53
  def initialize(sKeyPath = nil, max_level = -1)
@@ -74,6 +76,11 @@ module Lorj
74
76
  @keypath
75
77
  end
76
78
 
79
+ def key_tree
80
+ return @keypath[0] if @keypath.length == 1
81
+ fpath
82
+ end
83
+
77
84
  def fpath
78
85
  return nil if @keypath.length == 0
79
86
  key_access = @keypath.clone
@@ -129,6 +129,21 @@ class CloudProcess
129
129
  private_key_file) if keypair[:private_key_exist?]
130
130
  PrcLib.info("Found openssh public key file '%s'.",
131
131
  public_key_file) if keypair[:public_key_exist?]
132
+
133
+ unless keypair[:public_key_exist?]
134
+ name = keypair[:name]
135
+ PrcLib.warning("The local public key file '%s' is missing.\n"\
136
+ "As the keypair name '%s' already exists in your cloud, "\
137
+ 'you will need to get the original SSH keypair files '\
138
+ "used to create the keypair name '%s'. Otherwise, you "\
139
+ "won't be able to use it to connect to a box configured"\
140
+ " with '%s'."\
141
+ "\nPublic key found in the cloud:\n%s",
142
+ public_key_file, name, name, name,
143
+ keypair[:public_key])
144
+ return
145
+ end
146
+
132
147
  if keypair[:coherent]
133
148
  PrcLib.info("keypair '%s' local files are coherent with keypair in "\
134
149
  'your cloud service. You will be able to use your local '\
@@ -142,7 +157,10 @@ class CloudProcess
142
157
  public_key_file, keypair[:name], keypair[:public_key])
143
158
  end
144
159
  end
160
+ end
145
161
 
162
+ # Keypair management: Internal process functions
163
+ class CloudProcess
146
164
  # Function to update a keypair object with ssh files found in :keypair_path
147
165
  #
148
166
  def keypair_files_detected(keypair, loc_kpair)
@@ -293,6 +311,7 @@ class CloudProcess
293
311
 
294
312
  # Check the public key with the one found here, locally.
295
313
  if !pub_keypair.nil? && pub_keypair != ''
314
+ return false unless loc_kpair[:public_key_exist?]
296
315
  begin
297
316
  loc_pubkey = File.read(File.join(loc_kpair[:keypair_path],
298
317
  loc_kpair[:public_key_name]))
@@ -26,5 +26,5 @@ lorj_objects = %w(common connection network subnetwork router
26
26
  server_log internet_server)
27
27
 
28
28
  lorj_objects.each do |name|
29
- require File.join(cloud_path, 'cloud', 'process', name + '.rb')
29
+ load File.join(cloud_path, 'cloud', 'process', name + '.rb')
30
30
  end
data/lib/lorj/version.rb CHANGED
@@ -16,5 +16,5 @@
16
16
 
17
17
  # Lorj version
18
18
  module Lorj
19
- VERSION = '1.0.8'
19
+ VERSION = '1.0.9'
20
20
  end
data/lib/lorj_account.rb CHANGED
@@ -17,6 +17,8 @@
17
17
 
18
18
  require 'rubygems'
19
19
 
20
+ require 'erb'
21
+
20
22
  # Lorj implements Lorj::Accounts
21
23
  module Lorj
22
24
  # Simple List of accounts class.
@@ -27,6 +29,8 @@ module Lorj
27
29
  end
28
30
 
29
31
  def dump
32
+ return [] unless File.directory?(@account_path)
33
+
30
34
  accounts = []
31
35
  Dir.foreach(@account_path) do |x|
32
36
  accounts << x unless x.match(/^\..?$/)
@@ -55,6 +59,22 @@ module Lorj
55
59
  end
56
60
  end
57
61
 
62
+ module Lorj
63
+ # This class limits ERB template to access only to config object data.
64
+ class ERBConfig
65
+ attr_reader :config
66
+
67
+ def initialize(config)
68
+ @config = config
69
+ end
70
+
71
+ # Bind this limited class with ERB templates
72
+ def get_binding # rubocop: disable AccessorMethodName
73
+ binding
74
+ end
75
+ end
76
+ end
77
+
58
78
  # Lorj implements Lorj::Account
59
79
  module Lorj
60
80
  # Lorj::Account manage a list of key/value grouped by section.
@@ -154,6 +174,8 @@ module Lorj
154
174
  # :account_exclusive => true, get will limit to runtime then account.
155
175
  # otherwise, search in all layers.
156
176
  #
177
+ # The data found is parse through ERB with self as context.
178
+ #
157
179
  # * *Args* :
158
180
  # - +key+ : key name. It do not support it to be a key tree (Arrays of
159
181
  # keys).
@@ -183,10 +205,13 @@ module Lorj
183
205
  names = []
184
206
  indexes.each { |index| names << @config_layers[index][:name] }
185
207
 
186
- options[:data_options] = _set_data_options_per_names(names)
187
-
188
- return p_get(options) if p_exist?(options)
208
+ options[:data_options] = _set_data_options_per_names(names, section)
189
209
 
210
+ if p_exist?(options)
211
+ value = p_get(options)
212
+ return value unless value.is_a?(String)
213
+ return ERB.new(value).result ERBConfig.new(self).get_binding
214
+ end
190
215
  default
191
216
  end
192
217
 
@@ -232,7 +257,7 @@ module Lorj
232
257
  :keys => [key],
233
258
  :section => section,
234
259
  :indexes => indexes,
235
- :data_options => _set_data_options_per_names(names)
260
+ :data_options => _set_data_options_per_names(names, section)
236
261
  }
237
262
 
238
263
  p_where?(where_options)
@@ -275,7 +300,7 @@ module Lorj
275
300
  names = []
276
301
  indexes.each { |index| names << @config_layers[index][:name] }
277
302
 
278
- options[:data_options] = _set_data_options_per_names(names)
303
+ options[:data_options] = _set_data_options_per_names(names, section)
279
304
 
280
305
  p_exist?(options)
281
306
  end
@@ -563,30 +588,37 @@ module Lorj
563
588
  indexes
564
589
  end
565
590
 
566
- def _set_data_options_per_names(names)
591
+ def _set_data_options_per_names(names, section)
567
592
  data_options = []
568
593
 
569
- names.each { |name| data_options << _data_options_per_layer(name) }
594
+ names.each do |name|
595
+ data_options << _data_options_per_layer(name, section)
596
+ end
570
597
 
571
598
  data_options
572
599
  end
573
600
 
574
- # TODO: Change local and default way to get default values, not in /:default
575
-
576
601
  # This internal function defines default section name per config index.
577
- def _data_options_per_layer(layer_name)
602
+ def _data_options_per_layer(layer_name, section)
578
603
  # runtime and local and default uses :default section
579
604
  case layer_name
580
- when 'local', 'default'
605
+ when 'default'
606
+ return { :section => :default, :metadata_section => section }
607
+ when 'local'
581
608
  # local & default are SectionConfig and is forced to use :default as
582
609
  # section name for each data.
583
- { :section => :default }
610
+ return { :section => :default }
584
611
  end
585
612
  # nil: layer_index = 0 => runtime. runtime is not a SectionConfig.
586
613
 
587
614
  # nil: layer_index = 1 => account
615
+ # If no section is provided, 'account' layer will use the first section
616
+ # name
617
+ # otherwise, it will used the section provided.
618
+ return { :section => section } unless section.nil?
588
619
  # account is a SectionConfig and use section value defined by the
589
620
  # lorj data model. So the section name is not forced.
621
+ nil
590
622
  end
591
623
 
592
624
  def _do_load(config, account_file)
data/lib/lorj_defaults.rb CHANGED
@@ -60,21 +60,70 @@ module Lorj
60
60
  # and eventually :default:
61
61
  # For details, see Lorj::MetaAppConfig
62
62
  #
63
- # :setup: This section describes group of fields to ask,
64
- # step by step.
65
- # :ask_step: Define an Array of setup steps to ask to the
66
- # end user. The step order is respected, and
67
- # start at 0
68
- # - :desc: Define the step description. ERB template
69
- # enable. To get config data, type config[...]
70
- # :explanation: |- Define a multiline explanation. This is printed
71
- # out in brown color.
72
- # ERB template enable. To get config data, type
73
- # <%= config[...] %>
74
- # :add: Define a list of additionnal fields to ask.
75
- # - <Data> Data to ask.
76
- #
77
63
  class Defaults < PRC::SectionConfig
64
+ # Get function
65
+ # It implements the following:
66
+ # 1. Search in data_options[:section] section or :default section if missing
67
+ # 2. otherwise, provide the metadata default value, erb like.
68
+ # It uses data_options[:metadata_section]
69
+ #
70
+ # * *Args*
71
+ # - +keys+ : Array of key path to found
72
+ #
73
+ # * *Returns*
74
+ # - value
75
+ #
76
+ def [](*keys)
77
+ return nil if keys.length == 0
78
+
79
+ if @data_options[:section].nil?
80
+ section = :default
81
+ else
82
+ section = @data_options[:section]
83
+ end
84
+
85
+ return p_get(section, *keys) if p_exist?(section, *keys)
86
+
87
+ metadata_section = @data_options[:metadata_section]
88
+
89
+ return nil if metadata_section.nil?
90
+ default = Lorj.data.section_data(metadata_section, keys[0],
91
+ :default_value)
92
+ return nil if default.nil?
93
+ default
94
+ end
95
+
96
+ # Check if data found in this default layer has a value.
97
+ #
98
+ # It implements the following:
99
+ # 1. Search in data_options[:section] section or :default section if missing
100
+ # 2. otherwise, provide the metadata default value, erb like.
101
+ # It uses data_options[:metadata_section]
102
+ #
103
+ # * *Args*
104
+ # - +keys+ : Array of key path to found
105
+ #
106
+ # * *Returns*
107
+ # - boolean : true if the key path was found
108
+ #
109
+ def exist?(*keys)
110
+ return nil if keys.length == 0
111
+
112
+ if @data_options[:section].nil?
113
+ section = :default
114
+ else
115
+ section = @data_options[:section]
116
+ end
117
+
118
+ return true if p_exist?(section, *keys)
119
+
120
+ metadata_section = @data_options[:metadata_section]
121
+
122
+ return false if metadata_section.nil?
123
+
124
+ Lorj.data.exist?(:sections, metadata_section, keys[0], :default_value)
125
+ end
126
+
78
127
  # Remove inherited method []=
79
128
  def []=(*_keys, _value)
80
129
  end
@@ -42,6 +42,9 @@ module PRC
42
42
  # * *get*: get the config file name used by #load and #save.
43
43
  attr_accessor :filename
44
44
 
45
+ # config layer version
46
+ attr_accessor :version
47
+
45
48
  # initialize BaseConfig
46
49
  #
47
50
  # * *Args*
@@ -114,14 +117,13 @@ module PRC
114
117
  p_exist?(*keys)
115
118
  end
116
119
 
117
- # Erase function
118
- #
119
- # * *Args*
120
+ # Erase the data in the object. internal version is cleared as well.
120
121
  #
121
122
  # * *Returns*
122
- # -
123
+ # - Hash : {}.
123
124
  #
124
125
  def erase
126
+ @version = nil
125
127
  @data = {}
126
128
  end
127
129
 
@@ -275,6 +277,10 @@ module PRC
275
277
  fail 'Config filename not set.' if @filename.nil?
276
278
 
277
279
  @data = YAML.load_file(File.expand_path(@filename))
280
+ if @data.key?(:file_version)
281
+ @version = @data[:file_version]
282
+ @data.delete(:file_version)
283
+ end
278
284
  true
279
285
  end
280
286
 
@@ -284,6 +290,9 @@ module PRC
284
290
 
285
291
  fail 'Config filename not set.' if @filename.nil?
286
292
 
293
+ @data.delete(:file_version)
294
+ @data[:file_version] = @version unless @version.nil?
295
+
287
296
  File.open(@filename, 'w+') { |out| YAML.dump(@data, out) }
288
297
  true
289
298
  end
@@ -1186,6 +1186,32 @@ module PRC
1186
1186
  be_exclusive)
1187
1187
  end
1188
1188
 
1189
+ # Function to get the version of a config layer name.
1190
+ # * *Args*
1191
+ # - +:name+ : layer to get data.
1192
+ #
1193
+ def version(name)
1194
+ return nil unless name.is_a?(String)
1195
+
1196
+ index = layer_index(name)
1197
+ return nil if index.nil?
1198
+
1199
+ @config_layers[index][:config].version
1200
+ end
1201
+
1202
+ # Function to set the version of a config layer name.
1203
+ # * *Args*
1204
+ # - +:name+ : layer to set data version.
1205
+ #
1206
+ def version_set(name, version)
1207
+ return nil unless name.is_a?(String) && version.is_a?(String)
1208
+
1209
+ index = layer_index(name)
1210
+ return nil if index.nil?
1211
+
1212
+ @config_layers[index][:config].version = version
1213
+ end
1214
+
1189
1215
  # List all config layers defined in this instance.
1190
1216
  def layers
1191
1217
  result = []
@@ -21,9 +21,9 @@ require 'fog' # We use fog to access HPCloud
21
21
 
22
22
  hpcloud_path = File.expand_path(File.dirname(__FILE__))
23
23
 
24
- require File.join(hpcloud_path, 'compute.rb')
25
- require File.join(hpcloud_path, 'network.rb')
26
- require File.join(hpcloud_path, 'security_groups.rb')
24
+ load File.join(hpcloud_path, 'compute.rb')
25
+ load File.join(hpcloud_path, 'network.rb')
26
+ load File.join(hpcloud_path, 'security_groups.rb')
27
27
 
28
28
  # Defines Meta HPCloud object
29
29
  class Hpcloud
@@ -17,6 +17,7 @@
17
17
  :maestro_url: http://example.org
18
18
  :keypair_name: default_key
19
19
  :data: None
20
+ :default_case2: 'success'
20
21
  :description:
21
22
  :FORJ_HPC: Testing extra application default value.
22
23
  :setup:
@@ -34,3 +35,8 @@
34
35
  :account_exclusive: true
35
36
  :maestro:
36
37
  :maestro_url:
38
+ :lorj_default:
39
+ :default_case:
40
+ :default_value: 'success'
41
+ :default_case2:
42
+ :default_value: 'incorrect - meta-default value'
@@ -50,6 +50,12 @@ describe 'class: PRC::BaseConfig,' do
50
50
  @config[:test1, :test2] = 'value'
51
51
  expect(@config.data).to eq(:test1 => { :test2 => 'value' })
52
52
  end
53
+
54
+ it 'version = "0.1" can be set and get' do
55
+ expect(@config.version).to equal(nil)
56
+ @config.version = '0.1'
57
+ expect(@config.version).to eq('0.1')
58
+ end
53
59
  end
54
60
 
55
61
  context 'config.del(*keys)' do
@@ -120,8 +126,11 @@ describe 'class: PRC::BaseConfig,' do
120
126
  context "config.erase on :test1 => { :test2 => 'value' }" do
121
127
  it 'with no parameter should return {} and cleanup internal data.' do
122
128
  config = PRC::BaseConfig.new(:test1 => { :test2 => 'value' })
129
+ config.version = '0.1'
130
+
123
131
  expect(config.erase).to eq({})
124
132
  expect(config.data).to eq({})
133
+ expect(config.version).to eq(nil)
125
134
  end
126
135
  end
127
136
 
@@ -150,6 +159,7 @@ describe 'class: PRC::BaseConfig,' do
150
159
  old_file = @config.filename
151
160
  filename = File.expand_path(file)
152
161
 
162
+ @config.version = '1'
153
163
  expect(@config.save(file)).to equal(true)
154
164
  expect(@config.filename).not_to eq(old_file)
155
165
  expect(@config.filename).to eq(filename)
@@ -160,6 +170,7 @@ describe 'class: PRC::BaseConfig,' do
160
170
 
161
171
  expect(@config.load).to equal(true)
162
172
  expect(@config.data).to eq(:test1 => { :test2 => 'value' })
173
+ expect(@config.version).to eq('1')
163
174
 
164
175
  File.delete(@config.filename)
165
176
  end
@@ -77,6 +77,28 @@ describe 'class: PRC::CoreConfig,' do
77
77
  expect(@config.layers).to eq(%w(runtime local))
78
78
  end
79
79
 
80
+ it 'config.version("local") return nil' do
81
+ expect(@config.version('local')).to equal(nil)
82
+ end
83
+
84
+ it 'config.version("runtime") return nil' do
85
+ expect(@config.version('runtime')).to equal(nil)
86
+ end
87
+
88
+ it 'config.version["inexistent"] return nil' do
89
+ expect(@config.version('inexistent')).to equal(nil)
90
+ end
91
+
92
+ it 'only config.version_set("local") = "1"' do
93
+ expect(@config.version_set('local', '1')).to eq('1')
94
+ end
95
+
96
+ it 'only config.version("local") return "1"' do
97
+ expect(@config.version('local')).to eq('1')
98
+ expect(@config.version('runtime')).to equal(nil)
99
+ expect(@config.version('inexistent')).to equal(nil)
100
+ end
101
+
80
102
  it 'config.exist?(:test) returns true' do
81
103
  expect(@config.exist?(:test)).to equal(true)
82
104
  end
@@ -16,7 +16,7 @@
16
16
  # limitations under the License.
17
17
 
18
18
  # require 'rubygems'
19
- # require 'byebug'
19
+ # require 'byebug'
20
20
  # require 'bundler/setup'
21
21
 
22
22
  app_path = File.dirname(__FILE__)
@@ -80,6 +80,37 @@ describe 'class: Lorj::Default loaded lorj_spec/defaults.yaml, '\
80
80
  it 'get_meta_section(:data) return :credentials' do
81
81
  expect(@defaults.get_meta_section(:data)).to eq(:credentials)
82
82
  end
83
+
84
+ it 'with :metadata_section => :lorj_default_missing, '\
85
+ 'exist?[:default_case] return false' do
86
+ @defaults.data_options(:metadata_section => :lorj_default_missing)
87
+ expect(@defaults.exist?(:default_case)).to equal(false)
88
+ end
89
+ end
90
+ context 'defaults.yaml loaded, with :metadata_section => :lorj_default,' do
91
+ before(:all) do
92
+ @defaults.data_options(:metadata_section => :lorj_default)
93
+ end
94
+
95
+ it 'exist?[:default_case] return true' do
96
+ expect(@defaults.exist?(:default_case)).to equal(true)
97
+ end
98
+
99
+ it 'exist?[:default_case2] return true' do
100
+ expect(@defaults.exist?(:default_case2)).to equal(true)
101
+ end
102
+
103
+ it 'exist?[:default_case3] return false' do
104
+ expect(@defaults.exist?(:default_case3)).to equal(false)
105
+ end
106
+
107
+ it 'get[:default_case] return "success"' do
108
+ expect(@defaults[:default_case]).to eq('success')
109
+ end
110
+
111
+ it 'get[:default_case2] return "success"' do
112
+ expect(@defaults[:default_case2]).to eq('success')
113
+ end
83
114
  end
84
115
  end
85
116
  end
@@ -206,9 +206,14 @@ describe 'class: Lorj::Config,' do
206
206
  expect(@config.where?(:test1)).to equal(false)
207
207
  end
208
208
 
209
- it 'default_dump return all in a Hash' do
209
+ it 'default_dump return all in a Hash, without :setup and :sections' do
210
210
  default_file = @config.config_filename('default')
211
+ # Following will split defaults.yaml to 2 differents config
212
+ # values config layers and metadata config layers.
213
+ Lorj.defaults
211
214
  default = YAML.load_file(default_file)
215
+ default.delete(:setup)
216
+ default.delete(:sections)
212
217
 
213
218
  res = { 'local' => { :default => {} },
214
219
  'default' => default
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lorj
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - forj team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-27 00:00:00.000000000 Z
11
+ date: 2015-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -244,10 +244,10 @@ files:
244
244
  - spec/04_prc_core_config_spec.rb
245
245
  - spec/09_prc_spec.rb
246
246
  - spec/10_lorj_log_spec.rb
247
- - spec/11_lorj_config_spec.rb
248
- - spec/12_lorj_account_spec.rb
247
+ - spec/11_lorj_defaults_spec.rb
248
+ - spec/12_lorj_config_spec.rb
249
+ - spec/13_lorj_account_spec.rb
249
250
  - spec/20_lorj_meta_spec.rb
250
- - spec/21_lorj_defaults_spec.rb
251
251
  homepage: https://github.com/forj-oss/lorj
252
252
  licenses:
253
253
  - Apache License, Version 2.0.
@@ -281,8 +281,8 @@ test_files:
281
281
  - spec/04_prc_core_config_spec.rb
282
282
  - spec/09_prc_spec.rb
283
283
  - spec/10_lorj_log_spec.rb
284
- - spec/11_lorj_config_spec.rb
285
- - spec/12_lorj_account_spec.rb
284
+ - spec/11_lorj_defaults_spec.rb
285
+ - spec/12_lorj_config_spec.rb
286
+ - spec/13_lorj_account_spec.rb
286
287
  - spec/20_lorj_meta_spec.rb
287
- - spec/21_lorj_defaults_spec.rb
288
288
  has_rdoc: