repo_manager 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. data/.gemfiles +115 -0
  2. data/.gitattributes +1 -0
  3. data/.gitignore +7 -0
  4. data/.rspec +3 -0
  5. data/.yardopts +11 -0
  6. data/Gemfile +11 -0
  7. data/Gemfile.lock +99 -0
  8. data/Guardfile +63 -0
  9. data/HISTORY.markdown +12 -0
  10. data/LICENSE +20 -0
  11. data/README.markdown +192 -0
  12. data/Rakefile +94 -0
  13. data/TODO.markdown +15 -0
  14. data/VERSION +1 -0
  15. data/bin/repo +151 -0
  16. data/cucumber.yml +28 -0
  17. data/examples/pc_saved_game_backup/.gitignore +2 -0
  18. data/examples/pc_saved_game_backup/INSTALL.markdown +420 -0
  19. data/examples/pc_saved_game_backup/README.markdown +108 -0
  20. data/examples/pc_saved_game_backup/remote/.gitignore +2 -0
  21. data/examples/pc_saved_game_backup/repo_manager/Gemfile +12 -0
  22. data/examples/pc_saved_game_backup/repo_manager/Gemfile.lock +66 -0
  23. data/examples/pc_saved_game_backup/repo_manager/assets/.gitignore +2 -0
  24. data/examples/pc_saved_game_backup/repo_manager/features/support/aruba.rb +15 -0
  25. data/examples/pc_saved_game_backup/repo_manager/features/support/env.rb +11 -0
  26. data/examples/pc_saved_game_backup/repo_manager/features/support/steps.rb +3 -0
  27. data/examples/pc_saved_game_backup/repo_manager/features/tasks/update.feature +144 -0
  28. data/examples/pc_saved_game_backup/repo_manager/global/default/asset.conf +2 -0
  29. data/examples/pc_saved_game_backup/repo_manager/repo.conf +64 -0
  30. data/examples/pc_saved_game_backup/repo_manager/tasks/.gitignore +0 -0
  31. data/examples/pc_saved_game_backup/repo_manager/tasks/remote.rb +57 -0
  32. data/examples/pc_saved_game_backup/repo_manager/tasks/update.rb +65 -0
  33. data/examples/pc_saved_game_backup/saved_games/hearts/save1 +1 -0
  34. data/examples/pc_saved_game_backup/saved_games/hearts/save2 +1 -0
  35. data/examples/pc_saved_game_backup/saved_games/mines/my_profile.ini +1 -0
  36. data/examples/pc_saved_game_backup/saved_games/mines/saves/save1 +1 -0
  37. data/examples/pc_saved_game_backup/saved_games/mines/saves/save2 +1 -0
  38. data/features/actions/git.feature +296 -0
  39. data/features/actions/help.feature +53 -0
  40. data/features/actions/list.feature +624 -0
  41. data/features/actions/path.feature +195 -0
  42. data/features/actions/status.feature +261 -0
  43. data/features/actions/task.feature +127 -0
  44. data/features/assets/configuration.feature +204 -0
  45. data/features/assets/rendering.feature +42 -0
  46. data/features/assets/user_attributes.feature +98 -0
  47. data/features/bin.feature +42 -0
  48. data/features/logger.feature +218 -0
  49. data/features/settings.feature +240 -0
  50. data/features/support/aruba.rb +15 -0
  51. data/features/support/env.rb +11 -0
  52. data/features/support/steps.rb +3 -0
  53. data/features/tasks/add/asset.feature +178 -0
  54. data/features/tasks/generate/init.feature +56 -0
  55. data/lib/repo_manager.rb +36 -0
  56. data/lib/repo_manager/actions.rb +8 -0
  57. data/lib/repo_manager/actions/action_helper.rb +39 -0
  58. data/lib/repo_manager/actions/app_action.rb +30 -0
  59. data/lib/repo_manager/actions/base_action.rb +296 -0
  60. data/lib/repo_manager/actions/git_action.rb +113 -0
  61. data/lib/repo_manager/actions/help_action.rb +52 -0
  62. data/lib/repo_manager/actions/list_action.rb +123 -0
  63. data/lib/repo_manager/actions/path_action.rb +22 -0
  64. data/lib/repo_manager/actions/status_action.rb +192 -0
  65. data/lib/repo_manager/actions/task_action.rb +71 -0
  66. data/lib/repo_manager/app.rb +116 -0
  67. data/lib/repo_manager/assets.rb +3 -0
  68. data/lib/repo_manager/assets/app_asset.rb +15 -0
  69. data/lib/repo_manager/assets/asset_accessors.rb +67 -0
  70. data/lib/repo_manager/assets/asset_configuration.rb +137 -0
  71. data/lib/repo_manager/assets/asset_manager.rb +72 -0
  72. data/lib/repo_manager/assets/base_asset.rb +199 -0
  73. data/lib/repo_manager/assets/repo_asset.rb +30 -0
  74. data/lib/repo_manager/core.rb +2 -0
  75. data/lib/repo_manager/core/array.rb +21 -0
  76. data/lib/repo_manager/core/hash.rb +83 -0
  77. data/lib/repo_manager/errors.rb +10 -0
  78. data/lib/repo_manager/extensions/hash.rb +86 -0
  79. data/lib/repo_manager/git.rb +2 -0
  80. data/lib/repo_manager/git/lib.rb +69 -0
  81. data/lib/repo_manager/git/status.rb +196 -0
  82. data/lib/repo_manager/logger.rb +39 -0
  83. data/lib/repo_manager/settings.rb +98 -0
  84. data/lib/repo_manager/tasks.rb +3 -0
  85. data/lib/repo_manager/tasks/add/asset.rb +213 -0
  86. data/lib/repo_manager/tasks/generate/init.rb +42 -0
  87. data/lib/repo_manager/tasks/generate/templates/config/repo.conf.tt +61 -0
  88. data/lib/repo_manager/tasks/generate/templates/init/assets/.gitignore +0 -0
  89. data/lib/repo_manager/tasks/generate/templates/init/global/default/asset.conf +2 -0
  90. data/lib/repo_manager/tasks/generate/templates/init/tasks/.gitignore +0 -0
  91. data/lib/repo_manager/tasks/task_manager.rb +166 -0
  92. data/lib/repo_manager/tasks/thor_helper.rb +29 -0
  93. data/lib/repo_manager/test/asset_steps.rb +19 -0
  94. data/lib/repo_manager/test/base_steps.rb +152 -0
  95. data/lib/repo_manager/test/repo_api.rb +41 -0
  96. data/lib/repo_manager/test/repo_steps.rb +83 -0
  97. data/lib/repo_manager/test/test_api.rb +88 -0
  98. data/lib/repo_manager/views.rb +2 -0
  99. data/lib/repo_manager/views/app_view.rb +15 -0
  100. data/lib/repo_manager/views/base_view.rb +137 -0
  101. data/lib/repo_manager/views/templates/css/basic.css +26 -0
  102. data/lib/repo_manager/views/templates/default.erb +40 -0
  103. data/lib/repo_manager/views/templates/default.slim +37 -0
  104. data/lib/repo_manager/views/view_helper.rb +55 -0
  105. data/repo_manager.gemspec +75 -0
  106. data/spec/basic_app/actions/action_helper_spec.rb +54 -0
  107. data/spec/basic_app/assets/base_asset_spec.rb +210 -0
  108. data/spec/basic_app/core_spec.rb +78 -0
  109. data/spec/basic_app/settings_spec.rb +64 -0
  110. data/spec/basic_app/views/view_helper_spec.rb +28 -0
  111. data/spec/basic_gem/aruba_helper_spec.rb +33 -0
  112. data/spec/basic_gem/basic_gem_spec.rb +84 -0
  113. data/spec/basic_gem/gemspec_spec.rb +68 -0
  114. data/spec/repo_manager/git_spec.rb +31 -0
  115. data/spec/spec_helper.rb +25 -0
  116. metadata +472 -0
