ardb 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,73 @@
1
+ module Ardb
2
+
3
+ module RecordSpy
4
+
5
+ def self.new(&block)
6
+ block ||= proc{ }
7
+ record_spy = Class.new{ include Ardb::RecordSpy }
8
+ record_spy.class_eval(&block)
9
+ record_spy
10
+ end
11
+
12
+ def self.included(klass)
13
+ klass.class_eval do
14
+ extend ClassMethods
15
+ include InstanceMethods
16
+ end
17
+ end
18
+
19
+ module ClassMethods
20
+
21
+ attr_reader :validations, :callbacks
22
+
23
+ [ :validates_presence_of, :validates_uniqueness_of,
24
+ :validates_inclusion_of
25
+ ].each do |method_name|
26
+ type = method_name.to_s.match(/\Avalidates_(.+)_of\Z/)[1]
27
+
28
+ define_method(method_name) do |*args|
29
+ @validations ||= []
30
+ @validations << Validation.new(type, *args)
31
+ end
32
+
33
+ end
34
+
35
+ [ :before_validation, :after_save ].each do |method_name|
36
+
37
+ define_method(method_name) do |*args, &block|
38
+ @callbacks ||= []
39
+ @callbacks << Callback.new(method_name, *args, &block)
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+
46
+ module InstanceMethods
47
+
48
+ end
49
+
50
+ class Validation
51
+ attr_reader :type, :columns, :options
52
+
53
+ def initialize(type, *args)
54
+ @type = type.to_sym
55
+ @options = args.last.kind_of?(::Hash) ? args.pop : {}
56
+ @columns = args
57
+ end
58
+ end
59
+
60
+ class Callback
61
+ attr_reader :type, :args, :options, :block
62
+
63
+ def initialize(type, *args, &block)
64
+ @type = type.to_sym
65
+ @options = args.last.kind_of?(::Hash) ? args.pop : {}
66
+ @args = args
67
+ @block = block
68
+ end
69
+ end
70
+
71
+ end
72
+
73
+ end
data/lib/ardb/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ardb
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -0,0 +1,90 @@
1
+ require 'assert'
2
+ require 'ardb/record_spy'
3
+
4
+ module Ardb::RecordSpy
5
+
6
+ class MyRecord
7
+ include Ardb::RecordSpy
8
+ attr_accessor :name
9
+ end
10
+
11
+ class BaseTests < Assert::Context
12
+ desc "Ardb::RecordSpy"
13
+ setup do
14
+ @instance = MyRecord.new
15
+ end
16
+ subject{ MyRecord }
17
+
18
+ should have_readers :validations, :callbacks
19
+ should have_imeths :validates_presence_of, :validates_uniqueness_of
20
+ should have_imeths :validates_inclusion_of, :before_validation, :after_save
21
+
22
+ should "included the record spy instance methods" do
23
+ assert_includes Ardb::RecordSpy::InstanceMethods, subject.included_modules
24
+ end
25
+
26
+ should "add a validation config with #validates_presence_of" do
27
+ subject.validates_presence_of :name, :email, :on => :create
28
+ validation = subject.validations.last
29
+ assert_equal :presence, validation.type
30
+ assert_includes :name, validation.columns
31
+ assert_includes :email, validation.columns
32
+ assert_equal :create, validation.options[:on]
33
+ end
34
+
35
+ should "add a validation config with #validates_uniqueness_of" do
36
+ subject.validates_uniqueness_of :name, :scope => :area_id
37
+ validation = subject.validations.last
38
+ assert_equal :uniqueness, validation.type
39
+ assert_includes :name, validation.columns
40
+ assert_equal :area_id, validation.options[:scope]
41
+ end
42
+
43
+ should "add a validation config with #validates_inclusion_of" do
44
+ subject.validates_inclusion_of :active, :in => [ true, false]
45
+ validation = subject.validations.last
46
+ assert_equal :inclusion, validation.type
47
+ assert_includes :active, validation.columns
48
+ assert_equal [ true, false], validation.options[:in]
49
+ end
50
+
51
+ should "add a callback config with #before_validation" do
52
+ subject.before_validation(:on => :create) do
53
+ self.name = 'test'
54
+ end
55
+ callback = subject.callbacks.last
56
+ assert_equal :before_validation, callback.type
57
+ assert_equal :create, callback.options[:on]
58
+ @instance.instance_eval(&callback.block)
59
+ assert_equal 'test', @instance.name
60
+ end
61
+
62
+ should "add a callback config with #after_save" do
63
+ subject.after_save :a_callback_method
64
+ callback = subject.callbacks.last
65
+ assert_equal :after_save, callback.type
66
+ assert_includes :a_callback_method, callback.args
67
+ end
68
+
69
+ end
70
+
71
+ class GeneratorTests < BaseTests
72
+ desc "to generate record spy classes"
73
+ setup do
74
+ @record_spy_class = Ardb::RecordSpy.new do
75
+ attr_accessor :name
76
+ end
77
+ @instance = @record_spy_class.new
78
+ end
79
+ subject{ @record_spy_class }
80
+
81
+ should "build a new record spy class and " \
82
+ "used the passed proc to further defined it" do
83
+ assert_includes Ardb::RecordSpy, subject.included_modules
84
+ assert @instance.respond_to? :name
85
+ assert @instance.respond_to? :name=
86
+ end
87
+
88
+ end
89
+
90
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ardb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 6
8
+ - 7
9
9
  - 0
10
- version: 0.6.0
10
+ version: 0.7.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kelly Redding
@@ -16,12 +16,11 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2013-04-18 00:00:00 Z
19
+ date: 2013-06-17 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: assert
23
22
  prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
23
+ version_requirements: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
25
  requirements:
27
26
  - - ~>
@@ -31,12 +30,12 @@ dependencies:
31
30
  - 2
32
31
  - 0
33
32
  version: "2.0"
33
+ requirement: *id001
34
+ name: assert
34
35
  type: :development
35
- version_requirements: *id001
36
36
  - !ruby/object:Gem::Dependency
37
- name: activerecord
38
37
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
38
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
39
  none: false
41
40
  requirements:
42
41
  - - ~>
@@ -46,12 +45,12 @@ dependencies:
46
45
  - 3
47
46
  - 2
48
47
  version: "3.2"
48
+ requirement: *id002
49
+ name: activerecord
49
50
  type: :runtime
50
- version_requirements: *id002
51
51
  - !ruby/object:Gem::Dependency
52
- name: activesupport
53
52
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
53
+ version_requirements: &id003 !ruby/object:Gem::Requirement
55
54
  none: false
56
55
  requirements:
57
56
  - - ~>
@@ -61,12 +60,12 @@ dependencies:
61
60
  - 3
62
61
  - 2
63
62
  version: "3.2"
63
+ requirement: *id003
64
+ name: activesupport
64
65
  type: :runtime
65
- version_requirements: *id003
66
66
  - !ruby/object:Gem::Dependency
67
- name: ns-options
68
67
  prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
68
+ version_requirements: &id004 !ruby/object:Gem::Requirement
70
69
  none: false
71
70
  requirements:
72
71
  - - ~>
@@ -76,8 +75,9 @@ dependencies:
76
75
  - 1
77
76
  - 1
78
77
  version: "1.1"
78
+ requirement: *id004
79
+ name: ns-options
79
80
  type: :runtime
80
- version_requirements: *id004
81
81
  description: Activerecord database tools.
82
82
  email:
83
83
  - kelly@kellyredding.com
@@ -103,6 +103,7 @@ files:
103
103
  - lib/ardb/adapter/sqlite.rb
104
104
  - lib/ardb/cli.rb
105
105
  - lib/ardb/migration_helpers.rb
106
+ - lib/ardb/record_spy.rb
106
107
  - lib/ardb/root_path.rb
107
108
  - lib/ardb/runner.rb
108
109
  - lib/ardb/runner/connect_command.rb
@@ -121,6 +122,7 @@ files:
121
122
  - test/unit/ardb_tests.rb
122
123
  - test/unit/config_tests.rb
123
124
  - test/unit/migration_helpers_tests.rb
125
+ - test/unit/record_spy_tests.rb
124
126
  - test/unit/runner/connect_command_tests.rb
125
127
  - test/unit/runner/create_command_tests.rb
126
128
  - test/unit/runner/drop_command_tests.rb
@@ -169,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
171
  requirements: []
170
172
 
171
173
  rubyforge_project:
172
- rubygems_version: 1.8.24
174
+ rubygems_version: 1.8.15
173
175
  signing_key:
174
176
  specification_version: 3
175
177
  summary: Activerecord database tools.
@@ -182,6 +184,7 @@ test_files:
182
184
  - test/unit/ardb_tests.rb
183
185
  - test/unit/config_tests.rb
184
186
  - test/unit/migration_helpers_tests.rb
187
+ - test/unit/record_spy_tests.rb
185
188
  - test/unit/runner/connect_command_tests.rb
186
189
  - test/unit/runner/create_command_tests.rb
187
190
  - test/unit/runner/drop_command_tests.rb