acts_has_many 0.3.3 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3aa095755b90aefdb28587878e146f1ea3eacf8e
4
- data.tar.gz: 227dc4fdf96925104ecaf2fab57613504460dfd1
3
+ metadata.gz: 4be5faf9f25faf7eb2a05a645da6b8be3addb69a
4
+ data.tar.gz: c09f0e97267de785247bd3f55ed9dc8038c0ec89
5
5
  SHA512:
6
- metadata.gz: 64141545c61c2b3db1b914832f2552205dfe7c751e18a28e122dd25ecf7d0889f0561ad8b2016f3e228bc9def24f268a81044b8ac33f0ce077433b7602ce5ee1
7
- data.tar.gz: bf3c4c673ab9dc71ad749730478d8459f5b9459f8130c44d4d7b5f4df5a40995b7781422ff3484a60b5feb77368c60faf47f6bd76f57686006301ffa3e34787e
6
+ metadata.gz: 68219717483de612402fef8b5bc9a707206b7f98063d02859ef59d16a086753a9a3bc4805203d0a568339f323513e0b8cbffca1b6122ade1e22bdfd5c12500fd
7
+ data.tar.gz: 98dd7e5cf2958f2cc0d8ecbcb929b2f7b1a8f9d1472b875cdfecac1dc513e411a5646a971650d83d082cf3930a12da44f708c5fe4a5796b8d4d276a3c8d0d030
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # acts_has_many [![Build Status](https://travis-ci.org/igor04/acts_has_many.png?branch=master)](https://travis-ci.org/igor04/acts_has_many)
2
2
 
3
- Acts_has_many gem gives functional for clean update elements `has_many` relation
4
- (additional is `has_many :trhough`). The aim is work with has_many relation without gerbage,
5
- every record must be used, othervise there will be no record.
3
+ Acts_has_many gem gives functional for useing common resources with `has_many` relation
4
+ or `has_many :trhough`. The aim is common using records with has_many relation without duplications
5
+ and gerbage, every erecord will be used
6
6
 
7
7
  ## Installation
8
8
 
@@ -19,37 +19,18 @@ Or install it yourself as:
19
19
  $ gem install acts_has_many
20
20
 
21
21
  ## Usage
22
- 1. To initialize gem you can use `acts_has_many` only, or `acts_has_many` with `acts_has_many_for` together
23
- 2. In model where you set `acts_has_many` will work clearly (all records used, no duplications)
24
- 3. Should use `dependent: :destroy`
25
-
26
- 4. If only `acts_has_many` is used:
22
+ 1. To initialize gem you should add `acts_has_many` to your common resource model
27
23
 
28
24
  ```ruby
29
- class Posting < ActiveRecord::Base
30
- belongs_to :tag, dependent: :destroy
31
- end
32
-
33
- class Tag < ActiveRecord::Base
34
- has_many :postings
25
+ class Tag < ActiveRecord::Base
26
+ has_many :postings
35
27
 
36
- acts_has_many :postings
37
- end
28
+ acts_has_many :postings
29
+ end
38
30
  ```
39
31
 
40
- In this case you have `has_many_update` method:
32
+ 2. And add `acts_has_many_for` to model which will use common resource like:
41
33
 
42
- ```ruby
43
- new_record, delete_record = Tag.first.has_many_update {title: 'ruby'}
44
- ```
45
-
46
- if you use `acts_has_many` with `through: true` parameters:
47
-
48
- ```ruby
49
- new_records, delete_ids = Tag.has_many_through_update(update: data, new: date)
50
- ```
51
-
52
- 5. If you use `acts_has_many` with `acts_has_many_for`
53
34
 
54
35
  ```ruby
55
36
  class Posting < ActiveRecord::Base
@@ -57,66 +38,32 @@ Or install it yourself as:
57
38
 
58
39
  acts_has_many_for :tag
59
40
  end
60
-
61
- class Tag < ActiveRecord::Base
62
- has_many :postings
63
-
64
- acts_has_many :postings
65
- end
66
41
  ```
67
42
 
68
- In this case you can use the same that is in 4-th point and also:
43
+ 3. Then you could use new functionality
69
44
 
70
45
  ```ruby
71
46
  Posting.first.tag_attributes = {title: 'ruby'}
72
47
  ```
73
48
 
74
- if you use `acts_has_many` with `through: true` parameters
49
+ in case with relation `has_many through` you could write next:
75
50
 
76
51
  ```ruby
77
52
  Posting.first.tags_collection = [{title: 'ruby'}, {title: 'python'}]
78
53
  ```
79
54
 
80
- New in v0.3.2
81
- --------------
82
-
83
- Use `block` to change condition, default search is `where :compare => :value`
84
-
85
- ```ruby
86
- class Tag < ActiveRecord::Base
87
- has_many :postings
88
-
89
- acts_has_many :postings do |params|
90
- where arel_table[:title].matches(params[:title])
91
- end
92
- end
93
- ```
94
-
95
- Replace `compare` method to `condition`
96
-
97
- Notice, if block is defined:
98
- >* `:compare` argument will be ignored
99
- >* auto `validates :compare, uniqueness: true` is off
100
-
101
-
102
55
  More
103
56
  ----
104
57
 
105
- `acts_has_many` options:
106
- >* list relations or after necessary relations
107
- >* :compare( string or symbol; default: :title) - name column with unique elements in table
108
- >* :through( boolean; default: false) - if you use has_many :through
109
- >* &block(should return ActiveRecord::Relation; default: `where compare: params[:compare]`) - change condition
58
+ `acts_has_many` options:
59
+ >* list relations or after necessary relations
60
+ >* :compare (string or symbol; default: :title) - name column with unique elements in table
61
+ >* :through (boolean; default: false) - if you use has_many :through
62
+ >* &block(should return ActiveRecord::Relation; by default :compare option is used)
63
+ >* example: do |params| where arel_table[:title].matches(params[:title]) end
110
64
 
111
- `acts_has_many_for` options:
112
- >* list necessary relations
113
-
114
- `has_many_update` options:
115
- >* data: data for update
116
-
117
- `has_many_through_update` options:
118
- >* :update - array data, data include :id record for update
119
- >* :new - array data for new record
65
+ `acts_has_many_for` options:
66
+ >* list necessary relations
120
67
 
121
68
  `<relation>_attributes` options:
122
69
  >* data - Hash (other data use standart way)
@@ -124,6 +71,13 @@ More
124
71
  `<relation>_collection` options:
125
72
  >* data - Array (Records, Hash, Empty)
126
73
 
74
+ `has_many_update` options:
75
+ >* data: data for update
76
+
77
+ `has_many_through_update` options:
78
+ >* :update - array data, data include :id record for update
79
+ >* :new - array data for new record
80
+
127
81
  Additional
128
82
  >* `depend_relations` - show depend relations(Array)
129
83
  >* `actual?` - check actuality(Boolean)
@@ -152,23 +106,26 @@ Use with `has_manay`:
152
106
  tag_attributes: {name: 'ruby'}
153
107
 
154
108
  posting.tag # => #<Tag id: 1, title: "ruby">
155
- Tag.all # => [#<Tag id: 1, title: "ruby">]
109
+ Tag.all # => [#<Tag id: 1, title: "ruby">]
156
110
 
157
111
  posting = Posting.create title: 'Second posting',
158
112
  tag_attributes: {name: 'ruby'}
159
113
 
114
+ #NO DUPLICATIONS
160
115
  posting.tag # => #<Tag id: 1, title: "ruby">
161
- Tag.all # => [#<Tag id: 1, title: "ruby">]
116
+ Tag.all # => [#<Tag id: 1, title: "ruby">]
162
117
 
163
118
  posting.update_attributes tag_attributes: {name: 'python'}
164
119
 
120
+ #COORRECT UPDATING
165
121
  posting.tag # => #<Tag id: 2, title: "python">
166
- Tag.all # => [#<Tag id: 1, title: "ruby">, #<Tag id: 2, title: "python">]
122
+ Tag.all # => [#<Tag id: 1, title: "ruby">, #<Tag id: 2, title: "python">]
167
123
 
168
124
  posting.tag_attributes = Tag.first
169
125
  posting.save
170
126
 
171
- Tag.all # => [#<Tag id: 1, title: "ruby">]
127
+ #NO UNUSED RECORDS
128
+ Tag.all # => [#<Tag id: 1, title: "ruby">]
172
129
  ```
173
130
 
174
131
  Use with `has_many :through`
@@ -211,13 +168,15 @@ Use with `has_many :through`
211
168
 
212
169
  posting.update_attributes tags_collection: [Tag.first]
213
170
 
214
- posting.tags # => [#<Tag id: 2, title: "ruby">]
171
+ posting.tags
172
+ # => [#<Tag id: 2, title: "ruby">]
215
173
  Tag.all
216
174
  # => [#<Tag id: 1, title: "ruby">, #<Tag id: 2, title: "python">]
217
175
 
218
176
  Posting.first.destroy
219
177
 
220
- Tag.all # => [#<Tag id: 1, title: "ruby">]
178
+ Tag.all
179
+ # => [#<Tag id: 1, title: "ruby">]
221
180
  ```
222
181
 
223
182
  Contributing
@@ -22,6 +22,6 @@ Gem::Specification.new do |gem|
22
22
  gem.add_development_dependency 'rake', '~> 10'
23
23
  gem.add_development_dependency 'rspec', '~> 2.14'
24
24
  gem.add_development_dependency 'sqlite3', '~> 1.3'
25
- gem.add_development_dependency 'activerecord', '~> 3.2'
25
+ gem.add_development_dependency 'activerecord', '~> 4.2'
26
26
  end
27
27
 
@@ -27,7 +27,7 @@ module ActiveRecord
27
27
  def actual? exclude = true
28
28
  actual = 0
29
29
  self.class.dependent_relations.each do |dependent_relation|
30
- actual += self.send(dependent_relation).all.size
30
+ actual += self.send(dependent_relation).count
31
31
  end
32
32
 
33
33
  exclude ? actual > 1 : actual > 0
@@ -1,3 +1,3 @@
1
1
  module ActsHasMany
2
- VERSION = "0.3.3"
2
+ VERSION = "0.4.2"
3
3
  end
@@ -23,7 +23,7 @@ shared_examples_for 'acts_has_many' do
23
23
  expect(location).not_to eq add_loc
24
24
  expect(del_loc).to be nil
25
25
 
26
- experience.location = Location.find(add_loc)
26
+ experience.location = Location.find(add_loc.id)
27
27
  expect(experience.location.title).to eq "italy"
28
28
 
29
29
  add_loc, del_loc = experience.location.has_many_update({"title" => "ukraine"})
@@ -35,7 +35,7 @@ shared_examples_for 'acts_has_many' do
35
35
  it "parent.child_attributes= Hash" do
36
36
  experience = Experience.create location_attributes: {title: "ukraine"}, title: "test experience2"
37
37
 
38
- Location.all.size.should be 1
38
+ expect(Location.all.size).to be 1
39
39
  experience.location.title.should eq "ukraine"
40
40
 
41
41
  Experience.create location_attributes: {title: "ukraine"}, title: "test experience2"
metadata CHANGED
@@ -1,92 +1,92 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_has_many
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor IS04
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-22 00:00:00.000000000 Z
11
+ date: 2016-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.5'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.5'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '2.14'
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
54
  version: '2.14'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: sqlite3
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '1.3'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.3'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: activerecord
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '3.2'
75
+ version: '4.2'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '3.2'
82
+ version: '4.2'
83
83
  description: This gem gives functional for update elements has_many relation
84
84
  email: igor.s04g@gmail.com
85
85
  executables: []
86
86
  extensions: []
87
87
  extra_rdoc_files: []
88
88
  files:
89
- - .travis.yml
89
+ - ".travis.yml"
90
90
  - Gemfile
91
91
  - LICENSE
92
92
  - README.md
@@ -112,17 +112,17 @@ require_paths:
112
112
  - lib
113
113
  required_ruby_version: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  required_rubygems_version: !ruby/object:Gem::Requirement
119
119
  requirements:
120
- - - '>='
120
+ - - ">="
121
121
  - !ruby/object:Gem::Version
122
122
  version: '0'
123
123
  requirements: []
124
124
  rubyforge_project:
125
- rubygems_version: 2.0.14
125
+ rubygems_version: 2.5.1
126
126
  signing_key:
127
127
  specification_version: 4
128
128
  summary: All records must be used, otherwise they will be deleted. Clear logic with