sandthorn 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8c7be6683c105bcc9b6c0366a63d191c15260735
4
- data.tar.gz: be5e8b9362f8ec00c1fa2949532c5064f81784e4
3
+ metadata.gz: a30c37a7e24b7962887842ee014817b9af94aa2f
4
+ data.tar.gz: 0a297cdd2b5d9b6fa6a5d0873f3ab6d42ca3f572
5
5
  SHA512:
6
- metadata.gz: 064291bac86efb3730d596afd4079dc3d71085f2974aa036df707594561886761a85f3ff73bcaec9d5cfc24cfb47c712b0a4a3263e2c636da9a3079dda319c1a
7
- data.tar.gz: a28989f9f69f112666b7e21c5b81c01f952451b3141d79012df97ab01964ebe462e28fd74bb9d2bfc897fa520112b07b8d8796c726036598fdd9fb43929efa84
6
+ metadata.gz: bf09e9cf219afd1a273b3fe1da4e9434625c03e60dc0522cb4133c61dfdec2a4f9713709c8a2f1446dd5c883c5a817b8380829f64dae6c65bfe25715f8699a46
7
+ data.tar.gz: e532a7430556572dd0c24c7e25a9a696e3d264f1abb424af7ab478e930070efbf6a9fc55075864b1307fdccebaa23144925326600bc35e3656fc2a85d07695a0
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.0
4
+ - 2.1.1
5
+ - 2.0.0
data/Gemfile.lock CHANGED
@@ -1,9 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sandthorn (0.0.1)
4
+ sandthorn (0.0.2)
5
5
  dirty_hashy
6
- uuidtools
7
6
 
8
7
  GEM
9
8
  remote: https://rubygems.org/
@@ -18,12 +17,20 @@ GEM
18
17
  autotest-standalone (4.5.11)
19
18
  awesome_print (1.2.0)
20
19
  coderay (1.1.0)
20
+ coveralls (0.7.0)
21
+ multi_json (~> 1.3)
22
+ rest-client
23
+ simplecov (>= 0.7)
24
+ term-ansicolor
25
+ thor
21
26
  diff-lcs (1.2.5)
22
27
  dirty_hashy (0.2.1)
23
28
  activesupport
29
+ docile (1.1.3)
24
30
  gem-release (0.7.1)
25
31
  i18n (0.6.9)
26
32
  method_source (0.8.2)
33
+ mime-types (2.2)
27
34
  minitest (4.7.5)
28
35
  multi_json (1.9.0)
29
36
  pg (0.17.1)
@@ -35,6 +42,8 @@ GEM
35
42
  pry (~> 0.9)
36
43
  yard (~> 0.8)
37
44
  rake (10.1.1)
45
+ rest-client (1.6.7)
46
+ mime-types (>= 1.16)
38
47
  rspec (2.14.1)
39
48
  rspec-core (~> 2.14.0)
40
49
  rspec-expectations (~> 2.14.0)
@@ -47,12 +56,20 @@ GEM
47
56
  pg
48
57
  sequel
49
58
  sequel (4.8.0)
59
+ simplecov (0.8.2)
60
+ docile (~> 1.1.0)
61
+ multi_json
62
+ simplecov-html (~> 0.8.0)
63
+ simplecov-html (0.8.0)
50
64
  slop (3.5.0)
51
65
  sqlite3 (1.3.9)
66
+ term-ansicolor (1.3.0)
67
+ tins (~> 1.0)
68
+ thor (0.19.1)
52
69
  thread_safe (0.2.0)
53
70
  atomic (>= 1.1.7, < 2)
71
+ tins (1.0.1)
54
72
  tzinfo (0.3.39)
55
- uuidtools (2.1.4)
56
73
  yard (0.8.7.3)
57
74
 
58
75
  PLATFORMS
@@ -62,6 +79,7 @@ DEPENDENCIES
62
79
  autotest-standalone
63
80
  awesome_print
64
81
  bundler (~> 1.3)
82
+ coveralls
65
83
  gem-release
66
84
  pry
67
85
  pry-doc
