vorm 0.0.2.alpha → 0.0.3.alpha

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: 0226887b2444ffaa689f04548cdfc5365cfe4189
4
- data.tar.gz: 6a8989a13c330ba6c213cfba69197b61127128da
3
+ metadata.gz: 8e049baeffcdf4458ff5c973dfcbb38ce7fb0301
4
+ data.tar.gz: b0dc12e80852cbe360a3487418c63ab247f4e9d1
5
5
  SHA512:
6
- metadata.gz: 940b8ba11cc2b72732127c375e4ce761c830a8d96e053aa396e84c9e39d36fb5ad1ffc68428ea1f22aaadaca1e3ae8c00754726ae922916831789ebc53a97417
7
- data.tar.gz: 1cd848b8b1b8dfc82706dc3d303ac0698309496a06e29368ef65c298fdb4d0943415b1ce278d84cd23569c83777013d404b0c18b9f51fbf84c0b77fadd766ec2
6
+ metadata.gz: 161b9f07774a7eddbcadc2e2fac3e45ea702be6bb6f294950fd7a19413b7392af33048d221aa69c5c219a822eeaf0acab2f33aae99a6931bfd199592157b9ebd
7
+ data.tar.gz: cd25a537c2f48f9543913320d83deb0c749ad65d846e5caa0a8608c81cd22fbd46f0e688b23106ecb1e5bf773797de42d38b4a3fef823e50a82dc5b9ff1be9ad
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
+ group :development, :test do
6
+ gem "byebug", "~> 3.5"
7
+ end
8
+
@@ -0,0 +1,23 @@
1
+ module Vorm
2
+ module Validatable
3
+ def self.included(base)
4
+ base.extend(ClassMethods)
5
+ end
6
+
7
+ module ClassMethods
8
+ def validates(field, &validator)
9
+ raise(ArgumentError, "Field name must be a string") if field && !field.is_a?(String)
10
+ raise(ArgumentError, "You must provide a block") if !block_given?
11
+ _add_validator(field, validator)
12
+ end
13
+
14
+ private
15
+
16
+ def _add_validator(field, validator)
17
+ @validators ||= Hash.new { |k, v| k[v] = [] }
18
+ @validators[field] << validator
19
+ end
20
+ end
21
+ end
22
+ end
23
+
data/lib/vorm/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Vorm
2
- VERSION = "0.0.2.alpha"
2
+ VERSION = "0.0.3.alpha"
3
3
  end
4
4
 
data/lib/vorm.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'vorm/version'
2
+ require 'vorm/validatable'
2
3
  require 'vorm/persistable'
3
4
  require 'vorm/model'
4
5
 
@@ -1,81 +1,9 @@
1
- module Vorm
2
- class Model
3
- def self.reset
4
- @table = nil
5
- @fields = nil
6
- end
7
- end
8
- end
9
-
10
1
  describe Vorm::Model do
11
2
  context "class methods" do
12
3
  subject { Vorm::Model }
13
4
 
14
- describe ".table" do
15
- before { subject.reset }
16
-
17
- it { is_expected.to respond_to(:table) }
18
-
19
- it "raises when name is not string" do
20
- expect { subject.table(:users) }
21
- .to raise_error(ArgumentError, "Table name must be a string")
22
- end
23
-
24
- it "sets the table correctly" do
25
- expect { subject.table('users') }
26
- .to change(subject, :table).to('users')
27
- end
28
-
29
- it "gets the table" do
30
- subject.table('users')
31
- expect(subject.table).to eq('users')
32
- end
33
-
34
- it "setting the table again does not change it (cached)" do
35
- subject.table('users')
36
- expect { subject.table('another table') }
37
- .not_to change(subject, :table)
38
- end
39
- end
40
-
41
- describe ".field" do
42
- before { subject.reset }
43
-
44
- it { is_expected.to respond_to(:field) }
45
-
46
- it "raises when name is not string" do
47
- expect { subject.field(:email) }
48
- .to raise_error(ArgumentError, "Field name must be a string")
49
- end
50
-
51
- it "sets the field correctly" do
52
- expect { subject.field('email') }
53
- .to change(subject, :fields)
54
- end
55
-
56
-
57
- it "ignores duplicates" do
58
- subject.field('email')
59
- subject.field('email')
60
- expect(subject.fields).to eq(Set.new(['email']))
61
- end
62
- end
63
-
64
- describe ".fields" do
65
- before { subject.reset }
66
-
67
- it { is_expected.to respond_to(:fields) }
68
-
69
- it "gets fields when only one set" do
70
- subject.field('email')
71
- expect(subject.fields).to eq(Set.new(['email']))
72
- end
73
-
74
- it "gets the fields when multiple set" do
75
- subject.field('email')
76
- subject.field('dob')
77
- expect(subject.fields).to eq(Set.new(['email', 'dob']))
78
- end
5
+ it "should include Persistable" do
6
+ expect(subject.included_modules).to include(Vorm::Persistable)
79
7
  end
80
8
  end
81
9
  end
