ruflet_rails 0.0.12 → 0.0.13

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: d142d63121dae012354a763ef756504d64534adbc4b2c11eaf0dc51b514c6b32
4
- data.tar.gz: d3d1e6cbf9af94c81d5514b71325484e547b40ba34afe3d8601a111f08e4af6a
3
+ metadata.gz: dc30304299f6e6c539c8fcc838c7f843b54b2d106e6219c657ac8c856c69f9cf
4
+ data.tar.gz: 52ec66b70428d3d1d4ff2d3d7ac4cf6bae34b497addd74e6ba39f8f9c3cc5d3f
5
5
  SHA512:
6
- metadata.gz: daf5bf66b258ece12da18cbb4c455d2f9f5dd141faa3638c2ef0ec9a64d85be9b25d94add15ae0374a96c6694f6e393ee015290df62368bd1d9cd6920a3185f3
7
- data.tar.gz: 075def7cfb22688619559ba1ca55ede0d4c152c403c95a2273c1fa322a2862b20aafe7bda0507bf73bb4a8e8f40e03eb6c87b9505900fb31aa3ac08098dbf88b
6
+ metadata.gz: 976c713a63c7a6f3663fbd2541474008e010947a81c6d205cb43f318d6e6fbdaae59c71564f145f34311570518c1910ead0f0278173e270f9ce6bbda3bd4d659
7
+ data.tar.gz: 88d2668bd895b3e817bae881f65ab8fa395ec54377b850a9f7aef163bcf1caa96982656103fdeb8b6034a40271ae1c4dfe80ae43a7f987fd0cf816e56f28cb2d
data/README.md CHANGED
@@ -2,17 +2,18 @@
2
2
 
3
3
  `ruflet_rails` is the Rails-first integration package for Ruflet.
4
4
 
5
- Internal Rails transport/protocol code is bundled inside this gem as `Ruflet::Rails::Protocol`.
6
- No separate protocol gem is required.
5
+ It mounts Ruby-driven Ruflet interfaces in a Rails application, makes Rails
6
+ models available to Ruflet components, and connects web, mobile, and desktop
7
+ clients to the same application entrypoint.
7
8
 
8
- ## Usage
9
+ ## Add The Gem
9
10
 
10
11
  ```ruby
11
12
  # Gemfile
12
- gem "ruflet_rails", ">= 0.0.5"
13
+ gem "ruflet_rails"
13
14
  ```
14
15
 
15
- ## Install into Rails
16
+ ## Install Into Rails
16
17
 
17
18
  ```bash
18
19
  bin/rails generate ruflet:install
@@ -119,13 +120,16 @@ bundle exec rake ruflet:install[DEVICE_ID]
119
120
 
120
121
  ## Ruflet resource scaffolds
121
122
 
122
- Generate a mountable Ruflet CRUD component for an existing Rails model:
123
+ The standard Rails scaffold command also generates a mountable Ruflet CRUD
124
+ component:
123
125
 
124
126
  ```bash
125
- bin/rails generate ruflet:scaffold Post
127
+ bin/rails generate scaffold Post title:string body:text published:boolean
126
128
  ```
127
129
 
128
- The scaffold creates generated app code the Rails developer can own and edit:
130
+ The Rails model attributes are passed to the Ruflet component generator. The
131
+ scaffold creates generated application code the Rails developer can own and
132
+ edit:
129
133
 
130
134
  ```ruby
131
135
  # app/views/ruflet/components/posts/post_component.rb
@@ -147,6 +151,9 @@ The generated component contains the developer-owned UI and persistence calls.
147
151
  helpers. Component files under `app/views/ruflet/components` are loaded by the
148
152
  Railtie so both web mounts and `main.rb` can reference them.
149
153
 
154
+ Use `--skip-ruflet` when a Rails scaffold should not generate a Ruflet
155
+ component.
156
+
150
157
  ## Ruflet model forms
151
158
 
