ardm 0.2.4 → 0.2.5

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.
@@ -54,6 +54,12 @@ module Ardm
54
54
  end
55
55
 
56
56
  module ClassMethods
57
+ # The reflections returned here don't look like datamapper relationships.
58
+ # @todo improve this if needed with a wrapper
59
+ def relationships
60
+ reflections
61
+ end
62
+
57
63
  def dump_associations_hash(options)
58
64
  options.inject({}) do |new_attrs, (key, value)|
59
65
  if reflection = reflect_on_association(key.to_sym)
@@ -6,6 +6,7 @@ require 'ardm/active_record/finalize'
6
6
  require 'ardm/active_record/hooks'
7
7
  require 'ardm/active_record/is'
8
8
  require 'ardm/active_record/inheritance'
9
+ require 'ardm/active_record/persistence'
9
10
  require 'ardm/active_record/property'
10
11
  require 'ardm/active_record/query'
11
12
  require 'ardm/active_record/repository'
@@ -41,6 +42,7 @@ module Ardm
41
42
  include Ardm::ActiveRecord::Dirty
42
43
  include Ardm::ActiveRecord::Is
43
44
  include Ardm::ActiveRecord::Inheritance
45
+ include Ardm::ActiveRecord::Persistence
44
46
  include Ardm::ActiveRecord::Property
45
47
  include Ardm::ActiveRecord::Query
46
48
  include Ardm::ActiveRecord::Repository
@@ -0,0 +1,70 @@
1
+ require 'active_support/concern'
2
+
3
+ module Ardm
4
+ module ActiveRecord
5
+ module Persistence
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ class_attribute :raise_on_save_failure, instance_accessor: true
10
+ self.raise_on_save_failure = false
11
+ end
12
+
13
+ module ClassMethods
14
+ def update(*a)
15
+ options = dump_properties_hash(a.first)
16
+ options = dump_associations_hash(options)
17
+ assert_valid_attributes(options)
18
+ update_all(options) != 0
19
+ end
20
+
21
+ def update!(*a)
22
+ options = dump_properties_hash(a.first)
23
+ options = dump_associations_hash(options)
24
+ assert_valid_attributes(options)
25
+ update_all(options) != 0
26
+ end
27
+
28
+ def destroy(*a)
29
+ destroy_all
30
+ end
31
+
32
+ def destroy!(*a)
33
+ delete_all
34
+ end
35
+ end
36
+
37
+ def destroy
38
+ self.class.delete(self.send(self.class.primary_key))
39
+ end
40
+
41
+ def new?
42
+ new_record?
43
+ end
44
+
45
+ def saved?
46
+ !new_record?
47
+ end
48
+
49
+ def save_self(*args)
50
+ save(*args)
51
+ end
52
+
53
+ def save!(*args)
54
+ save(*args) || (raise_on_save_failure && raise(Ardm::SaveFailureError, "Save Failed"))
55
+ end
56
+
57
+ def update(*a)
58
+ if a.size == 1
59
+ update_attributes(*a)
60
+ else
61
+ super
62
+ end
63
+ end
64
+
65
+ def update!(*a)
66
+ update_attributes!(*a)
67
+ end
68
+ end
69
+ end
70
+ end
@@ -87,6 +87,19 @@ module Ardm
87
87
  @properties ||= PropertySet.new
88
88
  end
89
89
 
90
+ def timestamps(at=:at)
91
+ case at
92
+ when :at
93
+ property :created_at, DateTime
94
+ property :updated_at, DateTime
95
+ when :on
96
+ property :created_on, Date
97
+ property :updated_on, Date
98
+ else
99
+ raise ArgumentError, "Unknown argument: timestamps(#{at.inspect})"
100
+ end
101
+ end
102
+
90
103
  def initialize_attributes(attributes, options = {})
91
104
  super(attributes, options)
92
105
 
@@ -306,6 +319,18 @@ module Ardm
306
319
  end
307
320
  end
308
321
 
322
+ def assign_attributes(attrs, *a)
323
+ new_attrs = attrs.inject({}) do |memo,(name,value)|
324
+ if property = self.class.properties[name]
325
+ memo[property.field] = property.typecast(value)
326
+ else
327
+ memo[name] = value
328
+ end
329
+ memo
330
+ end
331
+ super new_attrs, *a
332
+ end
333
+
309
334
  # Retrieve the key(s) for this resource.
310
335
  #
311
336
  # This always returns the persisted key value,
@@ -26,6 +26,10 @@ module Ardm
26
26
  end
27
27
 
28
28
  module ClassMethods
29
+ def execute_sql(sql)
30
+ connection.execute(sql)
31
+ end
32
+
29
33
  # hook into query engine in the most general way possible
30
34
  def expand_hash_conditions_for_aggregates(options)
31
35
  complex, simple = options.partition {|k,v| Ardm::Query::Operator === k }
@@ -9,15 +9,6 @@ module Ardm
9
9
 
10
10
  self.abstract_class = true
11
11
 
12
- class_attribute :raise_on_save_failure
13
- self.raise_on_save_failure = false
14
-
15
- JSON = Json
16
-
17
- def self.execute_sql(sql)
18
- connection.execute(sql)
19
- end
20
-
21
12
  def self.property(property_name, property_type, options={})
22
13
  prop = super
23
14
  begin
