fucking_shell_scripts 0.99 → 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8009309508988eb570f497f873f20add0226fa4d
4
- data.tar.gz: 067245ebe96188fb2890b02091e8ed3ce65def91
3
+ metadata.gz: c05b1d90cd1b92a78231e67b153532b29b54024a
4
+ data.tar.gz: c8706137b7ac4f46d8f8498ff07db9d06db9b23b
5
5
  SHA512:
6
- metadata.gz: 951bfa262aec8703aa2e043e04ed7b62374d588cf2fd0976da227293fd171117ea389f37adbdda492c1da40f7c4cb5f9a0146d7437258f505355c21f3856a00e
7
- data.tar.gz: c6f9c1202e68497580b2cfb31a6fa35e3335847bc96c17b78c20c865cc14151b7189992c4d93024143c8b93121bea6372b0b3891b9418e975fa6059619a0aab3
6
+ metadata.gz: adf82e3996b4c1fdbebfe60218c6566eb79057f7bc479524c5e11d3c7664c452b943b4aa0b6ae75e96b18fc463d718482d5356953928910dbe017c2236f655e5
7
+ data.tar.gz: fb5aed54b314a49cebd5f0574b851525ab62a9adf7d32fdadcb2e748194d75426540d9863f9429ff64da26256604e5c1dd0f02b26796b0dd797904306d422ebc
data/README.md CHANGED
@@ -1,68 +1,185 @@
1
- # FuckingShellScripts
1
+ # Fucking Shell Scripts
2
2
 
3
- The easiest, most common sense configuration management tool... because you just use fucking shell scripts.
3
+ The easiest, most common sense server configuration management tool...because you just use fucking shell scripts.
4
4
 
5
- ## Installation
5
+ Completely confused by Chef? Blowing your brains out over Ansible? Lost control of your Puppets? Wanna just use **fucking shell scripts** to configure a server? Read on!
6
6
 
7
- Add this line to your application's Gemfile:
7
+ # Features
8
8
 
9
- gem 'fucking_shell_scripts'
9
+ * Wraps up the fog gem, so it can be used on any cloud service, including AWS, rackspace, etc.
10
+ * We've intentionally designed this tool to be insanely easy to use
10
11
 
11
- And then execute:
12
+ ### Step 0: Install the gem
12
13
 
13
- $ bundle
14
-
15
- Or install it yourself as:
16
-
17
- $ gem install fucking_shell_scripts
14
+ ```Shell
15
+ gem install fucking_shell_scripts
16
+ ```
18
17
 
19
- ## Development
20
18
 
21
- During development of a script, use vagrant:
19
+ ### Step 1: Create a project directory
22
20
 
23
- vagrant up
24
- cd /vagrant
21
+ ```Shell
22
+ mkdir config_management
23
+ ```
25
24
 
26
- `cd /vagrant` will put you in the root folder of the project so that you can run a script such as `./search-service.sh`.
25
+ Folder structure:
26
+
27
+ * `/servers` _(required)_ - yaml server definitions _(see example below)_
28
+
29
+ * `/scripts` _(required)_ - the shell scripts that will configure your servers _(see example below)_
30
+
31
+ * `/files` _(optional)_ - files to be transferred to servers _(nginx.conf, ssh keys, database.yml, etc.)_
32
+
33
+ An example folder structure:
34
+
35
+ ```Shell
36
+ ./config_management
37
+ ├── files
38
+ │ ├── keys
39
+ │ │ └── deploy_key
40
+ │ └── rails_config
41
+ │ └── database.yml
42
+ ├── scripts
43
+ │ ├── apt.sh
44
+ │ ├── deploy_key.sh
45
+ │ ├── git.sh
46
+ │ ├── redis.sh
47
+ │ ├── ruby2.sh
48
+ │ ├── rubygems.sh
49
+ │ ├── search_service_code.sh
50
+ │ └── search_service_env.sh
51
+ └── servers
52
+ ├── defaults.yml
53
+ └── search-server.yml
54
+ ```
27
55
 
