travish 0.0.1 → 0.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: 12144020c1876ce458915666248c1ad1bab89c58
4
- data.tar.gz: afa69742dba43ef5d14ab1f1a2eb23cecc717928
3
+ metadata.gz: c366abeba5827d1aebfcd355aef252f83182b168
4
+ data.tar.gz: bba5edc2c510e5285ceeb08589bfce8c030bf4df
5
5
  SHA512:
6
- metadata.gz: 39b45b24431a25332328c1c359329f50a38232e0349912adaf737afa4c642f4b49d0b73ec7879a06996359b360365da0a7d88d78e1439a3225f1599a395481e4
7
- data.tar.gz: c1dd864ab13889a2162f259b5f2bd0bb5c3a1e3111d54b28e68a3a8bd01a4fc09f91470ca042ed5ae1cbe9a856b6a9e8220f164d99500af9d4d7e3c100337953
6
+ metadata.gz: 601836afba0897ae33cebbb573b6f29cce17b8c749ea34921a1202e6dffde3d833b0452cf708161a8e7b67691dedb56fb6f6a2baf28b3c1630e3ebab330dbba6
7
+ data.tar.gz: d6b874ddd50cf66eb78aa9d5e4c2a91e93b162530bffd202af5ca8e4300946144d2568cd7f1c688dcabbe17ee40232c534c1faf658cad2bb6c137beb0fb0960b
data/Gemfile CHANGED
@@ -11,4 +11,5 @@ group :development do
11
11
  gem "bundler", "~> 1.0"
12
12
  gem "jeweler", "~> 2.0.1"
13
13
  gem "simplecov", ">= 0"
14
+ gem 'rspec', '~> 3.2.0'
14
15
  end
@@ -11,6 +11,7 @@ GEM
11
11
  builder (3.2.2)
12
12
  descendants_tracker (0.0.4)
13
13
  thread_safe (~> 0.3, >= 0.3.1)
14
+ diff-lcs (1.2.5)
14
15
  docile (1.1.5)
15
16
  faraday (0.9.1)
16
17
  multipart-post (>= 1.2, < 3)
@@ -54,6 +55,19 @@ GEM
54
55
  rake (10.4.2)
55
56
  rdoc (3.12.2)
56
57
  json (~> 1.4)
58
+ rspec (3.2.0)
59
+ rspec-core (~> 3.2.0)
60
+ rspec-expectations (~> 3.2.0)
61
+ rspec-mocks (~> 3.2.0)
62
+ rspec-core (3.2.2)
63
+ rspec-support (~> 3.2.0)
64
+ rspec-expectations (3.2.0)
65
+ diff-lcs (>= 1.2.0, < 2.0)
66
+ rspec-support (~> 3.2.0)
67
+ rspec-mocks (3.2.1)
68
+ diff-lcs (>= 1.2.0, < 2.0)
69
+ rspec-support (~> 3.2.0)
70
+ rspec-support (3.2.2)
57
71
  shoulda (3.5.0)
58
72
  shoulda-context (~> 1.0, >= 1.0.1)
59
73
  shoulda-matchers (>= 1.4.1, < 3.0)
@@ -76,5 +90,6 @@ DEPENDENCIES
76
90
  bundler (~> 1.0)
77
91
  jeweler (~> 2.0.1)
78
92
  rdoc (~> 3.12)
93
+ rspec (~> 3.2.0)
79
94
  shoulda
80
95
  simplecov
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.1.0
@@ -0,0 +1,75 @@
1
+ module Travish
2
+ # Handles parsing the environment from a .travis.yml file
3
+ # and merging it with overrides from other source such as
4
+ # ENV
5
+ class EnvironmentParser
6
+ STRING_REG_EX = /^(.+)="?(.+?)"?$/
7
+
8
+ attr_accessor :environment_hash
9
+
10
+ # Create a new instance of `EnvironmentParser`
11
+ def initialize(env, *args)
12
+ @env = env
13
+ @env = [@env] if @env.is_a? String
14
+ @override_envs = args
15
+ @override_envs ||= []
16
+ end
17
+
18
+ # The resulting environment hash after merging
19
+ # the environment from the travis file with
20
+ # the specified overrides. This method is lazy
21
+ # and calculates its result on the first call
22
+ def environment_hash
23
+ @environment_hash ||= build_environment_hash
24
+ end
25
+
26
+ private
27
+
28
+ # Build the environment hash by extracting the environment
29
+ # variables from the provided travis environment and merging
30
+ # with any provided overrides
31
+ def build_environment_hash
32
+ parsed_variables = {}
33
+ @env.each do |env_row|
34
+ # Each row can potentially contain multiple environment
35
+ # variables
36
+ variables = extract_variables(env_row)
37
+
38
+ variables.each do |variables_with_values|
39
+ variables_with_values.each do |key, value|
40
+ parsed_variables[key] = value
41
+ end
42
+ end
43
+ end
44
+
45
+ @override_envs.each do |env|
46
+ parsed_variables = parsed_variables.merge env
47
+ end
48
+
49
+ parsed_variables
50
+ end
51
+
52
+ # Extract environment variables from a value
53
+ # The value is expected to be either a hash or a string with
54
+ # one or more key value pairs on the form
55
+ # KEY=VALUE
56
+ def extract_variables(variable)
57
+ return [variable] if variable.is_a? Hash
58
+ return extract_variables_from_string(variable) if variable.is_a? String
59
+
60
+ []
61
+ end
62
+
63
+ # Extract variables from a string on the form
64
+ # KEY1=VALUE1 KEY2="VALUE2"
65
+ # Optional quoting around the value is allowed
66
+ def extract_variables_from_string(string)
67
+ string.split(/ /).map do |defintion|
68
+ match = defintion.match STRING_REG_EX
69
+ next nil unless match
70
+
71
+ { match[1] => match[2] }
72
+ end.reject(&:nil?)
73
+ end
74
+ end
75
+ end
@@ -1,9 +1,10 @@
1
1
  require "rubygems"
