minimodel 2.0.0 → 2.0.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.
- checksums.yaml +5 -5
- data/CHANGES.md +33 -0
- data/LICENSE.txt +1 -6
- data/minimodel.gemspec +9 -8
- metadata +14 -85
- data/Rakefile +0 -8
- data/spec/colour_spec.rb +0 -16
- data/spec/currency_data.yml +0 -8
- data/spec/currency_spec.rb +0 -126
- data/spec/dutch_education_spec.rb +0 -111
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e3103b9d7124f91936f1ad70da337f999f230a4463a6a7933f7566d5997837ad
|
4
|
+
data.tar.gz: d4f57fd1224b32b6ab488b8365457cef1263e119252f38287eb02760c194ba28
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13d65ca6e41549bb006fd737b3592c0095f03fbea9badf9f2512611cdaf3860e06579e77d51107da7adc71506ddd81fbbe95ff1e892749ba98f50b3ebad1494d
|
7
|
+
data.tar.gz: ef6cbce222f3fa1ebf1e9088e32a824a92ab4250cf6e73bacd880a56910d6d43706f94cb1b99899eac58e507527c1f098bf3ef450de18acd5962a31e14641bf9
|
data/CHANGES.md
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# 2.0.1
|
2
|
+
|
3
|
+
* Added CHANGES.md to gem files
|
4
|
+
|
5
|
+
* Added metadata to gemspec
|
6
|
+
|
7
|
+
# 2.0.0
|
8
|
+
|
9
|
+
* Added MiniModel.options method for use with options_for_select
|
10
|
+
|
11
|
+
* Dropped Ruby 1.8.7 compatibility
|
12
|
+
|
13
|
+
# 1.0.0
|
14
|
+
|
15
|
+
* Ruby 1.8.7 compatibility
|
16
|
+
|
17
|
+
# 0.4.0
|
18
|
+
|
19
|
+
* Added MiniModel.keys method
|
20
|
+
|
21
|
+
# 0.3.0
|
22
|
+
|
23
|
+
* Changed MiniModel.find method to raise exception for non-existent keys
|
24
|
+
|
25
|
+
# 0.2.0
|
26
|
+
|
27
|
+
* Added MiniModel#to_json method
|
28
|
+
|
29
|
+
* Added MiniModel#read_attribute method
|
30
|
+
|
31
|
+
# 0.1.0
|
32
|
+
|
33
|
+
* First version!
|
data/LICENSE.txt
CHANGED
@@ -1,9 +1,4 @@
|
|
1
|
-
Copyright (c) TIMCRAFT
|
1
|
+
Copyright (c) 2011-2020 TIMCRAFT
|
2
2
|
|
3
3
|
This is an Open Source project licensed under the terms of the LGPLv3 license.
|
4
4
|
Please see <http://www.gnu.org/licenses/lgpl-3.0.html> for license text.
|
5
|
-
|
6
|
-
This code is distributed in the hope that it will be useful,
|
7
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
8
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
9
|
-
GNU Lesser General Public License for more details.
|
data/minimodel.gemspec
CHANGED
@@ -1,19 +1,20 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'minimodel'
|
3
|
-
s.version = '2.0.
|
3
|
+
s.version = '2.0.1'
|
4
4
|
s.license = 'LGPL-3.0'
|
5
5
|
s.platform = Gem::Platform::RUBY
|
6
6
|
s.authors = ['Tim Craft']
|
7
7
|
s.email = ['mail@timcraft.com']
|
8
|
-
s.homepage = '
|
8
|
+
s.homepage = 'https://github.com/timcraft/minimodel'
|
9
9
|
s.description = 'A little Ruby library for defining little models'
|
10
10
|
s.summary = 'See description'
|
11
|
-
s.files = Dir.glob('
|
11
|
+
s.files = Dir.glob('lib/**/*.rb') + %w[CHANGES.md LICENSE.txt README.md minimodel.gemspec]
|
12
12
|
s.required_ruby_version = '>= 1.9.3'
|
13
|
-
s.add_development_dependency('rake', '~> 10')
|
14
|
-
s.add_development_dependency('activerecord', '~> 5')
|
15
|
-
s.add_development_dependency('sqlite3', '~> 1.3')
|
16
|
-
s.add_development_dependency('minitest', '~> 5')
|
17
|
-
s.add_development_dependency('json', '~> 2')
|
18
13
|
s.require_path = 'lib'
|
14
|
+
s.metadata = {
|
15
|
+
'homepage' => 'https://github.com/timcraft/minimodel',
|
16
|
+
'source_code_uri' => 'https://github.com/timcraft/minimodel',
|
17
|
+
'bug_tracker_uri' => 'https://github.com/timcraft/minimodel/issues',
|
18
|
+
'changelog_uri' => 'https://github.com/timcraft/minimodel/blob/main/CHANGES.md'
|
19
|
+
}
|
19
20
|
end
|
metadata
CHANGED
@@ -1,85 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minimodel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Craft
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: rake
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '10'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '10'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: activerecord
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '5'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '5'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: sqlite3
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.3'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '1.3'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: minitest
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '5'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '5'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: json
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '2'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '2'
|
11
|
+
date: 2020-11-03 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
83
13
|
description: A little Ruby library for defining little models
|
84
14
|
email:
|
85
15
|
- mail@timcraft.com
|
@@ -87,21 +17,21 @@ executables: []
|
|
87
17
|
extensions: []
|
88
18
|
extra_rdoc_files: []
|
89
19
|
files:
|
20
|
+
- CHANGES.md
|
90
21
|
- LICENSE.txt
|
91
22
|
- README.md
|
92
|
-
- Rakefile
|
93
23
|
- lib/minimodel.rb
|
94
24
|
- lib/minimodel/associations.rb
|
95
25
|
- minimodel.gemspec
|
96
|
-
|
97
|
-
- spec/currency_data.yml
|
98
|
-
- spec/currency_spec.rb
|
99
|
-
- spec/dutch_education_spec.rb
|
100
|
-
homepage: http://github.com/timcraft/minimodel
|
26
|
+
homepage: https://github.com/timcraft/minimodel
|
101
27
|
licenses:
|
102
28
|
- LGPL-3.0
|
103
|
-
metadata:
|
104
|
-
|
29
|
+
metadata:
|
30
|
+
homepage: https://github.com/timcraft/minimodel
|
31
|
+
source_code_uri: https://github.com/timcraft/minimodel
|
32
|
+
bug_tracker_uri: https://github.com/timcraft/minimodel/issues
|
33
|
+
changelog_uri: https://github.com/timcraft/minimodel/blob/main/CHANGES.md
|
34
|
+
post_install_message:
|
105
35
|
rdoc_options: []
|
106
36
|
require_paths:
|
107
37
|
- lib
|
@@ -116,9 +46,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
46
|
- !ruby/object:Gem::Version
|
117
47
|
version: '0'
|
118
48
|
requirements: []
|
119
|
-
|
120
|
-
|
121
|
-
signing_key:
|
49
|
+
rubygems_version: 3.1.4
|
50
|
+
signing_key:
|
122
51
|
specification_version: 4
|
123
52
|
summary: See description
|
124
53
|
test_files: []
|
data/Rakefile
DELETED
data/spec/colour_spec.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'minimodel'
|
3
|
-
|
4
|
-
class Colour < MiniModel
|
5
|
-
indexed_by :id, auto_increment: true
|
6
|
-
|
7
|
-
insert name: 'Blue', hexdigits: '0000FF'
|
8
|
-
insert name: 'Red', hexdigits: 'FF0000'
|
9
|
-
insert name: 'Green', hexdigits: '00FF00'
|
10
|
-
end
|
11
|
-
|
12
|
-
describe 'Colour' do
|
13
|
-
it 'assigns auto incrementing id values' do
|
14
|
-
Colour.all.map(&:id).sort.must_equal([1, 2, 3])
|
15
|
-
end
|
16
|
-
end
|
data/spec/currency_data.yml
DELETED
data/spec/currency_spec.rb
DELETED
@@ -1,126 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'minimodel'
|
3
|
-
require 'json'
|
4
|
-
|
5
|
-
class Currency < MiniModel
|
6
|
-
indexed_by :code
|
7
|
-
|
8
|
-
load_from 'spec/currency_data.yml'
|
9
|
-
|
10
|
-
insert code: 'INR', name: 'Indian rupee'
|
11
|
-
insert code: 'JPY', name: 'Japanese yen'
|
12
|
-
end
|
13
|
-
|
14
|
-
describe 'A currency object' do
|
15
|
-
before do
|
16
|
-
@euro = Currency.new(code: 'EUR', name: 'Euro')
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'responds to code and name methods' do
|
20
|
-
@euro.respond_to?(:code).must_equal(true)
|
21
|
-
@euro.respond_to?(:name).must_equal(true)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'provides attribute reader methods' do
|
25
|
-
@euro.code.must_equal('EUR')
|
26
|
-
@euro.name.must_equal('Euro')
|
27
|
-
end
|
28
|
-
|
29
|
-
describe 'eql query method' do
|
30
|
-
it 'returns true when passed a currency object with the same attributes' do
|
31
|
-
@euro.eql?(@euro).must_equal(true)
|
32
|
-
@euro.eql?(Currency.new(code: 'EUR', name: 'Euro')).must_equal(true)
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'returns false when given a currency object with a different code' do
|
36
|
-
@euro.eql?(Currency.new(code: 'GBP', name: 'Pound sterling')).must_equal(false)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe 'to_hash method' do
|
41
|
-
it 'returns a hash containing the object attributes' do
|
42
|
-
@euro.to_hash.must_equal({code: 'EUR', name: 'Euro'})
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
describe 'to_json method' do
|
47
|
-
it 'returns a string containing the object attributes encoded as json' do
|
48
|
-
output = @euro.to_json
|
49
|
-
output.must_match(/\{.+?\}/)
|
50
|
-
output.must_match(/"code":"EUR"/)
|
51
|
-
output.must_match(/"name":"Euro"/)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe 'read_attribute method' do
|
56
|
-
it 'returns the value corresponding to the given attribute name' do
|
57
|
-
@euro.read_attribute(:code).must_equal('EUR')
|
58
|
-
@euro.read_attribute(:name).must_equal('Euro')
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe 'Currency' do
|
64
|
-
describe 'all class method' do
|
65
|
-
it 'returns an array containing currency objects' do
|
66
|
-
Currency.all.must_be_kind_of(Array)
|
67
|
-
Currency.all.each { |object| object.must_be_kind_of(Currency) }
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
describe 'keys class method' do
|
72
|
-
it 'returns an array containing all the primary keys' do
|
73
|
-
Currency.keys.must_equal(%w(EUR GBP USD INR JPY))
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
describe 'options class method' do
|
78
|
-
it 'returns a hash mapping the given text attribute to primary keys' do
|
79
|
-
options = {
|
80
|
-
'Euro' => 'EUR',
|
81
|
-
'Pound sterling' => 'GBP',
|
82
|
-
'United States dollar' => 'USD',
|
83
|
-
'Indian rupee' => 'INR',
|
84
|
-
'Japanese yen' => 'JPY'
|
85
|
-
}
|
86
|
-
|
87
|
-
Currency.options(:name).must_equal(options)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe 'primary_key class method' do
|
92
|
-
it 'returns the name of the primary key attribute' do
|
93
|
-
Currency.primary_key.must_equal(:code)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
describe 'count class method' do
|
98
|
-
it 'returns the total number of currencies' do
|
99
|
-
Currency.count.must_equal(5)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
describe 'find class method' do
|
104
|
-
it 'returns the correct currency object' do
|
105
|
-
currency = Currency.find('EUR')
|
106
|
-
|
107
|
-
currency.must_be_kind_of(Currency)
|
108
|
-
currency.code.must_equal('EUR')
|
109
|
-
currency.name.must_equal('Euro')
|
110
|
-
end
|
111
|
-
|
112
|
-
it 'raises an error if the currency cannot be found' do
|
113
|
-
proc { Currency.find('FOO') }.must_raise(KeyError) # 1.9
|
114
|
-
end
|
115
|
-
|
116
|
-
it 'yields if the currency cannot be found and the caller supplies a block' do
|
117
|
-
Currency.find('FOO') { nil }.must_be_nil
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
describe 'insert class method' do
|
122
|
-
it 'raises an error when passed a key that already exists' do
|
123
|
-
proc { Currency.insert(code: 'EUR', name: 'Euro') }.must_raise(MiniModel::DuplicateKeyError)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
@@ -1,111 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'minimodel'
|
3
|
-
require 'minimodel/associations'
|
4
|
-
require 'active_record'
|
5
|
-
|
6
|
-
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
|
7
|
-
|
8
|
-
ActiveRecord::Schema.define(version: 1) do
|
9
|
-
create_table :courses, force: true do |t|
|
10
|
-
t.string :name, index: true
|
11
|
-
t.string :level_name, index: true
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
class Level < MiniModel
|
16
|
-
indexed_by :name
|
17
|
-
|
18
|
-
has_many :courses
|
19
|
-
has_many :profiles
|
20
|
-
|
21
|
-
insert name: 'VMBO-T'
|
22
|
-
insert name: 'HAVO'
|
23
|
-
insert name: 'VWO'
|
24
|
-
end
|
25
|
-
|
26
|
-
class Profile < MiniModel
|
27
|
-
indexed_by :id, auto_increment: true
|
28
|
-
|
29
|
-
belongs_to :level
|
30
|
-
|
31
|
-
insert level_name: 'VMBO-T', name: 'Techniek'
|
32
|
-
insert level_name: 'VMBO-T', name: 'Zorg en Welzijn'
|
33
|
-
insert level_name: 'VMBO-T', name: 'Economie'
|
34
|
-
insert level_name: 'VMBO-T', name: 'Landbouw'
|
35
|
-
|
36
|
-
insert level_name: 'HAVO', name: 'Economie en Maatschappij'
|
37
|
-
insert level_name: 'HAVO', name: 'Cultuur en Maatschappij'
|
38
|
-
insert level_name: 'HAVO', name: 'Natuur en Gezondheid'
|
39
|
-
insert level_name: 'HAVO', name: 'Natuur en Techniek'
|
40
|
-
|
41
|
-
insert level_name: 'VWO', name: 'Economie en Maatschappij'
|
42
|
-
insert level_name: 'VWO', name: 'Cultuur en Maatschappij'
|
43
|
-
insert level_name: 'VWO', name: 'Natuur en Gezondheid'
|
44
|
-
insert level_name: 'VWO', name: 'Natuur en Techniek'
|
45
|
-
end
|
46
|
-
|
47
|
-
class Course < ActiveRecord::Base
|
48
|
-
def level
|
49
|
-
@level ||= Level.find(level_name)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
Level.all.each do |level|
|
54
|
-
for course_name in %w( Nederlands Engels Duits )
|
55
|
-
Course.create!(level_name: level.name, name: "#{level.name}/#{course_name}")
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe 'A level object' do
|
60
|
-
before do
|
61
|
-
@level = Level.find('VMBO-T')
|
62
|
-
|
63
|
-
@profile_names = ['Economie', 'Landbouw', 'Techniek', 'Zorg en Welzijn']
|
64
|
-
|
65
|
-
@course_names = %w( VMBO-T/Duits VMBO-T/Engels VMBO-T/Nederlands )
|
66
|
-
end
|
67
|
-
|
68
|
-
describe 'profiles method' do
|
69
|
-
it 'returns an enumerable object with the correct size' do
|
70
|
-
profiles = @level.profiles
|
71
|
-
profiles.must_respond_to(:each)
|
72
|
-
profiles.class.ancestors.must_include(Enumerable)
|
73
|
-
profiles.size.must_equal(4)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
describe 'courses method' do
|
78
|
-
it 'returns an enumerable object with the correct size' do
|
79
|
-
courses = @level.courses
|
80
|
-
courses.must_respond_to(:each)
|
81
|
-
courses.class.ancestors.must_include(Enumerable)
|
82
|
-
courses.size.must_equal(3)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
describe 'A profile object' do
|
88
|
-
before do
|
89
|
-
@profile = Profile.find(8)
|
90
|
-
end
|
91
|
-
|
92
|
-
describe 'level method' do
|
93
|
-
it 'returns the correct level object' do
|
94
|
-
@profile.level.must_be_kind_of(Level)
|
95
|
-
@profile.level.name.must_equal('HAVO')
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
describe 'A course object' do
|
101
|
-
before do
|
102
|
-
@course = Course.find_by_name('VWO/Engels')
|
103
|
-
end
|
104
|
-
|
105
|
-
describe 'level method' do
|
106
|
-
it 'returns the correct level object' do
|
107
|
-
@course.level.must_be_kind_of(Level)
|
108
|
-
@course.level.name.must_equal('VWO')
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|