senro 0.2.2 → 0.6.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
  SHA256:
3
- metadata.gz: 38fdc0c7c7b0b4e1506e130a2b7534b65bc621b8bd558201b53dfc5ccdb6c0a1
4
- data.tar.gz: deeb0d935a0426342cb90b01e30ec525f8ec2c5df25dc8fe916e97ff855fa196
3
+ metadata.gz: d03ec9547965fe074c4c210218e316f029b19a3738a3135446026b12d4cb76d5
4
+ data.tar.gz: a29643e005abf21e57165cd71129b6b84c5162fb92c23002ad5e63efa5bc6a73
5
5
  SHA512:
6
- metadata.gz: 2d94d9b1cdb7bc75245b1cd09c40148298bbb1d01ada3a691a74ffcb83350c57af569db4aee592be4dafdae0748ca5b4ec34478b0a9aa43d6e408cbcb26a2da6
7
- data.tar.gz: ed0ecffc6f0bf7d1fa0a7fbfe77214f56e18adea847fc41525c76ddac0848cebb1d4a9ef67615887c2c177be95768c662afda464264198f64899774377937e56
6
+ metadata.gz: 47d1d91c1dd0b612565cdb8007240a122ad8c264214b99124781d6d48ac38f2a36887bd7d94f117ad541417e6b0dbe2e0ca80806c066867fd1e500442e9f4b12
7
+ data.tar.gz: 633d79e620191f0998b9e8c80959ee7f648a085af65c59e503e125f458ab18d10de4e2c5e34159ddadf678ccd72d859e4b929238ff5ee775062d968673cc1140
@@ -0,0 +1,17 @@
1
+ name: build
2
+ on: [push, pull_request]
3
+ jobs:
4
+ test:
5
+ strategy:
6
+ fail-fast: false
7
+ matrix:
8
+ ruby: [2.5, 2.6, 2.7, 3.0]
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v2
12
+ - uses: ruby/setup-ruby@v1
13
+ with:
14
+ ruby-version: ${{ matrix.ruby }}
15
+ bundler-cache: true
16
+ - run: bin/setup
17
+ - run: bundle exec rake spec
data/.gitignore CHANGED
@@ -12,3 +12,6 @@
12
12
 
13
13
  /vendor/
14
14
  Gemfile.lock
15
+ /spec/senro/dummy/tmp/
16
+ /spec/senro/dummy/log/
17
+ spec/senro/dummy/db/test.sqlite3
data/.pryrc ADDED
@@ -0,0 +1,7 @@
1
+ if defined?(PryByebug)
2
+ Pry.commands.alias_command '_c', 'continue'
3
+ Pry.commands.alias_command '_s', 'step'
4
+ Pry.commands.alias_command '_n', 'next'
5
+ Pry.commands.alias_command '_f', 'finish'
6
+ Pry.commands.alias_command '_w', 'whereami'
7
+ end
data/.rspec CHANGED
@@ -1,3 +1,3 @@
1
1
  --format documentation
2
2
  --color
