rddd-monitor 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.
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm gemset use ruby-1.9.3-p194@sniffer-monitor --create
data/Gemfile ADDED
@@ -0,0 +1,27 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'rake'
4
+ gem 'sinatra'
5
+ gem 'json'
6
+ gem 'rddd'
7
+ gem 'unicorn'
8
+ gem 'daemons'
9
+ gem 'airbrake'
10
+ gem 'pony'
11
+ gem 'newrelic_rpm'
12
+ gem 'couchrest'
13
+
14
+ group :development do
15
+ gem 'capistrano'
16
+ gem 'capistrano-unicorn'
17
+ gem 'capistrano_colors'
18
+ gem 'rvm-capistrano'
19
+ gem 'shotgun'
20
+ end
21
+
22
+ group :test do
23
+ gem 'shoulda-matchers'
24
+ gem 'rspec'
25
+ gem 'rack-test', :require => "rack/test"
26
+ gem 'mocha'
27
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,116 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activesupport (3.2.9)
5
+ i18n (~> 0.6)
6
+ multi_json (~> 1.0)
7
+ airbrake (3.1.6)
8
+ builder
9
+ girl_friday
10
+ builder (3.1.4)
11
+ capistrano (2.13.5)
12
+ highline
13
+ net-scp (>= 1.0.0)
14
+ net-sftp (>= 2.0.0)
15
+ net-ssh (>= 2.0.14)
16
+ net-ssh-gateway (>= 1.1.0)
17
+ capistrano-unicorn (0.1.6)
18
+ capistrano
19
+ capistrano_colors (0.5.5)
20
+ connection_pool (0.9.2)
21
+ couchrest (1.1.3)
22
+ mime-types (~> 1.15)
23
+ multi_json (~> 1.0)
24
+ rest-client (~> 1.6.1)
25
+ daemons (1.1.9)
26
+ diff-lcs (1.1.3)
27
+ girl_friday (0.11.1)
28
+ connection_pool (~> 0.9.0)
29
+ rubinius-actor
30
+ highline (1.6.15)
31
+ i18n (0.6.1)
32
+ json (1.6.1)
33
+ kgio (2.7.4)
34
+ mail (2.5.2)
35
+ i18n (>= 0.4.0)
36
+ mime-types (~> 1.16)
37
+ treetop (~> 1.4.8)
38
+ metaclass (0.0.1)
39
+ mime-types (1.19)
40
+ mocha (0.13.0)
41
+ metaclass (~> 0.0.1)
42
+ multi_json (1.3.7)
43
+ net-scp (1.0.4)
44
+ net-ssh (>= 1.99.1)
45
+ net-sftp (2.0.5)
46
+ net-ssh (>= 2.0.9)
47
+ net-ssh (2.2.2)
48
+ net-ssh-gateway (1.1.0)
49
+ net-ssh (>= 1.99.1)
50
+ newrelic_rpm (3.5.2.17)
51
+ polyglot (0.3.3)
52
+ pony (1.4)
53
+ mail (> 2.0)
54
+ rack (1.4.1)
55
+ rack-protection (1.2.0)
56
+ rack
57
+ rack-test (0.6.2)
58
+ rack (>= 1.0)
59
+ raindrops (0.10.0)
60
+ rake (0.9.5)
61
+ rddd (0.1.4)
62
+ rest-client (1.6.7)
63
+ mime-types (>= 1.16)
64
+ rspec (2.12.0)
65
+ rspec-core (~> 2.12.0)
66
+ rspec-expectations (~> 2.12.0)
67
+ rspec-mocks (~> 2.12.0)
68
+ rspec-core (2.12.0)
69
+ rspec-expectations (2.12.0)
70
+ diff-lcs (~> 1.1.3)
71
+ rspec-mocks (2.12.0)
72
+ rubinius-actor (0.0.2)
73
+ rubinius-core-api
74
+ rubinius-core-api (0.0.1)
75
+ rvm-capistrano (1.2.7)
76
+ capistrano (>= 2.0.0)
77
+ shotgun (0.9)
78
+ rack (>= 1.0)
79
+ shoulda-matchers (1.4.1)
80
+ activesupport (>= 3.0.0)
81
+ sinatra (1.3.3)
82
+ rack (~> 1.3, >= 1.3.6)
83
+ rack-protection (~> 1.2)
84
+ tilt (~> 1.3, >= 1.3.3)
85
+ tilt (1.3.3)
86
+ treetop (1.4.12)
87
+ polyglot
88
+ polyglot (>= 0.3.1)
89
+ unicorn (4.4.0)
90
+ kgio (~> 2.6)
91
+ rack
92
+ raindrops (~> 0.7)
93
+
94
+ PLATFORMS
95
+ ruby
96
+
97
+ DEPENDENCIES
98
+ airbrake
99
+ capistrano
100
+ capistrano-unicorn
101
+ capistrano_colors
102
+ couchrest
103
+ daemons
104
+ json
105
+ mocha
106
+ newrelic_rpm
107
+ pony
108
+ rack-test
109
+ rake
110
+ rddd
111
+ rspec
112
+ rvm-capistrano
113
+ shotgun
114
+ shoulda-matchers
115
+ sinatra
116
+ unicorn
@@ -0,0 +1,7 @@
1
+ require 'services/register_event_service'
2
+
3
+ class EventsController < Sinatra::Base
4
+ post '/register_event' do
5
+ RegisterEventService.new(params[:event]).execute
6
+ end
7
+ end
@@ -0,0 +1,72 @@
1
+ require 'storage'
2
+ require 'rddd/aggregate_root'
3
+
4
+ class Event < Rddd::AggregateRoot
5
+ attr_accessor :name, :user, :time, :params
6
+
7
+ finder :all
8
+ finder :by_name
9
+ finder :by_user
10
+ end
11
+
12
+ class EventFactory
13
+ def self.build(attrs)
14
+ Event.new(attrs[:id]).tap do |event|
15
+ event.name = attrs[:name]
16
+ event.user = attrs[:user]
17
+ event.time = attrs[:time]
18
+ event.params = attrs[:params]
19
+ end
20
+ end
21
+ end
22
+
23
+ class EventRepository
24
+ def db
25
+ @db ||= Storage.instance.build('monitor')
26
+ end
27
+
28
+ def create(event)
29
+ event_id = event.id
30
+
31
+ update(event)
32
+ db.add_to_list("events", event_id)
33
+ db.add_to_list("events-#{event.name}", event_id)
34
+ db.add_to_list("user-events-#{event.user}", event_id)
35
+ end
36
+
37
+ def all
38
+ db.get_list('events').map do |item|
39
+ find(item)
40
+ end
41
+ end
42
+
43
+ def by_name(name)
44
+ db.get_list("events-#{name}").map do |item|
45
+ find(item)
46
+ end
47
+ end
48
+
49
+ def by_user(user)
50
+ db.get_list("events-#{user}").map do |item|
51
+ find(item)
52
+ end
53
+ end
54
+
55
+ def find(id)
56
+ EventFactory.build(db.get(id))
57
+ end
58
+
59
+ def update(event)
60
+ attrs = {
61
+ :id => event.id,
62
+ :name => event.name.to_sym,
63
+ :user => event.user,
64
+ :time => event.time,
65
+ :params => event.params
66
+ }
67
+
68
+ event_id = event.id
69
+
70
+ db.set(event_id, attrs)
71
+ end
72
+ end
@@ -0,0 +1,16 @@
1
+ require 'id_generator'
2
+ require 'models/event'
3
+ require 'rddd/service'
4
+
5
+ class RegisterEventService < Rddd::Service
6
+ def execute
7
+ event = Event.new(IdGenerator.build)
8
+
9
+ event.time = Time.now
10
+ [:name, :user, :params].each do |attribute|
11
+ event.send :"#{attribute}=", @attributes[attribute]
12
+ end
13
+
14
+ event.create
15
+ end
16
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'models/event'
3
+ require 'rddd/aggregate_root'
4
+
5
+ describe Event do
6
+ it { should have_finder(:all).to(EventRepository) }
7
+
8
+ it { should have_finder(:by_name).to(EventRepository) }
9
+
10
+ it { should have_finder(:by_user).to(EventRepository) }
11
+
12
+ describe 'Event' do
13
+ subject { Event }
14
+
15
+ it { subject.ancestors.should include(Rddd::AggregateRoot) }
16
+ end
17
+
18
+ let(:id) { stub('id') }
19
+
20
+ subject { Event.new(id) }
21
+
22
+ it { should have_accessor :name }
23
+
24
+ it { should have_accessor :user }
25
+
26
+ it { should have_accessor :time }
27
+
28
+ it { should have_accessor :params }
29
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+ require 'services/register_event_service'
3
+
4
+ describe RegisterEventService do
5
+ let(:service) { RegisterEventService.new(attributes) }
6
+
7
+ let(:event) { stub('event') }
8
+
9
+ let(:time) { stub('time') }
10
+
11
+ subject { service.execute }
12
+
13
+ let(:user) { stub('user') }
14
+
15
+ let(:params) { stub('params') }
16
+
17
+ let(:attributes) do
18
+ {
19
+ :name => :account_created,
20
+ :user => user,
21
+ :params => params
22
+ }
23
+ end
24
+
25
+ let(:id) { stub('id') }
26
+
27
+ before do
28
+ IdGenerator.expects(:build).returns(id)
29
+
30
+ Event.expects(:new).with(id).returns(event)
31
+
32
+ event.expects(:name=).with(:account_created)
33
+
34
+ Time.expects(:now).returns(time)
35
+ event.expects(:time=).with(time)
36
+ event.expects(:user=).with(user)
37
+ event.expects(:params=).with(params)
38
+ event.expects(:create)
39
+ end
40
+
41
+ it { should_not be}
42
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+ require 'sinatra'
3
+ require 'rack/test'
4
+ require 'events_controller'
5
+
6
+ # setup test environment
7
+ set :environment, :test
8
+ set :run, false
9
+ set :raise_errors, true
10
+ set :logging, false
11
+
12
+ def app
13
+ EventsController
14
+ end
15
+
16
+ describe EventsController do
17
+ include Rack::Test::Methods
18
+
19
+ before do
20
+ end
21
+
22
+ describe 'POST /' do
23
+ subject { last_response }
24
+
25
+ let(:event) do
26
+ {
27
+ :name => 'user_created',
28
+ :user => 'petr@ngneers.com',
29
+ :params => {:foo => 'bar'}
30
+ }
31
+ end
32
+
33
+ before { post '/register_event', :event => event }
34
+
35
+ it { should be_ok }
36
+
37
+ describe 'event' do
38
+ subject { Event.all.last }
39
+
40
+ its(:name) { should == :user_created }
41
+
42
+ its(:user) { should == 'petr@ngneers.com' }
43
+
44
+ its(:params) { should == {'foo' => 'bar'} }
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,81 @@
1
+ ENV['RACK_ENV'] = 'test'
2
+
3
+ dir = "#{File.dirname(__FILE__)}/../../lib/"
4
+ $LOAD_PATH.unshift(dir) unless $LOAD_PATH.include?(dir)
5
+
6
+ dir = "#{File.dirname(__FILE__)}/../domain/"
7
+ $LOAD_PATH.unshift(dir) unless $LOAD_PATH.include?(dir)
8
+
9
+ dir = "#{File.dirname(__FILE__)}/../delivery/"
10
+ $LOAD_PATH.unshift(dir) unless $LOAD_PATH.include?(dir)
11
+
12
+ require 'configuration'
13
+ require 'rack/test'
14
+ require 'couchdb/db'
15
+ require 'core_ext/string'
16
+ require 'inmemory_storage'
17
+ require 'storage'
18
+ require 'rddd'
19
+
20
+ Configuration.instance.load("../config/#{ENV['RACK_ENV']}.yml")
21
+
22
+ RSpec.configure do |config|
23
+ config.include Rack::Test::Methods
24
+
25
+ config.mock_framework = :mocha
26
+ config.color_enabled = true
27
+
28
+ # Use color not only in STDOUT but also in pagers and files
29
+ config.tty = true
30
+
31
+ # Use the specified formatter
32
+ config.formatter = :progress # :progress, :html, :textmate
33
+
34
+ config.before(:each) do
35
+ Storage.instance.strategy = InMemoryStrages
36
+ end
37
+
38
+ config.after(:each) do
39
+ Storage.instance.build('monitor').clear
40
+ end
41
+ end
42
+
43
+ RSpec::Matchers.define :have_finder do |method|
44
+ chain :to do |target|
45
+ @target = target
46
+ end
47
+
48
+ match do |subject|
49
+ @target.any_instance.expects(method).with(1)
50
+ subject.class.send(method, 1)
51
+
52
+ true
53
+ end
54
+ end
55
+
56
+
57
+ RSpec::Matchers.define :have_accessor do |method|
58
+ match do |subject|
59
+ subject.respond_to?(method) && \
60
+ subject.respond_to?("#{method}=")
61
+ end
62
+ end
63
+
64
+ def stub_as(responder_class, methods = {})
65
+ responder = create_responder(responder_class)
66
+ stub(responder_class.name.to_s, methods).responds_like(responder)
67
+ end
68
+
69
+ def create_responder(responder_class)
70
+ list = case responder_class.name
71
+ when 'Event' then []
72
+
73
+ else raise "Responder '#{responder_class.name}' not defined yet!"
74
+ end
75
+
76
+ responder_class.new(*create_args(list))
77
+ end
78
+
79
+ def create_args(list)
80
+ list.map {|arg| stub(arg.to_s) }
81
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rddd-monitor
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Petr Janda
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-16 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: User inteligence.
15
+ email:
16
+ - petr@ngneers.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .rvmrc
22
+ - Gemfile
23
+ - Gemfile.lock
24
+ - delivery/events_controller.rb
25
+ - domain/models/event.rb
26
+ - domain/services/register_event_service.rb
27
+ - spec/domain/models/event_spec.rb
28
+ - spec/domain/services/register_action_service_spec.rb
29
+ - spec/integration/register_event_spec.rb
30
+ - spec/spec_helper.rb
31
+ homepage: ''
32
+ licenses: []
33
+ post_install_message:
34
+ rdoc_options: []
35
+ require_paths:
36
+ - lib
37
+ required_ruby_version: !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ required_rubygems_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ requirements: []
50
+ rubyforge_project: watchr
51
+ rubygems_version: 1.8.24
52
+ signing_key:
53
+ specification_version: 3
54
+ summary: Monitoring tool for rDDD
55
+ test_files:
56
+ - spec/domain/models/event_spec.rb
57
+ - spec/domain/services/register_action_service_spec.rb
58
+ - spec/integration/register_event_spec.rb
59
+ - spec/spec_helper.rb