data/README.md CHANGED
@@ -1,5 +1,10 @@
1
+ [![Build Status](https://travis-ci.org/Sandthorn/sandthorn.svg?branch=master)](https://travis-ci.org/Sandthorn/sandthorn)
2
+ [![Coverage Status](https://coveralls.io/repos/Sandthorn/sandthorn/badge.png?branch=master)](https://coveralls.io/r/Sandthorn/sandthorn?branch=master)
3
+ [![Code Climate](https://codeclimate.com/github/Sandthorn/sandthorn.png)](https://codeclimate.com/github/Sandthorn/sandthorn)
4
+ [![Gem Version](https://badge.fury.io/rb/sandthorn.png)](http://badge.fury.io/rb/sandthorn)
5
+
1
6
  # Sandthorn Event Sourcing
2
- A ruby framwork for saving an object's state as a series of events, and tracking non state changing events.
7
+ A ruby framework for saving an object's state as a series of events, and tracking non state changing events.
3
8
 
4
9
  ## What is Event Sourcing
5
10
 
@@ -13,53 +18,56 @@ _Example:_
13
18
 
14
19
  ```ruby
15
20
 
16
- #Setup the Aggregate
21
+ # Setup the Aggregate
17
22
 
18
- require 'sandthorn/aggregate_root_dirty_hashy' #the one available right now
23
+ # The one available right now
24
+ require 'sandthorn'
25
+ require 'sandthorn_driver_sequel'
26
+ require 'sandthorn/aggregate_root_dirty_hashy'
19
27
 
20
28
  class Ship
21
- include Sandthorn::AggregateRoot::DirtyHashy
22
- attr_reader :name
23
-
24
- def initialize name: nil, shipping_company: nil
25
- @name = name
26
- end
27
-
28
- # state-changing command
29
- def rename! new_name: ""
30
- unless new_name.empty? or new_name == name
31
- @name = new_name
32
- ship_was_renamed
33
- end
34
- end
35
- private
36
- # commit the event and state-change is automatically recorded.
37
- def ship_was_renamed
38
- commit
39
- end
29
+ include Sandthorn::AggregateRoot::DirtyHashy
30
+ attr_reader :name
31
+
32
+ def initialize name: nil, shipping_company: nil
33
+ @name = name
34
+ end
35
+
36
+ # State-changing command
37
+ def rename! new_name: ""
38
+ unless new_name.empty? or new_name == name
39
+ @name = new_name
40
+ ship_was_renamed
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ # Commit the event and state-change is automatically recorded.
47
+ def ship_was_renamed
48
+ commit
49
+ end
40
50
  end
41
51
 
42
- #Setup the framework with the sequel driver for persistance
43
- url = "path to sql" #Example sqlite://path/sequel_driver.sqlite3
52
+ # Setup the framework with the sequel driver for persistance
53
+ url = "sqlite://spec/db/sequel_driver.sqlite3"
44
54
  catch_all_config = [ { driver: SandthornDriverSequel.driver_from_url(url: url) } ]
45
55
  Sandthorn.configuration = catch_all_config
46
56
 
47
- #migrate db schema for the sequel driver
57
+ # Migrate db schema for the sequel driver
48
58
  migrator = SandthornDriverSequel::Migration.new url: url
49
59
  SandthornDriverSequel.migrate_db url: url
50
60
 
51
- #Usage
52
- ship = Ship.new "Titanic"
53
- ship.rename! "Vasa"
54
- puts ship.aggregate_events
61
+ # Usage
62
+ ship = Ship.new name: "Titanic"
63
+ ship.rename! new_name: "Vasa"
64
+
55
65
  ship.save
56
66
 
57
67
  new_ship = Ship.find ship.id
58
68
  puts ship.name
59
- .
60
- .
61
69
 
62
- For more info look at the specs.
70
+ # For more info look at the specs.
63
71
 
64
72
  ```
65
73
 
@@ -81,6 +89,11 @@ Or install it yourself as:
81
89
 
82
90
  TODO: Write usage instructions here
83
91
 
92
+ ## Development
93
+
94
+ run:
95
+ `rake console`
96
+
84
97
  ## Contributing
85
98
 
86
99
  1. Fork it
data/Rakefile CHANGED
@@ -1 +1,17 @@
1
+ #!/usr/bin/env rake
1
2
  require "bundler/gem_tasks"
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
8
+
9
+ task :console do
10
+ require 'ap'
11
+ require 'pry'
12
+ require 'pry/completion'
13
+ require 'bundler'
14
+ require 'sandthorn'
15
+ ARGV.clear
16
+ Pry.start
17
+ end
data/lib/sandthorn.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require "sandthorn/version"
2
2
  require "sandthorn/errors"
3
- require 'uuidtools'
4
3
  require 'yaml'
4
+ require 'securerandom'
5
5
 
6
6
  module Sandthorn
7
7
  class << self
@@ -27,7 +27,7 @@ module Sandthorn
27
27
  end
28
28
 
29
29
  def generate_aggregate_id
30
- UUIDTools::UUID.random_create.to_s
30
+ SecureRandom.uuid
31
31
  end
32
32
 
33
33
  def get_aggregate_events aggregate_id, class_name
@@ -17,8 +17,6 @@ module Sandthorn
17
17
  @aggregate_events = []
18
18
  end
19
19
 
20
-
21
-
22
20
  def save
23
21
  aggregate_events.each do |event|
24
22
  event[:event_data] = Sandthorn.serialize event[:event_args]
@@ -32,9 +30,9 @@ module Sandthorn
32
30
  self
33
31
  end
34
32
 
35
- def commit *args
33
+ def commit *args, method_name: nil
36
34
  increase_current_aggregate_version!
37
- method_name = caller[0][/`.*'/][1..-2]
35
+ method_name = caller_locations(1,1)[0].label unless method_name
38
36
  aggregate_attribute_deltas = get_delta
39
37
 
40
38
  unless aggregate_attribute_deltas.empty?
@@ -67,7 +65,7 @@ module Sandthorn
67
65
  @@aggregate_trace_information = nil
68
66
  @aggregate_trace_information = nil
69
67
  end
70
-
68
+
71
69
  def find aggregate_id
72
70
  class_name = self.respond_to?(:name) ? self.name : self.class # to be able to extend a string for example.
73
71
  events = Sandthorn.get_aggregate(aggregate_id, class_name)
@@ -80,15 +78,15 @@ module Sandthorn
80
78
  def new *args
81
79
  aggregate = super
82
80
  aggregate.aggregate_base_initialize
81
+
83
82
  aggregate.aggregate_trace @@aggregate_trace_information do |aggr|
84
83
  aggr.aggregate_initialize
85
84
  aggr.send :set_aggregate_id, Sandthorn.generate_aggregate_id
86
- aggr.send :commit, *args
85
+ aggr.send :commit, *args, method_name: "new"
87
86
  return aggr
88
87
  end
89
88
  end
90
89
 
91
-
92
90
  def aggregate_build events
93
91
  first_event = events.first()
94
92
  current_aggregate_version = 0
@@ -96,10 +94,6 @@ module Sandthorn
96
94
  aggregate = first_event[:event_args][0]
97
95
  current_aggregate_version = aggregate.aggregate_originating_version
98
96
  events.shift
99
- # elsif first_event[:event_name] == "instance_extended_as_aggregate"
100
- # aggregate = first_event[:event_args][0]
101
- #aggregate.extend AggregateRoot
102
- # events.pop
103
97
  else
104
98
  new_args = events.first()[:event_args][:method_args]
105
99
 
@@ -116,23 +110,20 @@ module Sandthorn
116
110
  event_args = event[:event_args]
117
111
  event_name = event[:event_name]
118
112
 
119
- if event_name == "aggregate_set_from_snapshot"
120
- #aggregate.send event_name,*event_args
121
- #set the attribute hash instead of instance varaibles directly
122
- next
123
- end
113
+ next if event_name == "aggregate_set_from_snapshot"
124
114
  next if event_name == "instance_extended_as_aggregate"
125
115
 
126
116
  attribute_deltas = event_args[:attribute_deltas]
127
- if (event[:aggregate_version].nil? == false)
117
+
118
+ unless event[:aggregate_version].nil?
128
119
  current_aggregate_version = event[:aggregate_version]
129
120
  end
130
121
 
131
- if !attribute_deltas.nil?
132
- deltas = {}
133
- attribute_deltas.each do |delta|
134
- deltas[delta[:attribute_name]] = delta[:new_value]
122
+ unless attribute_deltas.nil?
123
+ deltas = attribute_deltas.each_with_object({}) do |delta, acc|
124
+ acc[delta[:attribute_name]] = delta[:new_value]
135
125
  end
126
+
136
127
  attributes.merge! deltas
137
128
  end
138
129
  end
@@ -143,7 +134,7 @@ module Sandthorn
143
134
  aggregate
144
135
  end
145
136
  end
146
-
137
+
147
138
  private
148
139
 
149
140
  def set_instance_variables! attributes
@@ -153,7 +144,9 @@ module Sandthorn
153
144
  end
154
145
 
155
146
  def extract_relevant_aggregate_instance_variables
156
- instance_variables.select { |i| i.to_s != "@hashy" && (!i.to_s.start_with?("@aggregate_") || i.to_s == "@aggregate_id") }
147
+ instance_variables.select do |i|
148
+ i.to_s != "@hashy" && (!i.to_s.start_with?("@aggregate_") || i.to_s == "@aggregate_id")
149
+ end
157
150
  end
158
151
 
159
152
  def set_orginating_aggregate_version! aggregate_version
@@ -183,4 +176,4 @@ module Sandthorn
183
176
 
184
177
  end
185
178
  end
186
- end
179
+ end
@@ -1,3 +1,3 @@
1
1
  module Sandthorn
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/sandthorn.gemspec CHANGED
@@ -27,9 +27,9 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "awesome_print"
28
28
  spec.add_development_dependency "autotest-standalone"
29
29
  spec.add_development_dependency "sqlite3"
30
+ spec.add_development_dependency "coveralls"
30
31
  spec.add_development_dependency "sandthorn_driver_sequel"
31
32
 
32
33
  spec.add_runtime_dependency "dirty_hashy"
33
- spec.add_runtime_dependency "uuidtools"
34
34
 
35
35
  end
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'uuidtools'
3
2
  require 'sandthorn/aggregate_root_dirty_hashy'
4
3
 
5
4
 
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'uuidtools'
3
2
  require 'sandthorn/aggregate_root_dirty_hashy'
4
3
  require 'sandthorn/aggregate_root_snapshot'
5
4
  require 'date'
@@ -50,7 +49,7 @@ class VisaCardTransactionGateway
50
49
  @visa_connector = "foo_bar"
51
50
  end
52
51
  def charge_card visa_card_number, merchant_id, amount
53
- transaction_id = UUIDTools::UUID.random_create.to_s
52
+ transaction_id = SecureRandom.uuid
54
53
  end
55
54
  end
56
55
 
@@ -52,6 +52,10 @@ module Sandthorn
52
52
  context "with no tracing information" do
53
53
  let(:subject) { aggregate.this_is_an_event;aggregate }
54
54
 
55
+ it "should have the new event" do
56
+ subject.has_event?(:new).should be_true
57
+ end
58
+
55
59
  it "should report true on has_unsaved_event? :this_is_an_event" do
56
60
  subject.has_unsaved_event?(:this_is_an_event).should be_true
57
61
  end
data/spec/spec_helper.rb CHANGED
@@ -4,11 +4,13 @@
4
4
  # loaded once.
5
5
  #
6
6
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ require 'coveralls'
7
8
  require "ap"
8
9
  require "bundler"
9
10
  require "sandthorn_driver_sequel"
10
11
 
11
12
  Bundler.require
13
+ Coveralls.wear!
12
14
 
13
15
  module Helpers
14
16
  def class_including(mod)
@@ -39,4 +41,4 @@ def sqlite_store_setup
39
41
  migrator = SandthornDriverSequel::Migration.new url: url
40
42
  SandthornDriverSequel.migrate_db url: url
41
43
  migrator.send(:clear_for_test)
42
- end
44
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sandthorn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lars Krantz
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-03-18 00:00:00.000000000 Z
12
+ date: 2014-03-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -138,7 +138,7 @@ dependencies:
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  - !ruby/object:Gem::Dependency
141
- name: sandthorn_driver_sequel
141
+ name: coveralls
142
142
  requirement: !ruby/object:Gem::Requirement
143
143
  requirements:
144
144
  - - ">="
@@ -152,13 +152,13 @@ dependencies:
152
152
  - !ruby/object:Gem::Version
153
153
  version: '0'
154
154
  - !ruby/object:Gem::Dependency
155
- name: dirty_hashy
155
+ name: sandthorn_driver_sequel
156
156
  requirement: !ruby/object:Gem::Requirement
157
157
  requirements:
158
158
  - - ">="
159
159
  - !ruby/object:Gem::Version
160
160
  version: '0'
161
- type: :runtime
161
+ type: :development
162
162
  prerelease: false
163
163
  version_requirements: !ruby/object:Gem::Requirement
164
164
  requirements:
@@ -166,7 +166,7 @@ dependencies:
166
166
  - !ruby/object:Gem::Version
167
167
  version: '0'
168
168
  - !ruby/object:Gem::Dependency
169
- name: uuidtools
169
+ name: dirty_hashy
170
170
  requirement: !ruby/object:Gem::Requirement
171
171
  requirements:
172
172
  - - ">="
@@ -192,6 +192,7 @@ files:
192
192
  - ".rspec"
193
193
  - ".ruby-gemset"
194
194
  - ".ruby-version"
195
+ - ".travis.yml"
195
196
  - Gemfile
196
197
  - Gemfile.lock
197
198
  - Gemfile.lock.old