komagire 0.1.1 → 0.2.0

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.
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: