adalog 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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