acts_as_protocolable 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest.txt ADDED
@@ -0,0 +1,7 @@
1
+ .autotest
2
+ History.txt
3
+ Manifest.txt
4
+ README.txt
5
+ Rakefile
6
+ lib/acts_as_protocolable.rb
7
+ test/test_acts_as_protocolable.rb
data/README.textile ADDED
File without changes
data/Rakefile.rb ADDED
@@ -0,0 +1,18 @@
1
+ begin
2
+ require 'jeweler'
3
+ Jeweler::Tasks.new do |gemspec|
4
+ gemspec.name = "acts_as_protocolable"
5
+ gemspec.authors = ["Igor Alexandrov"]
6
+ gemspec.email = "igor.alexandrov@gmail.com"
7
+ gemspec.homepage = "http://github.com/igor-alexandrov/acts_as_protocolable"
8
+
9
+ gemspec.summary = "Guard of activity in your rails application."
10
+ gemspec.description = "ActsAsProtocolable is the easiest way to protocol user activity inside your Rails admin interface."
11
+ gemspec.files = FileList["[A-Z]*", "{generators,lib}/**/*"] - FileList["**/*.log"]
12
+ gemspec.add_dependency("sys-admin", ">= 1.5.2")
13
+ gemspec.add_dependency("activerecord", ">= 2.3.0")
14
+ end
15
+ Jeweler::GemcutterTasks.new
16
+ rescue LoadError
17
+ puts "Jeweler not available. Install it with: gem install jeweler"
18
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,7 @@
1
+ class ActsAsProtocolableMigrationGenerator < Rails::Generator::Base
2
+ def manifest
3
+ record do |m|
4
+ m.migration_template 'migration.rb', 'db/migrate', :migration_file_name => "acts_as_protocolable_migration"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,25 @@
1
+ class ActsAsProtocolableMigration < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :protocol do |t|
4
+ t.datetime :created_at
5
+ t.string :affected_object_type
6
+ t.integer :affected_object_id
7
+ t.string :action_type
8
+ t.integer :internal_user_id
9
+ t.string :system_user_login
10
+ t.boolean :is_console_action
11
+
12
+ end
13
+
14
+ add_index :protocol, :affected_object_type
15
+ add_index :protocol, :affected_object_id
16
+ add_index :protocol, :action_type
17
+ add_index :protocol, :internal_user_id
18
+ add_index :protocol, :system_user_login
19
+ add_index :protocol, :is_console_action
20
+ end
21
+
22
+ def self.down
23
+ drop_table :protocol
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ require 'rubygems'
2
+ require 'active_record'
3
+ require 'sys/admin'
4
+
5
+ class ActsAsProtocolable::Base < ActiveRecord::Base
6
+ set_table_name 'protocol'
7
+
8
+ #All attributes of Protocol should be read-only
9
+ attr_readonly :created_at,
10
+ :affected_object_type,
11
+ :affected_object_id,
12
+ :action_type,
13
+ :internal_user_id,
14
+ :system_user_login,
15
+ :is_console_action
16
+
17
+ attr_accessible :affected_object_type,
18
+ :affected_object_id,
19
+ :action_type,
20
+ :internal_user_id
21
+
22
+
23
+ def after_initialize
24
+ return unless new_record?
25
+ self.is_console_action = self.called_from_console?
26
+ self.system_user_login = self.get_system_user_login
27
+ end
28
+
29
+ protected
30
+ def called_from_console?
31
+ (defined? IRB) ? true : false
32
+ end
33
+
34
+ def get_system_user_login
35
+ Sys::Admin.get_login
36
+ end
37
+ end
@@ -0,0 +1,3 @@
1
+ class ActsAsProtocolable::ForModel < ActsAsProtocolable::Base
2
+
3
+ end
@@ -0,0 +1,57 @@
1
+ module ActsAsProtocolable
2
+ mattr_accessor :internal_user_id
3
+
4
+ module ClassMethods
5
+ def acts_as_protocoled(options = {})
6
+ self.acts_as_protocoled_model(options)
7
+ end
8
+
9
+ def acts_as_protocoled_model(options = {})
10
+ puts "!!!!!!"
11
+ puts options
12
+ puts "!!!!!!"
13
+ include ActsAsProtocoled::InstanceMethods
14
+
15
+ unless options.has_key?(:only)
16
+ after_create :protocol_on_create
17
+ after_update :protocol_on_update
18
+ after_destroy :protocol_on_destroy
19
+ else
20
+ options[:only].each do |action|
21
+ class_eval("after_#{action.to_s} :protocol_on_#{action.to_s}")
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ module InstanceMethods
28
+ protected
29
+ def protocol_on_create
30
+ ActsAsProtocoled::Base.create(
31
+ :affected_object_type => self.class.to_s,
32
+ :affected_object_id => self.id,
33
+ :action_type => "CREATE",
34
+ :internal_user_id => ActsAsProtocoled.internal_user_id
35
+ )
36
+ end
37
+
38
+ def protocol_on_update
39
+ ActsAsProtocoled::Base.create(
40
+ :affected_object_type => self.class.to_s,
41
+ :affected_object_id => self.id,
42
+ :action_type => "UPDATE",
43
+ :internal_user_id => ActsAsProtocoled.internal_user_id
44
+ )
45
+ end
46
+
47
+ def protocol_on_destroy
48
+ ActsAsProtocoled::Base.create(
49
+ :affected_object_type => self.class.to_s,
50
+ :affected_object_id => self.id,
51
+ :action_type => "DESTROY",
52
+ :internal_user_id => ActsAsProtocoled.internal_user_id
53
+ )
54
+ end
55
+ end
56
+ end
57
+
@@ -0,0 +1,8 @@
1
+ require "test/unit"
2
+ require "acts_as_protocolable"
3
+
4
+ class TestActsAsProtocolable < Test::Unit::TestCase
5
+ def test_sanity
6
+ flunk "write tests or I will kneecap you"
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: acts_as_protocolable
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Igor Alexandrov
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-07-21 00:00:00 +04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: sys-admin
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 1
32
+ - 5
33
+ - 2
34
+ version: 1.5.2
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: activerecord
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 2
48
+ - 3
49
+ - 0
50
+ version: 2.3.0
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ description: ActsAsProtocolable is the easiest way to protocol user activity inside your Rails admin interface.
54
+ email: igor.alexandrov@gmail.com
55
+ executables: []
56
+
57
+ extensions: []
58
+
59
+ extra_rdoc_files:
60
+ - README.textile
61
+ files:
62
+ - Manifest.txt
63
+ - README.textile
64
+ - Rakefile.rb
65
+ - VERSION
66
+ - generators/acts_as_protocolable_migration/acts_as_protocolable_migration_generator.rb
67
+ - generators/acts_as_protocolable_migration/templates/migration.rb
68
+ - lib/acts_as_protocolable.rb
69
+ - lib/acts_as_protocolable/base.rb
70
+ - lib/acts_as_protocolable/for_model.rb
71
+ - test/test_acts_as_protocolable.rb
72
+ has_rdoc: true
73
+ homepage: http://github.com/igor-alexandrov/acts_as_protocolable
74
+ licenses: []
75
+
76
+ post_install_message:
77
+ rdoc_options:
78
+ - --charset=UTF-8
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ hash: 3
96
+ segments:
97
+ - 0
98
+ version: "0"
99
+ requirements: []
100
+
101
+ rubyforge_project:
102
+ rubygems_version: 1.3.7
103
+ signing_key:
104
+ specification_version: 3
105
+ summary: Guard of activity in your rails application.
106
+ test_files:
107
+ - test/test_acts_as_protocolable.rb