kashiwamochi 0.4.3 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9f9f22b3c12ccc37765e82e8ff5b194375a52b9c
4
+ data.tar.gz: 9d573b7fddf42d4606a51d70e37cc85fe0a8d25d
5
+ SHA512:
6
+ metadata.gz: 3d9853214c276ebd53fa8ba935dbb18f7d98f379c04dc61c15f590ae9dae2c581c4b71d6e29f0b1f7337e976626f143c667a20756dd690abafe8eb4538ea0625
7
+ data.tar.gz: 7270e911ac99bfbf069eeab9e33f4392be782e7e34c0e337c17af2c13d1da3863d199715f4029146b7f876abdf30271f70c17ad37c1fce4f9c2a541dd653bc35
data/README.md CHANGED
@@ -15,6 +15,7 @@ gem 'kashiwamochi'
15
15
 
16
16
  ### In your controllers
17
17
 
18
+ #### Build query
18
19
  ```ruby
19
20
  # use before_filter.
20
21
  before_filter :build_query!, :only => [:index]
@@ -22,9 +23,18 @@ before_filter :build_query!, :only => [:index]
22
23
  # or write directly.
23
24
  def index
24
25
  @q = Kashiwamochi.build(params[:q])
25
- @users = User.where(:name => @q.name)
26
26
  end
27
+ ```
28
+
29
+ #### Use query
30
+ ```ruby
31
+ # basic
32
+ @users = User.where(:name => @q.name)
33
+ .order(@q.sorts(:age))
27
34
 
35
+ # mapped order
36
+ @users = User.where(:name => @q.name)
37
+ .order(@q.sorts(:age => 'years'))
28
38
  ```
29
39
 
30
40
  ### In your views
@@ -6,8 +6,8 @@ module Kashiwamochi
6
6
  attr_reader :search_params, :sort_params
7
7
 
8
8
  def initialize(attributes = {})
9
- @search_params = ActiveSupport::OrderedHash.new.with_indifferent_access
10
- @sort_params = ActiveSupport::OrderedHash.new.with_indifferent_access
9
+ @search_params = {}.with_indifferent_access
10
+ @sort_params = {}.with_indifferent_access
11
11
  sort_key = Kashiwamochi.config.sort_key.to_s
12
12
 
13
13
  attributes.each do |key, value|
@@ -62,24 +62,25 @@ module Kashiwamochi
62
62
  end
63
63
  end
64
64
 
65
- def sorts_query(*keys)
66
- options = keys.extract_options!
65
+ def sorts_query(*args)
66
+ if args.first.is_a? Hash
67
+ params = args.first
68
+ else
69
+ params = Hash[*args.map { |v| [v, v] }.flatten]
70
+ end
67
71
 
68
- allowed_keys = keys.flatten.map(&:to_s).uniq
72
+ params.stringify_keys!
69
73
  allowed_sorts = []
70
74
 
71
- unless allowed_keys.empty?
72
- if options[:unordered]
73
- allowed_sorts = @sort_params.values
74
- allowed_sorts.reject! { |s| !allowed_keys.include?(s.key.to_s) }
75
- else
76
- allowed_keys.each { |key| allowed_sorts << @sort_params[key] if @sort_params.key? key }
77
- end
78
- else
75
+ if params.empty?
79
76
  allowed_sorts = @sort_params.values
77
+ else
78
+ allowed_sorts = params.keys.map { |k| @sort_params[k] }
79
+ allowed_sorts.reject! { |s| s.nil? }
80
80
  end
81
81
 
82
- allowed_sorts.empty? ? nil : allowed_sorts.map(&:to_query).join(', ')
82
+ return nil if allowed_sorts.empty?
83
+ allowed_sorts.map { |s| s.to_query(params[s.key]) }.join(', ')
83
84
  end
84
85
  alias_method :sorts, :sorts_query
85
86
 
