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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bd16336c030df95231517a7ad05619832f965d7a
4
- data.tar.gz: 2e61c3e0276685442583a38bda30a51180e77831
3
+ metadata.gz: 2d8a6189b3b070d632ed6e41e4416f3b5933bfed
4
+ data.tar.gz: 63ea751442ec6439ebc12b94884d9b8025bc5f05
5
5
  SHA512:
6
- metadata.gz: '088f828ee192e34edc91679db2565162672085158298d1aeb05525e6c4c77ce8062ad63da707c98d083dd84a9303ae1b966fd433b63d9fd2d308b563e00ce9ea'
7
- data.tar.gz: 4e93e75a962dc4bd19493e6340fd9fea15019ac8be301d9ccc634259062d3551bc4df0a6678d6a53e0eae580cd2748c40614161480d12fd0fa10796a88eb2d1f
6
+ metadata.gz: 1da677f33c229839146b32a65a1890d3cf6dd8d2f315e94b93780adbea4eee52cf0ffc8fb15dcc69a695e48ea08d86576d203062b1bee4f3a32dbde5afbb18cd
7
+ data.tar.gz: 3344720641522bdecc298c791587871256c404897010126d9590bfe3ad9d5fde207b333eb1a4f6dd9f601132a770a61b70aad41a553cde661c42504b320ea0d4
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # Capitalism Journal
1
+ # capitalism-journal
2
2
 
3
3
  ## Track any event.
4
4
 
5
- Incident, payment, weight, sleep, mood, thought, etc.
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
- You can think of `Journal#add` as an alias for `Array.push`.
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
- #<Capitalism::Journal::Event timestamp=2017-10-22 21:13:14 +0300 value=true>,
75
- #<Capitalism::Journal::Event timestamp=2017-10-19 21:13:17 +0300 value=true>
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
- ### Occurrence
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
- ### Presence
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
- ### Choice
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!"}
@@ -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 = 'Incident, weight, sleep, mood, thought, etc.'
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'
@@ -1,32 +1,20 @@
1
- require_relative 'journal/version'
2
- require_relative 'journal/event'
1
+ require 'ostruct'
3
2
 
4
3
  module Capitalism
5
4
  class Journal
6
- class ValueClassMismatch < StandardError
5
+ class InvalidEvent < StandardError
7
6
  end
8
7
 
9
- class EmptyWhitelist < StandardError
10
- end
11
-
12
- class ValueIsNotWhitelisted < StandardError
13
- end
8
+ attr_reader :event_validator, :events
14
9
 
15
- attr_reader :whitelist
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
- validate_value(value)
29
- event = Event.new(timestamp: timestamp, value: value)
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
@@ -1,5 +1,5 @@
1
1
  module Capitalism
2
2
  class Journal
3
- VERSION = '0.6.0'.freeze
3
+ VERSION = '0.7.0'.freeze
4
4
  end
5
5
  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.6.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-22 00:00:00.000000000 Z
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: Incident, weight, sleep, mood, thought, etc.
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