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.
Files changed (37) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +29 -0
  3. data/Gemfile +3 -0
  4. data/LICENSE.md +27 -0
  5. data/README.md +144 -0
  6. data/Rakefile +7 -0
  7. data/adalog.gemspec +27 -0
  8. data/lib/adalog/active_record_repo.rb +62 -0
  9. data/lib/adalog/configuration.rb +46 -0
  10. data/lib/adalog/entry.rb +85 -0
  11. data/lib/adalog/in_memory_repo.rb +38 -0
  12. data/lib/adalog/pstore_repo.rb +62 -0
  13. data/lib/adalog/simple_logging_adapter.rb +21 -0
  14. data/lib/adalog/version.rb +3 -0
  15. data/lib/adalog/web/public/javascripts/adalog.js +2 -0
  16. data/lib/adalog/web/public/javascripts/entries-list.js +82 -0
  17. data/lib/adalog/web/public/javascripts/vanilla-js.js +103 -0
  18. data/lib/adalog/web/public/stylesheets/adalog.css +55 -0
  19. data/lib/adalog/web/public/stylesheets/entries-list.css +99 -0
  20. data/lib/adalog/web/public/stylesheets/pure/buttons-min.css +7 -0
  21. data/lib/adalog/web/public/stylesheets/pure/forms-min.css +7 -0
  22. data/lib/adalog/web/public/stylesheets/pure/menus-min.css +7 -0
  23. data/lib/adalog/web/public/stylesheets/pure/pure-base-min.css +11 -0
  24. data/lib/adalog/web/public/stylesheets/pure/pure-grids-responsive-min.css +7 -0
  25. data/lib/adalog/web/public/stylesheets/pure/tables-min.css +7 -0
  26. data/lib/adalog/web/views/adalog.html.erb +24 -0
  27. data/lib/adalog/web/views/index.html.erb +37 -0
  28. data/lib/adalog/web.rb +103 -0
  29. data/lib/adalog.rb +60 -0
  30. data/test/data/simple.yml +28 -0
  31. data/test/test_helper.rb +35 -0
  32. data/test/unit/active_record_repo.rb +9 -0
  33. data/test/unit/configuration_test.rb +62 -0
  34. data/test/unit/entry_test.rb +138 -0
  35. data/test/unit/in_memory_repo_test.rb +9 -0
  36. data/test/unit/pstore_repo_test.rb +9 -0
  37. 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
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+
3
+ class InMemoryRepoTest < Minitest::Test
4
+
5
+ test "" do
6
+ skip
7
+ end
8
+
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+
3
+ class PStoreRepoTest < Minitest::Test
4
+
5
+ test "" do
6
+ skip
7
+ end
8
+
9
+ 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