2
2
  require 'yaml'
3
+ require 'environment_parser'
3
4
 
4
5
  module Travish
5
6
  class Runner
6
-
7
+
7
8
  def help
8
9
  puts ""
9
10
  puts "Travish - emulates the OSX experience for travis."
@@ -12,52 +13,55 @@ module Travish
12
13
  puts ""
13
14
  puts " ./"
14
15
  end
15
-
16
+
16
17
  def run
17
18
  validate
18
- environment = default_yml.merge local_travis_yml
19
-
20
- run_commands environment["before_install"]
21
- run_commands environment["install"]
22
- run_commands environment["before_script"]
23
- run_commands environment["script"]
24
- end
25
-
19
+ travis_file = default_yml.merge local_travis_yml
20
+ parser = EnvironmentParser.new(travis_file['env']['global'], ENV)
21
+
22
+ run_commands(travis_file["before_install"], parser.environment_hash)
23
+ run_commands(travis_file["install"], parser.environment_hash)
24
+ run_commands(travis_file["before_script"], parser.environment_hash)
25
+ run_commands(travis_file["script"], parser.environment_hash)
26
+ end
27
+
26
28
  # -- faffing
27
-
29
+
28
30
  def initialize(args)
29
31
  # find a command
30
32
  @params = args
31
33
  command = @params[0].to_sym rescue :help
32
34
  commands.include?(command) ? send(command.to_sym) : help
33
35
  end
34
-
36
+
35
37
  private
36
-
37
- def run_commands array
38
+
39
+ def run_commands(array, environment = {})
40
+ return if array.nil?
41
+ array = [array] if array.is_a?(String)
38
42
  array.each do |command|
39
- system command
43
+ puts "> " + command
44
+ system(environment, command)
40
45
  end
41
46
  end
42
-
47
+
43
48
  def local_travis_yml
44
49
  YAML.load_file('.travis.yml')
45
50
  end
46
-
51
+
47
52
  def default_yml
48
53
  {}
49
54
  end
50
-
55
+
51
56
  def validate
52
57
  unless File.exists? ".travis.yml"
53
58
  puts "You need to have a `travis.yml` in this folder."
54
59
  exit
55
60
  end
56
61
  end
57
-
62
+
58
63
  def commands
59
64
  (public_methods - Object.public_methods).sort.map{ |c| c.to_sym }
60
65
  end
61
-
62
- end
66
+ end
63
67
  end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+ require_relative '../lib/environment_parser.rb'
3
+
4
+ module Travish
5
+ RSpec.describe EnvironmentParser do
6
+ describe '.environment_hash' do
7
+ let(:global_env) do
8
+ [
9
+ 'KEY1=VALUE1 KEY2=VALUE2',
10
+ { 'KEY3' => 'VALUE3' },
11
+ 'KEY_WITH_QUOTED_VALUE="QUOTED"'
12
+ ]
13
+ end
14
+
15
+ let(:overrides) do
16
+ [
17
+ { 'KEY1' => 'V1', 'KEY2' => 'V2', 'KEY3' => 'not V3' },
18
+ { 'KEY3' => 'V3' }
19
+ ]
20
+ end
21
+
22
+ it 'produces the correct result without overrides' do
23
+ parser = described_class.new(global_env)
24
+ hash = parser.environment_hash
25
+
26
+ expect(hash).to eq('KEY1' => 'VALUE1',
27
+ 'KEY2' => 'VALUE2',
28
+ 'KEY3' => 'VALUE3',
29
+ 'KEY_WITH_QUOTED_VALUE' => 'QUOTED')
30
+ end
31
+
32
+ it 'produces the corect result with overrides' do
33
+ parser = described_class.new(global_env, *overrides)
34
+ hash = parser.environment_hash
35
+
36
+ expect(hash).to eq('KEY1' => 'V1', 'KEY2' => 'V2',
37
+ 'KEY3' => 'V3', 'KEY_WITH_QUOTED_VALUE' => 'QUOTED')
38
+ end
39
+
40
+ it 'produces the correct result with a single string as the environment' do
41
+ parser = described_class.new('KEY=VALUE OTHER_KEY="OTHER_VALUE"')
42
+ hash = parser.environment_hash
43
+
44
+ expect(hash).to eq('KEY' => 'VALUE', 'OTHER_KEY' => 'OTHER_VALUE')
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1 @@
1
+ require 'rspec'
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: travish 0.0.1 ruby lib
5
+ # stub: travish 0.1.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "travish"
9
- s.version = "0.0.1"
9
+ s.version = "0.1.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Orta Therox"]
14
- s.date = "2015-03-26"
14
+ s.date = "2015-04-07"
15
15
  s.description = " Emulates a tiny subset of the travis workflow for running your own CI based on the .travis.yml "
