lotus-model 0.1.0 → 0.1.1

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.
data/.gitignore DELETED
@@ -1,18 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- .greenbar
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- language: ruby
2
- script: 'bundle exec rake test:coverage'
3
- rvm:
4
- - 2.0.0
5
- - 2.1.0
6
- - 2.1.1
data/.yardopts DELETED
@@ -1,5 +0,0 @@
1
- --protected
2
- --private
3
- -
4
- LICENSE.txt
5
- lib/**/*.rb
data/Gemfile DELETED
@@ -1,16 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
3
-
4
- if !ENV['TRAVIS']
5
- gem 'byebug', require: false, platforms: :ruby if RUBY_VERSION == '2.1.1'
6
- gem 'yard', require: false
7
- # gem 'lotus-utils', require: false, github: 'lotus/utils'
8
- else
9
- # gem 'lotus-utils', '~> 0.1', '> 0.1.0'
10
- end
11
-
12
- gem 'lotus-utils', require: false, github: 'lotus/utils'
13
-
14
- gem 'sqlite3', require: false
15
- gem 'simplecov', require: false
16
- gem 'coveralls', require: false
data/Rakefile DELETED
@@ -1,17 +0,0 @@
1
- require 'rake'
2
- require 'rake/testtask'
3
- require 'bundler/gem_tasks'
4
-
5
- Rake::TestTask.new do |t|
6
- t.pattern = 'test/**/*_test.rb'
7
- t.libs.push 'test'
8
- end
9
-
10
- namespace :test do
11
- task :coverage do
12
- ENV['COVERAGE'] = 'true'
13
- Rake::Task['test'].invoke
14
- end
15
- end
16
-
17
- task default: :test
data/test/entity_test.rb DELETED
@@ -1,126 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Lotus::Entity do
4
- before do
5
- class Car
6
- include Lotus::Entity
7
- end
8
-
9
- class Book
10
- include Lotus::Entity
11
- self.attributes = :title, :author
12
- end
13
-
14
- class NonFinctionBook < Book
15
- end
16
-
17
- class Camera
18
- include Lotus::Entity
19
- attr_accessor :analog
20
- end
21
- end
22
-
23
- after do
24
- [:Car, :Book, :NonFinctionBook, :Camera].each do |const|
25
- Object.send(:remove_const, const)
26
- end
27
- end
28
-
29
- describe 'attributes' do
30
- let(:attributes) { [:id, :model] }
31
-
32
- it 'defines attributes' do
33
- Car.send(:attributes=, attributes)
34
- Car.send(:attributes).must_equal attributes
35
- end
36
- end
37
-
38
- describe '#initialize' do
39
- describe 'with defined attributes' do
40
- it 'accepts given attributes' do
41
- book = Book.new(title: "A Lover's Discourse: Fragments", author: 'Roland Barthes')
42
-
43
- book.instance_variable_get(:@title).must_equal "A Lover's Discourse: Fragments"
44
- book.instance_variable_get(:@author).must_equal 'Roland Barthes'
45
- end
46
-
47
- it 'ignores unknown attributes' do
48
- book = Book.new(unknown: 'x')
49
-
50
- book.instance_variable_get(:@book).must_be_nil
51
- end
52
-
53
- it 'accepts given attributes for subclass' do
54
- book = NonFinctionBook.new(title: 'Refactoring', author: 'Martin Fowler')
55
-
56
- book.instance_variable_get(:@title).must_equal 'Refactoring'
57
- book.instance_variable_get(:@author).must_equal 'Martin Fowler'
58
- end
59
- end
60
-
61
- describe 'with undefined attributes' do
62
- it 'is able to initialize an entity without given attributes' do
63
- camera = Camera.new
64
- camera.analog.must_be_nil
65
- end
66
-
67
- it 'is able to initialize an entity if it has the right accessors' do
68
- camera = Camera.new(analog: true)
69
- camera.analog.must_equal(true)
70
- end
71
-
72
- it "raises an error when the given attributes don't correspond to a known accessor" do
73
- -> { Camera.new(digital: true) }.must_raise(NoMethodError)
74
- end
75
- end
76
- end
77
-
78
- describe 'accessors' do
79
- it 'exposes getters for attributes' do
80
- book = Book.new(title: 'High Fidelity')
81
-
82
- book.title.must_equal 'High Fidelity'
83
- end
84
-
85
- it 'exposes setters for attributes' do
86
- book = Book.new
87
- book.title = 'A Man'
88
-
89
- book.instance_variable_get(:@title).must_equal 'A Man'
90
- book.title.must_equal 'A Man'
91
- end
92
-
93
- it 'exposes accessor for id' do
94
- book = Book.new
95
- book.id.must_be_nil
96
-
97
- book.id = 23
98
- book.id.must_equal 23
99
- end
100
- end
101
-
102
- describe '#==' do
103
- before do
104
- @book1 = Book.new
105
- @book1.id = 23
106
-
107
- @book2 = Book.new
108
- @book2.id = 23
109
-
110
- @book3 = Book.new
111
- @car = Car.new
112
- end
113
-
114
- it 'returns true if they have the same class and id' do
115
- @book1.must_equal @book2
116
- end
117
-
118
- it 'returns false if they have the same class but different id' do
119
- @book1.wont_equal @book3
120
- end
121
-
122
- it 'returns false if they have different class' do
123
- @book1.wont_equal @car
124
- end
125
- end
126
- end
data/test/fixtures.rb DELETED
@@ -1,81 +0,0 @@
1
- class User
2
- include Lotus::Entity
3
- self.attributes = :name, :age
4
- end
5
-
6
- class Article
7
- include Lotus::Entity
8
- self.attributes = :user_id, :unmapped_attribute, :title, :comments_count
9
- end
10
-
11
- class UserRepository
12
- include Lotus::Repository
13
- end
14
-
15
- class ArticleRepository
16
- include Lotus::Repository
17
-
18
- def self.rank
19
- query do
20
- desc(:comments_count)
21
- end
22
- end
23
-
24
- def self.by_user(user)
25
- query do
26
- where(user_id: user.id)
27
- end
28
- end
29
-
30
- def self.not_by_user(user)
31
- exclude by_user(user)
32
- end
33
-
34
- def self.rank_by_user(user)
35
- rank.by_user(user)
36
- end
37
- end
38
-
39
- DB = Sequel.connect(SQLITE_CONNECTION_STRING)
40
-
41
- DB.create_table :users do
42
- primary_key :id
43
- String :name
44
- Integer :age
45
- end
46
-
47
- DB.create_table :articles do
48
- primary_key :_id
49
- Integer :user_id
50
- String :s_title
51
- String :comments_count # Not an error: we're testing String => Integer coercion
52
- String :umapped_column
53
- end
54
-
55
- DB.create_table :devices do
56
- primary_key :id
57
- end
58
-
59
- # DB.dataset_class = Class.new(Sequel::Dataset)
60
-
61
- #FIXME this should be passed by the framework internals.
62
- MAPPER = Lotus::Model::Mapper.new do
63
- collection :users do
64
- entity User
65
-
66
- attribute :id, Integer
67
- attribute :name, String
68
- attribute :age, Integer
69
- end
70
-
71
- collection :articles do
72
- entity Article
73
-
74
- attribute :id, Integer, as: :_id
75
- attribute :user_id, Integer
76
- attribute :title, String, as: 's_title'
77
- attribute :comments_count, Integer
78
-
79
- identity :_id
80
- end
81
- end.load!
@@ -1,75 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Lotus::Model::Adapters::Abstract do
4
- let(:adapter) { Lotus::Model::Adapters::Abstract.new(mapper) }
5
- let(:mapper) { Object.new }
6
- let(:entity) { Object.new }
7
- let(:query) { Object.new }
8
- let(:collection) { :collection }
9
-
10
- describe '#persist' do
11
- it 'raises error' do
12
- ->{ adapter.persist(collection, entity) }.must_raise NotImplementedError
13
- end
14
- end
15
-
16
- describe '#create' do
17
- it 'raises error' do
18
- ->{ adapter.create(collection, entity) }.must_raise NotImplementedError
19
- end
20
- end
21
-
22
- describe '#update' do
23
- it 'raises error' do
24
- ->{ adapter.update(collection, entity) }.must_raise NotImplementedError
25
- end
26
- end
27
-
28
- describe '#delete' do
29
- it 'raises error' do
30
- ->{ adapter.delete(collection, entity) }.must_raise NotImplementedError
31
- end
32
- end
33
-
34
- describe '#all' do
35
- it 'raises error' do
36
- ->{ adapter.all(collection) }.must_raise NotImplementedError
37
- end
38
- end
39
-
40
- describe '#find' do
41
- it 'raises error' do
42
- ->{ adapter.find(collection, 1) }.must_raise NotImplementedError
43
- end
44
- end
45
-
46
- describe '#first' do
47
- it 'raises error' do
48
- ->{ adapter.first(collection) }.must_raise NotImplementedError
49
- end
50
- end
51
-
52
- describe '#last' do
53
- it 'raises error' do
54
- ->{ adapter.last(collection) }.must_raise NotImplementedError
55
- end
56
- end
57
-
58
- describe '#clear' do
59
- it 'raises error' do
60
- ->{ adapter.clear(collection) }.must_raise NotImplementedError
61
- end
62
- end
63
-
64
- describe '#command' do
65
- it 'raises error' do
66
- ->{ adapter.command(query) }.must_raise NotImplementedError
67
- end
68
- end
69
-
70
- describe '#query' do
71
- it 'raises error' do
72
- ->{ adapter.query(collection) }.must_raise NotImplementedError
73
- end
74
- end
75
- end
@@ -1,22 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Lotus::Model::Adapters::Implementation do
4
- before do
5
- TestAdapter = Class.new(Lotus::Model::Adapters::Abstract) do
6
- include Lotus::Model::Adapters::Implementation
7
- end
8
-
9
- mapper = Object.new
10
- @adapter = TestAdapter.new(mapper)
11
- end
12
-
13
- after do
14
- Object.send(:remove_const, :TestAdapter)
15
- end
16
-
17
- it 'must implement #_collection' do
18
- -> {
19
- @adapter.send(:_collection, :x)
20
- }.must_raise NotImplementedError
21
- end
22
- end
@@ -1,91 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Lotus::Model::Adapters::Memory::Query do
4
- before do
5
- MockDataset = Struct.new(:records) do
6
- def all
7
- records
8
- end
9
-
10
- def to_s
11
- records.to_s
12
- end
13
- end
14
-
15
- class MockCollection
16
- def deserialize(array)
17
- array
18
- end
19
- end
20
-
21
- collection = MockCollection.new
22
- @query = Lotus::Model::Adapters::Memory::Query.new(dataset, collection)
23
- end
24
-
25
- after do
26
- Object.send(:remove_const, :MockDataset)
27
- Object.send(:remove_const, :MockCollection)
28
- end
29
-
30
- let(:dataset) { MockDataset.new([]) }
31
-
32
- describe '#negate!' do
33
- it 'raises an error' do
34
- -> { @query.negate! }.must_raise NotImplementedError
35
- end
36
- end
37
-
38
- describe '#to_s' do
39
- let(:dataset) { MockDataset.new([1, 2, 3]) }
40
-
41
- it 'delegates to the wrapped dataset' do
42
- @query.to_s.must_equal dataset.to_s
43
- end
44
- end
45
-
46
- describe '#empty?' do
47
- describe "when it's empty" do
48
- it 'returns true' do
49
- @query.must_be_empty
50
- end
51
- end
52
-
53
- describe "when it's filled with elements" do
54
- let(:dataset) { MockDataset.new([1, 2, 3]) }
55
-
56
- it 'returns false' do
57
- @query.wont_be_empty
58
- end
59
- end
60
- end
61
-
62
- describe '#any?' do
63
- describe "when it's empty" do
64
- it 'returns false' do
65
- assert !@query.any?
66
- end
67
- end
68
-
69
- describe "when it's filled with elements" do
70
- let(:dataset) { MockDataset.new([1, 2, 3]) }
71
-
72
- it 'returns true' do
73
- assert @query.any?
74
- end
75
-
76
- describe "when a block is passed" do
77
- describe "and it doesn't match elements" do
78
- it 'returns false' do
79
- assert !@query.any? {|e| e > 100 }
80
- end
81
- end
82
-
83
- describe "and it matches elements" do
84
- it 'returns true' do
85
- assert @query.any? {|e| e % 2 == 0 }
86
- end
87
- end
88
- end
89
- end
90
- end
91
- end