@@ -29,89 +20,6 @@ module Ardm
29
20
  end
30
21
  prop
31
22
  end
32
-
33
- # no-op in active record
34
- def self.timestamps(at=:at)
35
- case at
36
- when :at
37
- property :created_at, DateTime
38
- property :updated_at, DateTime
39
- when :on
40
- property :created_on, Date
41
- property :updated_on, Date
42
- else
43
- raise ArgumentError, "Unknown argument: timestamps(#{at.inspect})"
44
- end
45
- end
46
-
47
- # The reflections returned here don't look like datamapper relationships.
48
- # @todo improve this if needed with a wrapper
49
- def self.relationships
50
- reflections
51
- end
52
-
53
- def self.update(*a)
54
- options = dump_properties_hash(a.first)
55
- options = dump_associations_hash(options)
56
- assert_valid_attributes(options)
57
- update_all(options) != 0
58
- end
59
-
60
- def self.update!(*a)
61
- options = dump_properties_hash(a.first)
62
- options = dump_associations_hash(options)
63
- assert_valid_attributes(options)
64
- update_all(options) != 0
65
- end
66
-
67
- def self.destroy(*a)
68
- destroy_all
69
- end
70
-
71
- def self.destroy!(*a)
72
- delete_all
73
- end
74
-
75
- def destroy
76
- self.class.delete(self.send(self.class.primary_key))
77
- end
78
-
79
- def new?
80
- new_record?
81
- end
82
-
83
- def saved?
84
- !new_record?
85
- end
86
-
87
- def save_self(*args)
88
- save(*args)
89
- end
90
-
91
- def save!(*args)
92
- save(*args) || (raise_on_save_failure && raise(Ardm::SaveFailureError, "Save Failed"))
93
- end
94
-
95
- def update(*a)
96
- if a.size == 1
97
- update_attributes(*a)
98
- else
99
- super
100
- end
101
- end
102
-
103
- def update!(*a)
104
- update_attributes!(*a)
105
- end
106
-
107
- #active record internals for detecting if this method should exist as an attribute
108
- #if attribute_method_matcher(:open)
109
- # def open
110
- # read_attribute(:open)
111
- # #attribute_missing(match, *args, &block)
112
- # end
113
- #end
114
-
115
23
  end
116
24
  end
117
25
  end
@@ -32,15 +32,15 @@ module Ardm
32
32
  end
33
33
 
34
34
  def first_or_create(attributes = nil, options = {}, &block)
35
- first(attributes) || create(attributes, options, &block)
35
+ all(attributes).first || all(attributes).create(options, &block)
36
36
  end
37
37
 
38
38
  def first_or_create!(attributes = nil, options = {}, &block)
39
- first(attributes) || create!(attributes, options, &block)
39
+ all(attributes).first || all(attributes).create!(options, &block)
40
40
  end
41
41
 
42
42
  def first_or_initialize(attributes = nil, options = {}, &block)
43
- first(attributes) || create(attributes, options, &block)
43
+ all(attributes).first || all(attributes).create(options, &block)
44
44
  end
45
45
  end
46
46
  end
@@ -62,7 +62,7 @@ module Ardm
62
62
  # We used to just patch this, like above, but we need to copy it over
63
63
  # completely for rails4 since it no longer supports the old style finder
64
64
  # methods that act more like the datamapper finders.
65
- def apply_finder_options(options)
65
+ def apply_finder_options(options, *args)
66
66
  relation = clone
67
67
  return relation if options.nil?
68
68
 
data/lib/ardm/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ardm
2
- VERSION = '0.2.4'
2
+ VERSION = '0.2.5'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ardm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-10-24 00:00:00.000000000 Z
13
+ date: 2014-12-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -193,6 +193,7 @@ files:
193
193
  - lib/ardm/active_record/inheritance.rb
194
194
  - lib/ardm/active_record/is.rb
195
195
  - lib/ardm/active_record/is/state_machine.rb
196
+ - lib/ardm/active_record/persistence.rb
196
197
  - lib/ardm/active_record/predicate_builder.rb
197
198
  - lib/ardm/active_record/predicate_builder/array_handler.rb
198
199
  - lib/ardm/active_record/predicate_builder/rails3.rb
@@ -275,7 +276,6 @@ files:
275
276
  - lib/ardm/support/subject_set.rb
276
277
  - lib/ardm/version.rb
277
278
  - spec/ardm/datamapper_constants_spec.rb
278
- - spec/ardm/record_forwarding_spec.rb
279
279
  - spec/fixtures/api_user.rb
280
280
  - spec/fixtures/article.rb
281
281
  - spec/fixtures/bookmark.rb
@@ -1,20 +0,0 @@
1
- require 'spec_helper'
2
- require 'ardm/data_mapper/record'
3
-
4
- describe Ardm::DataMapper::Record do
5
- it 'responds to finalize' do
6
- expect(described_class.respond_to?(:finalize)).to be_truthy
7
- end
8
-
9
- it 'responds to repository' do
10
- expect(described_class.respond_to?(:repository)).to be_truthy
11
- end
12
-
13
- it 'responds to logger' do
14
- expect(described_class.respond_to?(:logger)).to be_truthy
15
- end
16
-
17
- it 'responds to logger=' do
18
- expect(described_class.respond_to?(:logger=)).to be_truthy
19
- end
20
- end