adalog 0.4.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.
- 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
|