28
- ## Servers
29
56
 
30
- ### Defaults
57
+ ### Step 2: Create a server definition file
31
58
 
32
- Server defaults are defined by creating the following file:
59
+ The server definition file defines how to build a type of server. Server definitions override settings in `defaults.yml`.
33
60
 
34
- `./servers/defaults.yml`
61
+ ```YAML
62
+ # servers/search-server.yml
63
+ ##################################################
64
+ # This file defines how to build our search server
65
+ ##################################################
35
66
 
36
- ```yaml
37
- name: ppd instance
38
- security_groups: pd-app-server
39
- instance_type: c1.xlarge
40
- image_id: ami-e76ac58e
67
+ name: search-server
68
+ size: c1.xlarge
41
69
  availability_zone: us-east-1d
42
- region: us-east-1
70
+ image: ami-90374bf9
43
71
  key_name: pd-app-server
44
- private_key_path: /Users/bhilkert/.ssh/pd-app-server
45
- ```
72
+ private_key_path: /Users/yourname/.ssh/pd-app-server
73
+ security_groups: search-service # override the security_groups defined in defaults.yml
46
74
 
47
- To define a server, create a yaml file in the `./servers` directory with the following format:
75
+ ############################################
76
+ # Files necessary to build the search server
77
+ ############################################
48
78
 
49
- `./servers/search-service.yml`
79
+ files:
80
+ - files/keys/deploy_key
50
81
 
51
- ```yaml
52
- name: search-service
53
- security_groups: search-service
54
- instance_type: c1.medium
55
- image_id: ami-90374bf9
82
+ ###########################################
83
+ # Scripts needed to build the search server
84
+ ###########################################
56
85
 
57
86
  scripts:
58
87
  - scripts/apt.sh
59
- - scripts/env.sh
88
+ - scripts/search_service_env.sh
60
89
  - scripts/git.sh
61
- - scripts/ruby.sh
90
+ - scripts/ruby2.sh
62
91
  - scripts/rubygems.sh
63
92
  - scripts/redis.sh