152
159
  Generate only a reusable Ruflet form for an existing Rails model:
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ruflet
4
+ module Rails
5
+ module GeneratorHooks
6
+ module_function
7
+
8
+ def install!
9
+ require "active_support/core_ext/string/filters"
10
+ require "rails/generators/rails/scaffold/scaffold_generator"
11
+ require "generators/ruflet/scaffold/scaffold_generator"
12
+
13
+ generator = ::Rails::Generators::ScaffoldGenerator
14
+ return if generator.class_options.key?(:ruflet)
15
+
16
+ generator.hook_for(
17
+ :ruflet,
18
+ type: :boolean,
19
+ default: true,
20
+ desc: "Generate a Ruflet resource component"
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
@@ -4,7 +4,7 @@ require "uri"
4
4
 
5
5
  module Ruflet
6
6
  module Rails
7
- # Hotwire Native-style driver for ruflet_rails.
7
+ # Managed webview navigation driver for ruflet_rails.
8
8
  #
9
9
  # Your existing web app is the body, rendered in a WebView. Navigation works
10
10
  # out of the box: a tiny JS bridge injected into each page intercepts link
@@ -122,6 +122,7 @@ module Ruflet
122
122
  Ruflet::UI::ControlFactory.build(
123
123
  :webview,
124
124
  url: screen.url,
125
+ method: "get",
125
126
  expand: true,
126
127
  on_page_ended: ->(_event) { inject_bridge(screen) },
127
128
  on_console_message: ->(event) { handle_message(screen, message_of(event)) }
@@ -190,7 +191,7 @@ module Ruflet
190
191
  # --- Modal (bottom sheet of web content) -------------------------------
191
192
 
192
193
  def present_modal(url)
193
- sheet_webview = Ruflet::UI::ControlFactory.build(:webview, url: url.to_s, expand: true)
194
+ sheet_webview = Ruflet::UI::ControlFactory.build(:webview, url: url.to_s, method: "get", expand: true)
194
195
  @modal_sheet = Ruflet::UI::ControlFactory.build(
195
196
  :bottomsheet,
196
197
  open: true,
@@ -245,7 +246,7 @@ module Ruflet
245
246
 
246
247
  module_function
247
248
 
248
- # Start a Hotwire Native-style app. See NativeApp.
249
+ # Start a managed webview app. See NativeApp.
249
250
  def native_app(page, **opts)
250
251
  NativeApp.new(page, **opts).start
251
252
  end
@@ -3,6 +3,11 @@
3
3
  module Ruflet
4
4
  module Rails
5
5
  class Railtie < ::Rails::Railtie
6
+ generators do
7
+ require "ruflet/rails/generator_hooks"
8
+ Ruflet::Rails::GeneratorHooks.install!
9
+ end
10
+
6
11
  # Make ruflet_frame and friends available in every .erb template.
7
12
  initializer "ruflet_rails.view_helpers" do
8
13
  ActiveSupport.on_load(:action_view) do
@@ -12,7 +12,7 @@ module Ruflet
12
12
  # The generated subclass owns the explicit CRUD UI (render, show, the
13
13
  # create/edit form) AND the database calls (record.update, record.destroy!,
14
14
  # model_class.new) — so a developer can read and change anything. This base
15
- # provides only reusable, non-DB helpers: model resolution, record loading,
15
+ # provides reusable helpers: model resolution, record loading,
16
16
  # field inference (resource_fields/display_fields/display_value), navigation
17
17
  # (render_index/render_show/refresh), dialog management, snackbars, and the
18
18
  # date/time picker value helpers.
@@ -88,9 +88,8 @@ module Ruflet
88
88
  model_class.respond_to?(:model_name) ? model_class.model_name.human.titleize : self.class.singular_title
89
89
  end
90
90
 
91
- # Fields rendered on the detail (show) screen. The generated subclass
92
- # overrides this with the scaffolded attributes; the default falls back to
93
- # the model's own attribute names.
91
+ # Fields rendered on the detail (show) screen. The default uses the
92
+ # model's own attribute names; subclasses can override it.
94
93
  def resource_fields
95
94
  default_resource_fields
96
95
  end
@@ -105,7 +104,7 @@ module Ruflet
105
104
  record.public_send(field).to_s
106
105
  end
107
106
 
108
- # --- Record loading & persistence --------------------------------------
107
+ # --- Record loading & navigation ---------------------------------------
109
108
 
110
109
  def records
111
110
  scope = model_class.respond_to?(:limit) ? model_class.limit(50) : model_class.all
@@ -33,7 +33,7 @@ module Ruflet
33
33
  def webview_app(url:, appbar: nil, navigation_bar: nil, bottom_appbar: nil,
34
34
  route: "/", prevent_links: nil, on_navigate: nil,
35
35
  on_page_started: nil, on_page_ended: nil, **webview_props)
36
- webview_args = { url: url, expand: true }
36
+ webview_args = { url: url, method: "get", expand: true }
37
37
  webview_args[:prevent_links] = prevent_links unless prevent_links.nil?
38
38
  webview_args[:on_url_change] = ->(event) { on_navigate.call(event.data) } if on_navigate
39
39
  webview_args[:on_page_started] = on_page_started if on_page_started
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ruflet
4
- VERSION = "0.0.12" unless const_defined?(:VERSION)
4
+ VERSION = "0.0.13" unless const_defined?(:VERSION)
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruflet_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Moussa Ali
@@ -29,42 +29,42 @@ dependencies:
29
29
  requirements:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.0.15
32
+ version: 0.0.16
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: 0.0.15
39
+ version: 0.0.16
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: ruflet_core
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 0.0.15
46
+ version: 0.0.16
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: 0.0.15
53
+ version: 0.0.16
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: ruflet_server
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: 0.0.15
60
+ version: 0.0.16
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - ">="
66
66
  - !ruby/object:Gem::Version
67
- version: 0.0.15
67
+ version: 0.0.16
68
68
  description: Build cross-platform mobile and desktop apps with Ruby on Rails using
69
69
  Ruflet.
70
70
  email:
@@ -82,6 +82,7 @@ files:
82
82
  - lib/ruflet/rails/configuration.rb
83
83
  - lib/ruflet/rails/desktop_launcher.rb
84
84
  - lib/ruflet/rails/form_helpers.rb
85
+ - lib/ruflet/rails/generator_hooks.rb
85
86
  - lib/ruflet/rails/install_support.rb
86
87
  - lib/ruflet/rails/native_app.rb
87
88
  - lib/ruflet/rails/protocol.rb
@@ -102,7 +103,8 @@ files:
102
103
  - lib/ruflet/version.rb
103
104
  - lib/ruflet_rails.rb
104
105
  homepage: https://github.com/AdamMusa/ruflet/tree/main/packages/ruflet_rails
105
- licenses: []
106
+ licenses:
107
+ - MIT
106
108
  metadata: {}
107
109
  rdoc_options: []
108
110
  require_paths: