fucking_shell_scripts 0.99 → 1.0

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: 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
-