93
+ - scripts/deploy_key.sh
64
94
  ```
65
95
 
96
+ `servers/defaults.yml`has the same structure and keys a server definition file, **except**, you cannot define scripts or files.
97
+
98
+ ```YAML
99
+ # servers/defaults.yml
100
+ ################################
101
+ # This file defines our defaults
102
+ ################################
103
+
104
+ security_groups: simple-group
105
+ size: c1.medium
106
+ image: ami-e76ac58e
107
+ availability_zone: us-east-1d
108
+ key_name: global-key
109
+ cloud:
110
+ provider: AWS
111
+ aws_access_key_id: <=% ENV[AWS_ACCESS_KEY] %>
112
+ aws_secret_access_key: <%= ENV[AWS_SECRET_ACCESS_KEY] %>
113
+ region: us-east-1
114
+
115
+ ```
116
+
117
+ #### Cloud options
118
+
119
+ Anything passed in the 'cloud' key will be directly passed to
120
+ `Fog::Compute.new`. See [the fog website](http://fog.io/compute) for more info.
121
+
122
+ FSS will consider any values that look like "ENV[VAR_NAME]" to be
123
+ environment variables, and will attempt to look up that environment
124
+ variable. If FSS does not find that variable, an exception will be
125
+ raised.
126
+
127
+ ### Step 3: Add shell scripts that configure the server
128
+
129
+ Seriously...just write shell scripts.
130
+
131
+ Want to install Ruby 2? Here's an example:
132
+
133
+ ```Shell
134
+ #!/bin/sh
135
+ #
136
+ # scripts/ruby2.sh
137
+ #
138
+ sudo apt-get -y install build-essential zlib1g-dev libssl-dev libreadline6-dev libyaml-dev
139
+ cd /tmp
140
+ wget http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz
141
+ tar -xzf ruby-2.0.0-p247.tar.gz
142
+ cd ruby-2.0.0-p247
143
+ ./configure --prefix=/usr/local
144
+ make
145
+ sudo make install
146
+ rm -rf /tmp/ruby*
147
+ ```
148
+
149
+ ### Step 4: Build/configure your server
150
+
151
+ ```Shell
152
+ fss search-server
153
+ ```
154
+
155
+ This command does 2 things:
156
+
157
+ 1. Builds the new server
158
+ 2. Runs the scripts configuration
159
+
160
+ **To build only:**
161
+
162
+ ```Shell
163
+ fss --build search-server
164
+ ```
165
+
166
+ **To configure only:**
167
+
168
+ ```Shell
169
+ fss --instance-id i-9ad6d7af --configure search-server
170
+ ```
171
+
172
+ _Note: `--instance-id` is required when using the `--configure` option_
173
+
174
+
175
+ ### Step 5: Remove your chef repo and all its contents.
176
+
177
+ ```Shell
178
+ rm -rf ~/old_config_management/chef
179
+ ```
180
+
181
+ **HOLY SHIT! THAT WAS EASY.**
182
+
66
183
  ## Contributing
67
184
 
68
185
  1. Fork it
data/bin/fss CHANGED
@@ -26,18 +26,22 @@ OptionParser.new do |opts|
26
26
  end
27
27
 
28
28
  opts.on('-v', '--version', 'Show version' ) do
29
- puts FuckingShellScripts::Version
29
+ puts FuckingShellScripts::VERSION
30
+ exit
30
31
  end
31
32
  end.parse!
32
33
 
33
34
  options.merge!(type: ARGV.first)
34
35
 
36
+ abort("Specify the type of server to build/configure as the first argument (ie. fss app-server)") unless options[:type]
37
+
35
38
  cli = FuckingShellScripts::CLI.new(options)
36
39
 
37
40
  if options[:build]
38
41
  cli.build
39
42
 
40
43
  elsif options[:configure]
44
+ abort("Specify the server instance ID to configure using the --instance-id option") unless options[:instance_id]
41
45
  cli.configure
42
46
 
43
47
  else
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "pry"
24
25
 
25
26
  spec.add_dependency "fog", "~> 1.14.0"
26
27
  end
@@ -0,0 +1,10 @@
1
+ class Hash
2
+ def symbolize_keys_deep!
3
+ keys.each do |k|
4
+ symbol_key_name = k.to_sym
5
+ self[symbol_key_name] = self.delete(k)
6
+ self[symbol_key_name].symbolize_keys_deep! if self[symbol_key_name].kind_of? Hash
7
+ end
8
+ self
9
+ end
10
+ end
data/lib/ext/fog.rb CHANGED
@@ -20,13 +20,13 @@ class Fog::SSH::Real
20
20
 
21
21
  channel.on_data do |ch, data|
22
22
  result.stdout << data
23
- puts data
23
+ print data
24
24
  end
25
25
 
26
26
  channel.on_extended_data do |ch, type, data|
27
27
  next unless type == 1
28
28
  result.stderr << data
29
- puts data
29
+ print data
30
30
  end
31
31
 
32
32
  channel.on_request('exit-status') do |ch, data|
@@ -1,14 +1,11 @@
1
1
  require "fucking_shell_scripts/version"
2
2
 
3
- begin
4
- require 'pry'
5
- rescue LoadError
6
- end
7
-
8
3
  require_relative 'fucking_shell_scripts/cli'
9
4
  require_relative 'fucking_shell_scripts/configuration'
10
5
  require_relative 'fucking_shell_scripts/connection'
11
6
  require_relative 'fucking_shell_scripts/scp'
12
7
  require_relative 'fucking_shell_scripts/server'
8
+ require_relative 'fucking_shell_scripts/errors'
13
9
 
10
+ require_relative 'core_ext/hash'
14
11
  require_relative 'ext/fog'
@@ -1,8 +1,9 @@
1
1
  module FuckingShellScripts
2
2
  class CLI
3
+ MissingCloudSettings = Class.new(StandardError)
4
+
3
5
  def initialize(opts = {})
4
6
  @opts = opts
5
- @connection = FuckingShellScripts::Connection.new(options).connection
6
7
  end
7
8
 
8
9
  def bootstrap
@@ -20,7 +21,11 @@ module FuckingShellScripts
20
21
  private
21
22
 
22
23
  def server
23
- FuckingShellScripts::Server.new(@connection, options)
24
+ @server ||= FuckingShellScripts::Server.new(connection, options)
25
+ end
26
+
27
+ def connection
28
+ FuckingShellScripts::Connection.new(options.fetch(:cloud)).connection
24
29
  end
25
30
 
26
31
  def options
@@ -1,9 +1,11 @@
1
1
  require 'yaml'
2
+ require 'erb'
2
3
 
3
4
  module FuckingShellScripts
4
5
  class Configuration
5
6
  MissingServerType = Class.new(StandardError)
6
7
  MissingServerConfiguration = Class.new(StandardError)
8
+ MissingCloudConfiguration = Class.new(StandardError)
7
9
 
8
10
  attr_reader :options
9
11
 
@@ -13,13 +15,14 @@ module FuckingShellScripts
13
15
  read_and_parse_server_options
14
16
 
15
17
  raise MissingServerType, "Please specify a type of server you want to create using the --type option" unless options[:type]
18
+ raise MissingCloudConfiguration, "Please specify settings for your provider per http://fog.io/about/provider_documentation.html" unless options[:cloud]
16
19
  end
17
20
 
18
21
  private
19
22
 
20
23
  def default_options
21
24
  begin
22
- YAML.load(File.read('servers/defaults.yml'))
25
+ YAML.load(ERB.new(File.read('servers/defaults.yml')).result)
23
26
  rescue Errno::ENOENT
24
27
  {}
25
28
  end
@@ -27,7 +30,7 @@ module FuckingShellScripts
27
30
 
28
31
  def server_options
29
32
  begin
30
- YAML.load(File.read(server_file))
33
+ YAML.load(ERB.new(File.read(server_file)).result)
31
34
  rescue Errno::ENOENT
32
35
  raise MissingServerConfiguration, "Please create a configuration file './servers/#{type}.yml'"
33
36
  end
@@ -39,11 +42,12 @@ module FuckingShellScripts
39
42
 
40
43
  def read_and_parse_server_options
41
44
  options_string_hash = default_options.merge(server_options).merge(@command_line_options)
42
- @options = Hash[options_string_hash.map{ |(k,v)| [k.to_sym, v] }]
45
+ @options = options_string_hash.symbolize_keys_deep!
43
46
  end
44
47
 
45
48
  def type
46
49
  @command_line_options[:type]
47
50
  end
51
+
48
52
  end
49
53
  end
@@ -2,25 +2,12 @@ require 'fog'
2
2
 
3
3
  module FuckingShellScripts
4
4
  class Connection
5
- MissingAWSCredentials = Class.new(StandardError)
6
-
7
5
  def initialize(opts)
8
6
  @opts = opts
9
-
10
- if ENV["AWS_ACCESS_KEY"].nil? || ENV["AWS_SECRET_ACCESS_KEY"].nil?
11
- raise FuckingShellScripts::Connection::MissingAWSCredentials, "Make sure AWS_ACCESS_KEY and AWS_SECRET_ACCESS_KEY are environmental variables with your credentials"
12
- end
13
7
  end
14
8
 
15
9
  def connection
16
- @connection ||= begin
17
- Fog::Compute.new(
18
- provider: "AWS",
19
- aws_access_key_id: ENV["AWS_ACCESS_KEY"],
20
- aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
21
- region: @opts.fetch(:region)
22
- )
23
- end
10
+ Fog::Compute.new(@opts)
24
11
  end
25
12
  end
26
13
  end
@@ -0,0 +1,5 @@
1
+ module FuckingShellScripts
2
+ class Errors
3
+ ScriptNotExecutable = Class.new(StandardError)
4
+ end
5
+ end
@@ -7,16 +7,24 @@ module FuckingShellScripts
7
7
  end
8
8
 
9
9
  def to_server
10
+ check_executable_permissions
10
11
  create_local_archive
11
12
  scp_files_to_server
12
13
  extract_remote_archive
14
+ remove_remote_archive
13
15
  remove_local_archive
14
16
  end
15
17
 
16
18
  private
17
19
 
20
+ def check_executable_permissions
21
+ @opts.fetch(:scripts).each do |file|
22
+ raise FuckingShellScripts::Errors::ScriptNotExecutable , "The script #{file} is not executable." unless File.executable?(file)
23
+ end
24
+ end
25
+
18
26
  def create_local_archive
19
- includes = @opts.fetch(:files) + @opts.fetch(:scripts)
27
+ includes = @opts.fetch(:files){ [] } + @opts.fetch(:scripts)
20
28
  `tar -czf #{FILENAME} #{includes.join(" ")}`
21
29
  end
22
30
 
@@ -28,6 +36,10 @@ module FuckingShellScripts
28
36
  @server.ssh("tar -xzf #{FILENAME}")
29
37
  end
30
38
 
39
+ def remove_remote_archive
40
+ @server.ssh("rm #{FILENAME}")
41
+ end
42
+
31
43
  def remove_local_archive
32
44
  `rm -f #{FILENAME}`
33
45
  end
@@ -23,6 +23,7 @@ module FuckingShellScripts
23
23
  groups: options.fetch(:security_groups),
24
24
  private_key_path: options.fetch(:private_key_path)
25
25
  )
26
+ @server.username = options.fetch(:username) if options.fetch(:username)
26
27
  print "Creating #{options.fetch(:size)} from #{options.fetch(:image)}"
27
28
 
28
29
  server.wait_for do
@@ -1,3 +1,3 @@
1
1
  module FuckingShellScripts
2
- VERSION = "0.99"
2
+ VERSION = "1.0"
3
3
  end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hash do
4
+ describe "#symbolize_keys_deep!" do
5
+ it "symbolizes recusively" do
6
+ hash = { "a" => 1, "b" => { "c" => 2, "d" => 3 } }
7
+ hash.symbolize_keys_deep!
8
+ expect(hash.fetch(:a)).to eq(1)
9
+ expect(hash.fetch(:b)).to eq({ :c => 2, :d => 3 })
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ module FuckingShellScripts
4
+ describe CLI do
5
+ let(:server) { double('server', bootstrap: true, build: true, configure: true) }
6
+ let(:options) {
7
+ {
8
+ type: "test-server",
9
+ region: "us-east-1",
10
+ }
11
+ }
12
+ let(:config) { double('config', options: options) }
13
+
14
+ it "initializes a server with the connection" do
15
+ connection = double('connection')
16
+ connection_obj = double('obj connection', connection: connection)
17
+ FuckingShellScripts::Connection.stub(:new).and_return(connection_obj)
18
+ FuckingShellScripts::Configuration.stub(:new).and_return(config)
19
+ FuckingShellScripts::Server.should_receive(:new).with(connection, options).and_return(server)
20
+ FuckingShellScripts::CLI.new.bootstrap
21
+ end
22
+
23
+ context "instance methods" do
24
+ before :each do
25
+ ENV["AWS_ACCESS_KEY"] = "key"
26
+ ENV["AWS_SECRET_ACCESS_KEY"] = "secret"
27
+ FuckingShellScripts::Configuration.stub(:new).and_return(config)
28
+ FuckingShellScripts::Server.stub(:new).and_return(server)
29
+ end
30
+
31
+ it "bootstraps a server" do
32
+ expect(server).to receive(:bootstrap)
33
+ FuckingShellScripts::CLI.new.bootstrap
34
+ end
35
+
36
+ it "builds a server" do
37
+ expect(server).to receive(:build)
38
+ FuckingShellScripts::CLI.new.build
39
+ end
40
+
41
+ it "configures a server" do
42
+ expect(server).to receive(:configure)
43
+ FuckingShellScripts::CLI.new.configure
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ module FuckingShellScripts
4
+ describe Connection do
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ begin
2
+ require 'pry'
3
+ rescue LoadError
4
+ end
5
+
6
+ require 'fucking_shell_scripts'
7
+
metadata CHANGED
@@ -1,69 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fucking_shell_scripts
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.99'
4
+ version: '1.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Hilkert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-16 00:00:00.000000000 Z
11
+ date: 2014-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: fog
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ~>
73
+ - - "~>"
60
74
  - !ruby/object:Gem::Version
