yaml_notifier 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: be95fcd186e78298b3ad782b0886dbfe460e19d7
4
+ data.tar.gz: 8b242988424a6f4761be2f2336964dea91559aab
5
+ SHA512:
6
+ metadata.gz: f368bdb067d0d77efd70934dae8e8209131de76a773a788e4cba0a62447201669035c614a292e7a481c93bbe4663af40416c4450ea38dc6ac2a7fef53fc1ed8b
7
+ data.tar.gz: c3c6f540ff789646c7c7d53ff23359e30a04887fa187d69eb4f9b9306abc5ab8e50ea5eedfe7ed68753207e12c4029857a4622cb69830caed15877d8c3e43ab3
data/.gitignore ADDED
@@ -0,0 +1,34 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /test/tmp/
9
+ /test/version_tmp/
10
+ /tmp/
11
+
12
+ ## Specific to RubyMotion:
13
+ .dat*
14
+ .repl_history
15
+ build/
16
+
17
+ ## Documentation cache and generated files:
18
+ /.yardoc/
19
+ /_yardoc/
20
+ /doc/
21
+ /rdoc/
22
+
23
+ ## Environment normalisation:
24
+ /.bundle/
25
+ /lib/bundler/man/
26
+
27
+ # for a library or gem, you might want to ignore these files since the code is
28
+ # intended to run in multiple environments; otherwise, check them in:
29
+ # Gemfile.lock
30
+ # .ruby-version
31
+ # .ruby-gemset
32
+
33
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
34
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in yaml_record.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,34 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ yaml_notifier (0.0.1)
5
+ yaml_record4 (= 0.0.6)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activemodel (4.1.5)
11
+ activesupport (= 4.1.5)
12
+ builder (~> 3.1)
13
+ activesupport (4.1.5)
14
+ i18n (~> 0.6, >= 0.6.9)
15
+ json (~> 1.7, >= 1.7.7)
16
+ minitest (~> 5.1)
17
+ thread_safe (~> 0.1)
18
+ tzinfo (~> 1.1)
19
+ builder (3.2.2)
20
+ i18n (0.6.11)
21
+ json (1.8.1)
22
+ minitest (5.4.1)
23
+ thread_safe (0.3.4)
24
+ tzinfo (1.2.2)
25
+ thread_safe (~> 0.1)
26
+ yaml_record4 (0.0.6)
27
+ activemodel (>= 4.0)
28
+ activesupport (>= 4.0)
29
+
30
+ PLATFORMS
31
+ ruby
32
+
33
+ DEPENDENCIES
34
+ yaml_notifier!
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Thierry Zires
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ yaml_notifier
2
+ ================
3
+
4
+ save exceptions in yaml when exception_notification occur
@@ -0,0 +1,31 @@
1
+ require 'yaml_notifier/exception_log'
2
+
3
+ module ExceptionNotifier
4
+ class YamlNotifier
5
+
6
+ def initialize(options)
7
+ # initialize options here
8
+ @extra_params = options[:extra_params] || []
9
+ end
10
+
11
+ def call(exception, options={})
12
+ log = ::YamlNotifier::ExceptionLog.new({
13
+ title: exception.inspect,
14
+ message: exception.message,
15
+ backtrace: exception.backtrace.join("\n")
16
+ })
17
+
18
+ env = options[:env]
19
+ unless env.nil?
20
+ log.user_agent = env['HTTP_USER_AGENT']
21
+ log.request_uri = env['REQUEST_URI']
22
+ log.request_method = env['REQUEST_METHOD']
23
+ log.controller = env['action_dispatch.request.path_parameters'][:controller]
24
+ log.action = env['action_dispatch.request.path_parameters'][:action]
25
+ log.extra_params = @extra_params.map{|p| env[p]} unless @extra_params.empty?
26
+ end
27
+
28
+ log.save
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,7 @@
1
+ module YamlNotifier
2
+ end
3
+
4
+ require 'exception_notifier/yaml_notifier'
5
+ ExceptionNotifier.add_notifier :yaml, {} if defined?(ExceptionNotifier)
6
+
7
+ require 'yaml_notifier/railtie' if defined?(Rails)
@@ -0,0 +1,7 @@
1
+ require 'yaml_record'
2
+
3
+ module YamlNotifier
4
+ class ExceptionLog < YamlRecord::Base
5
+ properties :title, :message, :backtrace, :user_agent, :request_uri, :request_method, :extra_params, :controller, :action
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module YamlNotifier
2
+ class Railtie < ::Rails::Railtie
3
+ initializer "yaml_record.root_path" do
4
+ YamlRecord.root_path = File.join(Rails.root, 'db')
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module YamlNotifier
2
+ VERSION = '0.0.1'
3
+ end
data/test/base_test.rb ADDED
@@ -0,0 +1,193 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class YamlObject < YamlRecord::Base
4
+ properties :title, :body, :child_ids
5
+ source File.dirname(__FILE__) + "/../tmp/yaml_object"
6
+ end
7
+
8
+ class BaseTest < Test::Unit::TestCase
9
+
10
+ def setup
11
+ @obj_title = "Simple Title"
12
+ @obj_id = "1234"
13
+ @obj2_id = "5678"
14
+ @obj2_title = "Simple Title 2"
15
+
16
+ @attr = {
17
+ :child_ids => [@obj_id],
18
+ :title => @obj_title,
19
+ :body => "Body!!"
20
+ }
21
+
22
+ @attr2 = {
23
+ :child_ids => [@obj2_id],
24
+ :title => @obj2_title,
25
+ :body => "Body!!"
26
+ }
27
+
28
+ clean_yaml_record(YamlObject)
29
+ @fs = YamlObject.create(@attr)
30
+ end
31
+
32
+ context "for instance methods" do
33
+
34
+ context "for [] method" do
35
+ should("get attribute with [attribute]"){ assert_equal @fs.title, @fs[:title] }
36
+ end
37
+
38
+ context "for []= method" do
39
+ setup do
40
+ @fs[:title] = "Toto"
41
+ end
42
+ should("set attribute with [attribute]="){ assert_equal @fs[:title], "Toto" }
43
+ end
44
+
45
+ context "for save method" do
46
+ setup do
47
+ @fs2 = YamlObject.new(@attr)
48
+ @fs2.save
49
+ end
50
+
51
+ should("save on yaml file"){ assert_equal YamlObject.last.attributes.diff(@attr), {:id => @fs2.reload.id } }
52
+ end
53
+
54
+ context "for update_attributes method" do
55
+ setup do
56
+ @fs.update_attributes(:title => "Toto", :body => "http://somewhereelse.com")
57
+ @fs.reload
58
+ end
59
+ should("update title") { assert_equal @fs.title, "Toto" }
60
+ should("update body") { assert_equal @fs.body, "http://somewhereelse.com" }
61
+ end
62
+
63
+ context "for column_names method" do
64
+ should("return an array with attributes names") { assert_equal @fs.column_names.sort!, YamlObject.properties.map { |p| p.to_s }.sort! }
65
+ end
66
+
67
+ context "for persisted_attributes method" do
68
+ should("return persisted attributes") { assert_equal [:title, :body, :child_ids, :id ].sort_by {|sym| sym.to_s}, @fs.persisted_attributes.keys.sort_by {|sym| sym.to_s} }
69
+ end
70
+
71
+ context "for new_record? method" do
72
+ setup do
73
+ @fs3 = YamlObject.new
74
+ end
75
+ should("be a new record") { assert @fs3.new_record? }
76
+ should("not be a new record") { assert_false @fs.new_record? }
77
+ end
78
+
79
+ context "for destroyed? method" do
80
+ setup do
81
+ @fs4 = YamlObject.create(@attr)
82
+ @fs4.destroy
83
+ end
84
+ should("be a destoyed") { assert @fs4.destroyed? }
85
+ should("not be destroyed") { assert_false @fs.destroyed? }
86
+ end
87
+
88
+ context "for destroy method" do
89
+ setup do
90
+ @fs5 = YamlObject.create(@attr)
91
+ @fs5.destroy
92
+ end
93
+ should("not find @fs5"){ assert_nil YamlObject.find(@fs5.id) }
94
+ end
95
+
96
+ context "for reload method" do
97
+ setup do
98
+ @fs.title = "Foo"
99
+ end
100
+ should("equal to Foo"){ assert_equal @fs.title, "Foo" }
101
+ should("equal to correct title"){ assert_equal @fs.reload.title, @obj_title }
102
+ end
103
+
104
+ context "for to_param method" do
105
+ setup { @fs.id = "a1b2c3" }
106
+
107
+ should("return id of record") { assert_equal(@fs.to_param, @fs.id) }
108
+ end
109
+ end
110
+
111
+ context "for class methods" do
112
+ context "for self.find_by_attribute method" do
113
+ setup do
114
+ @fs_found = YamlObject.find_by_attribute(:title, @obj_title)
115
+ end
116
+ should("be same object as @fs"){ assert_equal @fs_found, YamlObject.find(@fs.id) }
117
+ end
118
+
119
+ context "for self.find_by_id method" do
120
+ setup do
121
+ @fs_found = YamlObject.find_by_id(@fs.id)
122
+ @fs_found2 = YamlObject.find(@fs.id)
123
+ end
124
+ should("be same object as @fs"){ assert_equal @fs.attributes, @fs_found.attributes }
125
+ should("be same object as @fs bis"){ assert_equal @fs.attributes, @fs_found2.attributes }
126
+ end
127
+
128
+ context "for self.all method" do
129
+ setup do
130
+ clean_yaml_record(YamlObject)
131
+ @fs, @fs2 = YamlObject.create(@attr), YamlObject.create(@attr2)
132
+ end
133
+ should("retrieve 2 YamlObject obj"){ assert_equal YamlObject.all.size, 2 }
134
+ should("return as first item @fs"){ assert_equal YamlObject.all.first.attributes, @fs.attributes }
135
+ should("return as last item @fs2"){ assert_equal YamlObject.all.last.attributes, @fs2.attributes }
136
+ end
137
+
138
+ context "for self.first method" do
139
+ setup do
140
+ clean_yaml_record(YamlObject)
141
+ @fs, @fs2 = YamlObject.create(@attr), YamlObject.create(@attr2)
142
+ end
143
+
144
+ should("return @fs as the first item"){ assert_equal YamlObject.first.attributes, @fs.attributes }
145
+ should("return @fs"){ assert_equal YamlObject.first(2).first.attributes, @fs.attributes }
146
+ should("return @fs2"){ assert_equal YamlObject.first(2).last.attributes, @fs2.attributes }
147
+ end
148
+
149
+ context "for self.last method" do
150
+ setup do
151
+ clean_yaml_record(YamlObject)
152
+ @fs, @fs2 = YamlObject.create(@attr), YamlObject.create(@attr2)
153
+ end
154
+
155
+ should("return @fs as the first item"){ assert_equal YamlObject.last.attributes, @fs2.attributes }
156
+ should("return @fs"){ assert_equal YamlObject.last(2).first.attributes, @fs.attributes }
157
+ should("return @fs2"){ assert_equal YamlObject.last(2).last.attributes, @fs2.attributes }
158
+ end
159
+
160
+ context "for self.write_contents method" do
161
+ setup do
162
+ clean_yaml_record(YamlObject)
163
+ @attributes = [ @attr, @attr2 ]
164
+ YamlObject.write_contents(@attributes)
165
+ end
166
+ should("write in yaml file"){ assert_equal YAML.load_file(YamlObject.source), [ @attr, @attr2 ] }
167
+ end
168
+
169
+ context "for self.create method" do
170
+ setup do
171
+ clean_yaml_record(YamlObject)
172
+ @fs = YamlObject.create(@attr)
173
+ @fs_not_created = YamlObject.new(@attr)
174
+ end
175
+ should("create @fs"){ assert_equal YamlObject.last.attributes, @fs.attributes }
176
+ should("set its is_created to true"){ assert @fs.is_created }
177
+ should("set @fs_not_created is_created field to false"){ assert_false @fs_not_created.is_created }
178
+ end
179
+
180
+ context "for set_id!" do
181
+ setup do
182
+ @fs_no_id = YamlObject.new(@attr)
183
+ @fs_with_id = YamlObject.create(@attr)
184
+ @id = @fs_with_id.id
185
+ @fs_with_id.update_attributes(:title => "Gomiso")
186
+ end
187
+ should("not have any id"){ assert_nil @fs_no_id.id }
188
+ should("have a id"){ assert @fs_with_id.id }
189
+ should("keep the same id"){ assert_equal @fs_with_id.id, @id }
190
+ end
191
+ end
192
+
193
+ end
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'minitest/autorun'
3
+ #require 'test/unit'
4
+ require 'shoulda'
5
+ require File.dirname(__FILE__) + "/../lib/yaml_record"
6
+
7
+ class Test::Unit::TestCase
8
+ def clean_yaml_record(class_record)
9
+ File.open(class_record.source, 'w') {|f| f.write(nil) }
10
+ end
11
+
12
+ # Asserts that the condition is not true
13
+ # assert_false @title == "hey"
14
+ def assert_false(condition, message='')
15
+ assert !condition, message
16
+ end
17
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "yaml_notifier/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "yaml_notifier"
7
+ s.version = YamlNotifier::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Thierry Zires"]
10
+ s.email = ["zshuaibin@gmail.com"]
11
+ s.homepage = "https://github.com/zires/yaml_notifier"
12
+ s.summary = %q{save exceptions in yaml when exception_notification occur}
13
+ s.description = %q{save exceptions in yaml when exception_notification occur}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ['lib']
19
+
20
+ s.add_dependency 'yaml_record4', '= 0.0.6'
21
+
22
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yaml_notifier
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Thierry Zires
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: yaml_record4
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.6
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.6
27
+ description: save exceptions in yaml when exception_notification occur
28
+ email:
29
+ - zshuaibin@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - .gitignore
35
+ - Gemfile
36
+ - Gemfile.lock
37
+ - LICENSE
38
+ - README.md
39
+ - lib/exception_notifier/yaml_notifier.rb
40
+ - lib/yaml_notifier.rb
41
+ - lib/yaml_notifier/exception_log.rb
42
+ - lib/yaml_notifier/railtie.rb
43
+ - lib/yaml_notifier/version.rb
44
+ - test/base_test.rb
45
+ - test/test_helper.rb
46
+ - yaml_notifier.gemspec
47
+ homepage: https://github.com/zires/yaml_notifier
48
+ licenses: []
49
+ metadata: {}
50
+ post_install_message:
51
+ rdoc_options: []
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ requirements: []
65
+ rubyforge_project:
66
+ rubygems_version: 2.1.11
67
+ signing_key:
68
+ specification_version: 4
69
+ summary: save exceptions in yaml when exception_notification occur
70
+ test_files:
71
+ - test/base_test.rb
72
+ - test/test_helper.rb
73
+ has_rdoc: