ez-settings 0.1.1 → 0.1.2

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: caf64937214857f2b1dae105981ff36cbda1846b
4
- data.tar.gz: 147fa9ad163b13f6e18f4eead814ab69bd19f961
3
+ metadata.gz: 9803a79f83de53644a0f14d809bd72a33622b58a
4
+ data.tar.gz: 3f29121922ee1fd0140b763e24a85d5176f3d010
5
5
  SHA512:
6
- metadata.gz: eb1ee85874297af4074545beb08ef06cea1f798940c7b1a5cfae8b5121f657b0a6bbac614c4932add6164b44d8112aff39128bf84355ba9a57cd7390c059203f
7
- data.tar.gz: 61419a186371abcf55d158572f54f1465438510cefcc5fa2df03975108300c41912d63bf7f7eebf03754e4c64645140f71fd3dbb8e12c13ce7dfb6fbc4529903
6
+ metadata.gz: 273e190f3bdc066ab05c8316e84c9f64dcd3bc263560052c1d597b8518cc7f97a488e5b88abd053109d967866c6317b59ab5b882c5bd26c79d44f36108dea3dc
7
+ data.tar.gz: a4b530afaecbf6c8227e571b8555cfe3bfad8d919803b259ecc5c8dd7e7e34d239d3f7b4fbb74452dec8a167c354380c7771d91a161e90532b41838c155d3e45
data/README.md CHANGED
@@ -8,11 +8,15 @@
8
8
  - Convetion over configuration principles.
9
9
  - Depends on [ez-core](https://github.com/ez-engines/ez-core)
10
10
 
11
+ If you are boring to read all this stuff maybe this video motivates you:
12
+
13
+ [YouTube demonstrates how easy we integrated ez-settings for our pivorak-web-app only by ±50 lines of code](https://www.youtube.com/watch?v=TiX0QDHEaKA&feature=youtu.be)
14
+
11
15
  ## Installation
12
16
  Add this line to your application's Gemfile:
13
17
 
14
18
  ```ruby
15
- gem 'ez-settings'
19
+ gem 'ez-settings', '~> 0.1'
16
20
  ```
17
21
 
18
22
  And then execute:
@@ -25,16 +29,15 @@ Or install it yourself as:
25
29
  $ gem install ez-settings
26
30
  ```
27
31
 
28
- ## Setup
29
-
30
- ### Initializer
32
+ and `bundle install`
31
33
 
32
- Create initializer: `config/initializers/ez_settings.rb` (rails generator would be added in 0.2 version)
34
+ ### Initialize
33
35
 
34
- If you are boring to read all this stuff maybe this video motivates you:
36
+ `rails generate ez:settings:install`
35
37
 
36
- [YouTube demonstrates how easy we integrated ez-settings for our pivorak-web-app only by ±50 lines of code](https://www.youtube.com/watch?v=TiX0QDHEaKA&feature=youtu.be)
38
+ Generates initializer config file and I18n yaml file with english keys
37
39
 
40
+ `config/ez_settings.rb`
38
41
  ```ruby
39
42
  # By default engine try to inherit from ApplicationController, but you could change this:
40
43
  # Ez::Settings.config.base_controller = 'Admin::BaseController'
@@ -44,10 +47,9 @@ If you are boring to read all this stuff maybe this video motivates you:
44
47
  #
45
48
  # Interface DSL allows you to do this very declaratively
46
49
  #
47
- #
48
50
  app = Ez::Settings::Interface.define :app do # :app - interface name
49
- group :general do # :general will be name of the group
50
- key :app_title, default: -> { 'Main app title' } # :app_title will be as settings key name for store value in :general group for :app interface
51
+ group :general do # :general - name of the group
52
+ key :app_title, default: -> { 'Main app title' } # :app_title - key name for store value in :general group for :app interface
51
53
  end
52
54
 
53
55
  # And so on...
@@ -121,16 +123,18 @@ app.configure do |config|
121
123
  # }
122
124
  end
123
125
 
124
- # EzSettings uses Ez::Registry from ez-core lib for storing all knowledges in one place.
126
+ # Ez::Settings uses Ez::Registry from ez-core lib for storing all knowledges in one place.
125
127
  # This place is registry records for :settings_interfaces registry
126
128
  #
127
129
  # Register `app` variable as settings interface
128
- Ez::Registry.in(:settings_interfaces, by: PivorakWebApp) do |registry|
130
+ Ez::Registry.in(:settings_interfaces, by: 'YourAppName') do |registry|
129
131
  registry.add app
130
132
  end
131
133
  ```
134
+
132
135
  ### Routes
133
136
  `config/routes.rb`
137
+
134
138
  ```ruby
135
139
  Rails.application.routes.draw do
136
140
  # your routes code before
@@ -226,7 +230,6 @@ If you need, create locale file with this structure:
226
230
 
227
231
  ## TODO
228
232
  This features will be implemented in upcoming 0.2 and 0.3 releases:
229
- - `rails g ez:settings:install` it creates `config/ez_settings.rb` and `config/locales/ez-settings.en.yml`
230
233
  - Scoped settings (`:scope_id`, `:scope_type`)
231
234
  - groups as defined methods for interface
232
235
  - controller before actions as configured callbacks
@@ -234,8 +237,8 @@ This features will be implemented in upcoming 0.2 and 0.3 releases:
234
237
  - Allow to config endpoints
235
238
  - Interface description (and show at UI)
236
239
  - Groups description (and show at UI)
237
- - Database storage as backend
238
- - Redis storage as backend
240
+ - Database storage as backend (ActiveRecord)
241
+ - Redis storage as backend (RedisRb)
239
242
 
240
243
  ## Contributing
241
244
  Fork => Fix => MR warmly welcomed!
@@ -1,5 +1,5 @@
1
1
  module Ez
2
2
  module Settings
3
- VERSION = '0.1.1'
3
+ VERSION = '0.1.2'
4
4
  end
5
5
  end
@@ -1 +1,131 @@
1
- # TODO @VS [0.2]
1
+ module Ez::Settings
2
+ class InstallGenerator < Rails::Generators::Base
3
+ def create_initializer_file
4
+ create_file "config/initializers/ez_settings.rb",
5
+ "# By default engine try to inherit from ApplicationController, but you could change this:
6
+ # Ez::Settings.config.base_controller = 'Admin::BaseController'
7
+ #
8
+ # Then you should define settings interfaces (you can create as much as you need)
9
+ # Ierachy is pretty simple: Interface -> Group -> Key
10
+ #
11
+ # Interface DSL allows you to do this very declaratively
12
+ #
13
+ app = Ez::Settings::Interface.define :app do # :app - interface name
14
+ group :general do # :general - name of the group
15
+ key :app_title, default: -> { 'Main app title' } # :app_title - key name for store value in :general group for :app interface
16
+ end
17
+
18
+ # And so on...
19
+ group :admin do
20
+ key :app_title, default: -> { 'Admin app title' }
21
+ end
22
+
23
+ # If you want to see all power of the engine, add this showcase:
24
+ group :showcase do
25
+ key :string, default: -> { 'simple string' }
26
+ key :bool, type: :boolean, default: -> { true }
27
+ key :integer, type: :integer, default: -> { 777 }
28
+ key :select, type: :select, default: -> { 'foo' }, collection: %w(foo bar baz)
29
+ key :not_validate, required: false, presence: false
30
+ key :not_for_ui, required: false, ui: false
31
+ end
32
+ # Keys could have:
33
+ # :type (string by default), now ez-settings supports only: string, boolean, integer and select
34
+ # :default value (as callable objects)
35
+ # :required - be or not (all keys are required by default)
36
+ # :ui visible or not (all keys are UI visible by default)
37
+ end
38
+
39
+ # After defining settings interface groups/keys you need to configure it:
40
+ app.configure do |config|
41
+ # Backend adapter to store all settings (in current version only file system)
42
+ config.backend = Ez::Settings::Backend::FileSystem.new(Rails.root.join('config', 'settings.yml'))
43
+
44
+ # Default path for redirect in controller
45
+ config.default_path = '/admin/settings'
46
+
47
+ # Pass your custom css classes through css_map config
48
+ # Defaults would be merged with yours:
49
+ # config.custom_css_map = {
50
+ # nav_label: 'ez-settings-nav-label',
51
+ # nav_menu: 'ez-settings-nav-menu',
52
+ # nav_menu_item: 'ez-settings-nav-menu-item',
53
+ # overview_page_wrapper: 'ez-settings-overview',
54
+ # overview_page_section: 'ez-settings-overview-section',
55
+ # overview_page_section_header: 'ez-settings-overview-section-header',
56
+ # overview_page_section_content: 'ez-settings-overview-section-content',
57
+ # overview_page_section_content_key: 'ez-settings-overview-section-content-key',
58
+ # overview_page_section_content_value: 'ez-settings-overview-section-content-value',
59
+ # group_page_wrapper: 'ez-settings-group-wrapper',
60
+ # group_page_inner_wrapper: 'ez-settings-group-inner-wrapper',
61
+ # group_page_header: 'ez-settings-group-header',
62
+ # group_page_form_wrapper: 'ez-settings-group-form-wrapper',
63
+ # group_page_form_inner: 'ez-settings-group-form-inner',
64
+ # group_page_form_field_row: 'ez-settings-group-form-field-row',
65
+ # group_page_form_string_wrapper: 'ez-settings-group-form-string-wrapper',
66
+ # group_page_form_boolean_wrapper: 'ez-settings-group-form-boolean-wrapper',
67
+ # group_page_form_select_wrapper: 'ez-settings-group-form-select-wrapper',
68
+ # group_page_actions_wrapper: 'ez-settings-group-actions-wrapper',
69
+ # group_page_actions_wrapper: 'ez-settings-group-actions-wrapper',
70
+ # group_page_actions_save_button: 'ez-settings-group-actions-save-btn',
71
+ # group_page_actions_cancel_link: 'ez-settings-group-actions-cancel-link'
72
+ # }
73
+ #
74
+ # Highly recommend inspecting settings page DOM.
75
+ # You can find there a lot of interesting id/class stuff
76
+ #
77
+ # You even can define dynamic map for allows to decide which CSS class could be added
78
+ # `if` must contain callable object that receives controller as a first argument and dynamic element as second one:
79
+ #
80
+ # In this example, you easily could add 'active' CSS class if route end with some fragment:
81
+ # config.dynamic_css_map = {
82
+ # nav_menu_item: {
83
+ # css_class: 'active',
84
+ # if: ->(controller, path_fragment) { controller.request.path.end_with?(path_fragment.to_s) }
85
+ # }
86
+ # }
87
+ end
88
+
89
+ # Register `app` variable as settings interface
90
+ Ez::Registry.in(:settings_interfaces, by: 'YourAppName') do |registry|
91
+ registry.add app
92
+ end"
93
+ end
94
+
95
+ def create_locale_file
96
+ create_file "config/locales/ez_settings.en.yml",
97
+ "en:
98
+ ez_settings:
99
+ label: Ez Settings
100
+ interfaces:
101
+ app:
102
+ label: App Settings
103
+ actions:
104
+ save:
105
+ label: Save Settings
106
+ cancel:
107
+ label: Cancel Settings
108
+ groups:
109
+ general:
110
+ label: General
111
+ admin:
112
+ label: Admin
113
+ showcase:
114
+ label: Showcase
115
+ keys:
116
+ string:
117
+ label: String
118
+ bool:
119
+ label: Bool
120
+ integer:
121
+ label: Integer
122
+ select:
123
+ label: Select
124
+ not_validate:
125
+ label: Not Validate
126
+ not_for_ui:
127
+ label: Not For UI
128
+ "
129
+ end
130
+ end
131
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ez-settings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Volodya Sveredyuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-18 00:00:00.000000000 Z
11
+ date: 2017-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ez-core
@@ -192,6 +192,20 @@ dependencies:
192
192
  - - ">="
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: generator_spec
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
195
209
  description: Easy settings engine for Rails app.
196
210
  email:
197
211
  - sveredyuk@gmail.com