prospectus 0.0.1 → 0.0.2
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 +4 -4
- data/README.md +48 -2
- data/Rakefile +1 -1
- data/bin/prospectus +25 -0
- data/lib/prospectus.rb +54 -0
- data/lib/prospectus/helpers/github_api.rb +26 -0
- data/lib/prospectus/helpers/regex.rb +20 -0
- data/lib/prospectus/item.rb +63 -0
- data/lib/prospectus/list.rb +38 -0
- data/lib/prospectus/modules/gemnasium.rb +66 -0
- data/lib/prospectus/modules/git_tag.rb +14 -0
- data/lib/prospectus/modules/github_release.rb +28 -0
- data/lib/prospectus/modules/github_tag.rb +28 -0
- data/lib/prospectus/modules/grep.rb +29 -0
- data/lib/prospectus/modules/static.rb +18 -0
- data/lib/prospectus/modules/url_xpath.rb +35 -0
- data/lib/prospectus/state.rb +27 -0
- data/lib/prospectus/version.rb +5 -0
- data/prospectus.gemspec +10 -5
- data/spec/prospectus_spec.rb +0 -1
- metadata +44 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f56ad02011f3a9e8e71e0dd976d899d4b1f2662
|
4
|
+
data.tar.gz: 490bb12b8ad993b4c2e45ce724c9f98bc0efab67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00d3aaf31da7499f7f3372644631aa422b5288828705cfaeaff12dc840c3735bc7ef240c3e090b0749e8f7d3759f75b71b6d784ab410060befecc4554e9ca378
|
7
|
+
data.tar.gz: 2bfc8e02c7460827542404d3c4c0db17fb1d7788125f0ca08790d8ced78a170f7d7cbfb5246a4b9f6d492e1480aca2e8026f494b7eeb7fad4cfd514d2366d4cc
|
data/README.md
CHANGED
@@ -5,13 +5,59 @@ prospectus
|
|
5
5
|
[](https://gemnasium.com/akerl/prospectus)
|
6
6
|
[](https://circleci.com/gh/akerl/prospectus)
|
7
7
|
[](https://codecov.io/github/akerl/prospectus)
|
8
|
-
[](https://www.codacy.com/app/akerl/prospectus)
|
9
9
|
[](https://tldrlegal.com/license/mit-license)
|
10
10
|
|
11
|
-
DSL and tool
|
11
|
+
Write short scripts in a simple DSL and use the prospectus tool to check for changes in expected vs. actual state.
|
12
|
+
|
13
|
+
I use this for checking my [homebrew tap](https://github.com/halyard/homebrew-formulae) and [ArchLinux packages](https://github.com/amylum) for outdated package versions: it compares the version I'm packaging now against the upstream latest version.
|
12
14
|
|
13
15
|
## Usage
|
14
16
|
|
17
|
+
This gem reads a "./.prospectus" file to determine expected/actual state. A prospectus file can be pretty lightweight:
|
18
|
+
|
19
|
+
```
|
20
|
+
item do
|
21
|
+
name 'zlib'
|
22
|
+
|
23
|
+
expected do
|
24
|
+
github_release
|
25
|
+
repo 'madler/zlib'
|
26
|
+
regex /^v(.*)$/
|
27
|
+
end
|
28
|
+
|
29
|
+
actual do
|
30
|
+
git_tag
|
31
|
+
regex /^(.*)-\d+$/
|
32
|
+
end
|
33
|
+
end
|
34
|
+
```
|
35
|
+
|
36
|
+
Prospectus works by letting you define "items", each of which have an "expected" and "actual" block. You can specify a "name", as above, otherwise it will infer the name from the directory containing the prospectus file.
|
37
|
+
|
38
|
+
The expected/actual blocks first define the module to be used, and then define any configuration for that module.
|
39
|
+
|
40
|
+
To run the check, just run `prospectus` in the directory with the .prospectus file, or use `prospectus -d /path/to/directory`.
|
41
|
+
|
42
|
+
## Included Modules
|
43
|
+
|
44
|
+
### static_test
|
45
|
+
|
46
|
+
Used for testing, this allows you to manually declare a state:
|
47
|
+
|
48
|
+
```
|
49
|
+
item do
|
50
|
+
expected do
|
51
|
+
static_test
|
52
|
+
set '0.0.3'
|
53
|
+
end
|
54
|
+
actual do
|
55
|
+
static_test
|
56
|
+
set '0.0.1'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
```
|
60
|
+
|
15
61
|
## Installation
|
16
62
|
|
17
63
|
gem install prospectus
|
data/Rakefile
CHANGED
data/bin/prospectus
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'prospectus'
|
4
|
+
require 'mercenary'
|
5
|
+
|
6
|
+
Mercenary.program(:prospectus) do |p|
|
7
|
+
p.version Prospectus::VERSION
|
8
|
+
p.description 'Tool and DSL for checking expected vs actual state'
|
9
|
+
p.syntax 'prospectus [options]'
|
10
|
+
|
11
|
+
# rubocop:disable Metrics/LineLength
|
12
|
+
p.option :directory, '-d DIR', '--directory DIR', 'Change to directory before loading'
|
13
|
+
p.option :good_only, '-g', '--good', 'Show only items with good state'
|
14
|
+
p.option :all, '-a', '--all', 'Show all items'
|
15
|
+
# rubocop:enable Metrics/LineLength
|
16
|
+
|
17
|
+
p.action do |_, options|
|
18
|
+
options[:directory] ||= '.'
|
19
|
+
Dir.chdir(options[:directory]) do
|
20
|
+
Prospectus.load_from_file(options).check.each do |x|
|
21
|
+
puts "#{x.name}: #{x.actual} / #{x.expected}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/prospectus.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'logcabin'
|
2
|
+
|
3
|
+
##
|
4
|
+
# Tool and DSL for checking expected vs actual state
|
5
|
+
module Prospectus
|
6
|
+
DEFAULT_FILE = './.prospectus'
|
7
|
+
|
8
|
+
class << self
|
9
|
+
##
|
10
|
+
# Insert a helper .new() method for creating a new Cache object
|
11
|
+
def new(*args)
|
12
|
+
self::List.new(*args)
|
13
|
+
end
|
14
|
+
|
15
|
+
##
|
16
|
+
# Method for loading list from DSL
|
17
|
+
def load_from_file(params = {})
|
18
|
+
params[:file] ||= DEFAULT_FILE
|
19
|
+
list = List.new(params)
|
20
|
+
dsl = ListDSL.new(list, params)
|
21
|
+
dsl.instance_eval(File.read(params[:file]), params[:file])
|
22
|
+
list
|
23
|
+
end
|
24
|
+
|
25
|
+
def modules
|
26
|
+
@modules ||= LogCabin.new(load_path: load_path(:modules))
|
27
|
+
end
|
28
|
+
|
29
|
+
def helpers
|
30
|
+
@helpers ||= LogCabin.new(load_path: load_path(:helpers))
|
31
|
+
end
|
32
|
+
|
33
|
+
def extra_dep(name, dep)
|
34
|
+
require dep
|
35
|
+
rescue LoadError
|
36
|
+
raise("The #{name} module requires the #{dep} gem")
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def gem_dir
|
42
|
+
Gem::Specification.find_by_name('prospectus').gem_dir
|
43
|
+
end
|
44
|
+
|
45
|
+
def load_path(type)
|
46
|
+
File.join(gem_dir, 'lib', 'prospectus', type.to_s)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
require 'prospectus/version'
|
52
|
+
require 'prospectus/list'
|
53
|
+
require 'prospectus/item'
|
54
|
+
require 'prospectus/state'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
Prospectus.extra_dep('github_api', 'octoauth')
|
2
|
+
|
3
|
+
module LogCabin
|
4
|
+
module Modules
|
5
|
+
##
|
6
|
+
# Provide an api method for modules to query GitHub
|
7
|
+
module GithubApi
|
8
|
+
def github_api
|
9
|
+
@github_api ||= Octokit::Client.new(
|
10
|
+
access_token: auth.token,
|
11
|
+
auto_paginate: true
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def auth
|
18
|
+
@auth ||= Octoauth.new(
|
19
|
+
note: 'Prospectus',
|
20
|
+
file: :default,
|
21
|
+
autosave: true
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module LogCabin
|
2
|
+
module Modules
|
3
|
+
##
|
4
|
+
# Use regex to adjust state value
|
5
|
+
module Regex
|
6
|
+
def regex_helper(value)
|
7
|
+
return value unless @find
|
8
|
+
fail("Value does not match regex: #{value}") unless value.match(@find)
|
9
|
+
value.sub(@find, @replace)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def regex(find, replace = '\1')
|
15
|
+
@find = find
|
16
|
+
@replace = replace
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Prospectus
|
2
|
+
##
|
3
|
+
# Define item objects that defined expected vs actual state
|
4
|
+
class Item
|
5
|
+
attr_reader :list
|
6
|
+
|
7
|
+
def initialize(params = {})
|
8
|
+
@options = params
|
9
|
+
@list = List.new(params)
|
10
|
+
end
|
11
|
+
|
12
|
+
def name
|
13
|
+
@name ||= File.basename Dir.pwd
|
14
|
+
end
|
15
|
+
|
16
|
+
def expected
|
17
|
+
@expected || fail("No expected state was loaded for #{name}")
|
18
|
+
end
|
19
|
+
|
20
|
+
def actual
|
21
|
+
@actual || fail("No actual state was loaded for #{name}")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
##
|
26
|
+
# DSL for wrapping eval of item files
|
27
|
+
class ItemDSL
|
28
|
+
def initialize(item, params)
|
29
|
+
@item = item
|
30
|
+
@options = params
|
31
|
+
end
|
32
|
+
|
33
|
+
def name(value)
|
34
|
+
@item.instance_variable_set(:@name, value)
|
35
|
+
end
|
36
|
+
|
37
|
+
def expected(&block)
|
38
|
+
state(:@expected, &block)
|
39
|
+
end
|
40
|
+
|
41
|
+
def actual(&block)
|
42
|
+
state(:@actual, &block)
|
43
|
+
end
|
44
|
+
|
45
|
+
def deps(&block)
|
46
|
+
dsl = ListDSL.new(@item.list, @options)
|
47
|
+
dsl.instance_eval(&block)
|
48
|
+
@item.list.items.each do |dep|
|
49
|
+
dep.instance_variable_set(:@name, "#{@item.name}::#{dep.name}")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def state(name, &block)
|
56
|
+
state = State.new(@options)
|
57
|
+
dsl = StateDSL.new(state, @options)
|
58
|
+
dsl.instance_eval(&block)
|
59
|
+
dsl.load!
|
60
|
+
@item.instance_variable_set(name, state.value)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Prospectus
|
2
|
+
##
|
3
|
+
# Define list object that contains items
|
4
|
+
class List
|
5
|
+
def initialize(params = {})
|
6
|
+
@options = params
|
7
|
+
end
|
8
|
+
|
9
|
+
def items
|
10
|
+
@items ||= []
|
11
|
+
end
|
12
|
+
|
13
|
+
def check
|
14
|
+
all, good_only = @options.values_at(:all, :good_only)
|
15
|
+
items.select do |x|
|
16
|
+
match = x.expected == x.actual
|
17
|
+
true if all || (!match ^ good_only)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# DSL for wrapping eval of list files
|
24
|
+
class ListDSL
|
25
|
+
def initialize(list, params)
|
26
|
+
@list = list
|
27
|
+
@options = params
|
28
|
+
end
|
29
|
+
|
30
|
+
def item(&block)
|
31
|
+
item = Item.new(@options)
|
32
|
+
dsl = ItemDSL.new(item, @options)
|
33
|
+
dsl.instance_eval(&block)
|
34
|
+
@list.items << item
|
35
|
+
item.list.items.each { |x| @list.items << x }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
Prospectus.extra_dep('gemnasium', 'netrc')
|
2
|
+
require 'net/http'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module LogCabin
|
6
|
+
module Modules
|
7
|
+
##
|
8
|
+
# Pull state from Gemnasium
|
9
|
+
module Gemnasium
|
10
|
+
def load!
|
11
|
+
fail('No slug provided') unless @slug
|
12
|
+
@state.value = parse_api
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def parse_api
|
18
|
+
%w(red yellow).each do |color|
|
19
|
+
return color if colors.include? color
|
20
|
+
end
|
21
|
+
'green'
|
22
|
+
end
|
23
|
+
|
24
|
+
def colors
|
25
|
+
@colors ||= api_data.map { |x| x['first_level'] && x['color'] }
|
26
|
+
end
|
27
|
+
|
28
|
+
def api_data
|
29
|
+
@resp ||= Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
|
30
|
+
request = Net::HTTP::Get.new uri.request_uri
|
31
|
+
request.basic_auth(*creds)
|
32
|
+
response = http.request(request)
|
33
|
+
JSON.parse(response.body)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def creds
|
38
|
+
netrc[site] || prompt_for_creds
|
39
|
+
end
|
40
|
+
|
41
|
+
def prompt_for_creds
|
42
|
+
puts 'Please enter your API key from https://gemnasium.com/settings >> '
|
43
|
+
resp = gets.chomp
|
44
|
+
netrc[site] = 'X', resp
|
45
|
+
netrc.save
|
46
|
+
netrc[site]
|
47
|
+
end
|
48
|
+
|
49
|
+
def netrc
|
50
|
+
@netrc ||= Netrc.read
|
51
|
+
end
|
52
|
+
|
53
|
+
def uri
|
54
|
+
@uri ||= URI("https://api.gemnasium.com/projects/#{@slug}/dependencies")
|
55
|
+
end
|
56
|
+
|
57
|
+
def site
|
58
|
+
'gemnasium.com'
|
59
|
+
end
|
60
|
+
|
61
|
+
def slug(value)
|
62
|
+
@slug = value
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
module LogCabin
|
5
|
+
module Modules
|
6
|
+
##
|
7
|
+
# Pull state from a GitHub release
|
8
|
+
module GithubRelease
|
9
|
+
include Prospectus.helpers.find(:regex)
|
10
|
+
include Prospectus.helpers.find(:github_api)
|
11
|
+
|
12
|
+
def load!
|
13
|
+
fail('No repo specified') unless @repo
|
14
|
+
@state.value = regex_helper(release)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def release
|
20
|
+
@release ||= github_api.latest_release(@repo).tag_name
|
21
|
+
end
|
22
|
+
|
23
|
+
def repo(value)
|
24
|
+
@repo = value
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
module LogCabin
|
5
|
+
module Modules
|
6
|
+
##
|
7
|
+
# Pull state from a GitHub tag
|
8
|
+
module GithubTag
|
9
|
+
include Prospectus.helpers.find(:regex)
|
10
|
+
include Prospectus.helpers.find(:github_api)
|
11
|
+
|
12
|
+
def load!
|
13
|
+
fail('No repo specified') unless @repo
|
14
|
+
@state.value = regex_helper(tag)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def tag
|
20
|
+
@tag ||= github_api.tags(@repo).first.name
|
21
|
+
end
|
22
|
+
|
23
|
+
def repo(value)
|
24
|
+
@repo = value
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module LogCabin
|
2
|
+
module Modules
|
3
|
+
##
|
4
|
+
# Pull state from a local file
|
5
|
+
module Grep
|
6
|
+
include Prospectus.helpers.find(:regex)
|
7
|
+
|
8
|
+
def load!
|
9
|
+
fail('No file specified') unless @file
|
10
|
+
line = read_file
|
11
|
+
@state.value = regex_helper(line)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def read_file
|
17
|
+
File.read(@file).each_line do |line|
|
18
|
+
line = line.chomp
|
19
|
+
return line if line.match(@find)
|
20
|
+
end
|
21
|
+
fail("No lines in #{@file} matched #{@find}")
|
22
|
+
end
|
23
|
+
|
24
|
+
def file(value)
|
25
|
+
@file = value
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module LogCabin
|
2
|
+
module Modules
|
3
|
+
##
|
4
|
+
# Simple text class, uses "set 'value'" to declare value
|
5
|
+
module Static
|
6
|
+
def load!
|
7
|
+
fail('Must use `set` to provide a value') unless @value
|
8
|
+
@state.value = @value
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def set(value)
|
14
|
+
@value = value
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Prospectus.extra_dep('url_xpath', 'nokogiri')
|
2
|
+
|
3
|
+
require 'open-uri'
|
4
|
+
|
5
|
+
module LogCabin
|
6
|
+
module Modules
|
7
|
+
##
|
8
|
+
# Pull state from a GitHub tag
|
9
|
+
module UrlXpath
|
10
|
+
include Prospectus.helpers.find(:regex)
|
11
|
+
|
12
|
+
def load!
|
13
|
+
fail('No url provided') unless @url
|
14
|
+
fail('No xpath provided') unless @xpath
|
15
|
+
text = parse_page
|
16
|
+
@state.value = regex_helper(text)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def parse_page
|
22
|
+
page = Nokogiri::HTML(open(@url)) { |config| config.strict.nonet }
|
23
|
+
page.xpath(@xpath).text
|
24
|
+
end
|
25
|
+
|
26
|
+
def url(value)
|
27
|
+
@url = value
|
28
|
+
end
|
29
|
+
|
30
|
+
def xpath(value)
|
31
|
+
@xpath = value
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Prospectus
|
2
|
+
##
|
3
|
+
# Define a state object that supports modular checks
|
4
|
+
class State
|
5
|
+
attr_accessor :value
|
6
|
+
|
7
|
+
def initialize(params = {})
|
8
|
+
@options = params
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
##
|
13
|
+
# DSL for wrapping eval of states
|
14
|
+
class StateDSL
|
15
|
+
def initialize(state, params)
|
16
|
+
@state = state
|
17
|
+
@options = params
|
18
|
+
end
|
19
|
+
|
20
|
+
def method_missing(method, *args, &block)
|
21
|
+
return super if @module
|
22
|
+
@module = Prospectus.modules.find(method)
|
23
|
+
return super unless @module
|
24
|
+
extend @module
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/prospectus.gemspec
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
+
$:.unshift File.expand_path('../lib/', __FILE__)
|
2
|
+
require 'prospectus/version'
|
3
|
+
|
1
4
|
Gem::Specification.new do |s|
|
2
5
|
s.name = 'prospectus'
|
3
|
-
s.version =
|
6
|
+
s.version = Prospectus::VERSION
|
4
7
|
s.date = Time.now.strftime('%Y-%m-%d')
|
5
8
|
|
6
|
-
s.summary = '
|
7
|
-
s.description = "
|
9
|
+
s.summary = 'Tool and DSL for checking expected vs actual state'
|
10
|
+
s.description = "Tool and DSL for checking expected vs actual state"
|
8
11
|
s.authors = ['Les Aker']
|
9
12
|
s.email = 'me@lesaker.org'
|
10
13
|
s.homepage = 'https://github.com/akerl/prospectus'
|
@@ -12,12 +15,14 @@ Gem::Specification.new do |s|
|
|
12
15
|
|
13
16
|
s.files = `git ls-files`.split
|
14
17
|
s.test_files = `git ls-files spec/*`.split
|
18
|
+
s.executables = ['prospectus']
|
19
|
+
|
20
|
+
s.add_dependency 'mercenary', '~> 0.3.4'
|
21
|
+
s.add_dependency 'logcabin', '~> 0.0.1'
|
15
22
|
|
16
23
|
s.add_development_dependency 'rubocop', '~> 0.35.0'
|
17
24
|
s.add_development_dependency 'rake', '~> 10.4.0'
|
18
25
|
s.add_development_dependency 'codecov', '~> 0.1.1'
|
19
26
|
s.add_development_dependency 'rspec', '~> 3.4.0'
|
20
27
|
s.add_development_dependency 'fuubar', '~> 2.0.0'
|
21
|
-
s.add_development_dependency 'webmock', '~> 1.22.0'
|
22
|
-
s.add_development_dependency 'vcr', '~> 3.0.0'
|
23
28
|
end
|
data/spec/prospectus_spec.rb
CHANGED
metadata
CHANGED
@@ -1,116 +1,117 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prospectus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Les Aker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: mercenary
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
20
|
-
type: :
|
19
|
+
version: 0.3.4
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.3.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: logcabin
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
-
type: :
|
33
|
+
version: 0.0.1
|
34
|
+
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.0.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rubocop
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.35.0
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.35.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 10.4.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 10.4.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: codecov
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 0.1.1
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 0.1.1
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 3.4.0
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 3.4.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: fuubar
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 2.0.0
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
111
|
-
description:
|
110
|
+
version: 2.0.0
|
111
|
+
description: Tool and DSL for checking expected vs actual state
|
112
112
|
email: me@lesaker.org
|
113
|
-
executables:
|
113
|
+
executables:
|
114
|
+
- prospectus
|
114
115
|
extensions: []
|
115
116
|
extra_rdoc_files: []
|
116
117
|
files:
|
@@ -121,8 +122,22 @@ files:
|
|
121
122
|
- LICENSE
|
122
123
|
- README.md
|
123
124
|
- Rakefile
|
125
|
+
- bin/prospectus
|
124
126
|
- circle.yml
|
125
127
|
- lib/prospectus.rb
|
128
|
+
- lib/prospectus/helpers/github_api.rb
|
129
|
+
- lib/prospectus/helpers/regex.rb
|
130
|
+
- lib/prospectus/item.rb
|
131
|
+
- lib/prospectus/list.rb
|
132
|
+
- lib/prospectus/modules/gemnasium.rb
|
133
|
+
- lib/prospectus/modules/git_tag.rb
|
134
|
+
- lib/prospectus/modules/github_release.rb
|
135
|
+
- lib/prospectus/modules/github_tag.rb
|
136
|
+
- lib/prospectus/modules/grep.rb
|
137
|
+
- lib/prospectus/modules/static.rb
|
138
|
+
- lib/prospectus/modules/url_xpath.rb
|
139
|
+
- lib/prospectus/state.rb
|
140
|
+
- lib/prospectus/version.rb
|
126
141
|
- prospectus.gemspec
|
127
142
|
- spec/prospectus_spec.rb
|
128
143
|
- spec/spec_helper.rb
|
@@ -146,10 +161,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
161
|
version: '0'
|
147
162
|
requirements: []
|
148
163
|
rubyforge_project:
|
149
|
-
rubygems_version: 2.
|
164
|
+
rubygems_version: 2.5.1
|
150
165
|
signing_key:
|
151
166
|
specification_version: 4
|
152
|
-
summary:
|
167
|
+
summary: Tool and DSL for checking expected vs actual state
|
153
168
|
test_files:
|
154
169
|
- spec/prospectus_spec.rb
|
155
170
|
- spec/spec_helper.rb
|