huginn_agent 0.1 → 0.4.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: 47625360757df7a277556709daa71a5b7dbeae93
4
- data.tar.gz: ca84c192107814976f5a20b52a36418af43d51d1
3
+ metadata.gz: 09a1e6125bce5ffb343714b067d84b180c4e3cd3
4
+ data.tar.gz: 2359ca71f47068eda4145beae7e24bfb91c3fffb
5
5
  SHA512:
6
- metadata.gz: 7216dc7a0c5d52b436c04e566d271bc869efe72184c73b9114ced9efa1b79c749e011b4ada66cb57e39b144b9571cfca8899026127a6532e8fce285790b262d2
7
- data.tar.gz: 2616e090eef4ed49a877c274e925afd592750412333d9a0b6dc4c49cf366ba4dbd96c2bdcc4f0ec05c6aadb4bbf65ddcebba810e92973b759c2043b8d6bcf14a
6
+ metadata.gz: 48bef47caa15e13e4b0b2adfd149350ad0b7360a74ed43324f145833b547752518ff7e2890806e50d907c0e2b66400ad6f368a201c7d922ceb65b2a7a9c0581c
7
+ data.tar.gz: 40fa41d8fb2ead907e5cb1b06c1058f2d069a52741e66cf160570b893f040324590b727b045c20dab18b870edf5bbdd3c93b217dac7d9ccacd7d78a0166d2d9a
data/bin/huginn_agent ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "huginn_agent/cli"
4
+
5
+ HuginnAgent::CLI.start
data/lib/huginn_agent.rb CHANGED
@@ -1,17 +1,45 @@
1
1
  require 'huginn_agent/version'
2
2
 
3
3
  class HuginnAgent
4
- def self.register(*paths)
5
- @paths ||= []
6
- paths.each do |path|
7
- @paths << path
4
+ class << self
5
+ attr_accessor :branch, :remote
6
+
7
+ def load_tasks(options = {})
8
+ @branch = options[:branch] || 'master'
9
+ @remote = options[:remote] || 'https://github.com/cantino/huginn.git'
10
+ Rake.add_rakelib File.join(File.expand_path('../', __FILE__), 'tasks')
11
+ end
12
+
13
+ def load(*paths)
14
+ paths.each do |path|
15
+ load_paths << path
16
+ end
17
+ end
18
+
19
+ def register(*paths)
20
+ paths.each do |path|
21
+ agent_paths << path
22
+ end
23
+ end
24
+
25
+ def require!
26
+ load_paths.each do |path|
27
+ require path
28
+ end
29
+ agent_paths.each do |path|
30
+ require path
31
+ Agent::TYPES << "Agents::#{File.basename(path.to_s).camelize}"
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def load_paths
38
+ @load_paths ||= []
8
39
  end
9
- end
10
40
 
11
- def self.require!
12
- @paths.each do |path|
13
- require path
14
- Agent::TYPES << "Agents::#{File.basename(path.to_s).camelize}"
41
+ def agent_paths
42
+ @agent_paths ||= []
15
43
  end
16
44
  end
17
45
  end
@@ -0,0 +1,17 @@
1
+ require 'thor'
2
+
3
+ class HuginnAgent
4
+ class CLI < Thor
5
+ include Thor::Actions
6
+
7
+ desc "new AGENT_GEM_NAME", "Create a skeleton for creating a new Huginn agent"
8
+ def new(name)
9
+ require 'huginn_agent/cli/new'
10
+ New.new(options, name, self).run
11
+ end
12
+
13
+ def self.source_root
14
+ File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,87 @@
1
+ require 'pathname'
2
+ require 'huginn_agent/helper'
3
+
4
+ class HuginnAgent
5
+ class CLI::New
6
+ PREFIX_QUESTION = "We recommend prefixing all Huginn agent gem names with 'huginn_' to make them easily discoverable.\nPrefix gem name with 'huginn_'?".freeze
7
+ MIT_QUESTION = "Do you want to license your code permissively under the MIT license?".freeze
8
+ DOT_ENV_QUESTION = 'Which .env file do you want to use?'.freeze
9
+
10
+ attr_reader :options, :gem_name, :thor, :target
11
+
12
+ def initialize(options, gem_name, thor)
13
+ @options = options
14
+ @thor = thor
15
+ if !gem_name.start_with?('huginn_') &&
16
+ thor.yes?(PREFIX_QUESTION)
17
+ gem_name = "huginn_#{gem_name}"
18
+ end
19
+ @target = Pathname.pwd.join(gem_name)
20
+ @gem_name = target.basename.to_s
21
+ end
22
+
23
+ def run
24
+ thor.say "Creating Huginn agent '#{gem_name}'"
25
+
26
+ agent_file_name = gem_name.gsub('huginn_', '')
27
+ namespaced_path = gem_name.tr('-', '/')
28
+ constant_name = gem_name.split('_')[1..-1].map{|p| p[0..0].upcase + p[1..-1] unless p.empty?}.join
29
+ constant_name = constant_name.split('-').map{|q| q[0..0].upcase + q[1..-1] }.join('::') if constant_name =~ /-/
30
+ git_user_name = `git config user.name`.chomp
31
+ git_user_email = `git config user.email`.chomp
32
+
33
+ opts = {
34
+ :gem_name => gem_name,
35
+ :agent_file_name => agent_file_name,
36
+ :namespaced_path => namespaced_path,
37
+ :constant_name => constant_name,
38
+ :author => git_user_name.empty? ? "TODO: Write your name" : git_user_name,
39
+ :email => git_user_email.empty? ? "TODO: Write your email address" : git_user_email,
40
+ }
41
+
42
+ templates = {
43
+ "Gemfile.tt" => "Gemfile",
44
+ "gitignore.tt" => ".gitignore",
45
+ "lib/new_agent.rb.tt" => "lib/#{namespaced_path}.rb",
46
+ "lib/new_agent/new_agent.rb.tt" => "lib/#{namespaced_path}/#{agent_file_name}.rb",
47
+ "spec/new_agent_spec.rb.tt" => "spec/#{agent_file_name}_spec.rb",
48
+ "newagent.gemspec.tt" => "#{gem_name}.gemspec",
49
+ "Rakefile.tt" => "Rakefile",
50
+ "README.md.tt" => "README.md",
51
+ "travis.yml.tt" => ".travis.yml"
52
+ }
53
+
54
+ if thor.yes?(MIT_QUESTION)
55
+ opts[:mit] = true
56
+ templates.merge!("LICENSE.txt.tt" => "LICENSE.txt")
57
+ end
58
+
59
+
60
+ templates.each do |src, dst|
61
+ thor.template("newagent/#{src}", target.join(dst), opts)
62
+ end
63
+
64
+ thor.say "To run the specs of your agent you need to add a .env which configures the database for Huginn"
65
+
66
+ possible_paths = Dir['.env', './huginn/.env', '~/huginn/.env']
67
+ if possible_paths.length > 0
68
+ thor.say 'Found possible preconfigured .env files please choose which one you want to use'
69
+ possible_paths.each_with_index do |path, i|
70
+ thor.say "#{i+1} #{path}"
71
+ end
72
+
73
+ if (i = thor.ask(DOT_ENV_QUESTION).to_i) != 0
74
+ path = possible_paths[i-1]
75
+ `cp #{path} #{target}`
76
+ thor.say "Copied '#{path}' to '#{target}'"
77
+ end
78
+ end
79
+
80
+ thor.say "Initializing git repo in #{target}"
81
+ Dir.chdir(target) { `git init`; `git add .` }
82
+
83
+ thor.say 'Installing dependencies'
84
+ Dir.chdir(target) { HuginnAgent::Helper.open3('bundle install') }
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,25 @@
1
+ require 'open3'
2
+
3
+ class HuginnAgent
4
+ class Helper
5
+ def self.open3(command, streaming_output = true)
6
+ output = ""
7
+ print "\n" if streaming_output
8
+
9
+ status = Open3.popen3(ENV, "#{command} 2>&1") do |stdin, stdout, _stderr, wait_thr|
10
+ stdin.close
11
+
12
+ until stdout.eof do
13
+ next unless IO.select([stdout])
14
+ data = stdout.read_nonblock(1024)
15
+ print data if streaming_output
16
+ output << data
17
+ end
18
+ wait_thr.value
19
+ end
20
+ [status.exitstatus, output]
21
+ rescue IOError => e
22
+ return [1, "#{e} #{e.message}"]
23
+ end
24
+ end
25
+ end
@@ -0,0 +1 @@
1
+ Dir[File.join(File.expand_path('../'), "support/**/*.rb")].each { |f| require f }
@@ -0,0 +1,65 @@
1
+ require 'huginn_agent/helper'
2
+
3
+ class HuginnAgent
4
+ class SpecRunner
5
+ attr_reader :gem_name
6
+
7
+ def initialize
8
+ @gem_name = File.basename(Dir['*.gemspec'].first, '.gemspec')
9
+ $stdout.sync = true
10
+ end
11
+
12
+ def clone
13
+ unless File.exists?('spec/huginn/.git')
14
+ shell_out "git clone #{HuginnAgent.remote} -b #{HuginnAgent.branch} spec/huginn", 'Cloning huginn source ...'
15
+ end
16
+ end
17
+
18
+ def reset
19
+ Dir.chdir('spec/huginn') do
20
+ shell_out "git fetch && git reset --hard origin/#{HuginnAgent.branch}", 'Resetting Huginn source ...'
21
+ end
22
+ end
23
+
24
+ def bundle
25
+ if File.exists?('.env')
26
+ shell_out "cp .env spec/huginn"
27
+ end
28
+ Dir.chdir('spec/huginn') do
29
+ shell_out "bundle install --without development production -j 4", 'Installing ruby gems ...'
30
+ end
31
+
32
+ end
33
+
34
+ def database
35
+ Dir.chdir('spec/huginn') do
36
+ shell_out('bundle exec rake db:create db:migrate', 'Creating database ...')
37
+ end
38
+ end
39
+
40
+ def spec
41
+ Dir.chdir('spec/huginn') do
42
+ shell_out "bundle exec rspec ../*.rb", 'Running specs ...', true
43
+ end
44
+ end
45
+
46
+ def shell_out(command, message = nil, streaming_output = false)
47
+ print message if message
48
+
49
+ (status, output) = Bundler.with_clean_env do
50
+ ENV['ADDITIONAL_GEMS'] = "#{gem_name}(path: ../../)"
51
+ ENV['RAILS_ENV'] = 'test'
52
+ HuginnAgent::Helper.open3(command, streaming_output)
53
+ end
54
+
55
+ if status == 0
56
+ puts "\e[32m [OK]\e[0m" if message
57
+ else
58
+ puts "\e[31m [FAIL]\e[0m" if message
59
+ puts "Tried executing '#{command}'"
60
+ puts output
61
+ fail
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+ gem 'huginn_agent', "~> 0.3.0"
@@ -0,0 +1,7 @@
1
+ Copyright (c) <%= Time.now.year %> <%= config[:author] %>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,45 @@
1
+ # <%=config[:constant_name]%>
2
+
3
+ Welcome to your new agent gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/<%=config[:namespaced_path]%>`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this string to your Huginn's .env `ADDITIONAL_GEMS` configuration:
10
+
11
+ ```ruby
12
+ <%=config[:gem_name]%>
13
+ # when only using this agent gem it should look like hits:
14
+ ADDITIONAL_GEMS=<%=config[:gem_name]%>
15
+ ```
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Development
26
+
27
+ Running `rake` will clone and set up Huginn in `spec/huginn` to run the specs of the Gem in Huginn as if they would be build-in Agents. The desired Huginn repository and branch can be modified in the `Rakefile`:
28
+
29
+ ```ruby
30
+ HuginnAgent.load_tasks(branch: '<your branch>', remote: 'https://github.com/<github user>/huginn.git')
31
+ ```
32
+
33
+ Make sure to delete the `spec/huginn` directory and re-run `rake` after changing the `remote` to update the Huginn source code.
34
+
35
+ After the setup is done `rake spec` will only run the tests, without cloning the Huginn source again.
36
+
37
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
38
+
39
+ ## Contributing
40
+
41
+ 1. Fork it ( https://github.com/[my-github-username]/<%=config[:gem_name]%>/fork )
42
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
43
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
44
+ 4. Push to the branch (`git push origin my-new-feature`)
45
+ 5. Create a new Pull Request
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require 'huginn_agent'
4
+
5
+ HuginnAgent.load_tasks(branch: 'master', remote: 'https://github.com/cantino/huginn.git')
@@ -0,0 +1,3 @@
1
+ spec/huginn
2
+ .env
3
+ Gemfile.lock
@@ -0,0 +1,4 @@
1
+ require 'huginn_agent'
2
+
3
+ #HuginnAgent.load '<%= config[:gem_name] %>/concerns/my_agent_concern'
4
+ HuginnAgent.register '<%= config[:gem_name] %>/<%= config[:agent_file_name] %>'
@@ -0,0 +1,23 @@
1
+ module Agents
2
+ class <%=config[:constant_name] %> < Agent
3
+ default_schedule '12h'
4
+
5
+ description <<-MD
6
+ Add a Agent description here
7
+ MD
8
+
9
+ def default_options
10
+ {
11
+ }
12
+ end
13
+
14
+ def validate_options
15
+ end
16
+
17
+ # def check
18
+ # end
19
+
20
+ # def receive(incoming_events)
21
+ # end
22
+ end
23
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = <%= config[:gem_name].inspect %>
7
+ spec.version = '0.1'
8
+ spec.authors = [<%= config[:author].inspect %>]
9
+ spec.email = [<%= config[:email].inspect %>]
10
+
11
+ spec.summary = %q{Write a short summary, because Rubygems requires one.}
12
+ spec.description = %q{Write a longer description or delete this line.}
13
+
14
+ spec.homepage = "https://github.com/[my-github-username]/<%=config[:gem_name]%>"
15
+ <% if config[:mit] %>
16
+ spec.license = "MIT"
17
+ <% end %>
18
+
19
+ spec.files = Dir['LICENSE.txt', 'lib/**/*']
20
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
+ spec.test_files = Dir['spec/**/*.rb']
22
+ spec.require_paths = ["lib"]
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.7"
25
+ spec.add_development_dependency "rake", "~> 10.0"
26
+
27
+ spec.add_runtime_dependency "huginn_agent", '~> 0.2'
28
+ end
@@ -0,0 +1,13 @@
1
+ require 'rails_helper'
2
+ require 'huginn_agent/spec_helper'
3
+
4
+ describe Agents::<%= config[:constant_name] %> do
5
+ before(:each) do
6
+ @valid_options = Agents::<%= config[:constant_name] %>.new.default_options
7
+ @checker = Agents::<%= config[:constant_name] %>.new(:name => "<%= config[:constant_name] %>", :options => @valid_options)
8
+ @checker.user = users(:bob)
9
+ @checker.save!
10
+ end
11
+
12
+ pending "add specs here"
13
+ end
@@ -0,0 +1,14 @@
1
+ sudo: false
2
+ language: ruby
3
+ env:
4
+ global:
5
+ - APP_SECRET_TOKEN=b2724973fd81c2f4ac0f92ac48eb3f0152c4a11824c122bcf783419a4c51d8b9bba81c8ba6a66c7de599677c7f486242cf819775c433908e77c739c5c8ae118d
6
+ matrix:
7
+ - DATABASE_ADAPTER=mysql2
8
+ - DATABASE_ADAPTER=postgresql DATABASE_USERNAME=postgres
9
+ rvm:
10
+ - 2.1
11
+ - 2.2
12
+ - 2.3.0
13
+ cache: bundler
14
+ script: bundle exec rake
@@ -1,3 +1,3 @@
1
1
  class HuginnAgent
2
- VERSION = '0.1'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -0,0 +1,22 @@
1
+ require 'huginn_agent/spec_runner'
2
+
3
+ unless defined?(Bundler)
4
+ fail "Run the rake task with 'bundle exec rake'"
5
+ end
6
+
7
+ runner = HuginnAgent::SpecRunner.new
8
+
9
+ desc "Setup Huginn source, install gems and create the database"
10
+ task :prepare do
11
+ runner.clone
12
+ runner.reset
13
+ runner.bundle
14
+ runner.database
15
+ end
16
+
17
+ desc "Run the Agent gem specs"
18
+ task :spec do
19
+ runner.spec
20
+ end
21
+
22
+ task :default => [:prepare, :spec]
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ require 'huginn_agent/cli/new'
4
+
5
+ describe HuginnAgent::CLI::New do
6
+ sandbox = File.expand_path(File.join(File.dirname(__FILE__), '../../../sandbox'))
7
+ let(:cli) { HuginnAgent::CLI.new }
8
+ let(:thor) { Thor.new }
9
+
10
+ before(:each) do
11
+ FileUtils.rm_rf(File.join(sandbox))
12
+ allow(Pathname).to receive(:pwd).and_return(Pathname.new(sandbox))
13
+ end
14
+
15
+ after(:each) { FileUtils.rm_rf(File.join(sandbox)) }
16
+
17
+ it "prefixes the gem name and copies the MIT license when told" do
18
+ expect(cli).to receive(:yes?).with(HuginnAgent::CLI::New::PREFIX_QUESTION) { true }
19
+ expect(cli).to receive(:yes?).with(HuginnAgent::CLI::New::MIT_QUESTION) { true }
20
+ capture(:stdout) { cli.new('test') }
21
+ expect(File.exists?(File.join(sandbox, 'huginn_test'))).to be_truthy
22
+ expect(File.exists?(File.join(sandbox, 'huginn_test', 'LICENSE.txt'))).to be_truthy
23
+ end
24
+
25
+ it "does not prefix the gem name and does notcopies the MIT license when told" do
26
+ expect(cli).to receive(:yes?).with(HuginnAgent::CLI::New::PREFIX_QUESTION) { false }
27
+ expect(cli).to receive(:yes?).with(HuginnAgent::CLI::New::MIT_QUESTION) { false }
28
+
29
+ capture(:stdout) { cli.new('test') }
30
+ expect(File.exists?(File.join(sandbox, 'huginn_test'))).to be_falsy
31
+ expect(File.exists?(File.join(sandbox, 'test'))).to be_truthy
32
+ expect(File.exists?(File.join(sandbox, 'test', 'LICENSE.txt'))).to be_falsy
33
+ end
34
+
35
+ it "asks to use a .env file" do
36
+ expect(cli).to receive(:yes?).with(HuginnAgent::CLI::New::PREFIX_QUESTION) { false }
37
+ expect(cli).to receive(:yes?).with(HuginnAgent::CLI::New::MIT_QUESTION) { false }
38
+ expect(cli).to receive(:ask).with(HuginnAgent::CLI::New::DOT_ENV_QUESTION) { 1 }
39
+ FileUtils.touch('.env')
40
+ capture(:stdout) { cli.new('test') }
41
+ FileUtils.rm('.env')
42
+ expect(File.exists?(File.join(sandbox, 'huginn_test'))).to be_falsy
43
+ expect(File.exists?(File.join(sandbox, 'test'))).to be_truthy
44
+ expect(File.exists?(File.join(sandbox, 'test', '.env'))).to be_truthy
45
+ end
46
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe HuginnAgent::Helper do
4
+ context '#open3' do
5
+ it "returns the exit status and output of the command" do
6
+ expect(HuginnAgent::Helper).not_to receive(:print)
7
+ (status, output) = HuginnAgent::Helper.open3("pwd", false)
8
+ expect(status).to eq(0)
9
+ expect(output).to eq("#{Dir.pwd}\n")
10
+ end
11
+
12
+ it "prints the output directly when specified" do
13
+ expect(HuginnAgent::Helper).to receive(:print).twice
14
+ (status, output) = HuginnAgent::Helper.open3("pwd", true)
15
+ expect(status).to eq(0)
16
+ expect(output).to eq("#{Dir.pwd}\n")
17
+ end
18
+
19
+ it "return 1 as the status for failing command" do
20
+ (status, output) = HuginnAgent::Helper.open3("false", false)
21
+ expect(status).to eq(1)
22
+ end
23
+
24
+ it "returns 1 when an IOError occurred" do
25
+ expect(IO).to receive(:select).and_raise(IOError)
26
+ (status, output) = HuginnAgent::Helper.open3("pwd", false)
27
+ expect(status).to eq(1)
28
+ expect(output).to eq('IOError IOError')
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe HuginnAgent::SpecRunner do
4
+ unless defined?(Bundler)
5
+ class Bundler; def self.with_clean_env; yield end end
6
+ end
7
+
8
+ let(:runner) {HuginnAgent::SpecRunner.new }
9
+
10
+ it "detects the gem name" do
11
+ expect(runner.gem_name).to eq('huginn_agent')
12
+ end
13
+
14
+ context '#shell_out' do
15
+ it 'does not output anything without a specifing message' do
16
+ expect(runner).not_to receive(:puts)
17
+ runner.shell_out('pwd')
18
+ end
19
+
20
+ it "outputs the message and status information" do
21
+ output = capture(:stdout) { runner.shell_out('pwd', 'Testing') }
22
+ expect(output).to include('Testing')
23
+ expect(output).to include('OK')
24
+ expect(output).not_to include('FAIL')
25
+ end
26
+
27
+ it "output the called command on failure" do
28
+ output = capture(:stdout) {
29
+ expect { runner.shell_out('false', 'Testing') }.to raise_error(RuntimeError)
30
+ }
31
+ expect(output).to include('Testing')
32
+ expect(output).to include('FAIL')
33
+ expect(output).not_to include('OK')
34
+
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe HuginnAgent do
4
+ it 'has a version number' do
5
+ expect(HuginnAgent::VERSION).not_to be nil
6
+ end
7
+
8
+ context '#load_tasks' do
9
+ class Rake; end
10
+
11
+ before(:each) do
12
+ expect(Rake).to receive(:add_rakelib)
13
+ end
14
+
15
+ it 'sets default values for branch and remote' do
16
+ HuginnAgent.load_tasks
17
+ expect(HuginnAgent.branch).to eq('master')
18
+ expect(HuginnAgent.remote).to eq('https://github.com/cantino/huginn.git')
19
+ end
20
+
21
+ it "sets branch and remote based on the passed options" do
22
+ HuginnAgent.load_tasks(branch: 'test', remote: 'http://git.example.com')
23
+ expect(HuginnAgent.branch).to eq('test')
24
+ expect(HuginnAgent.remote).to eq('http://git.example.com')
25
+ end
26
+ end
27
+
28
+ context '#require!' do
29
+ before(:each) do
30
+ HuginnAgent.instance_variable_set(:@load_paths, [])
31
+ HuginnAgent.instance_variable_set(:@agent_paths, [])
32
+ end
33
+
34
+ it 'requires files passed to #load' do
35
+ HuginnAgent.load('/tmp/test.rb')
36
+ expect(HuginnAgent).to receive(:require).with('/tmp/test.rb')
37
+ HuginnAgent.require!
38
+ end
39
+
40
+ it 'requires files passwd to #register and assign adds the class name to Agents::TYPES' do
41
+ class Agent; TYPES = []; end
42
+ string_double= double('test_agent.rb', camelize: 'TestAgent')
43
+ expect(File).to receive(:basename).and_return(string_double)
44
+ HuginnAgent.register('/tmp/test_agent.rb')
45
+ expect(HuginnAgent).to receive(:require).with('/tmp/test_agent.rb')
46
+ HuginnAgent.require!
47
+ expect(Agent::TYPES).to eq(['Agents::TestAgent'])
48
+ end
49
+ end
50
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,2 +1,25 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
1
4
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
5
  require 'huginn_agent'
6
+ require 'huginn_agent/cli'
7
+ require 'huginn_agent/spec_runner'
8
+
9
+ def capture(stream)
10
+ begin
11
+ stream = stream.to_s
12
+ eval "$#{stream} = StringIO.new"
13
+ yield
14
+ result = eval("$#{stream}").string
15
+ ensure
16
+ eval("$#{stream} = #{stream.upcase}")
17
+ end
18
+
19
+ result
20
+ end
21
+
22
+ RSpec.configure do |c|
23
+ c.filter_run focus: true
24
+ c.run_all_when_everything_filtered = true
25
+ end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: huginn_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Cantino
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-28 00:00:00.000000000 Z
11
+ date: 2016-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -42,35 +56,90 @@ dependencies:
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ">="
59
+ - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '0'
61
+ version: '3.4'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ">="
66
+ - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '0'
68
+ version: '3.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.11.2
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.11.2
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 2.13.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 2.13.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: guard-rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 4.6.5
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 4.6.5
55
111
  description:
56
112
  email:
57
113
  - cantino@gmail.com
58
- executables: []
114
+ executables:
115
+ - huginn_agent
59
116
  extensions: []
60
117
  extra_rdoc_files: []
61
118
  files:
62
- - ".gitignore"
63
- - ".rspec"
64
- - ".travis.yml"
65
- - Gemfile
66
- - Gemfile.lock
67
119
  - LICENSE.txt
68
- - README.md
69
- - Rakefile
70
- - huginn_agent.gemspec
120
+ - bin/huginn_agent
71
121
  - lib/huginn_agent.rb
122
+ - lib/huginn_agent/cli.rb
123
+ - lib/huginn_agent/cli/new.rb
124
+ - lib/huginn_agent/helper.rb
125
+ - lib/huginn_agent/spec_helper.rb
126
+ - lib/huginn_agent/spec_runner.rb
127
+ - lib/huginn_agent/templates/newagent/Gemfile.tt
128
+ - lib/huginn_agent/templates/newagent/LICENSE.txt.tt
129
+ - lib/huginn_agent/templates/newagent/README.md.tt
130
+ - lib/huginn_agent/templates/newagent/Rakefile.tt
131
+ - lib/huginn_agent/templates/newagent/gitignore.tt
132
+ - lib/huginn_agent/templates/newagent/lib/new_agent.rb.tt
133
+ - lib/huginn_agent/templates/newagent/lib/new_agent/new_agent.rb.tt
134
+ - lib/huginn_agent/templates/newagent/newagent.gemspec.tt
135
+ - lib/huginn_agent/templates/newagent/spec/new_agent_spec.rb.tt
136
+ - lib/huginn_agent/templates/newagent/travis.yml.tt
72
137
  - lib/huginn_agent/version.rb
73
- - spec/huginn_agent_spec.rb
138
+ - lib/tasks/spec.rake
139
+ - spec/lib/huginn_agent/cli/new_spec.rb
140
+ - spec/lib/huginn_agent/helper_spec.rb
141
+ - spec/lib/huginn_agent/spec_runner_spec.rb
142
+ - spec/lib/huginn_agent_spec.rb
74
143
  - spec/spec_helper.rb
75
144
  homepage: https://github.com/cantino/huginn
76
145
  licenses:
@@ -92,10 +161,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
161
  version: '0'
93
162
  requirements: []
94
163
  rubyforge_project:
95
- rubygems_version: 2.2.2
164
+ rubygems_version: 2.5.1
96
165
  signing_key:
97
166
  specification_version: 4
98
167
  summary: Helpers for making new Huginn Agents
99
168
  test_files:
100
- - spec/huginn_agent_spec.rb
169
+ - spec/lib/huginn_agent/cli/new_spec.rb
170
+ - spec/lib/huginn_agent/helper_spec.rb
171
+ - spec/lib/huginn_agent/spec_runner_spec.rb
172
+ - spec/lib/huginn_agent_spec.rb
101
173
  - spec/spec_helper.rb
data/.gitignore DELETED
@@ -1 +0,0 @@
1
- pkg
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
data/.travis.yml DELETED
@@ -1,3 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.1.2
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in huginn_agent.gemspec
4
- gemspec
data/Gemfile.lock DELETED
@@ -1,31 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- huginn_agent (0.1)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- diff-lcs (1.2.5)
10
- rake (10.3.2)
11
- rspec (3.1.0)
12
- rspec-core (~> 3.1.0)
13
- rspec-expectations (~> 3.1.0)
14
- rspec-mocks (~> 3.1.0)
15
- rspec-core (3.1.4)
16
- rspec-support (~> 3.1.0)
17
- rspec-expectations (3.1.2)
18
- diff-lcs (>= 1.2.0, < 2.0)
19
- rspec-support (~> 3.1.0)
20
- rspec-mocks (3.1.2)
21
- rspec-support (~> 3.1.0)
22
- rspec-support (3.1.1)
23
-
24
- PLATFORMS
25
- ruby
26
-
27
- DEPENDENCIES
28
- bundler (~> 1.7)
29
- huginn_agent!
30
- rake (~> 10.0)
31
- rspec
data/README.md DELETED
@@ -1,19 +0,0 @@
1
- # HuginnAgent
2
-
3
- This is a dependency for new external Huginn Agent Gems.
4
-
5
- ## Installation
6
-
7
- Add this line to your Agent's gemspec:
8
-
9
- ```ruby
10
- spec.add_runtime_dependency "huginn_agent"
11
- ```
12
-
13
- ## Contributing
14
-
15
- 1. Fork it ( https://github.com/[my-github-username]/huginn_agent/fork )
16
- 2. Create your feature branch (`git checkout -b my-new-feature`)
17
- 3. Commit your changes (`git commit -am 'Add some feature'`)
18
- 4. Push to the branch (`git push origin my-new-feature`)
19
- 5. Create a new Pull Request
data/Rakefile DELETED
@@ -1,7 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task :default => :spec
7
-
data/huginn_agent.gemspec DELETED
@@ -1,22 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = "huginn_agent"
7
- spec.version = '0.1'
8
- spec.authors = ["Andrew Cantino"]
9
- spec.email = ["cantino@gmail.com"]
10
- spec.summary = %q{Helpers for making new Huginn Agents}
11
- spec.homepage = "https://github.com/cantino/huginn"
12
- spec.license = "MIT"
13
-
14
- spec.files = `git ls-files -z`.split("\x0")
15
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
- spec.require_paths = ["lib"]
18
-
19
- spec.add_development_dependency "bundler", "~> 1.7"
20
- spec.add_development_dependency "rake", "~> 10.0"
21
- spec.add_development_dependency "rspec"
22
- end
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe HuginnAgent do
4
- it 'has a version number' do
5
- expect(HuginnAgent::VERSION).not_to be nil
6
- end
7
- end