@@ -0,0 +1,82 @@
1
+ class Model
2
+ include Vorm::Persistable
3
+
4
+ def self.reset
5
+ @table = nil
6
+ @fields = nil
7
+ end
8
+ end
9
+
10
+ describe Vorm::Persistable do
11
+ context "class methods" do
12
+ subject { Model }
13
+
14
+ describe ".table" do
15
+ before { subject.reset }
16
+
17
+ it { is_expected.to respond_to(:table) }
18
+
19
+ it "raises when name is not string" do
20
+ expect { subject.table(:users) }
21
+ .to raise_error(ArgumentError, "Table name must be a string")
22
+ end
23
+
24
+ it "sets the table correctly" do
25
+ expect { subject.table('users') }
26
+ .to change(subject, :table).to('users')
27
+ end
28
+
29
+ it "gets the table" do
30
+ subject.table('users')
31
+ expect(subject.table).to eq('users')
32
+ end
33
+
34
+ it "setting the table again does not change it (cached)" do
35
+ subject.table('users')
36
+ expect { subject.table('another table') }
37
+ .not_to change(subject, :table)
38
+ end
39
+ end
40
+
41
+ describe ".field" do
42
+ before { subject.reset }
43
+
44
+ it { is_expected.to respond_to(:field) }
45
+
46
+ it "raises when name is not string" do
47
+ expect { subject.field(:email) }
48
+ .to raise_error(ArgumentError, "Field name must be a string")
49
+ end
50
+
51
+ it "sets the field correctly" do
52
+ expect { subject.field('email') }
53
+ .to change(subject, :fields)
54
+ end
55
+
56
+
57
+ it "ignores duplicates" do
58
+ subject.field('email')
59
+ subject.field('email')
60
+ expect(subject.fields).to eq(Set.new(['email']))
61
+ end
62
+ end
63
+
64
+ describe ".fields" do
65
+ before { subject.reset }
66
+
67
+ it { is_expected.to respond_to(:fields) }
68
+
69
+ it "gets fields when only one set" do
70
+ subject.field('email')
71
+ expect(subject.fields).to eq(Set.new(['email']))
72
+ end
73
+
74
+ it "gets the fields when multiple set" do
75
+ subject.field('email')
76
+ subject.field('dob')
77
+ expect(subject.fields).to eq(Set.new(['email', 'dob']))
78
+ end
79
+ end
80
+ end
81
+ end
82
+
@@ -0,0 +1,44 @@
1
+ require 'byebug'
2
+ class Valid
3
+ include Vorm::Validatable
4
+
5
+ def self.reset
6
+ @validators = nil
7
+ end
8
+ end
9
+
10
+ describe Vorm::Validatable do
11
+ context "class methods" do
12
+ subject { Valid }
13
+
14
+ describe ".validates" do
15
+ before { subject.reset }
16
+
17
+ it { is_expected.to respond_to(:validates) }
18
+
19
+ it "raises argument error when given arg is not string" do
20
+ expect { subject.validates(:email) }
21
+ .to raise_error(ArgumentError, "Field name must be a string")
22
+ end
23
+
24
+ it "raises argument error when no block given" do
25
+ expect { subject.validates("email") }
26
+ .to raise_error(ArgumentError, "You must provide a block")
27
+ end
28
+
29
+ it "stores a validator" do
30
+ subject.validates("email") { "required" }
31
+ expect(subject.instance_variable_get('@validators')["email"].length).to be(1)
32
+ end
33
+
34
+ it "stores multiple validators" do
35
+ subject.validates("email") { "required" }
36
+ subject.validates("email") { "not valid" }
37
+ subject.validates("password") { "required" }
38
+ expect(subject.instance_variable_get('@validators')["email"].length).to be(2)
39
+ expect(subject.instance_variable_get('@validators')["password"].length).to be(1)
40
+ end
41
+ end
42
+ end
43
+ end
44
+
data/vorm.gemspec CHANGED
@@ -20,6 +20,6 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.6"
22
22
  spec.add_development_dependency "rake", "~> 10.3.2"
23
- spec.add_development_dependency "rspec", "~> 3.1.7"
23
+ spec.add_development_dependency "rspec", "~> 3.1"
24
24
  end
25
25
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vorm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2.alpha
4
+ version: 0.0.3.alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juho Hautala
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 3.1.7
47
+ version: '3.1'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 3.1.7
54
+ version: '3.1'
55
55
  description: Simple, pluggable (your own db adapter) ORM for those little projects.
56
56
  email:
57
57
  - juho.hautala@helsinki.fi
@@ -69,8 +69,11 @@ files:
69
69
  - lib/vorm.rb
70
70
  - lib/vorm/model.rb
71
71
  - lib/vorm/persistable.rb
72
+ - lib/vorm/validatable.rb
72
73
  - lib/vorm/version.rb
73
74
  - spec/lib/vorm/model_spec.rb
75
+ - spec/lib/vorm/persistable_spec.rb
76
+ - spec/lib/vorm/validatable_spec.rb
74
77
  - spec/spec_helper.rb
75
78
  - vorm.gemspec
76
79
  homepage: https://github.com/vastus/vorm
@@ -99,5 +102,6 @@ specification_version: 4
99
102
  summary: Simple ORM.
100
103
  test_files:
101
104
  - spec/lib/vorm/model_spec.rb
105
+ - spec/lib/vorm/persistable_spec.rb
106
+ - spec/lib/vorm/validatable_spec.rb
102
107
  - spec/spec_helper.rb
103
- has_rdoc: