simple_json 0.0.0 → 0.1.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: 6a953753f69b04c130d99f00368fbc35f914b6017ae0dda0a61c9f10444b4b2b
4
- data.tar.gz: 239878f64920bd695cac483c9b26106442eab3fa0f46e5c7d90e8caa4295de96
3
+ metadata.gz: a56e99e174ee5d2165009b5f97816af1dd98b339a8374cfdb2adc6ee60d0def3
4
+ data.tar.gz: 8dd4dafd8bc2cbaf05e6f54b86397917270ff971f03a041b85c6832b2061c294
5
5
  SHA512:
6
- metadata.gz: 78466fb47ace2acc5c4470b2bc38b0b81d0c0aa0dd0018429259fcbe5be8604d98178f00e58a93b6366a774d0322edf0d349ab8801c3ee0863413da4fc3b6658
7
- data.tar.gz: f3235154d6594c49fc48ba65180f6ef80048b3d49d57a7f55cff933e95eb5409172dc8e002b0f48ef93db5afb57c2362a2ea1d0d99bf4f3738e3fff2f4718cfc
6
+ metadata.gz: 1735930768817f1ed0d1bb22771e084ee782573e8c32d1386bb38862f4b8d2cff3dfa0c982873bf5b6a04d1d4ab0590c4031e1af3dbd9d2819b0bb15e4b32205
7
+ data.tar.gz: f4f8f62d99abcf3a0534dcc54830f2d93aa8bcb1b70ebaecea8fc83ba0c7bdc95afc9ccfe42a4b36d4b4774a5512e4da5d14c49cab4d4ae5d48cdbe687a5de36
@@ -6,52 +6,18 @@ jobs:
6
6
  build:
7
7
  strategy:
8
8
  matrix:
9
- ruby_version: ['3.0', '2.7', '2.6']
10
-
11
- gemfile:
12
- - gemfiles/rails_61.gemfile
13
- - gemfiles/rails_60.gemfile
14
-
15
- include:
16
- - ruby_version: ruby-head
17
- gemfile: gemfiles/rails_edge.gemfile
18
- allow_failures: 'true'
19
- - ruby_version: '3.0'
20
- gemfile: gemfiles/rails_edge.gemfile
21
- allow_failures: 'true'
22
-
23
- - ruby_version: '2.7'
24
- gemfile: gemfiles/rails_edge.gemfile
25
- allow_failures: 'true'
26
-
27
- - ruby_version: '2.6'
28
- gemfile: gemfiles/rails_52.gemfile
29
- - ruby_version: '2.6'
30
- gemfile: gemfiles/rails_51.gemfile
31
- - ruby_version: '2.6'
32
- gemfile: gemfiles/rails_50.gemfile
33
- - ruby_version: '2.6'
34
- gemfile: gemfiles/rails_42.gemfile
35
- bundler_version: '1'
36
-
37
- - ruby_version: '2.5'
38
- gemfile: gemfiles/rails_52.gemfile
39
- - ruby_version: '2.5'
40
- gemfile: gemfiles/rails_42.gemfile
41
- bundler_version: '1'
9
+ ruby: ['3.2', '3.3', '3.4']
10
+ rails: ["7.1", "7.2", "8.0"]
42
11
 
43
12
  runs-on: ubuntu-latest
44
13
 
45
14
  env:
46
- BUNDLE_GEMFILE: ${{ matrix.gemfile }}
15
+ BUNDLE_GEMFILE: gemfiles/rails_${{ matrix.rails }}.gemfile
47
16
 
48
17
  steps:
49
- - uses: actions/checkout@v2
18
+ - uses: actions/checkout@v4
50
19
  - uses: ruby/setup-ruby@v1
51
20
  with:
52
- ruby-version: ${{ matrix.ruby_version }}
53
- bundler: ${{ matrix.bundler_version }}
21
+ ruby-version: ${{ matrix.ruby }}
54
22
  bundler-cache: true
55
- continue-on-error: ${{ matrix.allow_failures == 'true' }}
56
23
  - run: bundle exec rake
57
- continue-on-error: ${{ matrix.allow_failures == 'true' }}
data/README.md CHANGED
@@ -1,13 +1,17 @@
1
1
  # SimpleJson
2
+
2
3
  A simple & fast solution for Rails JSON rendering.
3
4
 
4
5
  ## Get started
6
+
5
7
  In Gemfile
8
+
6
9
  ```ruby
7
10
  gem 'simple_json'
8
11
  ```
9
12
 
10
13
  In controller
14
+
11
15
  ```ruby
12
16
  class ApplicationController < ActionController::Base
13
17
  include SimpleJson::SimpleJsonRenderable
@@ -44,10 +48,13 @@ That's all!
44
48
  Have fun!
45
49
 
46
50
  ## Special thanks
51
+
47
52
  This project is built on work of [jb](https://github.com/amatsuda/jb).
48
53
 
49
54
  ## Template Syntax
55
+
50
56
  SimpleJson templates are simply lambda objects that return data(Hashes or Arrays) for json.
57
+
51
58
  ```ruby
52
59
  -> {
53
60
  {
@@ -55,7 +62,9 @@ SimpleJson templates are simply lambda objects that return data(Hashes or Arrays
55
62
  }
56
63
  }
57
64
  ```
65
+
58
66
  When no parameters specified, `-> {` and `}` can be omitted.
67
+
59
68
  ```ruby
60
69
  {
61
70
  key: @value,
@@ -82,14 +91,16 @@ Use `partial!` method to call another template in template. Note that path is al
82
91
  }
83
92
  ```
84
93
 
85
- Cache helpers of jbuilder is similar.
94
+ Cache helpers of simple_json is similar to jbuilder.
95
+
86
96
  ```ruby
87
97
  cache! key, options do
88
98
  data_to_cache
89
99
  end
90
100
  ```
91
101
 
92
- Cache helpers uses `Rails.cache` to cache, so Multiple key, expiration is available. Make sure `perform_caching` is enabled.
102
+ Cache helpers uses `Rails.cache` to cache, so array keys, expirations are available. Make sure `perform_caching` is enabled.
103
+
93
104
  ```ruby
94
105
  cache! [key1, key2], expires_in: 10.minutes do
95
106
  data_to_cache
@@ -97,6 +108,7 @@ end
97
108
  ```
98
109
 
99
110
  `cache_if!` is also available
111
+
100
112
  ```ruby
101
113
  cache_if! boolean, key1, options do
102
114
  data_to_cache
@@ -104,41 +116,68 @@ end
104
116
  ```
105
117
 
106
118
  You can set key_prefix for caching like this
119
+
107
120
  ```ruby
108
121
  SimpleJson.cache_key_prefix = "MY_PREFIX"
109
122
  ```
110
123
 
111
- ## configurations
124
+ ## Configurations
125
+
112
126
  Load all templates on boot. (For production)
113
127
  Templates loaded will not load again, so it is not recommended in development environment.
128
+
114
129
  ```ruby
115
130
  # config/environments/production.rb
116
131
  SimpleJson.enable_template_cache
117
132
  ```
118
133
 
119
134
  The default path for templates is `app/views`, you can change it by
135
+
120
136
  ```ruby
121
137
  SimpleJson.template_paths.append("app/simple_jsons")
122
138
  # or
123
139
  SimpleJson.template_paths=["app/views", "app/simple_jsons"]
124
140
  ```
141
+
125
142
  Note that these paths should not be eager loaded cause using .rb as suffix.
126
143
 
127
- SimpleJson uses Oj as json serializer by default. Modules with `#encode` and `#decode` method can be used here.
144
+ SimpleJson uses ActiveSupport::JSON as the default JSON serializer. If you want to change to a module that has `#encode` and `#decode` methods, such as the Oj gem, you can do so as follows.
145
+
128
146
  ```ruby
129
- SimpleJson.json_module = ActiveSupport::JSON
147
+
148
+ # define Custom Json class
149
+ # ex. config/initializers/simple_json/json.rb
150
+ module SimpleJson
151
+ module Json
152
+ class Oj
153
+ def self.encode(json)
154
+ ::Oj.dump(json, mode: :rails)
155
+ end
156
+
157
+ def self.decode(json_string)
158
+ ::Oj.load(json_string, mode: :rails)
159
+ end
160
+ end
161
+ end
162
+ end
163
+
164
+ SimpleJson.json_module = SimpleJson::Json::Oj
130
165
  ```
131
166
 
132
167
  ## The Generator
168
+
133
169
  SimpleJson extends the default Rails scaffold generator and adds some simple_json templates. If you don't need them, please configure like so.
170
+
134
171
  ```rb
135
172
  Rails.application.config.generators.simple_json false
136
173
  ```
137
174
 
138
175
  ## Benchmarks
176
+
139
177
  Here're the results of a benchmark (which you can find [here](https://github.com/aktsk/simple_json/blob/master/test/dummy_app/app/controllers/benchmarks_controller.rb) in this repo) rendering a collection to JSON.
140
178
 
141
179
  ### RAILS_ENV=development
180
+
142
181
  ```
143
182
  % ./bin/benchmark.sh
144
183
 
@@ -189,7 +228,9 @@ Comparison:
189
228
  jb: 106.1 i/s - 2.56x (± 0.00) slower
190
229
  jbuilder: 13.0 i/s - 20.88x (± 0.00) slower
191
230
  ```
231
+
192
232
  ### RAILS_ENV=production
233
+
193
234
  ```
194
235
  % RAILS_ENV=production ./bin/benchmark.sh
195
236
 
@@ -242,13 +283,16 @@ Comparison:
242
283
  ```
243
284
 
244
285
  ## Migrating from Jbuilder
286
+
245
287
  When migrating from Jbuilder, you can include `Migratable` in controller for migrating mode.
288
+
246
289
  ```
247
290
  include SimpleJson::SimpleJsonRenderable
248
291
  include SimpleJson::Migratable
249
292
  ```
250
293
 
251
294
  In migrating mode
295
+
252
296
  - Comparision will be performed for simple_json and ActionView render(Jbuilder) result.
253
297
  - simple_json partials not found will use Jbuilder partial as an alternative.
254
298
 
@@ -256,7 +300,7 @@ Note that render will be performed twice, so using it in production mode is not
256
300
 
257
301
  ## Contributing
258
302
 
259
- Pull requests are welcome on GitHub at https://github.com/aktsk/simple_json.
303
+ Pull requests are welcome on GitHub at <https://github.com/aktsk/simple_json>.
260
304
 
261
305
  ## License
262
306
 
@@ -5,5 +5,5 @@ source 'https://rubygems.org'
5
5
  gemspec path: '../'
6
6
 
7
7
  gem 'jbuilder'
8
- gem 'rails', '~> 6.0.0'
8
+ gem 'rails', '~> 7.1.0'
9
9
  gem 'selenium-webdriver'
@@ -5,5 +5,5 @@ source 'https://rubygems.org'
5
5
  gemspec path: '../'
6
6
 
7
7
  gem 'jbuilder'
8
- gem 'rails', '~> 6.1.0'
8
+ gem 'rails', '~> 7.2.0'
9
9
  gem 'selenium-webdriver'
@@ -5,4 +5,5 @@ source 'https://rubygems.org'
5
5
  gemspec path: '../'
6
6
 
7
7
  gem 'jbuilder'
8
- gem 'rails', '~> 5.1.0'
8
+ gem 'rails', '~> 8.0.0'
9
+ gem 'selenium-webdriver'
@@ -29,7 +29,7 @@ module SimpleJson
29
29
  # use super when any of [:body, :plain, :html] exist in options
30
30
  return super if self.class::RENDER_FORMATS_IN_PRIORITY.any? { |key| options.key? key }
31
31
 
32
- template_name = template_name(options[:template] || action_name)
32
+ template_name = template_name(options[:template] || options[:action] || action_name)
33
33
  if options.key?(:json)
34
34
  process_options(options)
35
35
  @rendered_format = 'application/json; charset=utf-8'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SimpleJson
4
- VERSION = '0.0.0'
4
+ VERSION = '0.1.0'
5
5
  end
data/lib/simple_json.rb CHANGED
@@ -8,14 +8,13 @@ require 'simple_json/simple_json_template'
8
8
 
9
9
  require 'simple_json/migratable'
10
10
  require 'simple_json/simple_json_renderer_for_migration'
11
- require 'simple_json/json'
12
11
 
13
12
  module SimpleJson
14
13
  @config = {
15
14
  cache_enabled: false,
16
15
  template_paths: ['app/views'],
17
16
  cache_key_prefix: 'simple_json/views',
18
- default_json_module: Json::Oj
17
+ default_json_module: ActiveSupport::JSON
19
18
  }
20
19
 
21
20
  class << self
data/simple_json.gemspec CHANGED
@@ -20,15 +20,16 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ['lib']
22
22
 
23
- spec.add_dependency 'oj', '~> 3.13'
23
+ spec.add_development_dependency 'oj'
24
24
 
25
25
  spec.add_development_dependency 'action_args'
26
26
  spec.add_development_dependency 'bundler'
27
- spec.add_development_dependency 'byebug'
28
- spec.add_development_dependency 'rails'
27
+ spec.add_development_dependency 'debug'
28
+ spec.add_development_dependency 'rails', '~> 8.0'
29
29
  spec.add_development_dependency 'rake'
30
30
  spec.add_development_dependency 'selenium-webdriver'
31
31
  spec.add_development_dependency 'test-unit-rails'
32
+ spec.add_development_dependency 'mutex_m'
32
33
 
33
- spec.required_ruby_version = '>= 2.5.0'
34
+ spec.required_ruby_version = '>= 3.2.0'
34
35
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_json
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jingyuan Zhao
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-02 00:00:00.000000000 Z
11
+ date: 2025-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.13'
20
- type: :runtime
19
+ version: '0'
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: '3.13'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: action_args
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: byebug
56
+ name: debug
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -68,6 +68,20 @@ dependencies:
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '8.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '8.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
@@ -81,7 +95,7 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: rake
98
+ name: selenium-webdriver
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
@@ -95,7 +109,7 @@ dependencies:
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: selenium-webdriver
112
+ name: test-unit-rails
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="
@@ -109,7 +123,7 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
- name: test-unit-rails
126
+ name: mutex_m
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - ">="
@@ -139,19 +153,15 @@ files:
139
153
  - bin/console
140
154
  - bin/setup
141
155
  - gemfiles/benchmark.gemfile
142
- - gemfiles/rails_42.gemfile
143
- - gemfiles/rails_50.gemfile
144
- - gemfiles/rails_51.gemfile
145
- - gemfiles/rails_52.gemfile
146
- - gemfiles/rails_60.gemfile
147
- - gemfiles/rails_61.gemfile
156
+ - gemfiles/rails_7.1.gemfile
157
+ - gemfiles/rails_7.2.gemfile
158
+ - gemfiles/rails_8.0.gemfile
148
159
  - gemfiles/rails_edge.gemfile
149
160
  - lib/generators/rails/scaffold_controller_generator.rb
150
161
  - lib/generators/rails/simple_json_generator.rb
151
162
  - lib/generators/rails/templates/index.simple_json.rb
152
163
  - lib/generators/rails/templates/show.simple_json.rb
153
164
  - lib/simple_json.rb
154
- - lib/simple_json/json.rb
155
165
  - lib/simple_json/migratable.rb
156
166
  - lib/simple_json/railtie.rb
157
167
  - lib/simple_json/simple_json_renderable.rb
@@ -164,7 +174,7 @@ homepage: https://github.com/aktsk/simple_json
164
174
  licenses:
165
175
  - MIT
166
176
  metadata: {}
167
- post_install_message:
177
+ post_install_message:
168
178
  rdoc_options: []
169
179
  require_paths:
170
180
  - lib
@@ -172,15 +182,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
172
182
  requirements:
173
183
  - - ">="
174
184
  - !ruby/object:Gem::Version
175
- version: 2.5.0
185
+ version: 3.2.0
176
186
  required_rubygems_version: !ruby/object:Gem::Requirement
177
187
  requirements:
178
188
  - - ">="
179
189
  - !ruby/object:Gem::Version
180
190
  version: '0'
181
191
  requirements: []
182
- rubygems_version: 3.0.3
183
- signing_key:
192
+ rubygems_version: 3.5.11
193
+ signing_key:
184
194
  specification_version: 4
185
195
  summary: Faster and simpler Jbuilder alternative
186
196
  test_files: []
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gemspec path: '../'
6
-
7
- gem 'jbuilder'
8
- gem 'nokogiri', RUBY_VERSION < '2.1' ? '~> 1.6.0' : '>= 1.7'
9
- gem 'rails', '~> 4.2.0'
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gemspec path: '../'
6
-
7
- gem 'jbuilder'
8
- gem 'rails', '~> 5.0.0'
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gemspec path: '../'
6
-
7
- gem 'jbuilder'
8
- gem 'rails', '~> 5.2.0'
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'oj'
4
-
5
- module SimpleJson
6
- module Json
7
- class Oj
8
- def self.encode(json)
9
- ::Oj.dump(json, mode: :rails)
10
- end
11
-
12
- def self.decode(json_string)
13
- ::Oj.load(json_string, mode: :rails)
14
- end
15
- end
16
- end
17
- end