16
16
  s.email = "orta.therox@gmail.com"
17
17
  s.executables = ["travish"]
@@ -28,9 +28,10 @@ Gem::Specification.new do |s|
28
28
  "Rakefile",
29
29
  "VERSION",
30
30
  "bin/travish",
31
+ "lib/environment_parser.rb",
31
32
  "lib/travish.rb",
32
- "test/helper.rb",
33
- "test/test_travish.rb",
33
+ "spec/environment_parser_spec.rb",
34
+ "spec/spec_helper.rb",
34
35
  "travish.gemspec"
35
36
  ]
36
37
  s.homepage = "http://github.com/orta/travish"
@@ -47,12 +48,14 @@ Gem::Specification.new do |s|
47
48
  s.add_development_dependency(%q<bundler>, ["~> 1.0"])
48
49
  s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
49
50
  s.add_development_dependency(%q<simplecov>, [">= 0"])
51
+ s.add_development_dependency(%q<rspec>, ["~> 3.2.0"])
50
52
  else
51
53
  s.add_dependency(%q<shoulda>, [">= 0"])
52
54
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
53
55
  s.add_dependency(%q<bundler>, ["~> 1.0"])
54
56
  s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
55
57
  s.add_dependency(%q<simplecov>, [">= 0"])
58
+ s.add_dependency(%q<rspec>, ["~> 3.2.0"])
56
59
  end
57
60
  else
58
61
  s.add_dependency(%q<shoulda>, [">= 0"])
@@ -60,6 +63,7 @@ Gem::Specification.new do |s|
60
63
  s.add_dependency(%q<bundler>, ["~> 1.0"])
61
64
  s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
62
65
  s.add_dependency(%q<simplecov>, [">= 0"])
66
+ s.add_dependency(%q<rspec>, ["~> 3.2.0"])
63
67
  end
64
68
  end
65
69
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: travish
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Orta Therox
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-26 00:00:00.000000000 Z
11
+ date: 2015-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shoulda
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 3.2.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 3.2.0
83
97
  description: " Emulates a tiny subset of the travis workflow for running your own
84
98
  CI based on the .travis.yml "
85
99
  email: orta.therox@gmail.com
@@ -98,9 +112,10 @@ files:
98
112
  - Rakefile
99
113
  - VERSION
100
114
  - bin/travish
115
+ - lib/environment_parser.rb
101
116
  - lib/travish.rb
102
- - test/helper.rb
103
- - test/test_travish.rb
117
+ - spec/environment_parser_spec.rb
118
+ - spec/spec_helper.rb
104
119
  - travish.gemspec
105
120
  homepage: http://github.com/orta/travish
106
121
  licenses:
@@ -1,34 +0,0 @@
1
- require 'simplecov'
2
-
3
- module SimpleCov::Configuration
4
- def clean_filters
5
- @filters = []
6
- end
7
- end
8
-
9
- SimpleCov.configure do
10
- clean_filters
11
- load_adapter 'test_frameworks'
12
- end
13
-
14
- ENV["COVERAGE"] && SimpleCov.start do
15
- add_filter "/.rvm/"
16
- end
17
- require 'rubygems'
18
- require 'bundler'
19
- begin
20
- Bundler.setup(:default, :development)
21
- rescue Bundler::BundlerError => e
22
- $stderr.puts e.message
23
- $stderr.puts "Run `bundle install` to install missing gems"
24
- exit e.status_code
25
- end
26
- require 'test/unit'
27
- require 'shoulda'
28
-
29
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
30
- $LOAD_PATH.unshift(File.dirname(__FILE__))
31
- require 'travish'
32
-
33
- class Test::Unit::TestCase
34
- end
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestTravish < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end