adalog 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +29 -0
- data/Gemfile +3 -0
- data/LICENSE.md +27 -0
- data/README.md +144 -0
- data/Rakefile +7 -0
- data/adalog.gemspec +27 -0
- data/lib/adalog/active_record_repo.rb +62 -0
- data/lib/adalog/configuration.rb +46 -0
- data/lib/adalog/entry.rb +85 -0
- data/lib/adalog/in_memory_repo.rb +38 -0
- data/lib/adalog/pstore_repo.rb +62 -0
- data/lib/adalog/simple_logging_adapter.rb +21 -0
- data/lib/adalog/version.rb +3 -0
- data/lib/adalog/web/public/javascripts/adalog.js +2 -0
- data/lib/adalog/web/public/javascripts/entries-list.js +82 -0
- data/lib/adalog/web/public/javascripts/vanilla-js.js +103 -0
- data/lib/adalog/web/public/stylesheets/adalog.css +55 -0
- data/lib/adalog/web/public/stylesheets/entries-list.css +99 -0
- data/lib/adalog/web/public/stylesheets/pure/buttons-min.css +7 -0
- data/lib/adalog/web/public/stylesheets/pure/forms-min.css +7 -0
- data/lib/adalog/web/public/stylesheets/pure/menus-min.css +7 -0
- data/lib/adalog/web/public/stylesheets/pure/pure-base-min.css +11 -0
- data/lib/adalog/web/public/stylesheets/pure/pure-grids-responsive-min.css +7 -0
- data/lib/adalog/web/public/stylesheets/pure/tables-min.css +7 -0
- data/lib/adalog/web/views/adalog.html.erb +24 -0
- data/lib/adalog/web/views/index.html.erb +37 -0
- data/lib/adalog/web.rb +103 -0
- data/lib/adalog.rb +60 -0
- data/test/data/simple.yml +28 -0
- data/test/test_helper.rb +35 -0
- data/test/unit/active_record_repo.rb +9 -0
- data/test/unit/configuration_test.rb +62 -0
- data/test/unit/entry_test.rb +138 -0
- data/test/unit/in_memory_repo_test.rb +9 -0
- data/test/unit/pstore_repo_test.rb +9 -0
- metadata +175 -0
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ConfigurationTest < Minitest::Test
|
4
|
+
|
5
|
+
class MockRepo
|
6
|
+
def recorded_calls
|
7
|
+
@recorded_calls ||= []
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing(msg, *args, &block)
|
11
|
+
recorded_calls << msg
|
12
|
+
msg
|
13
|
+
end
|
14
|
+
|
15
|
+
def called?(msg)
|
16
|
+
recorded_calls.include?(msg)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
################################################################################
|
22
|
+
|
23
|
+
|
24
|
+
test "can be configured via namespace configure method" do
|
25
|
+
repo = MockRepo.new
|
26
|
+
Adalog.configure do |config|
|
27
|
+
config.repo = repo
|
28
|
+
config.singleton = false
|
29
|
+
config.html_erb = true
|
30
|
+
config.web_heading = "Captain what's our heading?"
|
31
|
+
config.time_format = "%Y-%m-%d %H:%M:%S"
|
32
|
+
end
|
33
|
+
|
34
|
+
assert_equal(repo, Adalog.configuration.repo)
|
35
|
+
assert_equal(false, Adalog.configuration.singleton)
|
36
|
+
assert_equal(true, Adalog.configuration.html_erb)
|
37
|
+
assert_equal("Captain what's our heading?", Adalog.configuration.web_heading)
|
38
|
+
assert_equal("%Y-%m-%d %H:%M:%S", Adalog.configuration.time_format)
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
test "repo can be accessed via namespace when singleton is true" do
|
43
|
+
repo = MockRepo.new
|
44
|
+
Adalog.configure do |config|
|
45
|
+
config.repo = repo
|
46
|
+
config.singleton = true
|
47
|
+
config.html_erb = true
|
48
|
+
config.web_heading = "Captain what's our heading?"
|
49
|
+
config.time_format = "%Y-%m-%d %H:%M:%S"
|
50
|
+
end
|
51
|
+
Adalog.fetch
|
52
|
+
repo.called?(:fetch)
|
53
|
+
Adalog.insert
|
54
|
+
repo.called?(:insert)
|
55
|
+
Adalog.all
|
56
|
+
repo.called?(:all)
|
57
|
+
Adalog.clear!
|
58
|
+
repo.called?(:clear!)
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class EntryTest < Minitest::Test
|
4
|
+
|
5
|
+
##
|
6
|
+
# So we can be lazy and omit typing the namspace fifty times.
|
7
|
+
Entry = Adalog::Entry
|
8
|
+
|
9
|
+
|
10
|
+
AnotherEntryClass = Struct.new(:title, :timestamp, :message, :details, :format)
|
11
|
+
|
12
|
+
|
13
|
+
class AnotherEntryClassWithToH
|
14
|
+
attr_reader :to_h_was_used
|
15
|
+
|
16
|
+
def initialize(timestamp)
|
17
|
+
@timestamp = timestamp
|
18
|
+
@to_h_was_used = false
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_h
|
22
|
+
@to_h_was_used = true
|
23
|
+
{ title: "Something",
|
24
|
+
timestamp: @timestamp,
|
25
|
+
message: "happened",
|
26
|
+
format: "plain",
|
27
|
+
details: "in the world"
|
28
|
+
}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
################################################################################
|
34
|
+
|
35
|
+
|
36
|
+
test "is invalid when none of title, message or details are set" do
|
37
|
+
entry = Entry.new
|
38
|
+
refute(entry.valid?)
|
39
|
+
assert(entry.errors.any?)
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
test "will provide the current timestamp if no timestamp is given" do
|
44
|
+
before_new = Time.now
|
45
|
+
entry = Entry.new
|
46
|
+
after_new = Time.now
|
47
|
+
assert(before_new <= entry.timestamp)
|
48
|
+
assert(entry.timestamp <= after_new)
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
test "is valid with at least one of title, message or details" do
|
53
|
+
entry = Entry.new(title: "GroupRaise Schedule Adapter")
|
54
|
+
assert(entry.valid?)
|
55
|
+
entry = Entry.new(message: "meal:requested")
|
56
|
+
assert(entry.valid?)
|
57
|
+
entry = Entry.new(details: "EMERGE Fellowship at Berry Hill")
|
58
|
+
assert(entry.valid?)
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
test "can be built from another object of the same interface" do
|
63
|
+
another_obj = AnotherEntryClass.new("Something", Time.now, "happened", "in the world")
|
64
|
+
entry = Entry.build(another_obj)
|
65
|
+
assert(entry.valid?)
|
66
|
+
assert_equal(another_obj.title, entry.title)
|
67
|
+
assert_equal(another_obj.timestamp, entry.timestamp)
|
68
|
+
assert_equal(another_obj.message, entry.message)
|
69
|
+
assert_equal(another_obj.details, entry.details)
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
test "is invalid when built from an object missing the required methods" do
|
74
|
+
entry = Entry.build(Object.new)
|
75
|
+
refute(entry.valid?)
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
test "can be built from a hash-like object" do
|
80
|
+
hash = {
|
81
|
+
title: "Something",
|
82
|
+
timestamp: Time.now,
|
83
|
+
message: "happened",
|
84
|
+
details: "in the world"
|
85
|
+
}
|
86
|
+
entry = Entry.build(hash)
|
87
|
+
assert(entry.valid?)
|
88
|
+
assert_equal(hash[:title], entry.title)
|
89
|
+
assert_equal(hash[:timestamp], entry.timestamp)
|
90
|
+
assert_equal(hash[:message], entry.message)
|
91
|
+
assert_equal(hash[:details], entry.details)
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
test "can be built from a hash-like object with string keys" do
|
96
|
+
hash = {
|
97
|
+
'title' => "Something",
|
98
|
+
'timestamp' => Time.now,
|
99
|
+
'message' => "happened",
|
100
|
+
'details' => "in the world"
|
101
|
+
}
|
102
|
+
entry = Entry.build(hash)
|
103
|
+
assert(entry.valid?)
|
104
|
+
assert_equal(hash['title'], entry.title)
|
105
|
+
assert_equal(hash['timestamp'], entry.timestamp)
|
106
|
+
assert_equal(hash['message'], entry.message)
|
107
|
+
assert_equal(hash['details'], entry.details)
|
108
|
+
end
|
109
|
+
|
110
|
+
|
111
|
+
test "can be built from an object responding to to_h" do
|
112
|
+
now = Time.now
|
113
|
+
other = AnotherEntryClassWithToH.new(now)
|
114
|
+
entry = Entry.build(other)
|
115
|
+
assert(other.to_h_was_used)
|
116
|
+
assert(entry.valid?)
|
117
|
+
assert_equal("Something", entry.title)
|
118
|
+
assert_equal(now, entry.timestamp)
|
119
|
+
assert_equal("happened", entry.message)
|
120
|
+
assert_equal("in the world", entry.details)
|
121
|
+
end
|
122
|
+
|
123
|
+
|
124
|
+
test "can be built from distinct keyword arguments" do
|
125
|
+
now = Time.now
|
126
|
+
entry = Entry.new(
|
127
|
+
timestamp: now,
|
128
|
+
title: "Something",
|
129
|
+
message: "happened",
|
130
|
+
details: "in the world")
|
131
|
+
assert(entry.valid?)
|
132
|
+
assert_equal("Something", entry.title)
|
133
|
+
assert_equal(now, entry.timestamp)
|
134
|
+
assert_equal("happened", entry.message)
|
135
|
+
assert_equal("in the world", entry.details)
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
metadata
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: adalog
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Paul Kwiatkowski
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-04-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sinatra
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.4'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.4.4
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.4'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.4.4
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: bundler
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.5'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.5'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '10.0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '10.0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: minitest-reporters
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '1.1'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '1.1'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: turn-again-reporter
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '1.1'
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 1.1.0
|
85
|
+
type: :development
|
86
|
+
prerelease: false
|
87
|
+
version_requirements: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '1.1'
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: 1.1.0
|
95
|
+
description: A not-quite logger, with several storage methods. Records occurrences,
|
96
|
+
provides a web app for viewing entries. Motivated by the need to record the actions
|
97
|
+
of stubbed-out versions of adapters to third-party services, and for that record
|
98
|
+
to be something other than a traditional logger. Web viewer is built in Sinatra
|
99
|
+
and so can be run standalone via the usual methods or mounted at some route within
|
100
|
+
a Rails app. Comes with three repository implementations for storing/retrieving
|
101
|
+
entries and is trivial to write your own.
|
102
|
+
email:
|
103
|
+
- paul@groupraise.com
|
104
|
+
executables: []
|
105
|
+
extensions: []
|
106
|
+
extra_rdoc_files: []
|
107
|
+
files:
|
108
|
+
- ".gitignore"
|
109
|
+
- Gemfile
|
110
|
+
- LICENSE.md
|
111
|
+
- README.md
|
112
|
+
- Rakefile
|
113
|
+
- adalog.gemspec
|
114
|
+
- lib/adalog.rb
|
115
|
+
- lib/adalog/active_record_repo.rb
|
116
|
+
- lib/adalog/configuration.rb
|
117
|
+
- lib/adalog/entry.rb
|
118
|
+
- lib/adalog/in_memory_repo.rb
|
119
|
+
- lib/adalog/pstore_repo.rb
|
120
|
+
- lib/adalog/simple_logging_adapter.rb
|
121
|
+
- lib/adalog/version.rb
|
122
|
+
- lib/adalog/web.rb
|
123
|
+
- lib/adalog/web/public/javascripts/adalog.js
|
124
|
+
- lib/adalog/web/public/javascripts/entries-list.js
|
125
|
+
- lib/adalog/web/public/javascripts/vanilla-js.js
|
126
|
+
- lib/adalog/web/public/stylesheets/adalog.css
|
127
|
+
- lib/adalog/web/public/stylesheets/entries-list.css
|
128
|
+
- lib/adalog/web/public/stylesheets/pure/buttons-min.css
|
129
|
+
- lib/adalog/web/public/stylesheets/pure/forms-min.css
|
130
|
+
- lib/adalog/web/public/stylesheets/pure/menus-min.css
|
131
|
+
- lib/adalog/web/public/stylesheets/pure/pure-base-min.css
|
132
|
+
- lib/adalog/web/public/stylesheets/pure/pure-grids-responsive-min.css
|
133
|
+
- lib/adalog/web/public/stylesheets/pure/tables-min.css
|
134
|
+
- lib/adalog/web/views/adalog.html.erb
|
135
|
+
- lib/adalog/web/views/index.html.erb
|
136
|
+
- test/data/simple.yml
|
137
|
+
- test/test_helper.rb
|
138
|
+
- test/unit/active_record_repo.rb
|
139
|
+
- test/unit/configuration_test.rb
|
140
|
+
- test/unit/entry_test.rb
|
141
|
+
- test/unit/in_memory_repo_test.rb
|
142
|
+
- test/unit/pstore_repo_test.rb
|
143
|
+
homepage: https://github.com/swifthand/adalog
|
144
|
+
licenses:
|
145
|
+
- Revised BSD, see LICENSE.md
|
146
|
+
metadata: {}
|
147
|
+
post_install_message:
|
148
|
+
rdoc_options: []
|
149
|
+
require_paths:
|
150
|
+
- lib
|
151
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '0'
|
156
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
requirements: []
|
162
|
+
rubyforge_project:
|
163
|
+
rubygems_version: 2.4.8
|
164
|
+
signing_key:
|
165
|
+
specification_version: 4
|
166
|
+
summary: A not-quite logger, with several storage methods. Records occurrences, provides
|
167
|
+
a web app for viewing entries.
|
168
|
+
test_files:
|
169
|
+
- test/data/simple.yml
|
170
|
+
- test/test_helper.rb
|
171
|
+
- test/unit/active_record_repo.rb
|
172
|
+
- test/unit/configuration_test.rb
|
173
|
+
- test/unit/entry_test.rb
|
174
|
+
- test/unit/in_memory_repo_test.rb
|
175
|
+
- test/unit/pstore_repo_test.rb
|