Skip to content
This repository has been archived by the owner on Aug 28, 2024. It is now read-only.

Commit

Permalink
init, files
Browse files Browse the repository at this point in the history
  • Loading branch information
Carl Partridge committed Oct 7, 2015
0 parents commit a2d2a8b
Show file tree
Hide file tree
Showing 17 changed files with 240 additions and 0 deletions.
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/.bundle/
/.yardoc
/Gemfile.lock
/_yardoc/
/coverage/
/doc/
/pkg/
/spec/reports/
/tmp/
2 changes: 2 additions & 0 deletions .rspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
--format documentation
--color
4 changes: 4 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
language: ruby
rvm:
- 2.1.6
before_install: gem install bundler -v 1.10.6
4 changes: 4 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
source 'https://rubygems.org'

# Specify your gem's dependencies in napoleon.gemspec
gemspec
36 changes: 36 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Napoleon

Welcome to your new 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/napoleon`. To experiment with that code, run `bin/console` for an interactive prompt.

TODO: Delete this and the text above, and describe your gem

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'napoleon'
```

And then execute:

$ bundle

Or install it yourself as:

$ gem install napoleon

## Usage

TODO: Write usage instructions here

## Development

After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.

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`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/napoleon.

6 changes: 6 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
require "bundler/gem_tasks"
require "rspec/core/rake_task"

RSpec::Core::RakeTask.new(:spec)

task :default => :spec
14 changes: 14 additions & 0 deletions bin/console
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env ruby

require "bundler/setup"
require "napoleon"

# You can add fixtures and/or initialization code here to make experimenting
# with your gem easier. You can also use a different console, if you like.

# (If you use this, don't forget to add pry to your Gemfile!)
# require "pry"
# Pry.start

require "irb"
IRB.start
7 changes: 7 additions & 0 deletions bin/setup
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'

bundle install

# Do any other automated setup that you need to do here
18 changes: 18 additions & 0 deletions lib/napoleon.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
require "napoleon/version"
require "napoleon/command_builder"
require "napoleon/command_result"
require "napoleon/command"
require "napoleon/commander"

module Napoleon
mattr_accessor :eventory_post, :eventory_postback

def self.register broadcaster
broadcasters << broadcaster
end

def self.broadcasters
@broadcasters ||= []
end

end
57 changes: 57 additions & 0 deletions lib/napoleon/command.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
module Napoleon
class Command

def self.by user
new user
end

attr_reader :user, :broadcast_server_response

def initialize user=SystemUser.new
@user = user
end

def enact **args
result = perform **args
puts "COMMAND.enact result: #{result.inspect}"
broadcast result
Napoleon::CommandResult.new result, broadcast_server_response
result
end

def callback **args
perform **args
end

private
def perform
args.first
end

# default update, basic update on object, most likely temp
def update **args
object = args[:object]
attrs = args[:attrs]
obj = object.class.find(object.id)
obj.class.update_attributes attrs
end

def broadcast object
puts "broadcast, #{object.inspect}"
if object
puts "#{Napoleon.broadcasters.inspect}"
Napoleon.broadcasters.each { |broadcast|
puts "IN BROADCAST: #{broadcast.inspect}"
puts "EVENTNAME: #{self.event_name}"
puts "OBJ: #{object.inspect}"
broadcast.perform self.event_name, object
}
end
end

def event_name
"default.command"
end

end
end
15 changes: 15 additions & 0 deletions lib/napoleon/command_builder.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
module Napoleon
class CommandBuilder
attr_reader :user

def initialize user
@user = user
end

def method_missing method_key, **args, &block
klass = "Commands::#{method_key.to_s.camelize}"
klass.constantize.new(user).enact(**args)
end

end
end
7 changes: 7 additions & 0 deletions lib/napoleon/command_result.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module Napoleon
CommandResult = Struct.new(:result, :broadcast_server_response) do
def broadcast_success?
broadcast_server_response.to_s =~ /Net::HTTPOK/
end
end
end
13 changes: 13 additions & 0 deletions lib/napoleon/commander.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module Napoleon
module Commander

def method_missing method_key, **args
perform method_key, **args
end

def perform method_key, **args
CommandBuilder.new(self).send(method_key.to_s, **args)
end

end
end
3 changes: 3 additions & 0 deletions lib/napoleon/version.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module Napoleon
VERSION = "0.1.0"
end
32 changes: 32 additions & 0 deletions napoleon.gemspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'napoleon/version'

Gem::Specification.new do |spec|
spec.name = "napoleon"
spec.version = Napoleon::VERSION
spec.authors = ["Carl Partridge"]
spec.email = ["[email protected]"]

spec.summary = %q{TODO: Write a short summary, because Rubygems requires one.}
spec.description = %q{TODO: Write a longer description or delete this line.}
spec.homepage = "TODO: Put your gem's website or public repo URL here."

# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
# delete this section to allow pushing this gem to any host.
if spec.respond_to?(:metadata)
spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
else
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
end

spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
spec.bindir = "exe"
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
spec.require_paths = ["lib"]

spec.add_development_dependency "bundler", "~> 1.10"
spec.add_development_dependency "rake", "~> 10.0"
spec.add_development_dependency "rspec"
end
11 changes: 11 additions & 0 deletions spec/napoleon_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
require 'spec_helper'

describe Napoleon do
it 'has a version number' do
expect(Napoleon::VERSION).not_to be nil
end

it 'does something useful' do
expect(false).to eq(true)
end
end
2 changes: 2 additions & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
require 'napoleon'

0 comments on commit a2d2a8b

Please sign in to comment.