@@ -44,8 +44,8 @@ module Kashiwamochi
44
44
  !@key.empty?
45
45
  end
46
46
 
47
- def to_query
48
- "#{key} #{dir}"
47
+ def to_query(map = nil)
48
+ "#{map || key} #{dir}"
49
49
  end
50
50
 
51
51
  def inspect
@@ -1,3 +1,3 @@
1
1
  module Kashiwamochi
2
- VERSION = "0.4.3"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -40,7 +40,7 @@ describe Kashiwamochi::Query do
40
40
  context "build with {:s => ['name asc', ' ', 'created_at desc']}" do
41
41
  context 'default' do
42
42
  before { @q = Kashiwamochi::Query.new(:s => ['name asc', ' ', 'created_at desc']) }
43
- subject { @q.sorts_query(keys) }
43
+ subject { @q.sorts_query(*keys) }
44
44
 
45
45
  context 'with empty' do
46
46
  let(:keys) { [] }
@@ -73,18 +73,18 @@ describe Kashiwamochi::Query do
73
73
  end
74
74
  end
75
75
 
76
- context 'unordered' do
76
+ context 'mapping' do
77
77
  before { @q = Kashiwamochi::Query.new(:s => ['name asc', ' ', 'created_at desc']) }
78
- subject { @q.sorts_query(keys, :unordered => true) }
78
+ subject { @q.sorts_query(*keys) }
79
79
 
80
- context 'with [:name, :created_at]' do
81
- let(:keys) { [:name, :created_at] }
82
- it { should eq 'name asc, created_at desc' }
80
+ context "with :name => 'mapped_name'" do
81
+ let(:keys) { {:name => 'mapped_name'} }
82
+ it { should eq 'mapped_name asc' }
83
83
  end
84
84
 
85
- context 'with [:created_at, :name]' do
86
- let(:keys) { [:created_at, :name] }
87
- it { should eq 'name asc, created_at desc' }
85
+ context "with :created_at => 'mapped_created_at', :name => 'mapped_name'" do
86
+ let(:keys) { {:created_at => 'mapped_created_at', :name => 'mapped_name'} }
87
+ it { should eq 'mapped_created_at desc, mapped_name asc' }
88
88
  end
89
89
  end
90
90
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kashiwamochi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
5
- prerelease:
4
+ version: 0.5.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - mashiro
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-08-21 00:00:00.000000000 Z
11
+ date: 2013-06-18 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: railties
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: activerecord
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,65 +41,57 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: sqlite3
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rake
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rspec
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: rspec-rails
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  description: Searching form and sorting query builder
@@ -142,32 +129,25 @@ files:
142
129
  - spec/spec_helper.rb
143
130
  homepage: https://github.com/mashiro/kashiwamochi
144
131
  licenses: []
132
+ metadata: {}
145
133
  post_install_message:
146
134
  rdoc_options: []
147
135
  require_paths:
148
136
  - lib
149
137
  required_ruby_version: !ruby/object:Gem::Requirement
150
- none: false
151
138
  requirements:
152
- - - ! '>='
139
+ - - '>='
153
140
  - !ruby/object:Gem::Version
154
141
  version: '0'
155
- segments:
156
- - 0
157
- hash: -4114840748124176109
158
142
  required_rubygems_version: !ruby/object:Gem::Requirement
159
- none: false
160
143
  requirements:
161
- - - ! '>='
144
+ - - '>='
162
145
  - !ruby/object:Gem::Version
163
146
  version: '0'
164
- segments:
165
- - 0
166
- hash: -4114840748124176109
167
147
  requirements: []
168
148
  rubyforge_project: kashiwamochi
169
- rubygems_version: 1.8.21
149
+ rubygems_version: 2.0.0
170
150
  signing_key:
171
- specification_version: 3
151
+ specification_version: 4
172
152
  summary: Minimal searchng extension for Rails 3
173
153
  test_files: []