komagire 0.1.1 → 0.2.0

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: bb494e56cf84ce9fabac8968194676ebfe7a7f78
4
- data.tar.gz: a8025f0834147ef385eedfd258f8f17098e31f1f
3
+ metadata.gz: db899ad581973f576f0ff378aa6bf9243dbdb830
4
+ data.tar.gz: d85052ab6d758f54484c5c6234225c1c500ce341
5
5
  SHA512:
6
- metadata.gz: 36a74776f1601dab5a36c425947ddd6a287adc58ef84b3e60ed170f743ce1bee3d1b900c396d9bc4082fdb5917e485e80c992b5a2248bc28549f34af96581232
7
- data.tar.gz: d72a91de731986192454056dea70f368428aba6728c9f553c8a8a2397f1d89278a3f5ed8c4925d04fbadcbe1f4e90054aa0c57767bf761bee982a3e2019943cc
6
+ metadata.gz: c02f65725a2f9eb47c3f43f434763fd4aa03156fabec83ff6878668c136955f16c4c718cec45ba0ce9888c3efc0e60feace1adc8d317c8c40225ccae51de4df3
7
+ data.tar.gz: 8e6e6cafecf88af7b47626f971ea8b41dc556d6d2fbaac9b309057921f99a5a92e1ec91dbe6b8be45061d8694ceb70aa1245b7404b0c5858ca5e821d3ca61280
@@ -0,0 +1,13 @@
1
+ ## Unreleased
2
+
3
+ ## 0.2.0
4
+
5
+ - Add sort option for comma separated keys order (default: false)
6
+
7
+ ## 0.1.1
8
+
9
+ - Drop id_list to_i conversion, because there are cases when PK is not integer (#1)
10
+
11
+ ## 0.1.0
12
+
13
+ - Initial release
data/README.md CHANGED
@@ -36,7 +36,7 @@ Tag.create(id: 2, name: 'perl')
36
36
  Tag.create(id: 3, name: 'java')
37
37
 
38
38
  class Post < ActiveRecord::Base
39
- composed_of_komagire_key_list :tags, :tag_names, 'Tag', :name, komagire: {delimiter: '|'}
39
+ composed_of_komagire_key_list :tags, :tag_names, 'Tag', :name, komagire: {delimiter: '|', sort: true}
40
40
  end
41
41
 
42
42
  post = Post.new
@@ -51,7 +51,7 @@ Compose an object from comma separated ids.
51
51
 
52
52
  ```ruby
53
53
  class Post < ActiveRecord::Base
54
- composed_of_komagire_id_list :tags, :tag_ids, 'Tag'
54
+ composed_of_komagire_id_list :tags, :tag_ids, 'Tag', komagire: {sort: true}
55
55
  end
56
56
 
57
57
  post = Post.new
@@ -71,7 +71,7 @@ post.tags = %w[1 2] # array of string
71
71
  post.tags = [1, 2] # array of integer(id)
72
72
  post.tags = [Tag.find(1), Tag.find(2)] # array of Tag
73
73
  post.tags = Tag.where(id: [1, 2]) # ActiveRecord::Relation
74
- post.tags = Komagire::IdList.new('Tag', '1,2') # same object
74
+ post.tags = Komagire::IdList.new('Tag', '1,2', sort: true) # same object
75
75
  ```
76
76
 
77
77
  ## Development
@@ -26,7 +26,12 @@ module Komagire
26
26
  def _find_by_cskeys
27
27
  ancestors = content_class_name.constantize.ancestors.map(&:to_s)
28
28
  if ancestors.include?('ActiveHash::Base')
29
- _keys.map { |id| content_class_name.constantize.find_by_id(id) }.compact
29
+ values = _keys.map { |id| content_class_name.constantize.find_by_id(id) }.compact
30
+ if @sort
31
+ values.sort_by { |v| v.id }
32
+ else
33
+ values
34
+ end
30
35
  else
31
36
  super
32
37
  end
@@ -17,6 +17,7 @@ module Komagire
17
17
  @content_class_name = content_class_name
18
18
  @attribute = attribute
19
19
  @delimiter = options[:delimiter] || Komagire::DEFAULT_DELIMITER
20
+ @sort = options[:sort] || false
20
21
  @cskeys = _convert(cskeys)
21
22
  super(_find_by_cskeys)
22
23
  end
@@ -25,7 +26,8 @@ module Komagire
25
26
  #
26
27
  # @return [String]
27
28
  def cskeys
28
- ([''] + map(&@attribute).sort.uniq + ['']).join(@delimiter)
29
+ key_values = compact.map(&@attribute).uniq.tap {|values| values.sort! if @sort }
30
+ ([''] + key_values + ['']).join(@delimiter)
29
31
  end
30
32
 
31
33
  def freeze
@@ -44,11 +46,16 @@ module Komagire
44
46
  end
45
47
 
46
48
  def _keys
47
- @cskeys.split(@delimiter).sort.uniq
49
+ @cskeys.split(@delimiter).uniq
48
50
  end
49
51
 
50
52
  def _find_by_cskeys
51
- content_class_name.constantize.where(@attribute => _keys)
53
+ values = content_class_name.constantize.where(@attribute => _keys).compact
54
+ if @sort
55
+ values.sort_by { |v| v.public_send(@attribute) }
56
+ else
57
+ values.index_by { |v| v.public_send(@attribute).to_s }.values_at(*_keys)
58
+ end
52
59
  end
53
60
 
54
61
  class Converter
@@ -1,3 +1,3 @@
1
1
  module Komagire
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: komagire
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takumi IINO
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-07 00:00:00.000000000 Z
11
+ date: 2016-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -132,6 +132,7 @@ files:
132
132
  - ".gitignore"
133
133
  - ".rspec"
134
134
  - ".travis.yml"
135
+ - CHANGELOG.md
135
136
  - CODE_OF_CONDUCT.md
136
137
  - Gemfile
137
138
  - LICENSE.txt
@@ -166,9 +167,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
167
  version: '0'
167
168
  requirements: []
168
169
  rubyforge_project:
169
- rubygems_version: 2.4.5
170
+ rubygems_version: 2.4.5.1
170
171
  signing_key:
171
172
  specification_version: 4
172
173
  summary: Compose an object from comma separated keys.
173
174
  test_files: []
174
- has_rdoc: