senro 0.2.2 → 0.6.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
  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