capitalism-journal 0.6.0 → 0.7.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 +4 -4
- data/README.md +18 -51
- data/capitalism-journal.gemspec +1 -3
- data/lib/capitalism/journal.rb +7 -29
- data/lib/capitalism/journal/version.rb +1 -1
- metadata +3 -18
- data/lib/capitalism/journal/event.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d8a6189b3b070d632ed6e41e4416f3b5933bfed
|
4
|
+
data.tar.gz: 63ea751442ec6439ebc12b94884d9b8025bc5f05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1da677f33c229839146b32a65a1890d3cf6dd8d2f315e94b93780adbea4eee52cf0ffc8fb15dcc69a695e48ea08d86576d203062b1bee4f3a32dbde5afbb18cd
|
7
|
+
data.tar.gz: 3344720641522bdecc298c791587871256c404897010126d9590bfe3ad9d5fde207b333eb1a4f6dd9f601132a770a61b70aad41a553cde661c42504b320ea0d4
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
#
|
1
|
+
# capitalism-journal
|
2
2
|
|
3
3
|
## Track any event.
|
4
4
|
|
5
|
-
|
5
|
+
Payment, temperature, sleep, mood, thought, etc.
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -20,24 +20,7 @@ Or install without bundler:
|
|
20
20
|
|
21
21
|
## Creating a journal
|
22
22
|
|
23
|
-
Journal validates each event value either by class or a value.
|
24
|
-
|
25
|
-
**Whitelisting class**
|
26
|
-
|
27
|
-
Initialize journal with an allowed value class (TrueClass by default).
|
28
|
-
|
29
23
|
journal = Capitalism::Journal.new
|
30
|
-
=> #<Capitalism::Journal:0x007fa1a39486e8 @whitelist=true, @events=[]>
|
31
|
-
|
32
|
-
journal = Capitalism::Journal.new(Object)
|
33
|
-
=> #<Capitalism::Journal:0x007fa1a5066348 @whitelist=Object, @events=[]>
|
34
|
-
|
35
|
-
**Whitelisting values**
|
36
|
-
|
37
|
-
Initialize journal with an array of whitelisted values.
|
38
|
-
|
39
|
-
journal = Capitalism::Journal.new([1, 2, 3])
|
40
|
-
=> #<Capitalism::Journal:0x007fa6cf177af0 @whitelist=[1, 2, 3], @events=[]>
|
41
24
|
|
42
25
|
## Adding events
|
43
26
|
|
@@ -57,12 +40,22 @@ Helper methods:
|
|
57
40
|
# journal.add(timestamp: timestamp, value: true)
|
58
41
|
journal.add_timestamp(timestamp)
|
59
42
|
|
43
|
+
## Validating events
|
44
|
+
|
45
|
+
By default journal accepts events with arbitrary timestamps and values.
|
46
|
+
|
47
|
+
For a custom validation inject a class that responds to `#call.(journal, event)`:
|
48
|
+
|
49
|
+
event_validator = -> (_journal, _event) { false }
|
50
|
+
journal = Capitalism::Journal.new(event_validator)
|
51
|
+
journal.add
|
52
|
+
=> Capitalism::Journal::InvalidEvent
|
60
53
|
|
61
54
|
## Reading events
|
62
55
|
|
63
56
|
Journal stores and returns events in the order they were added.
|
64
57
|
|
65
|
-
|
58
|
+
Think of `Journal#add` as an alias for `Array.push`.
|
66
59
|
|
67
60
|
Getting events with timestamps and values:
|
68
61
|
|
@@ -71,8 +64,8 @@ Getting events with timestamps and values:
|
|
71
64
|
journal.add_timestamp((DateTime.now - 3).to_time)
|
72
65
|
journal.events
|
73
66
|
=> [
|
74
|
-
#<
|
75
|
-
#<
|
67
|
+
#<OpenStruct timestamp=2017-10-22 21:13:14 +0300 value=true>,
|
68
|
+
#<OpenStruct timestamp=2017-10-19 21:13:17 +0300 value=true>
|
76
69
|
]
|
77
70
|
puts journal.events.map(&:to_h)
|
78
71
|
=> {:timestamp=>2017-10-22 21:13:14 +0300, :value=>true}
|
@@ -95,64 +88,38 @@ Values only:
|
|
95
88
|
|
96
89
|
## Usage examples
|
97
90
|
|
98
|
-
###
|
91
|
+
### TrueClass
|
99
92
|
|
100
|
-
lightning = Capitalism::Journal.new
|
101
|
-
lightning.add
|
102
|
-
# next day
|
103
93
|
lightning.add
|
104
|
-
lightning.timestamps
|
105
|
-
=> [2017-10-22 21:16:53 +0300, 2017-10-23 21:16:57 +0300]
|
106
94
|
|
107
|
-
###
|
95
|
+
### Boolean
|
108
96
|
|
109
|
-
target_hit = Capitalism::Journal.new([true, false])
|
110
|
-
target_hit.add_value(true)
|
111
97
|
target_hit.add_value(false)
|
112
98
|
|
113
99
|
### Integer
|
114
100
|
|
115
|
-
pushups = Capitalism::Journal.new(Integer)
|
116
|
-
pushups.add_value(10)
|
117
101
|
pushups.add_value(18)
|
118
102
|
|
119
103
|
### Float
|
120
104
|
|
121
|
-
temperature = Capitalism::Journal.new(Float)
|
122
105
|
temperature.add_value(36.6)
|
123
|
-
temperature.add_value(37.2)
|
124
106
|
|
125
107
|
### Decimal
|
126
108
|
|
127
|
-
currency_exchange_rate = Capitalism::Journal.new(BigDecimal)
|
128
109
|
currency_exchange_rate.add_value 2.0001.to_d
|
129
|
-
puts currency_exchange_rate.last.value.to_f
|
130
|
-
=> 2.0001
|
131
110
|
|
132
111
|
### Duration
|
133
112
|
|
134
|
-
formula_one_lap_time = Capitalism::Journal.new(Capitalism::Journal::Event::Duration)
|
135
113
|
formula_one_lap_time.add_value 84125 # in milliseconds
|
136
|
-
seconds = formula_one_lap_time.events.last.value.to_f / 1000
|
137
|
-
puts Time.at(seconds).strftime("%M:%S.%L")
|
138
|
-
=> 01:24.125 # 1 minute, 24 seconds, 125 milliseconds
|
139
114
|
|
140
115
|
### String
|
141
116
|
|
142
|
-
diary = Capitalism::Journal.new(String)
|
143
117
|
diary.add_value('Released Journal gem.')
|
144
118
|
|
145
|
-
###
|
119
|
+
### Symbol
|
146
120
|
|
147
|
-
coin_flip = Capitalism::Journal.new([:heads, :tails])
|
148
121
|
coin_flip.add_value(:heads)
|
149
|
-
coin_flip.add_value(:tails)
|
150
122
|
|
151
123
|
### Hash
|
152
124
|
|
153
|
-
contact_form = Capitalism::Journal.new(Hash)
|
154
125
|
contact_form.add(value: { from: 'andrey@zharikov.pro', message: 'Good news!' })
|
155
|
-
puts contact_form.events.last.timestamp
|
156
|
-
=> 2017-10-22 21:09:54 +0300
|
157
|
-
puts contact_form.events.last.value
|
158
|
-
=> {:from=>"andrey@zharikov.pro", :message=>"Good news!"}
|
data/capitalism-journal.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ['andrey@zharikov.pro']
|
11
11
|
|
12
12
|
spec.summary = 'Track any event'
|
13
|
-
spec.description = '
|
13
|
+
spec.description = 'Payment, temperature, sleep, mood, thought, etc.'
|
14
14
|
spec.homepage = 'https://github.com/zharikovpro/capitalism-journal'
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
@@ -20,8 +20,6 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
|
-
spec.add_dependency 'dry-struct', '~> 0.3'
|
24
|
-
|
25
23
|
spec.add_development_dependency 'bundler', '~> 1.14'
|
26
24
|
spec.add_development_dependency 'rake', '~> 10.0'
|
27
25
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
data/lib/capitalism/journal.rb
CHANGED
@@ -1,32 +1,20 @@
|
|
1
|
-
|
2
|
-
require_relative 'journal/event'
|
1
|
+
require 'ostruct'
|
3
2
|
|
4
3
|
module Capitalism
|
5
4
|
class Journal
|
6
|
-
class
|
5
|
+
class InvalidEvent < StandardError
|
7
6
|
end
|
8
7
|
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
class ValueIsNotWhitelisted < StandardError
|
13
|
-
end
|
8
|
+
attr_reader :event_validator, :events
|
14
9
|
|
15
|
-
|
16
|
-
|
17
|
-
def initialize(whitelist = TrueClass)
|
18
|
-
raise EmptyWhitelist if whitelist.is_a?(Array) && whitelist.size == 0
|
19
|
-
@whitelist = whitelist
|
10
|
+
def initialize(event_validator = -> (_journal, _event) { true })
|
11
|
+
@event_validator = event_validator
|
20
12
|
@events = []
|
21
13
|
end
|
22
14
|
|
23
|
-
def events
|
24
|
-
@events.dup.freeze
|
25
|
-
end
|
26
|
-
|
27
15
|
def add(timestamp: Time.now, value: true)
|
28
|
-
|
29
|
-
|
16
|
+
event = OpenStruct.new({ timestamp: timestamp, value: value })
|
17
|
+
raise InvalidEvent unless event_validator.call(self, event)
|
30
18
|
@events << event
|
31
19
|
nil
|
32
20
|
end
|
@@ -51,15 +39,5 @@ module Capitalism
|
|
51
39
|
@events.delete_at(index)
|
52
40
|
nil
|
53
41
|
end
|
54
|
-
|
55
|
-
private
|
56
|
-
|
57
|
-
def validate_value(value)
|
58
|
-
if whitelist.is_a?(Array)
|
59
|
-
raise ValueIsNotWhitelisted unless whitelist.include?(value)
|
60
|
-
else
|
61
|
-
raise ValueClassMismatch unless value.is_a?(whitelist)
|
62
|
-
end
|
63
|
-
end
|
64
42
|
end
|
65
43
|
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capitalism-journal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrey Zharikov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: dry-struct
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.3'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0.3'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: bundler
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,7 +66,7 @@ dependencies:
|
|
80
66
|
- - "~>"
|
81
67
|
- !ruby/object:Gem::Version
|
82
68
|
version: 0.9.1
|
83
|
-
description:
|
69
|
+
description: Payment, temperature, sleep, mood, thought, etc.
|
84
70
|
email:
|
85
71
|
- andrey@zharikov.pro
|
86
72
|
executables: []
|
@@ -98,7 +84,6 @@ files:
|
|
98
84
|
- bin/setup
|
99
85
|
- capitalism-journal.gemspec
|
100
86
|
- lib/capitalism/journal.rb
|
101
|
-
- lib/capitalism/journal/event.rb
|
102
87
|
- lib/capitalism/journal/version.rb
|
103
88
|
homepage: https://github.com/zharikovpro/capitalism-journal
|
104
89
|
licenses: []
|
@@ -1,12 +0,0 @@
|
|
1
|
-
require 'dry-struct'
|
2
|
-
|
3
|
-
module Capitalism
|
4
|
-
class Journal
|
5
|
-
class Event < Dry::Struct::Value
|
6
|
-
constructor_type :strict_with_defaults
|
7
|
-
|
8
|
-
attribute :timestamp, (Dry::Types['strict.time'].default { Time.now })
|
9
|
-
attribute :value, Dry::Types['any'].default(true)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|