61
75
  version: 1.14.0
62
76
  type: :runtime
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ~>
80
+ - - "~>"
67
81
  - !ruby/object:Gem::Version
68
82
  version: 1.14.0
69
83
  description: The easiest, most common sense configuration management tool... because
@@ -75,23 +89,28 @@ executables:
75
89
  extensions: []
76
90
  extra_rdoc_files: []
77
91
  files:
78
- - .gitignore
92
+ - ".gitignore"
79
93
  - Gemfile
80
94
  - LICENSE.txt
81
95
  - README.md
82
96
  - Rakefile
83
97
  - bin/fss
84
98
  - fucking_shell_scripts.gemspec
99
+ - lib/core_ext/hash.rb
85
100
  - lib/ext/fog.rb
86
101
  - lib/fucking_shell_scripts.rb
87
102
  - lib/fucking_shell_scripts/cli.rb
88
103
  - lib/fucking_shell_scripts/configuration.rb
89
104
  - lib/fucking_shell_scripts/connection.rb
105
+ - lib/fucking_shell_scripts/errors.rb
90
106
  - lib/fucking_shell_scripts/scp.rb
91
107
  - lib/fucking_shell_scripts/server.rb
92
108
  - lib/fucking_shell_scripts/version.rb
93
- - spec/fss_spec.rb
94
- - spec/servers/search-service.yml
109
+ - spec/core_ext/hash_spec.rb
110
+ - spec/fucking_shell_scripts/cli_spec.rb
111
+ - spec/fucking_shell_scripts/connection_spec.rb
112
+ - spec/spec_helper.rb
113
+ - spec/support/servers/test-server.yml
95
114
  homepage: https://github.com/brandonhilkert/fucking_shell_scripts
