wallaby-rails / wallaby-rails Goto Github PK
View Code? Open in Web Editor NEWAutocomplete the resourceful actions and views for ORMs for admin interface and other purposes.
Autocomplete the resourceful actions and views for ORMs for admin interface and other purposes.
It appears searching nil
in an "or" query does not work. For example: foo:=nil
returns 1000 records, foo:=nil,1
returns 0 records. Perhaps nil
is interpreted as a string when in an "or" clause?
This is using wallaby-active_record
v0.2.1.
It appears Rails 6 support was added in Wallaby 6, but we currently use Wallaby 5. This makes Wallaby a blocker to upgrading to Rails 6.
Wallaby 6 has a lot of backwards incompatible changes with little documentation on the upgrade process (except for the change log). It also depends on Bootstrap 4 which is incompatible with Bootstrap 3, which is another expensive upgrade.
Would it be difficult to make Wallaby 5 compatible with Rails 6? Adding conditionals on Rails versions where changes are incompatible would be preferred instead of only supporting one major Rails version per major Wallaby version.
I find it difficult to customize Wallaby CSS because of the deep nesting. One needs to mimic the nesting in order to add our own CSS.
If CSS is defined in a flat structure then it will be much easier to extend and override.
For example:
# Before
.foo {
.bar {
}
}
# After
.foo-bar {
}
Also only adding CSS to classes instead of direct HTML tags will be good too. For example:
# Before
.foo {
a {
}
}
# After
.foo-link {
}
I see this error in the log when running Wallaby 6.1.2:
WALLABY ERROR: `primary::SchemaMigration` is not a valid Class name.
Is it trying to find a model class for every table? Rails manages this table I think.
Upgrading from Rails 7.0.0 to Rails 7.0.1 caused this error when I visit a wallaby resource index page.
Failure/Error: Time.use_zone(find_time_zone, &block)
ActionView::Template::Error:
singleton can't be dumped
./app/controllers/application_controller.rb:81:in `set_time_zone!'
I'm uncertain yet if this is specific to my app or if it's an issue in Wallaby.
cc @tian-im
I'm seeing a missing translation error since upgrading Wallaby from 6.1.3 to 6.1.4 (on Rails 6.1.4)
ActionView::Template::Error:
translation missing: en-US.wallaby.map.missing_mode_for_model_class
# ./config/initializers/localeapp.rb:31:in `call'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/i18n-1.8.11/lib/i18n.rb:382:in `handle_exception'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/i18n-1.8.11/lib/i18n.rb:212:in `translate'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-core-0.2.3/lib/utils/wallaby/locale.rb:18:in `call'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-core-0.2.3/lib/utils/wallaby/locale.rb:18:in `t'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-core-0.2.3/lib/wallaby/map.rb:163:in `map_of'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-core-0.2.3/lib/wallaby/map.rb:106:in `authorizer_map'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-core-0.2.3/lib/concerns/wallaby/authorizable.rb:93:in `authorizer_of'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-core-0.2.3/lib/concerns/wallaby/authorizable.rb:73:in `authorized?'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-core-0.2.3/lib/concerns/wallaby/authorizable.rb:83:in `unauthorized?'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-core-0.2.3/lib/helpers/wallaby/links_helper.rb:42:in `new_link'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-6.1.4/app/views/wallaby/resources/show/_has_many.html.erb:9:in `___sers_rbates__rbenv_versions_______lib_ruby_gems_______gems_wallaby_______app_views_wallaby_resources_show__has_many_html_erb__4206216278495891214_169900'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/base.rb:247:in `public_send'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/base.rb:247:in `_run'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/template.rb:154:in `block in render'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/notifications.rb:205:in `instrument'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/template.rb:345:in `instrument_render_template'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/template.rb:152:in `render'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/renderer/partial_renderer.rb:285:in `block in render_partial_template'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/notifications.rb:203:in `block in instrument'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/notifications.rb:203:in `instrument'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/renderer/partial_renderer.rb:280:in `render_partial_template'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/renderer/partial_renderer.rb:271:in `render'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/renderer/renderer.rb:81:in `render_partial_to_object'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/renderer/renderer.rb:53:in `render_partial'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/helpers/rendering_helper.rb:45:in `render'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-core-0.2.3/lib/services/wallaby/type_renderer.rb:16:in `render'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-core-0.2.3/lib/helpers/wallaby/resources_helper.rb:23:in `type_render'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-6.1.4/app/views/wallaby/resources/show.html.erb:17:in `block in ___sers_rbates__rbenv_versions_______lib_ruby_gems_______gems_wallaby_______app_views_wallaby_resources_show_html_erb__691929870940969589_169760'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-6.1.4/app/views/wallaby/resources/show.html.erb:14:in `each'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-6.1.4/app/views/wallaby/resources/show.html.erb:14:in `___sers_rbates__rbenv_versions_______lib_ruby_gems_______gems_wallaby_______app_views_wallaby_resources_show_html_erb__691929870940969589_169760'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/base.rb:247:in `public_send'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/base.rb:247:in `_run'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/template.rb:154:in `block in render'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/notifications.rb:205:in `instrument'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/template.rb:345:in `instrument_render_template'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/template.rb:152:in `render'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/renderer/template_renderer.rb:61:in `block (2 levels) in render_template'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/notifications.rb:203:in `block in instrument'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/notifications.rb:203:in `instrument'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/renderer/template_renderer.rb:56:in `block in render_template'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/actionview-6.1.4.4/lib/action_view/renderer/template_renderer.rb:71:in `block in render_with_layout'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/notifications.rb:203:in `block in instrument'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
# /Users/rbates/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/notifications.rb:203:in `instrument'
Any ideas?
Hello,
Wallaby looks great, but I am a bit confused by the docs:
I see this:
# Or you can update its type to `raw`
# `raw` is built-in type to render HTML instead of escaping the HTML tags and entities.
self.index_fields[:description][:type] = 'raw'
and I am wondering where I would put the HTML that is generated?
For example: how do you create custom inputs? Like if i wanted one main input and a couple other hidden ones that are derived from the first one using JavaScript. How would I go about doing that using wallaby?
Thanks!
I'm attempting to add an extend_trial
action to AccountsController
. I added a route:
resources :accounts do
member do
get :extend_trial
end
end
And the controller action which has the same behavior as the edit action:
def extend_trial
edit
end
And then I copied the edit view to extend_trial.html.erb
with one field:
<%
# decorate first on every page or partial
decorated = decorate resource
%>
<article class="resource">
<div class="resource__header">
<h1><%= t 'labels.edit', id: decorated.id %></h1>
<%= render 'resource_navs' %>
</div>
<%= render 'flash_messages' %>
<section>
<div class="resource__container">
<%= form_for decorated, url: url_for(action: :show), method: :put, html: { multipart: true }, builder: Wallaby::FormBuilder do |form| %>
<% decorated.errors[:base].try do |messages| %>
<% Array(messages).each do |message| %>
<div class="alert alert-danger alert-dismissible" role="alert">
<%= raw message %>
</div>
<% end %>
<% end %>
<%= type_render decorated.form_type_of("trial_end_date"), field_name: "trial_end_date", form: form %>
<%= form.button t('buttons.save'), class: 'btn btn-primary' %>
<%= cancel_link html_options: { class: 'btn btn-default' } %>
<% end %>
</div>
</section>
</article>
This produced the following error:
undefined method `extend_trial_metadata_of' for #<SupportAdmin::AccountDecorator:0x00007ff815720078>
It took some digging to realize there's a form_metadata_of
method which I assume is the behavior I want so I aliased it:
# in AccountDecorator
alias_method :extend_trial_metadata_of, :form_metadata_of
Then I get this error:
ActionView::MissingTemplate - Missing partial /extend_trial/_datetime, /_datetime, support_admin/accounts/extend_trial/_datetime, support_admin/accounts/_datetime, support_admin/application/extend_trial/_datetime, support_admin/application/_datetime, wallaby/resources/extend_trial/_datetime, wallaby/resources/_datetime with {:locale=>[:"en-US"], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :jbuilder]}. Searched in:
* "/Users/rbates/code/envisage/app/views"
* "/Users/rbates/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/kaminari-core-1.1.1/app/views"
* "/Users/rbates/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/ckeditor-4.2.4/app/views"
* "/Users/rbates/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/wallaby-6.1.0/app/views"
* "/Users/rbates/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/devise_invitable-1.7.4/app/views"
* "/Users/rbates/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/devise-4.5.0/app/views"
So I add a partial at accounts/_datetime.html.erb
which delegates to the internal date time partial:
<%= render partial: "wallaby/resources/form/datetime", locals: local_assigns %>
The form now renders (yay) but doesn't look quite right since the body tag doesn't have an edit
class due to a different action name. This would be resolved by not nesting CSS as mentioned in #174.
When I submit the form I get this error:
NameError - undefined local variable or method `form' for #<#<Class:0x00007fc934466f18>:0x00007fc93bfdb068>
Did you mean? fork:
app/views/support_admin/accounts/_datetime.html.erb:1:in `_app_views_support_admin_accounts__datetime_html_erb__554914958012286755_70251162594040'
The logs show the update action worked and redirected to the show action which resulted in this error. It appears the custom datetime partial I added is being used by the show
action but does not have a form variable. It is confusing to have two partials with the same name that have different behavior and locals. I suggest renaming the the form partials to datetime_field
and moving them out of the form
directory. Flat lists with unique names are good for customizability.
I moved the partial to accounts/extend_trial/datetime
which resolves the error and renders the page.
Overall this was quite difficult to figure out. I suggest smoothing out this process and adding some documentation for customizing Wallaby in this way.
In our app we have an Account
model with two controllers: AccountsController
and ExtendTrialsController
. Both of these controllers use the account model. The ExtendTrialsController
manages extending the account trial period:
class Admin::ExtendTrialsController < Admin::ApplicationController
self.model_class = Account
def update
# extend the trial
end
private
def resource
@resource ||= Account.find_by(token: params[:id])
end
end
The problem is the main menu navigation thinks this controller is the main controller for managing accounts and links instead of the AccountsController
.
I did some quick benchmarking and found that adding Wallaby to our app adds over 1 second to code reloading time in development.
After changing the code and reloading the page it takes 2.6 second to finish loading a given page with Wallaby and 1.4 seconds if Wallaby is removed from the project. This is when reloading a page unrelated to the admin pages.
My guess is because Wallaby is force-reloading all models where as I believe Rails loads what it needs as needed.
What is the reason for Wallaby doing its own code reloading and not relying on Rails code reloading? Is it to support configuring decorators at the class level? If so perhaps you can store that config in a plain hash and attempt to apply it when using a decorator instance.
It seems like half the issues I've ran into have to do with the custom code reloading. This is a tricky thing to get right and will likely cause further issues in future Rails versions and conflicts with other gems.
Would it be possible to remove the custom code reloading and fall back to however Rails wants to load/reload the code?
Rendering the index is quite slow (up to few seconds) because each makes separate render
call. Maybe we could rewrite it to have some kind of rendering classes that can optionally render a partial?
class IndexRenderer
def integer(some_value)
some_value.to_s
end
def some_complex_type(some_value)
view.render 'some_complex_type', value: some_value
end
end
Enabling the turbolinks config causes this error:
Sprockets::Rails::Helper::AssetNotPrecompiled - Asset was not declared to be precompiled in production.
Add `Rails.application.config.assets.precompile += %w( turbolinks.js )` to `config/initializers/assets.rb` and restart your server
This is because turbolinks.js
is included as a separate script in the HTML when this config is enabled.
I thinks it's better for turbolinks to be included in application.js
so it's managed by sprockets and not a separately loaded JS file. Then you could remove this turbolinks config and add documentation for enabling it by overriding application.js
It appears the locales in wallaby-core config/locales/wallaby.en.yml
are not scoped under a wallaby
key. This results in two issues:
en
locale) it isn't clear it is for Wallaby.I've included a condition to check if the db table exists, so that this code is skipped when the migrations are run.
if ActiveRecord::Base.connection.table_exists? 'admins'
self.form_fields[:password] = {
type: 'password',
label: 'Password',
name: 'password'
}
end
Without the above check this error is triggered when running rails db:drop
or rails db:migrate
$ rails db:migrate
rails aborted!
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "admins" does not exist
LINE 8: WHERE a.attrelid = '"admins"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
(SELECT c.collname FROM pg_collation c, pg_type t
WHERE c.oid = a.attcollation AND t.oid = a.atttypid AND a.attcollation <> t.typcollation),
col_description(a.attrelid, a.attnum) AS comment
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"admins"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:88:in `async_exec'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:88:in `block in query'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/abstract_adapter.rb:589:in `block in log'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/abstract_adapter.rb:583:in `log'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:87:in `query'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:739:in `column_definitions'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:227:in `columns'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/schema_cache.rb:56:in `columns'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/schema_cache.rb:62:in `columns_hash'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/model_schema.rb:441:in `load_schema!'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/attributes.rb:233:in `load_schema!'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/attribute_decorators.rb:28:in `load_schema!'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/model_schema.rb:436:in `load_schema'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/model_schema.rb:344:in `columns'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/lib/adaptors/wallaby/active_record/model_decorator/fields_builder.rb:7:in `general_fields'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/lib/adaptors/wallaby/active_record/model_decorator.rb:57:in `general_fields'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/lib/adaptors/wallaby/active_record/model_decorator.rb:4:in `fields'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/lib/adaptors/wallaby/active_record/model_decorator.rb:18:in `form_fields'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/lib/decorators/wallaby/resource_decorator.rb:20:in `form_fields'
/Users/fuzzyri/git/stockland_api/app/decorators/admin_decorator.rb:35:in `<class:AdminDecorator>'
/Users/fuzzyri/git/stockland_api/app/decorators/admin_decorator.rb:1:in `<top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:477:in `load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:477:in `block in load_file'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:662:in `new_constants_in'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:476:in `load_file'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:375:in `block in require_or_load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:37:in `block in load_interlock'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies/interlock.rb:12:in `block in loading'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/concurrency/share_lock.rb:150:in `exclusive'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies/interlock.rb:11:in `loading'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:37:in `load_interlock'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:358:in `require_or_load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:511:in `load_missing_constant'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:203:in `const_missing'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:268:in `const_get'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:268:in `block in constantize'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:266:in `each'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:266:in `inject'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:266:in `constantize'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/core_ext/string/inflections.rb:66:in `constantize'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/app/routes/wallaby/resources_router.rb:16:in `block in preload'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/app/routes/wallaby/resources_router.rb:13:in `each'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/app/routes/wallaby/resources_router.rb:13:in `preload'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/app/routes/wallaby/resources_router.rb:24:in `<top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:477:in `load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:477:in `block in load_file'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:662:in `new_constants_in'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:476:in `load_file'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:375:in `block in require_or_load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:37:in `block in load_interlock'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies/interlock.rb:12:in `block in loading'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/concurrency/share_lock.rb:150:in `exclusive'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies/interlock.rb:11:in `loading'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:37:in `load_interlock'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:358:in `require_or_load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:511:in `load_missing_constant'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:203:in `const_missing'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/config/routes.rb:7:in `block (2 levels) in <top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/actionpack-5.0.1/lib/action_dispatch/routing/mapper.rb:855:in `scope'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/config/routes.rb:6:in `block in <top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/actionpack-5.0.1/lib/action_dispatch/routing/route_set.rb:389:in `instance_exec'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/actionpack-5.0.1/lib/action_dispatch/routing/route_set.rb:389:in `eval_block'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/actionpack-5.0.1/lib/action_dispatch/routing/route_set.rb:371:in `draw'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/config/routes.rb:1:in `<top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `block in load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:40:in `block in load_paths'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:40:in `each'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:40:in `load_paths'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:16:in `reload!'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:26:in `block in updater'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/file_update_checker.rb:77:in `execute'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:27:in `updater'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:7:in `execute_if_updated'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/finisher.rb:119:in `block in <module:Finisher>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/initializable.rb:30:in `instance_exec'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/initializable.rb:30:in `run'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/initializable.rb:55:in `block in run_initializers'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/initializable.rb:54:in `run_initializers'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application.rb:352:in `initialize!'
/Users/fuzzyri/git/stockland_api/config/environment.rb:5:in `<top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `block in require'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application.rb:328:in `require_environment!'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application.rb:448:in `block in run_tasks_blocks'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/bugsnag-5.0.1/lib/bugsnag/rake.rb:12:in `execute_with_bugsnag'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/commands/rake_proxy.rb:14:in `block in run_rake_task'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/commands/rake_proxy.rb:11:in `run_rake_task'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:51:in `run_command!'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>'
/Users/fuzzyri/git/stockland_api/bin/rails:9:in `require'
/Users/fuzzyri/git/stockland_api/bin/rails:9:in `<top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/spring-2.0.1/lib/spring/client/rails.rb:28:in `load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/spring-2.0.1/lib/spring/client/rails.rb:28:in `call'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/spring-2.0.1/lib/spring/client/command.rb:7:in `call'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/spring-2.0.1/lib/spring/client.rb:30:in `run'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/spring-2.0.1/bin/spring:49:in `<top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/spring-2.0.1/lib/spring/binstub.rb:31:in `load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/spring-2.0.1/lib/spring/binstub.rb:31:in `<top (required)>'
/Users/fuzzyri/git/stockland_api/bin/spring:14:in `require'
/Users/fuzzyri/git/stockland_api/bin/spring:14:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
PG::UndefinedTable: ERROR: relation "admins" does not exist
LINE 8: WHERE a.attrelid = '"admins"'::regclass
^
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:88:in `async_exec'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:88:in `block in query'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/abstract_adapter.rb:589:in `block in log'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/abstract_adapter.rb:583:in `log'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:87:in `query'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:739:in `column_definitions'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:227:in `columns'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/schema_cache.rb:56:in `columns'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/connection_adapters/schema_cache.rb:62:in `columns_hash'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/model_schema.rb:441:in `load_schema!'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/attributes.rb:233:in `load_schema!'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/attribute_decorators.rb:28:in `load_schema!'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/model_schema.rb:436:in `load_schema'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activerecord-5.0.1/lib/active_record/model_schema.rb:344:in `columns'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/lib/adaptors/wallaby/active_record/model_decorator/fields_builder.rb:7:in `general_fields'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/lib/adaptors/wallaby/active_record/model_decorator.rb:57:in `general_fields'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/lib/adaptors/wallaby/active_record/model_decorator.rb:4:in `fields'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/lib/adaptors/wallaby/active_record/model_decorator.rb:18:in `form_fields'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/lib/decorators/wallaby/resource_decorator.rb:20:in `form_fields'
/Users/fuzzyri/git/stockland_api/app/decorators/admin_decorator.rb:35:in `<class:AdminDecorator>'
/Users/fuzzyri/git/stockland_api/app/decorators/admin_decorator.rb:1:in `<top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:477:in `load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:477:in `block in load_file'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:662:in `new_constants_in'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:476:in `load_file'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:375:in `block in require_or_load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:37:in `block in load_interlock'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies/interlock.rb:12:in `block in loading'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/concurrency/share_lock.rb:150:in `exclusive'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies/interlock.rb:11:in `loading'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:37:in `load_interlock'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:358:in `require_or_load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:511:in `load_missing_constant'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:203:in `const_missing'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:268:in `const_get'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:268:in `block in constantize'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:266:in `each'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:266:in `inject'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:266:in `constantize'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/core_ext/string/inflections.rb:66:in `constantize'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/app/routes/wallaby/resources_router.rb:16:in `block in preload'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/app/routes/wallaby/resources_router.rb:13:in `each'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/app/routes/wallaby/resources_router.rb:13:in `preload'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/app/routes/wallaby/resources_router.rb:24:in `<top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:477:in `load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:477:in `block in load_file'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:662:in `new_constants_in'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:476:in `load_file'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:375:in `block in require_or_load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:37:in `block in load_interlock'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies/interlock.rb:12:in `block in loading'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/concurrency/share_lock.rb:150:in `exclusive'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies/interlock.rb:11:in `loading'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:37:in `load_interlock'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:358:in `require_or_load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:511:in `load_missing_constant'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:203:in `const_missing'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/config/routes.rb:7:in `block (2 levels) in <top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/actionpack-5.0.1/lib/action_dispatch/routing/mapper.rb:855:in `scope'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/config/routes.rb:6:in `block in <top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/actionpack-5.0.1/lib/action_dispatch/routing/route_set.rb:389:in `instance_exec'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/actionpack-5.0.1/lib/action_dispatch/routing/route_set.rb:389:in `eval_block'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/actionpack-5.0.1/lib/action_dispatch/routing/route_set.rb:371:in `draw'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/wallaby-5.0.0/config/routes.rb:1:in `<top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `block in load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:40:in `block in load_paths'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:40:in `each'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:40:in `load_paths'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:16:in `reload!'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:26:in `block in updater'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/file_update_checker.rb:77:in `execute'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:27:in `updater'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:7:in `execute_if_updated'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application/finisher.rb:119:in `block in <module:Finisher>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/initializable.rb:30:in `instance_exec'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/initializable.rb:30:in `run'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/initializable.rb:55:in `block in run_initializers'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/initializable.rb:54:in `run_initializers'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application.rb:352:in `initialize!'
/Users/fuzzyri/git/stockland_api/config/environment.rb:5:in `<top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `block in require'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application.rb:328:in `require_environment!'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/application.rb:448:in `block in run_tasks_blocks'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/bugsnag-5.0.1/lib/bugsnag/rake.rb:12:in `execute_with_bugsnag'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/commands/rake_proxy.rb:14:in `block in run_rake_task'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/commands/rake_proxy.rb:11:in `run_rake_task'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:51:in `run_command!'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>'
/Users/fuzzyri/git/stockland_api/bin/rails:9:in `require'
/Users/fuzzyri/git/stockland_api/bin/rails:9:in `<top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/spring-2.0.1/lib/spring/client/rails.rb:28:in `load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/spring-2.0.1/lib/spring/client/rails.rb:28:in `call'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/spring-2.0.1/lib/spring/client/command.rb:7:in `call'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/spring-2.0.1/lib/spring/client.rb:30:in `run'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/spring-2.0.1/bin/spring:49:in `<top (required)>'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/spring-2.0.1/lib/spring/binstub.rb:31:in `load'
/Users/fuzzyri/.rvm/gems/ruby-2.3.3@geni/gems/spring-2.0.1/lib/spring/binstub.rb:31:in `<top (required)>'
/Users/fuzzyri/git/stockland_api/bin/spring:14:in `require'
/Users/fuzzyri/git/stockland_api/bin/spring:14:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)
I'm seeing this in our development log:
WALLABY DEBUG: Reloading after Rails' reload...
/Users/rbates/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/closure_tree-7.1.0/lib/closure_tree/support.rb:36: warning: already initialized constant ObjectiveHierarchy
/Users/rbates/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/closure_tree-7.1.0/lib/closure_tree/support.rb:36: warning: previous definition of ObjectiveHierarchy was here
/Users/rbates/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/closure_tree-7.1.0/lib/closure_tree/support.rb:36: warning: already initialized constant OrgNodeHierarchy
/Users/rbates/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/closure_tree-7.1.0/lib/closure_tree/support.rb:36: warning: previous definition of OrgNodeHierarchy was here
It appears Wallaby is loading these classes which closure_tree doesn't expect. I tried adding the classes to Wallaby's exclude
config but I still see these warnings. Can you make it so excluding models makes it so Wallaby doesn't attempt to require them?
Rails 7.1 introduced a change which requires an attribute exists when specifying enum
in a model. Otherwise it raises Unknown enum attribute
error. This means it's important that migrations don't load the model when they run, otherwise it will raise this error and you won't be able to generate the column to resolve it.
This normally isn't an issue but Wallaby loads models before migrations are run. Is there a way to bypass Wallaby eager loading when running migrations?
Actually might be nice to bypass the custom loading behavior for all cases because it seems to be a common source of issues. If the reason Wallaby eager loads models is so it knows which models exist, I'd much prefer manually managing a list of models for Wallaby so we can use Rails normal loading logic.
Update: Another issue with preloading is when setting up the app on a new machine, the rails db:create
command doesn't work since Wallaby tries to load the models which depends on the database existing. It's not hard to create it outside of this command, just another hiccup.
Wallaby appears to be using the layout defined in the main ::ApplicationController
by default. I had to add this to our wallaby ApplicationController
to get it to use the default theme.
self.theme_name = "wallaby/resources"
Shouldn't this theme be used by default and override the layout defined in ::ApplicationController
? It might also be nice to add information on the default them to the themes docs.
I'm getting strange behavior after changing code and reloading the page. Sometimes the code changes don't take effect, but other times it loses reference to the custom decorators and templates.
I've been able to duplicate this on the demo app after upgrading to Wallaby 6. Updating a decorator's code and reloading the page seems to cause all decorators to reference ApplicationDecorator
. Also custom templates like views/products/edit.html.erb
no longer render instead fall back to their default templates.
Restarting the app fixes the problem until the code changes again.
When trying to boot with classes within app/controllers/concerns
or app/models/concerns
or app/services
Wallaby fails to start with:
/Users/mikel/.rvm/gems/ruby-2.1.6@enlight/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:495:in `load_missing_constant': Unable to autoload constant GenerateEnrollmentsCsvService, expected /Users/mikel/Code/enlight/app/services/generate_enrollments_csv_service.rb to define it (LoadError)
from /Users/mikel/.rvm/gems/ruby-2.1.6@enlight/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:184:in `const_missing'
from /Users/mikel/.rvm/gems/ruby-2.1.6@enlight/gems/activesupport-4.2.6/lib/active_support/inflector/methods.rb:261:in `const_get'
from /Users/mikel/.rvm/gems/ruby-2.1.6@enlight/gems/activesupport-4.2.6/lib/active_support/inflector/methods.rb:261:in `block in constantize'
from /Users/mikel/.rvm/gems/ruby-2.1.6@enlight/gems/activesupport-4.2.6/lib/active_support/inflector/methods.rb:259:in `each'
from /Users/mikel/.rvm/gems/ruby-2.1.6@enlight/gems/activesupport-4.2.6/lib/active_support/inflector/methods.rb:259:in `inject'
from /Users/mikel/.rvm/gems/ruby-2.1.6@enlight/gems/activesupport-4.2.6/lib/active_support/inflector/methods.rb:259:in `constantize'
from /Users/mikel/.rvm/gems/ruby-2.1.6@enlight/gems/activesupport-4.2.6/lib/active_support/core_ext/string/inflections.rb:66:in `constantize'
from /Users/mikel/.rvm/gems/ruby-2.1.6@enlight/gems/wallaby-4.0.1/app/routes/wallaby/resources_router.rb:13:in `block in <top (required)>'
from /Users/mikel/.rvm/gems/ruby-2.1.6@enlight/gems/wallaby-4.0.1/app/routes/wallaby/resources_router.rb:11:in `each'
from /Users/mikel/.rvm/gems/ruby-2.1.6@enlight/gems/wallaby-4.0.1/app/routes/wallaby/resources_router.rb:11:in `<top (required)>'
Changing the service from:
class GenerateEnrollmentsCSVService
end
to
module Service
class GenerateEnrollmentsCSVService
end
end
Does fix it, but you have to set this everywhere in the app. Wallaby should be able to handle these classes on usual Rails paths without further modification like the rest of Rails can.
We are moving all our app assets to Webpack(er) which means we only need Sprockets for Wallaby. It would be nice if Wallaby did not depend on Sprockets to reduce our app dependencies.
What about creating a node module for wallaby that we can require into our project which would include the JS dependencies and assets. Then add a config option for using webpack instead of sprockets.
Maybe move the sprockets portion into a wallaby-sprockets
gem that one can use if they want the assets through sprockets.
What do you think?
I have a custom route to add a custom action like this:
resources :accounts do
member do
get :extend_trial
end
end
This causes the Data
menu to disappear when visiting the account pages because it loses reference to current_engine
.
I tried specifying the engine_name
in the controller:
self.engine_name = "wallaby_engine"
However this causes another error:
ActionController::UrlGenerationError - No route matches {:action=>"index", :controller=>"support_admin/accounts", :sort=>"id asc"}, missing required keys: [:resources]
Not certain how to proceed from here.
It appears cancancan
was removed as a gem dependency however app/security/ability.rb
in wallaby-core
still references it. This results in the error: uninitialized constant CanCan (NameError)
when the file is loaded.
You may only see this error when eager loading is enabled in the Rails app environment config.
When the "Data" dropdown menu has too many items in it, it goes off the bottom of the page and there's no way to scroll down to access the items at the bottom.
"><script>alert('steve');</script>
.You'll notice the tag-name is truncated - and there is an "(i)" symbol:
Hover over that (i) symbol:
Obviously this just shows an alert. The login-session cookie could be stolen, or things deleted..
I have a model which has_paper_trail
using the paper_trail gem. When visiting the show
action of this model it attempts to render the internal has_many :versions
association that PaperTrail sets up and results in this error:
NoMethodError - undefined method `to_label' for #<PaperTrail::Version:0x00007f8ca4983338>
Did you mean? to_global_id
This is a rather confusing error message. The logs show this:
[WALLABY] Don't know how to handle this model PaperTrail::Version.
Perhaps raise an error on this which is more informative. Also maybe some information on how to resolve the problem.
I first tried adding it to config.models.exclude
but that didn't seem to remove the error.
I then added it to config.custom_models
which appears to have worked. However the Versions section attempts to link to that version and a link to create versions. Maybe disable the link if it's an excluded model?
Hey @tian-im. Was hoping to use this gem in a project, but cannot because of a Devise compatibility (I am using Devise 4+). Any chance there is an easy work around?
as titled
Hi, @tian-im
sorting is not properly work
suppose i have column in table name
and email
when i first sort name its work fine but after that if i try to sort any other column in table its not working
I want to feature like one column sort at a time
I was able to initialize it on Rails 6 with next gems:
gem 'wallaby', github: 'wallaby-rails/wallaby'
gem 'wallaby-core', github: 'wallaby-rails/wallaby-core'
gem 'wallaby-active_record', github: 'wallaby-rails/wallaby-active_record'
gem 'kaminari'
gem 'wallaby-her', github: 'wallaby-rails/wallaby-her'
gem 'codemirror-rails', github: 'fixlr/codemirror-rails', branch: 'updates'
Shouldn't kaminari be added as dependency to gemspec? Also it currently requires wallaby-her.
I am seeing a lot of these lines in the development log when making changes to our app and loading a page:
[WALLABY] Preload warning: Unable to autoload constant Concerns::Importable ...
Where Importable
is the name of a concern. It does this for every concern module defined in the app.
Also changes made to any wallaby subclass does not seem to take effect. I think it may be related to this.
I haven't had time to dive into this further so perhaps this is an issue with our app config and would happen with any engine. I'll comment on this if I find out more.
Wallaby version: 6.1.0
Rails version: 5.2.4.1
I'm seeing this error when rendering a custom form action since upgrading to Rails 7.0.3. It works in Rails 7.0.2.4.
1.1) Failure/Error: <%= type_render decorated.form_type_of("trial_end_date"), field_name: "trial_end_date", form: form %>
ActionView::Template::Error:
Object is not decorated.
# ./app/views/support_admin/accounts/extend_trial.html.erb:20:in `block in _app_views_support_admin_accounts_extend_trial_html_erb___2158087891327239296_1753240'
# ./app/views/support_admin/accounts/extend_trial.html.erb:12:in `_app_views_support_admin_accounts_extend_trial_html_erb___2158087891327239296_1753240'
# ./app/controllers/support_admin/accounts_controller.rb:3:in `extend_trial'
# ./app/controllers/concerns/slow_request_concern.rb:14:in `notify_slow_requests'
# ./app/controllers/application_controller.rb:82:in `set_time_zone!'
# ------------------
# --- Caused by: ---
# ArgumentError:
# Object is not decorated.
# ./app/views/support_admin/accounts/extend_trial.html.erb:20:in `block in _app_views_support_admin_accounts_extend_trial_html_erb___2158087891327239296_1753240'
I'm uncertain why it says object is not decorated when it has decorated = decorate resource
at the top of the template. Any ideas? Have you noticed this error in the latest version of Rails?
I am running specs with spring and after making a change to the code I get this error:
A copy of SupportAdmin::ApplicationAuthorizer has been removed from the module tree but is still active!
I think this is related to #178. My guess is the internal mapper needs to be cleared when reloading.
I received this deprecation warning after upgrading to Rails 6.
DEPRECATION WARNING: Initialization autoloaded the constants SupportAdmin, ApplicationHelper, ...
Being able to do this is deprecated. Autoloading during initialization is going
to be an error condition in future versions of Rails.
Reloading does not reboot the application, and therefore code executed during
initialization does not run again. So, if you reload SupportAdmin, for example,
the expected changes won't be reflected in that stale Module object.
`config.autoloader` is set to `classic`. These autoloaded constants would have been unloaded if `config.autoloader` had been set to `:zeitwerk`.
Please, check the "Autoloading and Reloading Constants" guide for solutions.
(called from <top (required)> at /Users/rbates/code/envisage/config/environment.rb:5)
In my config I have:
# in config/initializers/wallaby.rb
Wallaby.config do |config|
config.models.exclude [
Ckeditor::Asset,
Ckeditor::AttachmentFile,
Ckeditor::Picture,
PaperTrail::Version
]
config.mapping.resources_controller = SupportAdmin::ApplicationController
config.mapping.resource_decorator = SupportAdmin::ApplicationDecorator
config.mapping.model_servicer = SupportAdmin::ApplicationServicer
config.mapping.model_authorizer = SupportAdmin::ApplicationAuthorizer
# ...
end
The issue is these classes are in the autoload path and initializers should not reference classes which are autoloaded. This causes issues when the class is reloaded later since it loses reference to it.
I suggest always using strings to configure classes:
Wallaby.config do |config|
config.models.exclude %w[
Ckeditor::Asset,
Ckeditor::AttachmentFile,
Ckeditor::Picture,
PaperTrail::Version
]
config.mapping.resources_controller = "SupportAdmin::ApplicationController"
config.mapping.resource_decorator = "SupportAdmin::ApplicationDecorator"
config.mapping.model_servicer = "SupportAdmin::ApplicationServicer"
config.mapping.model_authorizer = "SupportAdmin::ApplicationAuthorizer"
# ...
end
And then only constantize
them at the last moment when they need to be loaded. It appears this works for the models config but not for the others.
Update: actually strings for model classes aren't working for me either. I get a wrong constant name
error.
Is Wallaby compatible with Bootstrap 5? I got this error after running bundle update wallaby-view
.
SassC::SyntaxError - Error: Undefined variable: "$emphasized-link-hover-darken-percentage".
on line 131:7 of ../../.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-6.1.3/app/assets/stylesheets/wallaby/base/_mixins.scss, in mixin `text-emphasis-variant`
from line 4:10 of ../../.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-6.1.3/app/assets/stylesheets/wallaby/components/_text.scss
from line 16:9 of ../../.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/wallaby-6.1.3/app/assets/stylesheets/wallaby/base.scss
from line 2:9 of app/assets/stylesheets/wallaby/application.scss
>> @if $emphasized-link-hover-darken-percentage != 0 {
I assume this is because the bootstrap
gem updated to v5 when I updated wallaby. You might want to constrain wallaby to bootstrap v4.
cc @tian-im
The DefaultAuthorizationProvider.args_from
method returns an empty hash so it doesn't track any args. It would be nice if it passed the context
so we have access to that in the app's ApplicationAuthorizer
.
Currently what I'm doing is inheriting from DefaultAuthorizationProvider
with a custom provider class that tracks the user.
I attempted to run rails db:create
on the demo app and it failed with the following:
ActiveRecord::NoDatabaseError: FATAL: database "wallaby_demo_development" does not exist
/Users/rbates/code/gh/wallaby_demo/app/decorators/product_decorator.rb:2:in `<class:ProductDecorator>'
/Users/rbates/code/gh/wallaby_demo/app/decorators/product_decorator.rb:1:in `<top (required)>'
/Users/rbates/code/gh/wallaby_demo/config/environment.rb:5:in `<top (required)>'
I believe this is because decorators depend on the database existing before the class will load. Perhaps check if the database exists before attempting to use it.
I started using this then realised when creating templates it's using Bootstrap 3 and FontAwesome 4.
Are you open to upgrading these as they've been GA for >6 months now?
It appears the current_user
method is being overridden in Wallaby::SecureController.
This can conflict with the existing current_user
method defined in the app. For example, we have current_user
and current_admin_user
and we want to use the latter for Wallaby. The issue is the current_user
method within Wallaby controller subclasses returns an AdminUser
instance instead of a normal User
.
This causes confusion and everything in our main ApplicationController needs to check which type of user is being returned by current_user
.
I suggest renaming current_user
to wallaby_current_user
and use that in Wallaby internals.
The readyPrefix
function in setup.js.erb
is dynamically generated depending on the turbolinks config. Unfortunately sprockets seems to cache this file and doesn't flush it until the file contents change. This means toggling the config will not update the asset cache.
Perhaps remove the dynamic generation in favor of detecting Turbolinks through JS.
I'm looking into upgrading to Ruby 3.0 from Ruby 2.7.8 and am seeing deprecation warnings.
DEPRECATION WARNING: /Users/rbates/.rbenv/versions/2.7.8/lib/ruby/gems/2.7.0/gems/wallaby-6.1.5/app/views/wallaby/resources/_index_query.html.erb:4: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
DEPRECATION WARNING: /Users/rbates/.rbenv/versions/2.7.8/lib/ruby/gems/2.7.0/gems/wallaby-core-0.2.7/lib/authorizers/wallaby/model_authorizer.rb:73: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
DEPRECATION WARNING: /Users/rbates/.rbenv/versions/2.7.8/lib/ruby/gems/2.7.0/gems/wallaby-core-0.2.7/lib/helpers/wallaby/base_helper.rb:59: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
DEPRECATION WARNING: /Users/rbates/.rbenv/versions/2.7.8/lib/ruby/gems/2.7.0/gems/wallaby-core-0.2.7/lib/utils/wallaby/locale.rb:18: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
DEPRECATION WARNING: /Users/rbates/.rbenv/versions/2.7.8/lib/ruby/gems/2.7.0/gems/wallaby-core-0.2.7/lib/interfaces/wallaby/model_authorization_provider.rb:41: warning: The called method `initialize' is defined here /Users/rbates/.rbenv/versions/2.7.8/lib/ruby/gems/2.7.0/gems/wallaby-6.1.5/app/views/wallaby/resources/_index_query.html.erb:4: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
There may be more.
@tian-im any chance to get this fixed?
So that ActiveRecord::SchemaMigration
can be either added or configured to the model list.
You can confirm its existence by checking the Wallaby::Map.mode_map
I have an accounts/_resource_actions.html.erb
partial where I reference decorated
and it's returning an instance of ApplicationDecorator
instead of the AccountDecorator
like it did in Rails 7.1.1. Perhaps something changed with how loading works?
Failure/Error: <% if decorated.intercom_url.present? %>
ActionView::Template::Error:
undefined method `intercom_url' for #<SupportAdmin::ApplicationDecorator:0x0000000112e99950...
Any ideas @tian-im?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.