axiom-memory-adapter 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,8 +7,15 @@ rvm:
7
7
  - 2.0.0
8
8
  - ruby-head
9
9
  - rbx-19mode
10
- - jruby-19mode
11
- - jruby-head
10
+ matrix:
11
+ include:
12
+ - rvm: jruby-19mode
13
+ env: JRUBY_OPTS="$JRUBY_OPTS --debug"
14
+ - rvm: jruby-head
15
+ env: JRUBY_OPTS="$JRUBY_OPTS --debug"
16
+ allow_failures:
17
+ # broken on travis
18
+ - rvm: ruby-head
12
19
  notifications:
13
20
  irc:
14
21
  channels:
@@ -20,9 +27,3 @@ notifications:
20
27
  - dan.kubb@gmail.com
21
28
  on_success: never
22
29
  on_failure: change
23
- matrix:
24
- include:
25
- - rvm: jruby-19mode
26
- env: JRUBY_OPTS="$JRUBY_OPTS --debug"
27
- - rvm: jruby-head
28
- env: JRUBY_OPTS="$JRUBY_OPTS --debug"
data/Gemfile CHANGED
@@ -4,5 +4,10 @@ source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
6
 
7
- gem 'devtools', :git => 'https://github.com/rom-rb/devtools.git'
8
- eval File.read('Gemfile.devtools')
7
+ gem 'axiom', '~> 0.1.1', git: 'https://github.com/dkubb/axiom.git'
8
+
9
+ group :development, :test do
10
+ gem 'devtools', git: 'https://github.com/rom-rb/devtools.git'
11
+ end
12
+
13
+ eval_gemfile 'Gemfile.devtools'
@@ -1,52 +1,47 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  group :development do
4
- gem 'rake', '~> 10.0.4'
5
- gem 'rspec', '~> 2.13.0'
6
- gem 'yard', '~> 0.8.6.1'
4
+ gem 'rake', '~> 10.1.0'
5
+ gem 'rspec', '~> 2.14.1'
6
+ gem 'yard', '~> 0.8.7'
7
7
  end
8
8
 
9
9
  group :yard do
10
- gem 'kramdown', '~> 1.0.1'
10
+ gem 'kramdown', '~> 1.1.0'
11
11
  end
12
12
 
13
13
  group :guard do
14
- gem 'guard', '~> 1.8.0'
14
+ gem 'guard', '~> 1.8.1'
15
15
  gem 'guard-bundler', '~> 1.0.0'
16
16
  gem 'guard-rspec', '~> 3.0.2'
17
+ gem 'guard-rubocop', '~> 0.2.0'
18
+ gem 'guard-mutant', '~> 0.0.1'
17
19
 
18
20
  # file system change event handling
19
- gem 'listen', '~> 1.2.1'
20
- gem 'rb-fchange', '~> 0.0.6', :require => false
21
- gem 'rb-fsevent', '~> 0.9.3', :require => false
22
- gem 'rb-inotify', '~> 0.9.0', :require => false
21
+ gem 'listen', '~> 1.3.0'
22
+ gem 'rb-fchange', '~> 0.0.6', require: false
23
+ gem 'rb-fsevent', '~> 0.9.3', require: false
24
+ gem 'rb-inotify', '~> 0.9.0', require: false
23
25
 
24
26
  # notification handling
25
- gem 'libnotify', '~> 0.8.0', :require => false
26
- gem 'rb-notifu', '~> 0.0.4', :require => false
27
- gem 'terminal-notifier-guard', '~> 1.5.3', :require => false
27
+ gem 'libnotify', '~> 0.8.0', require: false
28
+ gem 'rb-notifu', '~> 0.0.4', require: false
29
+ gem 'terminal-notifier-guard', '~> 1.5.3', require: false
28
30
  end
29
31
 
30
32
  group :metrics do
31
- gem 'backports', '~> 3.3', '>= 3.3.2'
32
- gem 'coveralls', '~> 0.6.7'
33
- gem 'flay', '~> 2.3.0'
34
- gem 'flog', '~> 4.1.0'
35
- gem 'reek', '~> 1.3.1', :git => 'https://github.com/troessner/reek.git'
36
- gem 'simplecov', '~> 0.7.1'
37
- gem 'yardstick', '~> 0.9.6'
38
-
39
- platforms :ruby_19 do
33
+ gem 'coveralls', '~> 0.6.7'
34
+ gem 'flay', '~> 2.4.0'
35
+ gem 'flog', '~> 4.1.1'
36
+ gem 'reek', '~> 1.3.2'
37
+ gem 'rubocop', '~> 0.11.0'
38
+ gem 'simplecov', '~> 0.7.1'
39
+ gem 'yardstick', '~> 0.9.7', git: 'https://github.com/dkubb/yardstick.git'
40
+
41
+ platforms :ruby_19, :ruby_20 do
42
+ gem 'mutant', git: 'https://github.com/mbj/mutant.git'
40
43
  gem 'yard-spellcheck', '~> 0.1.5'