96
115
  licenses:
97
116
  - MIT
@@ -102,21 +121,24 @@ require_paths:
102
121
  - lib
103
122
  required_ruby_version: !ruby/object:Gem::Requirement
104
123
  requirements:
105
- - - '>='
124
+ - - ">="
106
125
  - !ruby/object:Gem::Version
107
126
  version: '0'
108
127
  required_rubygems_version: !ruby/object:Gem::Requirement
109
128
  requirements:
110
- - - '>='
129
+ - - ">="
111
130
  - !ruby/object:Gem::Version
112
131
  version: '0'
113
132
  requirements: []
114
133
  rubyforge_project:
115
- rubygems_version: 2.0.2
134
+ rubygems_version: 2.2.2
116
135
  signing_key:
117
136
  specification_version: 4
118
137
  summary: The easiest, most common sense configuration management tool... because you
119
138
  just use fucking shell scripts.
120
139
  test_files:
121
- - spec/fss_spec.rb
122
- - spec/servers/search-service.yml
140
+ - spec/core_ext/hash_spec.rb
141
+ - spec/fucking_shell_scripts/cli_spec.rb
142
+ - spec/fucking_shell_scripts/connection_spec.rb
143
+ - spec/spec_helper.rb
144
+ - spec/support/servers/test-server.yml
data/spec/fss_spec.rb DELETED
@@ -1,13 +0,0 @@
1
- require 'fss'
2
-
3
- describe Fss do
4
- it "new" do
5
- Fss::Configuration.any_instance.stub(:settings_file).and_return('spec/support/settings.yml')
6
- Fss.new()
7
-
8
- end
9
-
10
-
11
-
12
- end
13
-