huck 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 +7 -0
- data/lib/huck/generator.rb +57 -0
- data/lib/huck/generators/facter.rb +23 -0
- data/lib/huck/generators/ohai.rb +29 -0
- data/lib/huck/handler.rb +29 -0
- data/lib/huck/handlers/exec.rb +41 -0
- data/lib/huck/receiver.rb +35 -0
- data/lib/huck/receivers/sqs.rb +52 -0
- data/lib/huck/sender.rb +35 -0
- data/lib/huck/senders/sqs.rb +54 -0
- data/lib/huck/util.rb +52 -0
- data/lib/huck/version.rb +3 -0
- data/lib/huck.rb +75 -0
- metadata +111 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9e205a66c535c1083e677ee4c21216c82a7e1871
|
4
|
+
data.tar.gz: 35f2101dd7b4bf04061a5551f10359d7c28ecfb5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9290fec08bc1f3f37ebab767daaa3b6c216eb8c5599d7287c86dfcc92e883342a0773cab1da1f2a8bdeb43645bc3cfc158a68184d068557a3d2b537467aa7464
|
7
|
+
data.tar.gz: 13fe443bd3e52143a0c9da1925ea104306335f3391a2ac96a52331b0f62a2e3da6c2b7f9c0090462f1469604bf7e447c9392d2ef27a24158b81dd4ce888243ff
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Huck
|
2
|
+
|
3
|
+
class Generator
|
4
|
+
|
5
|
+
# This method will call the generation method, and return the data in the
|
6
|
+
# desired format.
|
7
|
+
def dump kwargs = {}
|
8
|
+
format = Huck::getarg kwargs, :format, 'json'
|
9
|
+
data = generate
|
10
|
+
if !data.is_a? Hash
|
11
|
+
raise RuntimeError, 'cannot handle non-hash data'
|
12
|
+
end
|
13
|
+
|
14
|
+
case format
|
15
|
+
when 'json'
|
16
|
+
return JSON.dump data
|
17
|
+
when 'yaml'
|
18
|
+
return YAML.dump data
|
19
|
+
else
|
20
|
+
raise RuntimeError, "unknown format '#{format}'"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Given a generator's name (or no name), return a new generator instance
|
25
|
+
#
|
26
|
+
# == Parameters:
|
27
|
+
# name::
|
28
|
+
# The name of the generator, or empty/nil to guess
|
29
|
+
#
|
30
|
+
# == Returns:
|
31
|
+
# A Huck::Generator instance
|
32
|
+
#
|
33
|
+
def self.factory name
|
34
|
+
if name.nil?
|
35
|
+
if Huck::try_load 'facter'
|
36
|
+
name = 'facter'
|
37
|
+
elsif Huck::try_load 'ohai'
|
38
|
+
name = 'ohai'
|
39
|
+
else
|
40
|
+
raise RuntimeError, 'unable to load any generators'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
case name
|
45
|
+
when 'facter'
|
46
|
+
gen = Generators::FacterGenerator.new
|
47
|
+
when 'ohai'
|
48
|
+
gen = Generators::OhaiGenerator.new
|
49
|
+
else
|
50
|
+
raise RuntimeError, "bad generator: #{name}"
|
51
|
+
end
|
52
|
+
|
53
|
+
return gen
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Huck
|
2
|
+
|
3
|
+
module Generators
|
4
|
+
|
5
|
+
# Facter provider for generating consumeable data
|
6
|
+
class FacterGenerator < Generator
|
7
|
+
|
8
|
+
# Load required modules for facter generator
|
9
|
+
def initialize
|
10
|
+
require 'facter'
|
11
|
+
end
|
12
|
+
|
13
|
+
# This method generates the data and returns it as a hash
|
14
|
+
#
|
15
|
+
# == Returns:
|
16
|
+
# A hash of facts as returned by facter
|
17
|
+
def generate
|
18
|
+
Facter.to_hash
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Huck
|
2
|
+
|
3
|
+
module Generators
|
4
|
+
|
5
|
+
# Ohai provider for generating consumeable data
|
6
|
+
class OhaiGenerator < Generator
|
7
|
+
|
8
|
+
# Load required modules for ohai generator
|
9
|
+
def initialize
|
10
|
+
require 'ohai/system'
|
11
|
+
end
|
12
|
+
|
13
|
+
# This method generates the data and returns it as a hash
|
14
|
+
#
|
15
|
+
# == Returns
|
16
|
+
# A hash of hints as returned by ohai
|
17
|
+
def generate
|
18
|
+
ohai = Ohai::System.new
|
19
|
+
ohai.all_plugins
|
20
|
+
|
21
|
+
# Need to load the JSON output, since ohai emits a 'mash' object map
|
22
|
+
# instead of normal hashes, making serialization ugly in some cases
|
23
|
+
# like YAML where canonical objects (eg. !ruby/mash) is emitted.
|
24
|
+
JSON.load ohai.json_pretty_print
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/huck/handler.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
module Huck
|
2
|
+
|
3
|
+
# Base handler class
|
4
|
+
class Handler
|
5
|
+
|
6
|
+
# Given a handler's name (or no name), return a new handler instance
|
7
|
+
#
|
8
|
+
# == Parameters:
|
9
|
+
# name::
|
10
|
+
# The name of the handler, or nil to guess
|
11
|
+
#
|
12
|
+
# == Returns:
|
13
|
+
# A Huck::Handler instance
|
14
|
+
#
|
15
|
+
def self.factory name
|
16
|
+
name = 'exec' if name.nil?
|
17
|
+
|
18
|
+
case name
|
19
|
+
when 'exec'
|
20
|
+
hand = Handlers::ExecHandler.new
|
21
|
+
else
|
22
|
+
raise RuntimeError, "bad handler: #{name}"
|
23
|
+
end
|
24
|
+
|
25
|
+
return hand
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Huck
|
2
|
+
|
3
|
+
module Handlers
|
4
|
+
|
5
|
+
# A handler to execute arbitrary scripts, passing in the generated text as
|
6
|
+
# input on stdin.
|
7
|
+
class ExecHandler < Handler
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
require 'open3'
|
11
|
+
end
|
12
|
+
|
13
|
+
# Ensures that configuration is set properly before executing
|
14
|
+
#
|
15
|
+
# == Parameters:
|
16
|
+
# config::
|
17
|
+
# A hash of configuration data to verify
|
18
|
+
#
|
19
|
+
def verify_config config
|
20
|
+
if !config.has_key? 'exec'
|
21
|
+
raise RuntimeError, 'missing exec config'
|
22
|
+
end
|
23
|
+
if !config['exec'].has_key? 'command'
|
24
|
+
raise RuntimeError, 'missing exec config: command'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Handle an individual message by running an executable, passing in the
|
29
|
+
# gathered data via stdin.
|
30
|
+
def handle msg
|
31
|
+
config = Huck::config
|
32
|
+
verify_config config
|
33
|
+
|
34
|
+
Open3.popen2 config['exec']['command'] do |stdin, stdout, thread|
|
35
|
+
stdin.print msg
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Huck
|
2
|
+
|
3
|
+
# Base receiver class
|
4
|
+
class Receiver
|
5
|
+
|
6
|
+
# Given a receiver's name (or no name), return a new receiver instance
|
7
|
+
#
|
8
|
+
# == Parameters:
|
9
|
+
# name::
|
10
|
+
# The name of the receiver, or nil to guess
|
11
|
+
#
|
12
|
+
# == Returns:
|
13
|
+
# A Huck::Receiver instance
|
14
|
+
#
|
15
|
+
def self.factory name
|
16
|
+
if name.nil?
|
17
|
+
if Huck::try_load 'aws-sdk'
|
18
|
+
name = 'sqs'
|
19
|
+
else
|
20
|
+
raise RuntimeError, 'unable to load any receivers'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
case name
|
25
|
+
when 'sqs'
|
26
|
+
recv = Receivers::SQSReceiver.new
|
27
|
+
else
|
28
|
+
raise RuntimeError, "bad receiver: #{name}"
|
29
|
+
end
|
30
|
+
|
31
|
+
return recv
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Huck
|
2
|
+
|
3
|
+
module Receivers
|
4
|
+
|
5
|
+
# A receiver that talks to Amazon Simple Queue Service
|
6
|
+
class SQSReceiver < Receiver
|
7
|
+
|
8
|
+
# Includes all required modules for the SQS receiver
|
9
|
+
def initialize
|
10
|
+
require 'aws-sdk'
|
11
|
+
end
|
12
|
+
|
13
|
+
# Ensures that configuration is set properly before trying to use the
|
14
|
+
# connection data to talk to AWS
|
15
|
+
#
|
16
|
+
# == Parameters:
|
17
|
+
# config::
|
18
|
+
# A hash of configuration data to verify
|
19
|
+
#
|
20
|
+
def verify_config config
|
21
|
+
if !config.has_key? 'sqs'
|
22
|
+
raise RuntimeError, 'missing sqs config'
|
23
|
+
end
|
24
|
+
['access_key_id', 'secret_access_key', 'region',
|
25
|
+
'queue_name'].each do |key|
|
26
|
+
if !config['sqs'].has_key? key
|
27
|
+
raise RuntimeError, "missing sqs config: #{key}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# A long-running poller process which reads messages out of the remote
|
33
|
+
# queue and yields them to higher-order logic.
|
34
|
+
def receive
|
35
|
+
config = Huck::config
|
36
|
+
verify_config config
|
37
|
+
|
38
|
+
sqs = AWS::SQS.new(
|
39
|
+
:access_key_id => config['sqs']['access_key_id'],
|
40
|
+
:secret_access_key => config['sqs']['secret_access_key'],
|
41
|
+
:region => config['sqs']['region']
|
42
|
+
)
|
43
|
+
|
44
|
+
queue = sqs.queues.create config['sqs']['queue_name']
|
45
|
+
queue.poll do |msg|
|
46
|
+
yield msg.body
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/huck/sender.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
module Huck
|
2
|
+
|
3
|
+
# The base sender class
|
4
|
+
class Sender
|
5
|
+
|
6
|
+
# Given a sender's name (or no name), return a new sender instance
|
7
|
+
#
|
8
|
+
# == Parameters:
|
9
|
+
# name::
|
10
|
+
# The name of the sender, or nil to guess
|
11
|
+
#
|
12
|
+
# == Returns:
|
13
|
+
# A Huck::Sender instance
|
14
|
+
#
|
15
|
+
def self.factory name
|
16
|
+
if name.nil?
|
17
|
+
if Huck::try_load 'aws-sdk'
|
18
|
+
name = 'sqs'
|
19
|
+
else
|
20
|
+
raise RuntimeError, 'unable to load any senders'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
case name
|
25
|
+
when 'sqs'
|
26
|
+
send = Senders::SQSSender.new
|
27
|
+
else
|
28
|
+
raise RuntimeError, "bad sender: #{name}"
|
29
|
+
end
|
30
|
+
|
31
|
+
return send
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Huck
|
2
|
+
|
3
|
+
module Senders
|
4
|
+
|
5
|
+
# A sender that talks to Amazon Simple Queue Service
|
6
|
+
class SQSSender < Sender
|
7
|
+
|
8
|
+
# Includes all required modules for the SQS sender
|
9
|
+
def initialize
|
10
|
+
require 'aws-sdk'
|
11
|
+
end
|
12
|
+
|
13
|
+
# Ensures that configuration is set properly before trying to use the
|
14
|
+
# connection data to talk to AWS
|
15
|
+
#
|
16
|
+
# == Parameters:
|
17
|
+
# config::
|
18
|
+
# A hash of configuration data to verify
|
19
|
+
#
|
20
|
+
def verify_config config
|
21
|
+
if !config.has_key? 'sqs'
|
22
|
+
raise RuntimeError, 'missing sqs sender config'
|
23
|
+
end
|
24
|
+
['access_key_id', 'secret_access_key', 'region',
|
25
|
+
'queue_name'].each do |key|
|
26
|
+
if !config['sqs'].has_key? key
|
27
|
+
raise RuntimeError, "missing sqs sender config: #{key}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# Send an arbitrary text message to the queue for processing
|
33
|
+
#
|
34
|
+
# == Parameters:
|
35
|
+
# msg::
|
36
|
+
# The arbitrary text data to send
|
37
|
+
#
|
38
|
+
def send msg
|
39
|
+
config = Huck::config
|
40
|
+
verify_config config
|
41
|
+
|
42
|
+
sqs = AWS::SQS.new(
|
43
|
+
:access_key_id => config['sqs']['access_key_id'],
|
44
|
+
:secret_access_key => config['sqs']['secret_access_key'],
|
45
|
+
:region => config['sqs']['region']
|
46
|
+
)
|
47
|
+
|
48
|
+
queue = sqs.queues.create config['sqs']['queue_name']
|
49
|
+
queue.send_message msg
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/huck/util.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
module Huck
|
2
|
+
|
3
|
+
# Retrieve the value of an "emulated" kwarg easily
|
4
|
+
#
|
5
|
+
# == Parameters:
|
6
|
+
# args::
|
7
|
+
# A hash of kwargs
|
8
|
+
# arg::
|
9
|
+
# The name of the arg desired
|
10
|
+
# default::
|
11
|
+
# If arg does not exist in args, return this
|
12
|
+
#
|
13
|
+
# == Returns:
|
14
|
+
# The value of the arg, or the default value
|
15
|
+
#
|
16
|
+
def self.getarg args, arg, default
|
17
|
+
return args.has_key?(arg) ? args[arg] : default
|
18
|
+
end
|
19
|
+
|
20
|
+
# Read configuration out of a file on the filesystem.
|
21
|
+
#
|
22
|
+
# == Parameters:
|
23
|
+
# path::
|
24
|
+
# The path to the config file to read
|
25
|
+
#
|
26
|
+
# == Returns:
|
27
|
+
# A hash containing the configuration
|
28
|
+
#
|
29
|
+
def self.config kwargs = {}
|
30
|
+
path = self.getarg kwargs, 'path', '/etc/huck.conf'
|
31
|
+
YAML.load_file path
|
32
|
+
end
|
33
|
+
|
34
|
+
# Attempts to load a given module by name
|
35
|
+
#
|
36
|
+
# == Parameters:
|
37
|
+
# name::
|
38
|
+
# The name of the module
|
39
|
+
#
|
40
|
+
# == Returns:
|
41
|
+
# bool
|
42
|
+
#
|
43
|
+
def self.try_load name
|
44
|
+
begin
|
45
|
+
require name
|
46
|
+
rescue LoadError
|
47
|
+
return false
|
48
|
+
end
|
49
|
+
true
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
data/lib/huck/version.rb
ADDED
data/lib/huck.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
require 'huck/version'
|
5
|
+
require 'huck/util'
|
6
|
+
require 'huck/generator'
|
7
|
+
require 'huck/generators/facter'
|
8
|
+
require 'huck/generators/ohai'
|
9
|
+
require 'huck/sender'
|
10
|
+
require 'huck/senders/sqs'
|
11
|
+
require 'huck/receiver'
|
12
|
+
require 'huck/receivers/sqs'
|
13
|
+
require 'huck/handler'
|
14
|
+
require 'huck/handlers/exec'
|
15
|
+
|
16
|
+
module Huck
|
17
|
+
|
18
|
+
# Main method to run Huck and dump info
|
19
|
+
#
|
20
|
+
# == Parameters:
|
21
|
+
# generator::
|
22
|
+
# The name of the generator to use (default=facter)
|
23
|
+
#
|
24
|
+
def self.run kwargs = {}
|
25
|
+
config = Huck::config
|
26
|
+
if config.has_key? 'generator'
|
27
|
+
gen_name = config['generator']
|
28
|
+
end
|
29
|
+
|
30
|
+
gen_arg = Huck::getarg kwargs, :generator, nil
|
31
|
+
gen_name = gen_arg if !gen_arg.nil?
|
32
|
+
|
33
|
+
g = Generator::factory gen_name
|
34
|
+
|
35
|
+
if config.has_key? 'sender'
|
36
|
+
send_name = config['sender']
|
37
|
+
end
|
38
|
+
|
39
|
+
send_arg = Huck::getarg kwargs, :sender, nil
|
40
|
+
send_name = send_arg if !send_arg.nil?
|
41
|
+
|
42
|
+
s = Sender::factory send_name
|
43
|
+
s.send g.dump
|
44
|
+
end
|
45
|
+
|
46
|
+
# Main method to receive messages from a Huck client
|
47
|
+
#
|
48
|
+
# == Parameters:
|
49
|
+
# receiver::
|
50
|
+
# The receiver to use (default=sqs)
|
51
|
+
#
|
52
|
+
def self.serve kwargs = {}
|
53
|
+
config = Huck::config
|
54
|
+
if config.has_key? 'handler'
|
55
|
+
hand_name = config['handler']
|
56
|
+
end
|
57
|
+
|
58
|
+
hand_arg = Huck::getarg kwargs, :handler, nil
|
59
|
+
hand_name = hand_arg if !hand_arg.nil?
|
60
|
+
h = Handler::factory hand_name
|
61
|
+
|
62
|
+
if config.has_key? 'receiver'
|
63
|
+
recv_name = config['receiver']
|
64
|
+
end
|
65
|
+
|
66
|
+
recv_arg = Huck::getarg kwargs, :receiver, nil
|
67
|
+
recv_name = recv_arg if !recv_arg.nil?
|
68
|
+
|
69
|
+
r = Receiver::factory recv_name
|
70
|
+
r.receive do |msg|
|
71
|
+
h.handle msg
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
metadata
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: huck
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ryan Uber
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-07-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: simplecov
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: coveralls
|
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
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: Open-ended information sharing framework
|
70
|
+
email: ru@ryanuber.com
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- lib/huck/generators/ohai.rb
|
76
|
+
- lib/huck/generators/facter.rb
|
77
|
+
- lib/huck/senders/sqs.rb
|
78
|
+
- lib/huck/receiver.rb
|
79
|
+
- lib/huck/sender.rb
|
80
|
+
- lib/huck/util.rb
|
81
|
+
- lib/huck/generator.rb
|
82
|
+
- lib/huck/receivers/sqs.rb
|
83
|
+
- lib/huck/handlers/exec.rb
|
84
|
+
- lib/huck/version.rb
|
85
|
+
- lib/huck/handler.rb
|
86
|
+
- lib/huck.rb
|
87
|
+
homepage: https://github.com/ryanuber/huck
|
88
|
+
licenses:
|
89
|
+
- MIT
|
90
|
+
metadata: {}
|
91
|
+
post_install_message:
|
92
|
+
rdoc_options: []
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '1.8'
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
requirements: []
|
106
|
+
rubyforge_project:
|
107
|
+
rubygems_version: 2.1.11
|
108
|
+
signing_key:
|
109
|
+
specification_version: 4
|
110
|
+
summary: Information sharing framework
|
111
|
+
test_files: []
|