ardm-rails 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitignore +35 -0
  4. data/.travis.yml +11 -0
  5. data/Gemfile +47 -0
  6. data/LICENSE +20 -0
  7. data/README.rdoc +595 -0
  8. data/Rakefile +4 -0
  9. data/VERSION +1 -0
  10. data/ardm-rails.gemspec +27 -0
  11. data/lib/ardm-rails.rb +1 -0
  12. data/lib/dm-rails/configuration.rb +76 -0
  13. data/lib/dm-rails/mass_assignment_security.rb +89 -0
  14. data/lib/dm-rails/middleware/identity_map.rb +20 -0
  15. data/lib/dm-rails/multiparameter_attributes.rb +167 -0
  16. data/lib/dm-rails/railtie.rb +100 -0
  17. data/lib/dm-rails/railties/controller_runtime.rb +45 -0
  18. data/lib/dm-rails/railties/database.rake +106 -0
  19. data/lib/dm-rails/railties/i18n_support.rb +12 -0
  20. data/lib/dm-rails/railties/log_listener.rb +39 -0
  21. data/lib/dm-rails/railties/log_subscriber.rb +54 -0
  22. data/lib/dm-rails/session_store.rb +70 -0
  23. data/lib/dm-rails/setup.rb +84 -0
  24. data/lib/dm-rails/storage.rb +209 -0
  25. data/lib/dm-rails/version.rb +5 -0
  26. data/lib/dm-rails.rb +1 -0
  27. data/lib/generators/data_mapper/migration/migration_generator.rb +30 -0
  28. data/lib/generators/data_mapper/migration/templates/migration.rb +23 -0
  29. data/lib/generators/data_mapper/model/model_generator.rb +23 -0
  30. data/lib/generators/data_mapper/model/templates/model.rb +11 -0
  31. data/lib/generators/data_mapper/observer/observer_generator.rb +19 -0
  32. data/lib/generators/data_mapper/observer/templates/observer.rb +7 -0
  33. data/lib/generators/data_mapper.rb +82 -0
  34. data/spec/models/fake.rb +31 -0
  35. data/spec/models/topic.rb +11 -0
  36. data/spec/spec.opts +3 -0
  37. data/spec/spec_helper.rb +19 -0
  38. data/spec/unit/mass_assignment_security_spec.rb +43 -0
  39. data/spec/unit/multiparameter_attributes_spec.rb +168 -0
  40. data/tasks/clean.rake +6 -0
  41. data/tasks/spec.rake +17 -0
  42. data/tasks/yard.rake +9 -0
  43. data/tasks/yardstick.rake +20 -0
  44. metadata +188 -0
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+ require 'dm-rails/mass_assignment_security'
3
+
4
+ # Because mass-assignment security is based on ActiveModel we just have to
5
+ # ensure that ActiveModel is called.
6
+ describe DataMapper::MassAssignmentSecurity do
7
+ before :all do
8
+ class Fake
9
+ super_module = Module.new do
10
+ def _super_attributes=(*args)
11
+ end
12
+
13
+ def attributes=(*args)
14
+ self.send(:_super_attributes=, *args)
15
+ end
16
+ end
17
+ include super_module
18
+
19
+ include ::DataMapper::MassAssignmentSecurity
20
+ end
21
+ end
22
+
23
+ describe '#attributes=' do
24
+ it 'calls super with sanitized attributes' do
25
+ attributes = { :name => 'John', :is_admin => true }
26
+ sanitized_attributes = { :name => 'John' }
27
+ model = Fake.new
28
+ model.should_receive(:sanitize_for_mass_assignment).with(attributes).and_return(sanitized_attributes)
29
+ model.should_receive(:_super_attributes=).with(sanitized_attributes)
30
+
31
+ model.attributes = attributes
32
+ end
33
+
34
+ it 'skips sanitation when called with true' do
35
+ attributes = { :name => 'John', :is_admin => true }
36
+ sanitized_attributes = { :name => 'John' }
37
+ model = Fake.new
38
+ model.should_receive(:_super_attributes=).with(attributes)
39
+
40
+ model.send(:attributes=, attributes, true)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,168 @@
1
+ require 'spec_helper'
2
+ require 'dm-rails/multiparameter_attributes'
3
+
4
+ # Since multiparameters are a feature of Rails some tests are based on the test
5
+ # suite of Rails.
6
+ describe Rails::DataMapper::MultiparameterAttributes do
7
+ before :all do
8
+ load Pathname(__FILE__).dirname.parent.join('models/topic.rb').expand_path
9
+ load Pathname(__FILE__).dirname.parent.join('models/fake.rb').expand_path
10
+ DataMapper.finalize
11
+ model = ::Rails::DataMapper::Models::Topic
12
+ model.auto_migrate! if model.respond_to?(:auto_migrate!)
13
+ end
14
+
15
+ describe '#attributes=' do
16
+ date_inputs = [
17
+ [ 'date',
18
+ { 'last_read(1i)' => '2004', 'last_read(2i)' => '6', 'last_read(3i)' => '24' },
19
+ Date.new(2004, 6, 24) ],
20
+ [ 'date with empty year',
21
+ { 'last_read(1i)' => '', 'last_read(2i)' => '6', 'last_read(3i)' => '24' },
22
+ Date.new(1, 6, 24) ],
23
+ [ 'date with empty month',
24
+ { 'last_read(1i)' => '2004', 'last_read(2i)' => '', 'last_read(3i)' => '24' },
25
+ Date.new(2004, 1, 24) ],
26
+ [ 'date with empty day',
27
+ { 'last_read(1i)' => '2004', 'last_read(2i)' => '6', 'last_read(3i)' => '' },
28
+ Date.new(2004, 6, 1) ],
29
+ [ 'date with empty day and year',
30
+ { 'last_read(1i)' => '', 'last_read(2i)' => '6', 'last_read(3i)' => '' },
31
+ Date.new(1, 6, 1) ],
32
+ [ 'date with empty day and month',
33
+ { 'last_read(1i)' => '2004', 'last_read(2i)' => '', 'last_read(3i)' => '' },
34
+ Date.new(2004, 1, 1) ],
35
+ [ 'date with empty year and month',
36
+ { 'last_read(1i)' => '', 'last_read(2i)' => '', 'last_read(3i)' => '24' },
37
+ Date.new(1, 1, 24) ],
38
+ [ 'date with all empty',
39
+ { 'last_read(1i)' => '', 'last_read(2i)' => '', 'last_read(3i)' => '' },
40
+ nil ],
41
+ ]
42
+
43
+ date_inputs.each do |(name, attributes, date)|
44
+ it "converts #{name}" do
45
+ topic = ::Rails::DataMapper::Models::Topic.new
46
+ topic.attributes = attributes
47
+ topic.last_read.should == date
48
+ end
49
+ end
50
+
51
+ time_inputs = [
52
+ [ 'time',
53
+ { 'written_on(1i)' => '2004', 'written_on(2i)' => '6', 'written_on(3i)' => '24',
54
+ 'written_on(4i)' => '16', 'written_on(5i)' => '24', 'written_on(6i)' => '00' },
55
+ Time.local(2004, 6, 24, 16, 24, 0) ],
56
+ [ 'time with old date',
57
+ { 'written_on(1i)' => '1901', 'written_on(2i)' => '12', 'written_on(3i)' => '31',
58
+ 'written_on(4i)' => '23', 'written_on(5i)' => '59', 'written_on(6i)' => '59' },
59
+ Time.local(1901, 12, 31, 23, 59, 59) ],
60
+ [ 'time with all empty',
61
+ { 'written_on(1i)' => '', 'written_on(2i)' => '', 'written_on(3i)' => '',
62
+ 'written_on(4i)' => '', 'written_on(5i)' => '', 'written_on(6i)' => '' },
63
+ nil ],
64
+ [ 'time with empty seconds',
65
+ { 'written_on(1i)' => '2004', 'written_on(2i)' => '6', 'written_on(3i)' => '24',
66
+ 'written_on(4i)' => '16', 'written_on(5i)' => '24', 'written_on(6i)' => '' },
67
+ Time.local(2004, 6, 24, 16, 24, 0) ],
68
+ ]
69
+
70
+ time_inputs.each do |(name, attributes, time)|
71
+ it "converts #{name}" do
72
+ topic = ::Rails::DataMapper::Models::Topic.new
73
+ topic.attributes = attributes
74
+ topic.written_on.should == time
75
+ end
76
+ end
77
+
78
+ date_time_inputs = [
79
+ [ 'datetime',
80
+ { 'updated_at(1i)' => '2004', 'updated_at(2i)' => '6', 'updated_at(3i)' => '24',
81
+ 'updated_at(4i)' => '16', 'updated_at(5i)' => '24', 'updated_at(6i)' => '00' },
82
+ DateTime.new(2004, 6, 24, 16, 24, 0) ],
83
+ ]
84
+
85
+ date_time_inputs.each do |(name, attributes, time)|
86
+ it "converts #{name}" do
87
+ topic = ::Rails::DataMapper::Models::Topic.new
88
+ topic.attributes = attributes
89
+ topic.updated_at.should == time
90
+ end
91
+ end
92
+
93
+ it 'calls super with merged multiparameters' do
94
+ multiparameter_hash = {
95
+ 'composite(1)' => 'a string',
96
+ 'composite(2)' => '1.5',
97
+ 'composite(3i)' => '1.5',
98
+ 'composite(4f)' => '1.5',
99
+ 'composite(5)' => '',
100
+ 'composite(6i)' => '',
101
+ 'composite(7f)' => '',
102
+ }
103
+ attributes = { 'composite' => Object.new }
104
+
105
+ ::Rails::DataMapper::Models::Composite.
106
+ should_receive(:new).
107
+ with('a string', '1.5', '1.5'.to_i, '1.5'.to_f).
108
+ and_return(attributes['composite'])
109
+
110
+ composite_property = mock(::DataMapper::Property)
111
+ composite_property.stub!(:primitive).and_return(::Rails::DataMapper::Models::Composite)
112
+
113
+ resource = ::Rails::DataMapper::Models::Fake.new
114
+ resource.stub!(:properties).and_return('composite' => composite_property)
115
+
116
+ resource.should_receive(:_super_attributes=).with(attributes)
117
+
118
+ resource.attributes = multiparameter_hash
119
+ end
120
+
121
+ it 'raises exception on failure' do
122
+ multiparameter_hash = { 'composite(1)' => 'a string' }
123
+ attributes = { 'composite' => Object.new }
124
+
125
+ composite_exception = StandardError.new('foo')
126
+ ::Rails::DataMapper::Models::Composite.
127
+ should_receive(:new).with('a string').and_raise(composite_exception)
128
+
129
+ composite_property = mock(::DataMapper::Property)
130
+ composite_property.stub!(:primitive).and_return(::Rails::DataMapper::Models::Composite)
131
+
132
+ resource = ::Rails::DataMapper::Models::Fake.new
133
+ resource.stub!(:properties).and_return('composite' => composite_property)
134
+
135
+ lambda { resource.attributes = multiparameter_hash }.
136
+ should raise_error(::Rails::DataMapper::MultiparameterAssignmentErrors) { |ex|
137
+ ex.errors.size.should == 1
138
+
139
+ error = ex.errors[0]
140
+ error.attribute.should == 'composite'
141
+ error.values.should == ['a string']
142
+ error.exception.should == composite_exception
143
+ }
144
+ end
145
+ end
146
+
147
+ describe 'new' do
148
+ it "merges multiparameters" do
149
+ attributes = {
150
+ 'updated_at(1i)' => '2004', 'updated_at(2i)' => '6', 'updated_at(3i)' => '24',
151
+ 'updated_at(4i)' => '16', 'updated_at(5i)' => '24', 'updated_at(6i)' => '00' }
152
+
153
+ topic = ::Rails::DataMapper::Models::Topic.new(attributes)
154
+ topic.updated_at.should == DateTime.new(2004, 6, 24, 16, 24, 0)
155
+ end
156
+ end
157
+
158
+ describe 'create' do
159
+ it "merges multiparameters" do
160
+ attributes = {
161
+ 'updated_at(1i)' => '2004', 'updated_at(2i)' => '6', 'updated_at(3i)' => '24',
162
+ 'updated_at(4i)' => '16', 'updated_at(5i)' => '24', 'updated_at(6i)' => '00' }
163
+
164
+ topic = ::Rails::DataMapper::Models::Topic.create(attributes)
165
+ topic.updated_at.should == DateTime.new(2004, 6, 24, 16, 24, 0)
166
+ end
167
+ end
168
+ end
data/tasks/clean.rake ADDED
@@ -0,0 +1,6 @@
1
+ require 'rake/clean'
2
+
3
+ File.foreach('.gitignore') do |line|
4
+ line.strip!
5
+ CLOBBER << line unless line.empty? || line[0, 1] == '#'
6
+ end
data/tasks/spec.rake ADDED
@@ -0,0 +1,17 @@
1
+ spec_defaults = lambda do |spec|
2
+ spec.pattern = 'spec/**/*_spec.rb'
3
+ spec.libs << 'lib' << 'spec'
4
+ spec.spec_opts << '--options' << 'spec/spec.opts'
5
+ end
6
+
7
+ begin
8
+ require 'spec/rake/spectask'
9
+
10
+ Spec::Rake::SpecTask.new(:spec, &spec_defaults)
11
+ rescue LoadError
12
+ task :spec do
13
+ abort 'rspec is not available. In order to run spec, you must: gem install rspec'
14
+ end
15
+ end
16
+
17
+ task :default => :spec
data/tasks/yard.rake ADDED
@@ -0,0 +1,9 @@
1
+ begin
2
+ require 'yard'
3
+
4
+ YARD::Rake::YardocTask.new
5
+ rescue LoadError
6
+ task :yard do
7
+ abort 'YARD is not available. In order to run yard, you must: gem install yard'
8
+ end
9
+ end
@@ -0,0 +1,20 @@
1
+ begin
2
+ require 'pathname'
3
+ require 'yardstick'
4
+ require 'yardstick/rake/measurement'
5
+ require 'yardstick/rake/verify'
6
+
7
+ # yardstick_measure task
8
+ Yardstick::Rake::Measurement.new
9
+
10
+ # verify_measurements task
11
+ Yardstick::Rake::Verify.new do |verify|
12
+ verify.threshold = 100
13
+ end
14
+ rescue LoadError
15
+ %w[ yardstick_measure verify_measurements ].each do |name|
16
+ task name.to_s do
17
+ abort "Yardstick is not available. In order to run #{name}, you must: gem install yardstick"
18
+ end
19
+ end
20
+ end
metadata ADDED
@@ -0,0 +1,188 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ardm-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.1
5
+ platform: ruby
6
+ authors:
7
+ - Martin Emde
8
+ - Martin Gamsjaeger (snusnu)
9
+ - Dan Kubb
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2015-01-29 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: ardm-core
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '1.2'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '1.2'
29
+ - !ruby/object:Gem::Dependency
30
+ name: ardm-active_model
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '1.2'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '1.2'
43
+ - !ruby/object:Gem::Dependency
44
+ name: actionpack
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '3.0'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '5.0'
53
+ type: :runtime
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '3.0'
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '5.0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: railties
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '3.0'
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '5.0'
73
+ type: :runtime
74
+ prerelease: false
75
+ version_requirements: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '3.0'
80
+ - - "<"
81
+ - !ruby/object:Gem::Version
82
+ version: '5.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.9'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.9'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.3'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.3'
111
+ description: DataMapper rails adapter
112
+ email:
113
+ - me@martinemde.com
114
+ - gamsnjaga@gmail.com
115
+ executables: []
116
+ extensions: []
117
+ extra_rdoc_files:
118
+ - LICENSE
119
+ - README.rdoc
120
+ files:
121
+ - ".document"
122
+ - ".gitignore"
123
+ - ".travis.yml"
124
+ - Gemfile
125
+ - LICENSE
126
+ - README.rdoc
127
+ - Rakefile
128
+ - VERSION
129
+ - ardm-rails.gemspec
130
+ - lib/ardm-rails.rb
131
+ - lib/dm-rails.rb
132
+ - lib/dm-rails/configuration.rb
133
+ - lib/dm-rails/mass_assignment_security.rb
134
+ - lib/dm-rails/middleware/identity_map.rb
135
+ - lib/dm-rails/multiparameter_attributes.rb
136
+ - lib/dm-rails/railtie.rb
137
+ - lib/dm-rails/railties/controller_runtime.rb
138
+ - lib/dm-rails/railties/database.rake
139
+ - lib/dm-rails/railties/i18n_support.rb
140
+ - lib/dm-rails/railties/log_listener.rb
141
+ - lib/dm-rails/railties/log_subscriber.rb
142
+ - lib/dm-rails/session_store.rb
143
+ - lib/dm-rails/setup.rb
144
+ - lib/dm-rails/storage.rb
145
+ - lib/dm-rails/version.rb
146
+ - lib/generators/data_mapper.rb
147
+ - lib/generators/data_mapper/migration/migration_generator.rb
148
+ - lib/generators/data_mapper/migration/templates/migration.rb
149
+ - lib/generators/data_mapper/model/model_generator.rb
150
+ - lib/generators/data_mapper/model/templates/model.rb
151
+ - lib/generators/data_mapper/observer/observer_generator.rb
152
+ - lib/generators/data_mapper/observer/templates/observer.rb
153
+ - spec/models/fake.rb
154
+ - spec/models/topic.rb
155
+ - spec/spec.opts
156
+ - spec/spec_helper.rb
157
+ - spec/unit/mass_assignment_security_spec.rb
158
+ - spec/unit/multiparameter_attributes_spec.rb
159
+ - tasks/clean.rake
160
+ - tasks/spec.rake
161
+ - tasks/yard.rake
162
+ - tasks/yardstick.rake
163
+ homepage: https://github.com/ar-dm/ardm-rails
164
+ licenses:
165
+ - MIT
166
+ metadata: {}
167
+ post_install_message:
168
+ rdoc_options: []
169
+ require_paths:
170
+ - lib
171
+ required_ruby_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ requirements: []
182
+ rubyforge_project:
183
+ rubygems_version: 2.2.2
184
+ signing_key:
185
+ specification_version: 4
186
+ summary: Ardm fork of dm-rails
187
+ test_files: []
188
+ has_rdoc: