prism-cli 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- metadata +7 -138
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88754ad71aa92c584889769ef7ac4cad2fc92bc2f51a2b0cf88360d6f4d98dd8
|
4
|
+
data.tar.gz: fb6a5e2b05bde801ea658a5c733bbd8a4c72bec68ddccaf2d10395ce5892c5c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 871f05008cd66c75d871a1e2e45eceec2d69d4b29affefb1b115204d727ec2864e036b67b38ff77b2b3bb73c1dc0e66a3a3a6f9236302cf844d33fb2858a2fd4
|
7
|
+
data.tar.gz: 31cb9a4ac5ef768aa53e267075e306df9d0ac655803a0b69ac2cddd1b2777b719b590a0610d5c911f3c86de24b1f36d983a3e3d5cebc13763aaec9b05fee6ac5
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prism-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Johnstone
|
@@ -10,143 +10,12 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2019-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description:
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
bugs, breaking API changes, missing functionality and rough edges. ⚡️\n\n### Getting
|
20
|
-
started\n\nYou can install Prism from RubyGems using `gem install prism-cli`.\n\n###
|
21
|
-
CLI Usage\n\nYou can initialize a new Prism app by running `prism init`. This simply
|
22
|
-
creates a hello world sample application, by default at `./app.rb` but you can customize
|
23
|
-
the location by providing an argument to `prism init`.\n\nYou can then run `prism
|
24
|
-
server`, which will start a development server. If you then navigate to `localhost:3042/app.rb`,
|
25
|
-
you should see the sample application. Try changing the code and reloading the page,
|
26
|
-
and the app will update.\n\nIf an error occurs, it will be printed out to the browser
|
27
|
-
console.\n\nBuilding production releases of Prism apps through the command line
|
28
|
-
is still a work in progress.\n\n### Writing a Prism App\n\nPrism apps are written
|
29
|
-
in mruby. mruby is a lightweight implementation of Ruby that's suitable for compiling
|
30
|
-
to the web.\n\nmruby is similar in many ways to cruby and will be a familiar experience
|
31
|
-
for someone who has only used the mainline interpreter. The most notable exception
|
32
|
-
is that mruby only supports syntax up to ruby 1.9, which means there are no keyword
|
33
|
-
arguments or safe traversal operator.\n\nThere are a number of other small differences,
|
34
|
-
and it's worth reviewing the [mruby limitations documentation](https://github.com/mruby/mruby/blob/master/doc/limitations.md).
|
35
|
-
You might also want to refer to the [mruby API docs](http://mruby.org/docs/api/).\n\nIf
|
36
|
-
you run `prism init`, it will create a sample application that makes a good starting
|
37
|
-
point. This is the code it outputs:\n\n```ruby\nclass HelloWorld < Prism::Component\n
|
38
|
-
\ attr_accessor :name\n\n def initialize(name = \"World\")\n @name = name\n
|
39
|
-
\ end\n\n def render\n div(\".hello-world\", [\n input(onInput: call(:name=).with_target_data(:value)),\n
|
40
|
-
\ div(\"Hello, #{name}\")\n ])\n end\nend\n\nPrism.mount(HelloWorld.new)\n```\n\nLet's
|
41
|
-
break this down piece by piece.\n\n----------\n\n```ruby\nclass HelloWorld < Prism::Component\n```\n\nMuch
|
42
|
-
like Rails, Prism provides most of it's functionality through base classes that
|
43
|
-
you should inherit from.\n\nThe key concept in Prism is a Component, which should
|
44
|
-
be familiar to anyone who has worked with JS frameworks like React, Vue or similar.\n\n`Prism::Component`
|
45
|
-
provides helper methods for creating virtual dom elements, and for handling events.\n\n----------\n\n```ruby\n
|
46
|
-
\ attr_accessor :name\n\n def initialize(name = \"World\")\n @name = name\n
|
47
|
-
\ end\n```\n\nThis is fairly standard Ruby, and there's nothing actually unique
|
48
|
-
to Prism or mruby going on. Note that we're defining an `attr_accessor` rather than
|
49
|
-
just an `attr_reader`, so that we can set the name directly when it changes.\n\n----------\n\n```ruby\n
|
50
|
-
\ def render\n div(\".hello-world\", [\n input(onInput: call(:name=).with_target_data(:value)),\n
|
51
|
-
\ div(\"Hello, #{name}\")\n ])\n end\n```\n\nIt's expected that Prism components
|
52
|
-
implement a `#render` method that returns a representation of what the current view
|
53
|
-
should be.\n\nThis should be familiar to anyone who has worked with React, Cycle.js
|
54
|
-
or Elm. There is a method defined for each different dom element. You can provide
|
55
|
-
a class name or id as a string (`\".todo-list-item\"` or `\"#login\"`), an object
|
56
|
-
with options to configure the attributes, props, styles, classes and event listeners,
|
57
|
-
and an array of child elements.\n\nPrism's virtual dom is powered by `snabddom`,
|
58
|
-
a tried and true lightweight JavaScript vdom library. For the most part, the API
|
59
|
-
is simply passed through to snabbdom, so it's worth reading the [snabddom docs](https://github.com/mruby/mruby/blob/master/doc/limitations.md).\n\n----------\n\n```ruby\n
|
60
|
-
\ input(onInput: call(:name=).with_target_data(:value)),\n```\n\nThe most interesting
|
61
|
-
line in this example is the event handler for the `input` event.\n\n`Prism::Component`
|
62
|
-
defines a `#call` method that you can use to call methods on your component when
|
63
|
-
events occur.\n\n`#call` takes a symbol that is the method name to call, and any
|
64
|
-
arguments you want passed to the method.\n\nYou can also include data from the event
|
65
|
-
or target element using `.with_event_data` and `.with_target_data`. These methods
|
66
|
-
can be chained as needed.\n\n----------\n\n```ruby\nPrism.mount(HelloWorld.new)\n```\n\nThe
|
67
|
-
last line mounts the HelloWorld component. Prism is currently hardcoded to mount
|
68
|
-
to an element with id `#root` on load. In future this will be configurable.\n\n\n###
|
69
|
-
Components and State\n\nPrism aims to provide a component system that should feel
|
70
|
-
very similar to most virtual dom based JavaScript frameworks.\n\nYou can nest Prism
|
71
|
-
components, and use instances of Prism components directly when rendering in place
|
72
|
-
of dom elements.\n\nPrism has no explicit state management built in, preferring
|
73
|
-
to rely on Ruby's built-in state management tools, primarily instance variables
|
74
|
-
in class instances.\n\nComponents in a Prism app persist in memory, and will often
|
75
|
-
have multiple methods call over their lifetime.\n\nLarger Prism applications would
|
76
|
-
likely benefit from adapting a more structured approach to managing certain parts
|
77
|
-
of state, a la Redux.\n\n\n### API\n\n#### **`Prism::Component`**\n\n##### `#div(identifier,
|
78
|
-
options, children), #img, #p, ...`\n\nHelpers for creating virtual dom elements.
|
79
|
-
There is a method for every type DOM element.\n\nThe arguments are all optional
|
80
|
-
and can be provided in any order for convenience.\n\nArguments:\n\n - `identifier`
|
81
|
-
*string, optional* - A shorthand for setting the id and classes. E.g. `\"#login\"`,
|
82
|
-
`.alert`, `#header.flex.dark`\n\n - `options` *object, optional* - Element configuration\n\n
|
83
|
-
\ - `attrs` *object, optional* - Attributes that are set when the element is created.
|
84
|
-
Equivalent to putting items directly into the element in the HTML.\n - `props`
|
85
|
-
*object, optional* - Props to be set on the object.\n - `style` *object, optional*
|
86
|
-
- Element styles, keys are css properties and values are strings.\n - `class`
|
87
|
-
*object, optional* - Keys are class names, values are booleans indicating whether
|
88
|
-
or not the class is active. An easy way to add or remove classes based on a condition.\n
|
89
|
-
\ - `on` *function, optional* - Keys are browser events (like `click` or `input`),
|
90
|
-
values are `Prism::EventHandler` instances. See below on how to create `EventHandler`
|
91
|
-
instances. Additionally, there are a number of aliases that let you set event handlers
|
92
|
-
directly on the `options` object. The full list that is currently aliased is: `onClick`,
|
93
|
-
`onChange`, `onInput`, `onMousedown`, `onMouseup`, `onKeydown`, `onKeyup` and `onScroll`\n\n
|
94
|
-
\ - `children` *array or string, optional* - Either a string of content for the
|
95
|
-
element or an array of children. Each child should either be a string, a virtual
|
96
|
-
dom tree, or an instance of a `Prism::Component` with `#render`.\n\n\n##### `#call(method_name,
|
97
|
-
*arguments)`\n\nArguments:\n \n - `method_name` *symbol* - The name of the method
|
98
|
-
to call when the event occurs. Returns a `Prism::EventHandler`.\n - `*arguments`
|
99
|
-
*any, variadic* - You can provide arguments that will be passed to the method after
|
100
|
-
the method name. Please note any argument currently needs to be serializable, this
|
101
|
-
will change in future.\n\n##### `#prevent_default`\n\nTakes no arguments, returns
|
102
|
-
a `Prism::EventHandler` that does nothing but call `event.preventDefault()`.\n\n#####
|
103
|
-
`#stop_propagation`\n\nTakes no arguments, returns a `Prism::EventHandler` that
|
104
|
-
does nothing but call `event.stopPropagation()`.\n\n---------\n\n#### **`Prism::EventHandler`**\n\nRepresents
|
105
|
-
a handler for an event, with a method to call and arguments to pass. The arguments
|
106
|
-
are a mixture of values passed from Ruby and values pulled from the event and targed
|
107
|
-
in JS. The order of arguments is based on how the event handler was constructed.\n\n#####
|
108
|
-
`#with_args(*args)`\n\nAdds arguments to an existing event handler.\n\n##### `#with_event`\n\nAdd
|
109
|
-
an event argument to the handler. When the method is called, a serialized version
|
110
|
-
of the event will be passed.\n\n##### `#with_event_data(*properties)`\n\nAdd arguments
|
111
|
-
that contain data from the event. The properties should be either a string or a
|
112
|
-
symbol. One property you might want to extract from the event is `:key` for `keydown`
|
113
|
-
events.\n\n##### `#with_target_data(*properties)`\n\nAdd arguments that contain
|
114
|
-
data from the target element. The properties should be either a string or a symbol.
|
115
|
-
You could for example extract the `:value` of an `input` or the `:checked` field
|
116
|
-
of a tickbox.\n\n##### `#prevent_default`\n\nCalls `.preventDefault()` on the event
|
117
|
-
when it occurs.\n\n##### `#stop_propagation`\n\nCalls `.stopPropagation()` on the
|
118
|
-
event when it occurs.\n\n#### Examples:\n\n`call(:name=).with_target_data(:value)`
|
119
|
-
- calls a setter with the content of the target element\n`call(:goto_page, 5).with_event`
|
120
|
-
- calls a method with the number 5 as the first argument and the event data as the
|
121
|
-
second\n\n#### `Prism.mount(component)`\n\nTakes an instance of a `Prism::Component`
|
122
|
-
and returns a `Prism::MountPoint`.\n\nThe `MountPoint` should be the result of the
|
123
|
-
last expression in the file, as it is used by the Prism C and JS runtime to interact
|
124
|
-
with the application.\n\n### Future\n\nAs mentioned above, Prism is still in extremely
|
125
|
-
early development. The following would be nice to have but has yet to be implemented.\n\n
|
126
|
-
- support for require\n - transpile modern ruby syntax to 1.9\n - a way for users
|
127
|
-
to make their own IO drivers\n - built in support for HTTP\n - compile time improvements\n
|
128
|
-
- fallback to asm.js for old browsers\n - rails integration\n - SSR\n - sourcemaps
|
129
|
-
for mruby code\n - linting for incompatibilities with cruby\n - elm-reactor style
|
130
|
-
dev server\n\nIf you're interested in helping implement any of those features, or
|
131
|
-
you want to contribute in any way, please make an issue or a pull request or just
|
132
|
-
[get in touch with me](mailto:ncwjohnston@gmail.com).\n\nPrism is currently developed
|
133
|
-
by a single person (who also has a lot of other ambitious projects). I would love
|
134
|
-
to have some other people to help share the load. There's lots of low hanging fruit
|
135
|
-
still to be plucked.\n\n### Supporting Prism Development\n\nMost open source projects
|
136
|
-
are built on a mountain of unpaid labour. Even hugely successful projects that have
|
137
|
-
good funding tend to have a history of excess unpaid labour to get to that point.\n\nPrism
|
138
|
-
is taking a different approach, by launching with an Open Collective page. We're
|
139
|
-
using Open Collective because it enables us to fund Prism as a project rather than
|
140
|
-
one particular person. Funds in the Open Collective will only go towards future
|
141
|
-
development.\n\nIf you think this is a worthwhile project, please support us on
|
142
|
-
Open Collective. If you think your company could benefit from Prism in the future,
|
143
|
-
please advocate for your company to financially support Prism.\n\nMy main goal around
|
144
|
-
starting Prism with funding is that I want as much of the work that's done on Prism
|
145
|
-
as possible to be reimbursed, no matter who's doing it. The other aspect is that
|
146
|
-
I don't have very much spare time for projects but if I can get paid for my work
|
147
|
-
I can do Prism as part of my day to day contract work.\n\n**[Support Prism on Open
|
148
|
-
Collective](https://opencollective.com/prism)**\n\n### License\n\nPrism is available
|
149
|
-
under the MIT license. Please see the LICENSE file for more details.\n"
|
13
|
+
description: |-
|
14
|
+
Prism is a framework for building clientside web apps with Ruby.
|
15
|
+
|
16
|
+
It's powered by mruby, emscripten and WebAssembly.
|
17
|
+
|
18
|
+
For more information check out the docs on the github repo.
|
150
19
|
email: ncwjohnstone@gmail.com
|
151
20
|
executables:
|
152
21
|
- prism
|