@@ -0,0 +1,55 @@
1
+ module RepoManager
2
+
3
+ module ViewHelper
4
+
5
+ # path_to returns absolute installed path to various folders packaged with
6
+ # the RepoManager gem
7
+ #
8
+ # @example manually require and include before use
9
+ #
10
+ # require 'repo_manager/views/view_helper'
11
+ # include RepoManager::ViewHelper
12
+ #
13
+ # @example default to repo_manager root
14
+ #
15
+ # path_to("views/templates/bla.rb")
16
+ #
17
+ # @example repo_manager root
18
+ #
19
+ # path_to(:repo_manager, "views/templates/bla.rb")
20
+ #
21
+ # @example :bootstrap
22
+ #
23
+ # path_to(:bootstrap, "bootstrap/css/bootstrap.css")
24
+ #
25
+ # @overload path_to(*args)
26
+ # @param [Symbol] base_path which gem folder should be root
27
+ # @param [String] file_asset path to file asset parented in the given folder
28
+ #
29
+ # @return [String] absolute path to asset
30
+ def path_to(*args)
31
+
32
+ case
33
+ when args.length == 1
34
+ base_path = :repo_manager
35
+ asset = args
36
+ when args.length == 2
37
+ base_path, asset = *args
38
+ when args.length > 2
39
+ raise ArgumentError, "Too many arguments"
40
+ else
41
+ raise ArgumentError, "Specify at least the file asset"
42
+ end
43
+
44
+ case base_path
45
+ when :repo_manager
46
+ root = File.expand_path('../../../../', __FILE__)
47
+ else
48
+ raise "unknown base_path"
49
+ end
50
+
51
+ File.join(root, asset)
52
+ end
53
+
54
+ end
55
+ end
@@ -0,0 +1,75 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ #
4
+ Gem::Specification.new do |s|
5
+
6
+ # avoid shelling out to run git every time the gemspec is evaluated
7
+ #
8
+ # @see spec/gemspec_spec.rb
9
+ #
10
+ gemfiles_cache = File.join(File.dirname(__FILE__), '.gemfiles')
11
+ if File.exists?(gemfiles_cache)
12
+ gemfiles = File.open(gemfiles_cache, "r") {|f| f.read}
13
+ # normalize EOL
14
+ gemfiles.gsub!(/\r\n/, "\n")
15
+ else
16
+ # .gemfiles missing, run 'rake gemfiles' to create it
17
+ # falling back to 'git ls-files'"
18
+ gemfiles = `git ls-files`
19
+ end
20
+
21
+ s.name = "repo_manager"
22
+ s.version = File.open(File.join(File.dirname(__FILE__), 'VERSION'), "r") { |f| f.read }
23
+ s.platform = Gem::Platform::RUBY
24
+ s.authors = ["Robert Wahler"]
25
+ s.email = ["robert@gearheadforhire.com"]
26
+ s.homepage = "http://rubygems.org/gems/repo_manager"
27
+ s.summary = "CLI for batch management of multiple Git repositories"
28
+ s.description = "CLI for batch management of multiple Git repositories. Repositories don't need to be related."
29
+
30
+ s.required_rubygems_version = ">= 1.3.6"
31
+ s.rubyforge_project = "repo_manager"
32
+
33
+ s.add_dependency 'term-ansicolor', '>= 1.0.4'
34
+ s.add_dependency 'logging', '>= 1.6.2'
35
+ s.add_dependency 'slim', '>= 1.0.4'
36
+ s.add_dependency 'mustache', '>= 0.99.4'
37
+ s.add_dependency "chronic", ">= 0.6.5"
38
+ s.add_dependency "thor", "~> 0.15.0"
39
+
40
+ s.add_dependency 'git', '= 1.2.5'
41
+
42
+ s.add_development_dependency "bundler", ">= 1.0.14"
43
+ s.add_development_dependency "rspec", ">= 2.6.0"
44
+ s.add_development_dependency "cucumber", "~> 1.0"
45
+ s.add_development_dependency "aruba", "= 0.4.5"
46
+ s.add_development_dependency "rake", ">= 0.8.7"
47
+
48
+ # doc generation
49
+ s.add_development_dependency "yard", ">= 0.7.4"
50
+ s.add_development_dependency "yard-cucumber", ">= 2.1.7"
51
+ s.add_development_dependency "redcarpet", ">= 1.17.2"
52
+
53
+ # guard, watches files and runs specs and features
54
+ #
55
+ # Guard is locked at 1.0.3 due to high CPU usage after returning from screen
56
+ # lock on Ubuntu 11.04. Wait for the 1+ version of Guard to mature and listen
57
+ # gem fixes are applied
58
+ #
59
+ # https://github.com/guard/listen/issues/44
60
+ #
61
+ s.add_development_dependency "guard", "= 1.0.3"
62
+ s.add_development_dependency "guard-rspec", "~> 0.7"
63
+ s.add_development_dependency "guard-cucumber", "~> 0.8"
64
+
65
+ s.files = gemfiles.split("\n")
66
+ s.executables = gemfiles.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
67
+ s.require_paths = ["lib"]
68
+
69
+ s.rdoc_options = [
70
+ '--title', 'RepoManager Documentation',
71
+ '--main', 'README.markdown',
72
+ '--line-numbers',
73
+ '--inline-source'
74
+ ]
75
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+ require 'fileutils'
3
+ require 'repo_manager/actions/action_helper'
4
+
5
+ class Thing
6
+ include ::RepoManager::ActionHelper
7
+ end
8
+
9
+ describe RepoManager::ActionHelper do
10
+
11
+ describe 'relative_path', :posix => true do
12
+
13
+ it "should return relative path given an absolute path" do
14
+ thing = Thing.new
15
+ FileUtils.stub!('pwd').and_return '/home/robert/workspace/my_app'
16
+ thing.relative_path('/home/robert/workspace/my_app/photos').should == './photos'
17
+ thing.relative_path('/home/robert/photos').should == '../../photos'
18
+ end
19
+
20
+ it "should return relative path given a relative path" do
21
+ thing = Thing.new
22
+ FileUtils.stub!('pwd').and_return '/home/someuser/my_app'
23
+ thing.relative_path('cats/dogs').should == './cats/dogs'
24
+ end
25
+
26
+ end
27
+
28
+ describe 'relative_path', :windows => true do
29
+
30
+ context "on the same drive" do
31
+ it "should return relative path given an absolute path" do
32
+ thing = Thing.new
33
+ FileUtils.stub!('pwd').and_return 'c:/home/robert/workspace/my_app'
34
+ thing.relative_path('c:/home/robert/workspace/my_app/photos').should == './photos'
35
+ thing.relative_path('c:/home/robert/photos').should == '../../photos'
36
+ end
37
+ end
38
+
39
+ context "on a different drive" do
40
+ it "should return relative path given an absolute path" do
41
+ thing = Thing.new
42
+ FileUtils.stub!('pwd').and_return 'c:/home/robert/workspace/my_app'
43
+ thing.relative_path('d:/some/path/photos').should == 'd:/some/path/photos'
44
+ end
45
+ end
46
+
47
+ it "should return relative path given a relative path" do
48
+ thing = Thing.new
49
+ FileUtils.stub!('pwd').and_return 'c:/home/someuser/my_app'
50
+ thing.relative_path('cats/dogs').should == './cats/dogs'
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,210 @@
1
+ require 'spec_helper'
2
+
3
+ describe RepoManager::BaseAsset do
4
+
5
+ describe 'self.path_to_name' do
6
+
7
+ it "should replace one or more whitespace chars with a single underscore" do
8
+ RepoManager::BaseAsset.path_to_name("/path/to a/hello world ").should == "hello_world"
9
+ end
10
+
11
+ it "should strip special chars # @ % * ' ! + . -" do
12
+ RepoManager::BaseAsset.path_to_name("/path/to a/.he@@llo' !w+orl-d'").should == "hello_world"
13
+ end
14
+
15
+ it "should replace '&' with '_and_'" do
16
+ RepoManager::BaseAsset.path_to_name("/path/to a/&hello &world&").should == "and_hello_and_world_and"
17
+ end
18
+
19
+ it "should lowercase the name" do
20
+ RepoManager::BaseAsset.path_to_name("d:/path/to a/Hello worlD").should == "hello_world"
21
+ end
22
+
23
+ end
24
+
25
+ context "being created" do
26
+
27
+ describe "name" do
28
+
29
+ it "should be nil if unless name passed to initialize " do
30
+ asset = RepoManager::BaseAsset.new
31
+ asset.name.should be_nil
32
+ end
33
+
34
+ it "should be the same as asset_name param " do
35
+ asset = RepoManager::BaseAsset.new("my_asset_name")
36
+ asset.name.should == "my_asset_name"
37
+ end
38
+
39
+ end
40
+ end
41
+
42
+ describe 'common attributes' do
43
+
44
+ before :each do
45
+ @asset = RepoManager::BaseAsset.new
46
+ @asset.name = "test_asset"
47
+ end
48
+
49
+ describe 'description' do
50
+
51
+ it "should be nil unless set" do
52
+ @asset.attributes[:description].should be_nil
53
+ @asset.description.should be_nil
54
+ end
55
+
56
+ it "should render mustache templates" do
57
+ @asset.description = "This is a {{name}}"
58
+ @asset.attributes[:description].should == "This is a {{name}}"
59
+ @asset.description.should == "This is a test_asset"
60
+ end
61
+
62
+ end
63
+
64
+ describe 'notes' do
65
+
66
+ it "should be nil unless set" do
67
+ @asset.attributes[:notes].should be_nil
68
+ @asset.notes.should be_nil
69
+ end
70
+
71
+ it "should render mustache templates" do
72
+ @asset.notes = "This is a {{name}}"
73
+ @asset.attributes[:notes].should == "This is a {{name}}"
74
+ @asset.notes.should == "This is a test_asset"
75
+ end
76
+
77
+ end
78
+
79
+ describe 'path' do
80
+
81
+ it "defaults to asset name when the path attribute is blank" do
82
+ @asset.name = "asset_name"
83
+ @asset.attributes[:path].should be_nil
84
+ @asset.path.should match(/^.*\/asset_name$/)
85
+ end
86
+
87
+ it "should be nil unless path or name is set" do
88
+ @asset.name = nil
89
+ @asset.attributes[:path].should be_nil
90
+ @asset.path.should be_nil
91
+ end
92
+
93
+ it "should expand '~'" do
94
+ @asset.path = "~/test/here"
95
+ @asset.attributes[:path].should == "~/test/here"
96
+ @asset.path.should_not == "~/test/here"
97
+ @asset.path.should match(/.*\/test\/here$/)
98
+ end
99
+
100
+ it "should expand relative paths" do
101
+ @asset.path = "test/here"
102
+ @asset.attributes[:path].should == "test/here"
103
+ @asset.path.should match(/^#{File.expand_path(FileUtils.pwd)}\/test\/here$/)
104
+ end
105
+
106
+ it "should render mustache templates" do
107
+ @asset.path = "test/{{name}}/here"
108
+ @asset.attributes[:path].should == "test/{{name}}/here"
109
+ @asset.path.should match(/^#{File.expand_path(FileUtils.pwd)}\/test\/test_asset\/here$/)
110
+ end
111
+
112
+ end
113
+
114
+ describe 'tags' do
115
+
116
+ it "should be an empty array unless set" do
117
+ @asset.attributes[:tags].should be_nil
118
+ @asset.tags.should be_empty
119
+ end
120
+
121
+ end
122
+
123
+ end
124
+
125
+ describe 'user defined attributes' do
126
+
127
+ context "when not explicitly defined" do
128
+
129
+ it "should raise 'NoMethodError' when accessing" do
130
+ asset = RepoManager::BaseAsset.new("test_asset")
131
+ defined?(asset.undefined_attribute).should be_false
132
+ lambda {asset.undefined_attribute.should be_nil}.should raise_error NoMethodError
133
+ lambda {asset.undefined_attribute = 1}.should raise_error NoMethodError
134
+ end
135
+
136
+ it "should not set that attributes hash" do
137
+ asset = RepoManager::BaseAsset.new "test_asset"
138
+ defined?(asset.undefined_attribute).should be_false
139
+ lambda {asset.undefined_attribute = 1}.should raise_error NoMethodError
140
+ asset.attributes[:undefined_attribute].should be_nil
141
+ end
142
+
143
+ context "when a value exists in the main attributes hash" do
144
+ it "should not raise 'NoMethodError' when accessing" do
145
+ asset = RepoManager::BaseAsset.new("test_asset", {:undefined_attribute => "foo bar"})
146
+ defined?(asset.undefined_attribute).should be_false
147
+ lambda {asset.undefined_attribute.should be_nil}.should_not raise_error NoMethodError
148
+ lambda {asset.undefined_attribute = 1}.should raise_error NoMethodError
149
+ asset.undefined_attribute.should == "foo bar"
150
+ end
151
+ end
152
+
153
+ end
154
+
155
+ context "when explicitly creating" do
156
+
157
+ class MyAsset < RepoManager::BaseAsset
158
+ def my_attribute
159
+ @my_attribute
160
+ end
161
+ def my_attribute=(value)
162
+ @my_attribute = value.to_i * 2
163
+ end
164
+ end
165
+
166
+ it "should not overwrite existing attributes" do
167
+ attributes = {:user_attributes => [:my_attribute]}
168
+
169
+ asset = RepoManager::BaseAsset.new("test_asset", attributes)
170
+ asset.my_attribute = 2
171
+ asset.my_attribute.should == "2"
172
+
173
+ my_asset = MyAsset.new("test_asset", attributes)
174
+ my_asset.my_attribute = 2
175
+ my_asset.my_attribute.should == 4
176
+ end
177
+
178
+ end
179
+
180
+ context "when explicitly defined" do
181
+
182
+ it "should create read accessors" do
183
+ attributes = {:user_attributes => [:undefined_attribute]}
184
+ asset = RepoManager::BaseAsset.new("test_asset", attributes)
185
+
186
+ defined?(asset.undefined_attribute).should be_true
187
+ lambda {asset.undefined_attribute.should be_nil}.should_not raise_error NoMethodError
188
+ end
189
+
190
+ it "should create write accessors" do
191
+ attributes = {:user_attributes => [:undefined_attribute]}
192
+ asset = RepoManager::BaseAsset.new("test_asset", attributes)
193
+
194
+ lambda {asset.undefined_attribute = "1"}.should_not raise_error NoMethodError
195
+ end
196
+
197
+ it "should set the attributes hash" do
198
+ attributes = {:user_attributes => [:undefined_attribute]}
199
+ asset = RepoManager::BaseAsset.new("test_asset", attributes)
200
+
201
+ asset.undefined_attribute = "1"
202
+ asset.attributes[:undefined_attribute].should == "1"
203
+ end
204
+
205
+ end
206
+
207
+ end
208
+
209
+ end
210
+
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Core" do
4
+
5
+ before :each do
6
+ @hash_symbols = {
7
+ :zebras => true,
8
+ :options => {
9
+ :verbose => false,
10
+ },
11
+ :repos => {
12
+ :repo1 => {:path => "something"}
13
+ }
14
+ }
15
+
16
+ @hash_strings = {
17
+ 'zebras' => true,
18
+ 'options' => {
19
+ 'verbose' => false,
20
+ },
21
+ 'repos' => {
22
+ 'repo1' => {'path' => "something"}
23
+ }
24
+ }
25
+ end
26
+
27
+ describe Hash do
28
+
29
+ describe 'recursively_symbolize_keys!' do
30
+ it "should recursively convert a hash with string keys to a hash with symbol keys" do
31
+ @hash_symbols.should == @hash_strings.recursively_symbolize_keys!
32
+ end
33
+
34
+ it "should handle hashes that are already symbolized" do
35
+ hash_copy = @hash_symbols.dup
36
+ hash_copy.should == @hash_symbols.recursively_symbolize_keys!
37
+ @hash_symbols[:repos][:repo1].should == {:path => "something"}
38
+ end
39
+ end
40
+
41
+ describe 'to_conf' do
42
+
43
+ # Ruby 1.8
44
+ if RUBY_VERSION =~ /^1.8/
45
+
46
+ it "should convert a hash of symbolized keys to sorted YAML" do
47
+ @hash_symbols.to_conf.should == "--- \n:options: \n :verbose: false\n:repos: \n :repo1: \n :path: something\n:zebras: true\n"
48
+ end
49
+
50
+ it "should convert a hash of stringified keys to sorted YAML" do
51
+ @hash_strings.to_conf.should == "--- \noptions: \n verbose: false\nrepos: \n repo1: \n path: something\nzebras: true\n"
52
+ end
53
+
54
+ # Ruby 1.9+
55
+ else
56
+
57
+ it "should convert a hash of symbolized keys to insertion order YAML" do
58
+ @hash_symbols.to_conf.should == "---\n:zebras: true\n:options:\n :verbose: false\n:repos:\n :repo1:\n :path: something\n"
59
+ end
60
+
61
+ it "should convert a hash of stringified keys to insertion order YAML" do
62
+ @hash_strings.to_conf.should == "---\nzebras: true\noptions:\n verbose: false\nrepos:\n repo1:\n path: something\n"
63
+ end
64
+
65
+ it "should force string encoding to UTF-8" do
66
+ h = {:num => 2000, :str1 => "hello".force_encoding("UTF-8"), :str2 => "world".force_encoding("ASCII-8BIT")}
67
+ h.to_conf.match(/\!binary \|/).should_not be_true
68
+ h.to_conf.should == "---\n:num: 2000\n:str1: hello\n:str2: world\n"
69
+ end
70
+
71
+ end
72
+
73
+
74
+ end
75
+
76
+ end
77
+ end
78
+