3
- --require spec_helper
3
+ --require rails_helper
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.5
data/CHANGELOG.md ADDED
@@ -0,0 +1,32 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+
9
+ ---
10
+
11
+ ## [0.6.0] - 2021-05-17
12
+ ### Fixed
13
+ - [#12](https://github.com/walkersumida/senro/pull/12) Change response values when params are empty
14
+
15
+ ### Security
16
+ - [#9](https://github.com/walkersumida/senro/pull/9) Update rake gem
17
+
18
+ ## [0.5.1] - 2020-04-16
19
+ ### Fixed
20
+ - [#8](https://github.com/walkersumida/senro/pull/8) Fix a datetime status bug
21
+
22
+ ## [0.5.0] - 2020-04-16
23
+ ### Changed
24
+ - [#7](https://github.com/walkersumida/senro/pull/7) Change return values from string to hash
25
+
26
+ ## [0.4] - 2020-02-22
27
+ ### Added
28
+ - [#6](https://github.com/walkersumida/senro/pull/6) Add `query_params_formatter_query` method
29
+
30
+ ## [0.3] - 2020-01-19
31
+ ### Added
32
+ - [#4](https://github.com/walkersumida/senro/pull/4) Add `query_params_formatter_sort` method
data/Gemfile CHANGED
@@ -4,3 +4,5 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in senro.gemspec
6
6
  gemspec
7
+
8
+ gem 'pry-byebug', platforms: :ruby
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Senro
2
2
 
3
- [![Build Status](https://travis-ci.org/walkersumida/senro.svg?branch=master)](https://travis-ci.org/walkersumida/senro)
3
+ ![Build Status](https://github.com/walkersumida/senro/workflows/build/badge.svg?branch=master)
4
4
  [![Gem Version](https://badge.fury.io/rb/senro.svg)](https://badge.fury.io/rb/senro)
5
5
 
6
6
  ## Installation
@@ -20,18 +20,46 @@ Or install it yourself as:
20
20
  $ gem install senro
21
21
 
22
22
  ## Usage
23
- ### QueryParamsFormatter#sort
23
+ ### in Rails
24
+ #### format sort
24
25
 
25
26
  ```ruby
26
- puts params[:sort]
27
- # => '+id,-name'
27
+ class ApplicationController < ActionController::Base # or ::API class
28
+ include Senro::Controller
29
+ before_action :query_params_formatter_sort
30
+ end
28
31
 
29
- order_clause = Senro::QueryParamsFormatter.sort(params[:sort])
30
32
 
31
- puts order_clause
32
- # => 'id ASC, name DESC'
33
+ pp params['sort']
34
+ # => { id: 'asc', name: 'desc' }
35
+ pp params['original_sort']
36
+ # => 'id,-name'
33
37
 
34
- @items = Item.all.order(order_clause)
38
+ # e.g. in ActiveRecord
39
+ @items = Item.all.order(params['sort'])
40
+
41
+ # e.g. in Mongoid
42
+ @items = Item.all.order_by(params['sort'])
43
+ ```
44
+
45
+ #### format query
46
+
47
+ ```ruby
48
+ class ApplicationController < ActionController::Base # or ::API class
49
+ include Senro::Controller
50
+ before_action :query_params_formatter_query
51
+ end
52
+
53
+
54
+ pp params['q']
55
+ # => { 'query' => 'senro gem', 'status' => { 'type' => ['pr'], 'is' => ['open'], 'label' => ['bug', 'ready'] } }
56
+ pp params['original_q']
57
+ # => 'type:pr is:open label:bug label:ready senro gem'
58
+
59
+ # e.g.
60
+ @items = Item.where(title: params['q']['query'],
61
+ type: params['q']['status']['type'],
62
+ status: params['q']['status']['is'])
35
63
  ```
36
64
 
37
65
  ## Development
data/lib/senro.rb CHANGED
@@ -2,6 +2,7 @@ require 'active_support/core_ext'
2
2
 
3
3
  require "senro/version"
4
4
  require 'senro/query_params_formatter'
5
+ require 'senro/controller'
5
6
 
6
7
  module Senro
7
8
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Senro #:nodoc:
4
+ module Controller
5
+ include Senro::QueryParamsFormatter
6
+
7
+ def query_params_formatter_sort
8
+ params[:original_sort] = params[:sort].clone
9
+ params[:sort] = Senro::QueryParamsFormatter.sort(params[:sort])
10
+ end
11
+
12
+ def query_params_formatter_query
13
+ params[:original_q] = params[:q].clone
14
+ params[:q] = Senro::QueryParamsFormatter.query(params[:q])
15
+ end
16
+ end
17
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Senro
4
- class QueryParamsFormatter
4
+ module QueryParamsFormatter
5
5
  # Format RESTful API's query params to SQL order clause.
6
6
  # +: asc
7
7
  # -: desc
@@ -12,14 +12,39 @@ module Senro
12
12
  # @param param [String] format string. e.g. `+id,-name`
13
13
  # @return [String] formated stirng
14
14
  def self.sort(param)
15
+ return {} if param.blank?
16
+
15
17
  attributes = param.split(',')
16
- attributes.map do |attr|
18
+ attributes.each_with_object({}) do |attr, hash|
17
19
  if /^\-/.match(attr).nil?
18
- "#{attr.strip.gsub(/^\+/, '').underscore} ASC"
20
+ hash[attr.strip.gsub(/^\+/, '').underscore.to_sym] = 'asc'
21
+ else
22
+ hash[attr.strip.gsub(/^\-/, '').underscore.to_sym] = 'desc'
23
+ end
24
+ end
25
+ end
26
+
27
+ # Format RESTful API's query params to SQL where clause.
28
+ #
29
+ # And convert camel case attributes to snake case one.
30
+ #
31
+ # @param param [String] format string. e.g. `is:open is:close senro gem`
32
+ # @return [String] formated stirng
33
+ def self.query(param)
34
+ data = { query: ''.dup, status: {} }
35
+
36
+ return data if param.blank?
37
+
38
+ elements = param.split(' ')
39
+ elements.each_with_object(data) do |ele, h|
40
+ if ele.include? ':'
41
+ ary = ele.split(':', 2)
42
+ h[:status][ary[0].underscore.to_sym] =
43
+ Array(h[:status][ary[0].underscore.to_sym]) << ary[1]
19
44
  else
20
- "#{attr.strip.gsub(/^\-/, '').underscore} DESC"
45
+ h[:query] << (h[:query] == '' ? ele : " #{ele}")
21
46
  end
22
- end.join(', ')
47
+ end
23
48
  end
24
49
  end
25
50
  end
data/lib/senro/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Senro
4
- VERSION = '0.2.2'
4
+ VERSION = '0.6.0'
5
5
  end
data/senro.gemspec CHANGED
@@ -23,10 +23,13 @@ Gem::Specification.new do |spec|
23
23
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
24
  spec.require_paths = ["lib"]
25
25
 
26
- spec.add_development_dependency "bundler", "~> 1.17"
27
- spec.add_development_dependency "rake", "~> 10.0"
28
- spec.add_development_dependency "rspec", "~> 3.0"
26
+ spec.add_development_dependency "rake", ">= 12.3.3"
27
+ spec.add_development_dependency "rspec-rails", '~> 4.0'
28
+ spec.add_development_dependency "rails", ">= 5"
29
+ spec.add_development_dependency "sqlite3"
30
+ spec.add_development_dependency 'pry'
29
31
 
30
32
  spec.required_ruby_version = '>= 2.5'
31
33
  spec.add_runtime_dependency('activesupport', '>= 5')
34
+ spec.add_runtime_dependency('actionpack', '>= 5')
32
35
  end
metadata CHANGED
@@ -1,57 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: senro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - WalkerSumida
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-19 00:00:00.000000000 Z
11
+ date: 2021-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.17'
19
+ version: 12.3.3
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
- version: '1.17'
26
+ version: 12.3.3
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: rspec-rails
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '4.0'
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
- version: '10.0'
40
+ version: '4.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec
42
+ name: rails
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '5'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sqlite3
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
- version: '3.0'
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: activesupport
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +94,20 @@ dependencies:
66
94
  - - ">="
67
95
  - !ruby/object:Gem::Version
68
96
  version: '5'
97
+ - !ruby/object:Gem::Dependency
98
+ name: actionpack
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '5'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '5'
69
111
  description: Library for RESTful API
70
112
  email:
71
113
  - walkersumida@gmail.com
@@ -73,9 +115,12 @@ executables: []
73
115
  extensions: []
74
116
  extra_rdoc_files: []
75
117
  files:
118
+ - ".github/workflows/build.yml"
76
119
  - ".gitignore"
120
+ - ".pryrc"
77
121
  - ".rspec"
78
- - ".travis.yml"
122
+ - ".ruby-version"
123
+ - CHANGELOG.md
79
124
  - CODE_OF_CONDUCT.md
80
125
  - Dockerfile
81
126
  - Gemfile
@@ -86,6 +131,7 @@ files:
86
131
  - bin/setup
87
132
  - docker-compose.yml
88
133
  - lib/senro.rb
134
+ - lib/senro/controller.rb
89
135
  - lib/senro/query_params_formatter.rb
90
136
  - lib/senro/version.rb
91
137
  - senro.gemspec
@@ -93,7 +139,7 @@ homepage: https://github.com/walkersumida/senro
93
139
  licenses:
94
140
  - MIT
95
141
  metadata: {}
96
- post_install_message:
142
+ post_install_message:
97
143
  rdoc_options: []
98
144
  require_paths:
99
145
  - lib
@@ -109,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
155
  version: '0'
110
156
  requirements: []
111
157
  rubygems_version: 3.0.3
112
- signing_key:
158
+ signing_key:
113
159
  specification_version: 4
114
160
  summary: Library for RESTful API
115
161
  test_files: []
data/.travis.yml DELETED
@@ -1,17 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.5
7
- - 2.6
8
-
9
- before_install:
10
- - gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
11
- - gem install bundler -v 1.17.2
12
-
13
- before_script:
14
- - docker-compose up -d
15
-
16
- after_script:
17
- - docker-compose down