41
44
  end
42
-
43
- platforms :mri_19, :rbx do
44
- gem 'mutant', '~> 0.2.20'
45
- end
46
-
47
- platforms :rbx do
48
- gem 'pelusa', '~> 0.2.2'
49
- end
50
45
  end
51
46
 
52
47
  group :benchmarks do
data/Guardfile CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  guard :bundler do
4
4
  watch('Gemfile')
5
+ watch('Gemfile.lock')
5
6
  watch('axiom-memory-adapter.gemspec')
6
7
  end
7
8
 
@@ -22,3 +23,9 @@ guard :rspec, :keep_failed => false do
22
23
  # run a spec if it is modified
23
24
  watch(%r{\Aspec/(?:unit|integration)/.+_spec\.rb\z})
24
25
  end
26
+
27
+ guard :rubocop, cli: %w[--config config/rubocop.yml] do
28
+ watch(%r{.+\.(?:rb|rake)\z})
29
+ watch(%r{\Aconfig/rubocop\.yml\z}) { |m| File.dirname(m[0]) }
30
+ watch(%r{(?:.+/)?\.rubocop\.yml\z}) { |m| File.dirname(m[0]) }
31
+ end
data/README.md CHANGED
@@ -15,27 +15,49 @@ axiom-memory-adapter
15
15
 
16
16
  Use Axiom relations with an in-memory datastore
17
17
 
18
- Installation
19
- ------------
18
+ Examples
19
+ --------
20
20
 
21
- With Rubygems:
21
+ ```ruby
22
+ require 'axiom-memory-adapter'
22
23
 
23
- ```bash
24
- $ gem install axiom-memory-adapter
25
- $ irb -rubygems
26
- >> require 'axiom-memory-adapter'
27
- => true
28
- ```
24
+ adapter = Axiom::Adapter::Memory.new(
25
+ customers: Axiom::Relation.new([[:id, Integer], [:name, String]]),
26
+ orders: Axiom::Relation.new([[:id, Integer], [:customer_id, Integer]])
27
+ )
28
+
29
+ # Insert customer data
30
+ customers = adapter[:customers]
31
+ customers.insert([[1, 'Dan Kubb']])
32
+ customers.insert([[2, 'John Doe']])
33
+
34
+ # Insert order data
35
+ orders = adapter[:orders]
36
+ orders.insert([[1, 1]])
37
+ orders.insert([[2, 1]])
38
+ orders.insert([[3, 1]])
39
+ orders.insert([[4, 2]])
40
+
41
+ # Join customers and orders
42
+ customer_orders = customers.
43
+ rename(id: :customer_id).
44
+ join(orders.rename(id: :order_id))
45
+
46
+ # Demonstrate writable view-like behaviour
47
+
48
+ # Insert into the join
49
+ customer_orders.insert([[3, 'Jane Doe', 5]])
50
+
51
+ # Inserts are propagated to the base relations
52
+ customers.count # => 3
53
+ orders.count # => 5
29
54
 
30
- With git and local working copy:
55
+ # Delete from a join
56
+ customer_orders.delete([[3, 'Jane Doe', 5]])
31
57
 
32
- ```bash
33
- $ git clone git://github.com/dkubb/axiom-memory-adapter.git
34
- $ cd axiom-memory-adapter
35
- $ rake install
36
- $ irb -rubygems
37
- >> require 'axiom-memory-adapter'
38
- => true
58
+ # Deletes are propagated to the base relations
59
+ customers.count # => 2
60
+ orders.count # => 4
39
61
  ```
40
62
 
41
63
  Contributing
@@ -17,7 +17,8 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = `git ls-files -- spec/{unit,integration}`.split($/)
18
18
  gem.extra_rdoc_files = %w[LICENSE README.md CONTRIBUTING.md TODO]
19
19
 
20
- gem.add_runtime_dependency('axiom', '~> 0.1.0')
20
+ gem.add_runtime_dependency('axiom', '~> 0.1.1')
21
+ gem.add_runtime_dependency('thread_safe', '~> 0.1.0')
21
22
 
22
23
  gem.add_development_dependency('bundler', '~> 1.3', '>= 1.3.5')
23
24
  end
@@ -1,3 +1,3 @@
1
1
  ---
2
- threshold: 12
3
- total_score: 14
2
+ threshold: 3
3
+ total_score: 7
@@ -1,2 +1,2 @@
1
1
  ---
2
- threshold: 3.7
2
+ threshold: 4.2
@@ -1,3 +1,3 @@
1
1
  ---
2
- name: your_lib
3
- namespace: YourLib
2
+ name: axiom-memory-adapter
3
+ namespace: Axiom::Adapter::Memory
@@ -1,7 +1,8 @@
1
1
  ---
2
2
  Attribute:
3
3
  enabled: true
4
- exclude: []
4
+ exclude:
5
+ - Axiom::Adapter::Memory
5
6
  BooleanParameter:
6
7
  enabled: true
7
8
  exclude: []
@@ -96,11 +97,7 @@ UncommunicativeVariableName:
96
97
  accept: []
97
98
  UnusedParameters:
98
99
  enabled: true
99
- exclude:
100
- - Axiom::Adapter::Memory#delete
101
- - Axiom::Adapter::Memory#insert
102
- - Axiom::Adapter::Memory#read
103
- - Axiom::Adapter::Memory#update
100
+ exclude: []
104
101
  UtilityFunction:
105
102
  enabled: true
106
103
  exclude: []
@@ -0,0 +1,33 @@
1
+ AllCops:
2
+ Includes:
3
+ - '**/*.rake'
4
+ - 'Gemfile'
5
+ - 'Gemfile.devtools'
6
+ Excludes:
7
+ - '**/vendor/**'
8
+
9
+ # Avoid parameter lists longer than five parameters.
10
+ ParameterLists:
11
+ Max: 3
12
+ CountKeywordArgs: true
13
+
14
+ # Avoid more than `Max` levels of nesting.
15
+ BlockNesting:
16
+ Max: 3
17
+
18
+ # Align with the style guide.
19
+ CollectionMethods:
20
+ PreferredMethods:
21
+ collect: 'map'
22
+ inject: 'reduce'
23
+ find: 'detect'
24
+ find_all: 'select'
25
+
26
+ # Do not force public/protected/private keyword to be indented at the same
27
+ # level as the def keyword. My personal preference is to outdent these keywords
28
+ # because I think when scanning code it makes it easier to identify the
29
+ # sections of code and visually separate them. When the keyword is at the same
30
+ # level I think it sort of blends in with the def keywords and makes it harder
31
+ # to scan the code and see where the sections are.
32
+ AccessControl:
33
+ Enabled: false
@@ -1,98 +1,103 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require 'axiom'
4
+ require 'thread_safe'
4
5
 
5
6
  module Axiom
6
7
  module Adapter
7
8
 
8
9
  # A reference adapter for in-memory information
9
10
  class Memory
10
- include Adamantium
11
+ include Adamantium::Flat
11
12
 
12
- # Initialize a Memory adapter
13
+ # Raised when the relation name is unknown
14
+ UnknownRelationError = Class.new(IndexError)
15
+
16
+ # The schema
13
17
  #
14
- # @return [undefined]
18
+ # @return [Hash{Symbol => Axiom::Relation::Variable}]
15
19
  #
16
20
  # @api private
17
- def initialize
18
- # TODO: add a registry to map base relation names to tuples
19
- end
21
+ attr_reader :schema
22
+ private :schema
20
23
 
21
- # Insert a set of tuples into memory
24
+ # Initialize a Memory adapter
25
+ #
26
+ # @example with a schema
27
+ # adapter = Axiom::Adapter::Memory.new(
28
+ # users: Axiom::Relation.new(
29
+ # [[:id, Integer], [:name, String]],
30
+ # [[1, 'Dan Kubb'], [2, 'John Doe']]
31
+ # )
32
+ # )
22
33
  #
23
- # @example insert a new user
24
- # header = Axiom::Header.coerce([ [ :name, String ] ])
25
- # tuple = Axiom::Tuple.new(header, [ 'Dan Kubb' ])
26
- # adapter.insert(users, [ tuple ])
34
+ # @example without a schema
35
+ # adapter = Axiom::Adapter::Memory.new
27
36
  #
28
- # @param [Axiom::Relation] relation
29
- # @param [Enumerable<Axiom::Tuple>] tuples
30
- # a set of tuples to insert into the relation
37
+ # @param [Hash{Symbol => Axiom::Relation::Variable}] schema
31
38
  #
32
- # @return [self]
39
+ # @return [undefined]
33
40
  #
34
41
  # @api public
35
- def insert(relation, tuples)
36
- raise NotImplementedError, "#{self.class}##{__method__} not implemented"
42
+ def initialize(schema = {})
43
+ @schema = ThreadSafe::Hash.new
44
+ schema.each { |name, relation| self[name] = relation }
37
45
  end
38
46
 
39
- # Read the results from memory
47
+ # Get relation variable in the schema
40
48
  #
41
49
  # @example
42
- # adapter.read(users) { |row| ... }
43
- #
44
- # @param [Axiom::Relation] relation
50
+ # adapter[:users] # => users relation
45
51
  #
46
- # @yield [row]
52
+ # @param [Symbol] name
47
53
  #
48
- # @yieldparam [Array] row
49
- # each row in the results
50
- #
51
- # @return [self]
54
+ # @return [Axiom::Relation::Variable]
52
55
  #
53
56
  # @api public
54
- def read(relation)
55
- raise NotImplementedError, "#{self.class}##{__method__} not implemented"
57
+ def [](name)
58
+ schema.fetch(name) do
59
+ raise UnknownRelationError, "the relation named #{name} is unknown"
60
+ end
56
61
  end
57
62
 
58
- # Update the tuples in memory that intersect the relation
59
- #
60
- # @example update all users to be active
61
- # header = Axiom::Header.coerce([ [ :active, TrueClass ] ])
62
- # tuple = Axiom::Tuple.new(header, [ true ])
63
- # adapter.update(inactive_users, tuple)
63
+ # Set the relation variable in the schema
64
64
  #
65
- # The tuple header must be a subset of the base relation header. Every
66
- # tuple in the relation should have the overlapping attributes changed
67
- # to match the tuple. The tuple header must not be a superset of any
68
- # keys and cause a uniqueness constraint violation.
65
+ # @example
66
+ # adapter[:users] = users_relation
69
67
  #
70
- # @param [Axiom::Relation] relation
71
- # @param [Axiom::Tuple] tuple
68
+ # @param [Symbol] name
69
+ # @param [Axiom::Relation::Materialized] relation
72
70
  #
73
- # @return [self]
71
+ # @return [undefined]
74
72
  #
75
73
  # @api public
76
- def update(relation, tuple)
77
- raise NotImplementedError, "#{self.class}##{__method}} not implemented"
74
+ def []=(name, relation)
75
+ schema[name] = Relation::Variable.new(relation)
78
76
  end
79
77
 
80
- # Delete tuples from memory that intersect with the relation
78
+ end # Memory
79
+ end # Adapter
80
+
81
+ # XXX: patch Axiom:Relation
82
+ class Relation
83
+
84
+ # XXX: patch #update into Variable
85
+ class Variable
86
+
87
+ # Update a relation variable
81
88
  #
82
89
  # @example
83
- # adapter.delete(inactive_users)
84
- #
85
- # @param [Axiom::Relation] relation
90
+ # relvar.update { |tuple| ... }
86
91
  #
87
- # @return [self]
92
+ # @return [Axiom::Relation::Variable]
88
93
  #
89
94
  # @api public
90
- def delete(relation)
91
- raise NotImplementedError, "#{self.class}##{__method}} not implemented"
95
+ def update(&block)
96
+ replace(map(&block))
92
97
  end
93
98
 
94
- end # class Memory
95
- end # module Adapter
96
- end # module Axiom
99
+ end # Variable
100
+ end # Relation
101
+ end # Axiom
97
102
 
98
103
  require 'axiom/adapter/memory/version'
@@ -5,8 +5,8 @@ module Axiom
5
5
  class Memory
6
6
 
7
7
  # Gem version
8
- VERSION = '0.0.1'.freeze
8
+ VERSION = '0.0.2'.freeze
9
9
 
10
- end # class Memory
11
- end # module Adapter
12
- end # module Axiom
10
+ end # Memory
11
+ end # Adapter
12
+ end # Axiom
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Adapter::Memory do
6
+ subject { described_class.new(schema) }
7
+
8
+ include_context 'relation'
9
+
10
+ before do
11
+ subject[name] = relation
12
+ end
13
+
14
+ describe '#insert' do
15
+ it 'inserts a new tuple' do
16
+ subject[name].insert([[3], [4]])
17
+ expect(subject[name].to_a).to eq([[1], [2], [3], [4]])
18
+ end
19
+ end
20
+
21
+ describe '#replace' do
22
+ it 'replaces with new tuples' do
23
+ subject[name].replace([[2]])
24
+ expect(subject[name].to_a).to eq([[2]])
25
+ end
26
+ end
27
+
28
+ describe '#delete' do
29
+ it 'deletes matching tuples' do
30
+ subject[name].delete([[3], [4]])
31
+ expect(subject[name].to_a).to eq([[1], [2]])
32
+ end
33
+ end
34
+
35
+ describe '#update' do
36
+ pending 'Design interface' do
37
+ context 'with a Hash argument' do
38
+ it 'updates matching tuples' do
39
+ subject[name].update(id: 2)
40
+ expect(subject[name].to_a).to eq([[2]])
41
+ end
42
+ end
43
+ end
44
+
45
+ context 'with a block' do
46
+ it 'updates matching tuples' do
47
+ subject[name].update { |tuple| [2] }
48
+ expect(subject[name].to_a).to eq([[2]])
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,8 @@
1
+ shared_context 'relation' do
2
+ let(:relation) { Relation.new(header, body) }
3
+ let(:body) { [[1], [2], [3]] }
4
+ let(:header) { [id_attribute] }
5
+ let(:id_attribute) { Attribute::Integer.new(:id) }
6
+ let(:schema) { {} }
7
+ let(:name) { :users }
8
+ end
@@ -20,6 +20,8 @@ end
20
20
  require 'axiom-memory-adapter'
21
21
  require 'devtools/spec_helper'
22
22
 
23
+ include Axiom
24
+
23
25
  # require spec support files and shared behavior
24
26
  Dir[File.expand_path('../{support,shared}/**/*.rb', __FILE__)].each do |file|
25
27
  require file
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Adapter::Memory, '.new' do
6
+ context 'with a schema' do
7
+ subject { described_class.new(schema) }
8
+
9
+ let(:schema) { {} }
10
+
11
+ it { should be_instance_of(described_class) }
12
+
13
+ it 'creates a new thread safe hash for the schema' do
14
+ klass = double('ThreadSafe::Hash')
15
+ expect(klass).to receive(:new).and_return({})
16
+ stub_const('ThreadSafe::Hash', klass)
17
+ subject
18
+ end
19
+ end
20
+
21
+ context 'without a schema' do
22
+ subject { described_class.new }
23
+
24
+ it { should be_instance_of(described_class) }
25
+
26
+ it 'creates a new thread safe hash for the schema' do
27
+ klass = double('ThreadSafe::Hash')
28
+ expect(klass).to receive(:new).and_return({})
29
+ stub_const('ThreadSafe::Hash', klass)
30
+ subject
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Adapter::Memory, '#[]' do
6
+ subject { object[name] }
7
+
8
+ let!(:object) { described_class.new(users: relation) }
9
+ let(:relation) { double('relation', :materialized? => false) }
10
+
11
+ context 'with a known name' do
12
+ let(:name) { :users }
13
+
14
+ it { should eql(Relation::Variable.new(relation)) }
15
+ end
16
+
17
+ context 'with an unknown name' do
18
+ let(:name) { :unknown }
19
+
20
+ specify do
21
+ expect { subject }.to raise_error(
22
+ Adapter::Memory::UnknownRelationError,
23
+ 'the relation named unknown is unknown'
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Adapter::Memory, '#[]=' do
6
+ subject { object[name] = relation }
7
+
8
+ include_context 'relation'
9
+
10
+ let!(:object) { described_class.new }
11
+
12
+ it { should be(relation) }
13
+
14
+ it 'wraps the relation in in a relation variable' do
15
+ subject
16
+ expect(object[name]).to eql(Relation::Variable.new(relation))
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Relation::Variable::Materialized, '#update' do
6
+ subject { object.update { [2] } }
7
+
8
+ let(:object) { described_class.new(relation) }
9
+ let(:relation) { Relation.new(header, [[1]]) }
10
+ let(:header) { [[:id, Integer]] }
11
+
12
+ it { should be_instance_of(described_class) }
13
+
14
+ it { should be_materialized }
15
+
16
+ it { should == [[2]] }
17
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Relation::Variable, '#update' do
6
+ subject { object.update { [2] } }
7
+
8
+ let(:object) { described_class.new(relation) }
9
+ let(:relation) { Relation::Base.new(:users, header, [[1]]) }
10
+ let(:header) { [[:id, Integer]] }
11
+
12
+ it { should be_instance_of(described_class) }
13
+
14
+ it { should_not be_materialized }
15
+
16
+ it { should == [[2]] }
17
+ end
metadata CHANGED
@@ -1,18 +1,36 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: axiom-memory-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Dan Kubb
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-06-20 00:00:00.000000000 Z
12
+ date: 2013-08-22 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: axiom
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.1.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.1.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: thread_safe
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
16
34
  requirements:
17
35
  - - ~>
18
36
  - !ruby/object:Gem::Version
@@ -20,6 +38,7 @@ dependencies:
20
38
  type: :runtime
21
39
  prerelease: false
22
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
23
42
  requirements:
24
43
  - - ~>
25
44
  - !ruby/object:Gem::Version
@@ -27,21 +46,23 @@ dependencies:
27
46
  - !ruby/object:Gem::Dependency
28
47
  name: bundler
29
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
30
50
  requirements:
31
51
  - - ~>
32
52
  - !ruby/object:Gem::Version
33
53
  version: '1.3'
34
- - - '>='
54
+ - - ! '>='
35
55
  - !ruby/object:Gem::Version
36
56
  version: 1.3.5
37
57
  type: :development
38
58
  prerelease: false
39
59
  version_requirements: !ruby/object:Gem::Requirement
60
+ none: false
40
61
  requirements:
41
62
  - - ~>
42
63
  - !ruby/object:Gem::Version
43
64
  version: '1.3'
44
- - - '>='
65
+ - - ! '>='
45
66
  - !ruby/object:Gem::Version
46
67
  version: 1.3.5
47
68
  description: Use Axiom relations with an in-memory datastore
@@ -73,34 +94,43 @@ files:
73
94
  - config/flog.yml
74
95
  - config/mutant.yml
75
96
  - config/reek.yml
97
+ - config/rubocop.yml
76
98
  - config/yardstick.yml
77
99
  - lib/axiom-memory-adapter.rb
78
100
  - lib/axiom/adapter/memory.rb
79
101
  - lib/axiom/adapter/memory/version.rb
102
+ - spec/integration/axiom/adapter/memory_spec.rb
103
+ - spec/shared/base_relation_context.rb
80
104
  - spec/spec_helper.rb
105
+ - spec/unit/axiom/adapter/memory/class_methods/new_spec.rb
106
+ - spec/unit/axiom/adapter/memory/element_reader_spec.rb
107
+ - spec/unit/axiom/adapter/memory/element_writer_spec.rb
108
+ - spec/unit/axiom/relation/variable/materialized/update_spec.rb
109
+ - spec/unit/axiom/relation/variable/update_spec.rb
81
110
  homepage: https://github.com/dkubb/axiom-memory-adapter
82
111
  licenses:
83
112
  - MIT
84
- metadata: {}
85
113
  post_install_message:
86
114
  rdoc_options: []
87
115
  require_paths:
88
116
  - lib
89
117
  required_ruby_version: !ruby/object:Gem::Requirement
118
+ none: false
90
119
  requirements:
91
- - - '>='
120
+ - - ! '>='
92
121
  - !ruby/object:Gem::Version
93
122
  version: '0'
94
123
  required_rubygems_version: !ruby/object:Gem::Requirement
124
+ none: false
95
125
  requirements:
96
- - - '>='
126
+ - - ! '>='
97
127
  - !ruby/object:Gem::Version
98
128
  version: '0'
99
129
  requirements: []
100
130
  rubyforge_project:
101
- rubygems_version: 2.0.3
131
+ rubygems_version: 1.8.23
102
132
  signing_key:
103
- specification_version: 4
133
+ specification_version: 3
104
134
  summary: Axiom Memory adapter
105
135
  test_files: []
106
136
  has_rdoc:
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 94c19af0600da7b06aefddead4f489e717f8ea41
4
- data.tar.gz: 33cd3eb27a5a3bbafc7e7b534b64f333633b7565
5
- SHA512:
6
- metadata.gz: 503db171d87002481874517f3eedb4dfce7d3bdb2358873e2e7fb9c3befb44a9468abceef5b4cab96f1c1647b9273eb5b0dae9a228075dc6a685c55dd4b37986
7
- data.tar.gz: cacf03827d491e6940e84958e83b5d1d6a9f38849357b0c07cb49649d2d787777546454d58cc879a4676eef33825ff8193181f3aaba7d1c7585baff41a2f7ee3