Giter Site home page Giter Site logo

Comments (14)

fatuhoku avatar fatuhoku commented on July 2, 2024

@zeisler Any ideas?

from active_mocker.

zeisler avatar zeisler commented on July 2, 2024

Any included modules are assumed to be mock compatible code if is not then you may need to disable that feature with this line.
ActiveMocker::Config.disable_modules_and_constants = true

It seem like you are having a more specific issue, I will look into to it, but for now that line should get you past the error.

from active_mocker.

fatuhoku avatar fatuhoku commented on July 2, 2024

I've attached the full stack trace if it helps here:

Concerns::Approval has the following errors:
Unable to autoload constant Concerns::Approval, expected ~/myproj/app/models/concerns/approval.rb to define it
warn
Unable to autoload constant Concerns::Approval, expected ~/myproj/app/models/concerns/approval.rb to define it
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:495:in `load_missing_constant'
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:184:in `const_missing'
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/inflector/methods.rb:276:in `const_get'
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/inflector/methods.rb:276:in `block in constantize'
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/inflector/methods.rb:259:in `each'
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/inflector/methods.rb:259:in `inject'
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/inflector/methods.rb:259:in `constantize'
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/core_ext/string/inflections.rb:66:in `constantize'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:38:in `get_model_const'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:17:in `block in call'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:15:in `each'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:15:in `call'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/public_methods.rb:30:in `create_mocks'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/task.rake:12:in `block (2 levels) in <top (required)>'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:240:in `call'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:240:in `block in execute'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:235:in `each'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:235:in `execute'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:179:in `block in invoke_with_call_chain'
~/.rvm/rubies/ruby-2.2.4/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:172:in `invoke_with_call_chain'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:165:in `invoke'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:150:in `invoke_task'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:106:in `block (2 levels) in top_level'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:106:in `each'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:106:in `block in top_level'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:115:in `run_with_threads'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:100:in `top_level'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:78:in `block in run'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:176:in `standard_exception_handling'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:75:in `run'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/bin/rake:33:in `<top (required)>'
~/.rvm/gems/ruby-2.2.4/bin/rake:23:in `load'
~/.rvm/gems/ruby-2.2.4/bin/rake:23:in `<main>'
~/.rvm/gems/ruby-2.2.4/bin/ruby_executable_hooks:15:in `eval'
~/.rvm/gems/ruby-2.2.4/bin/ruby_executable_hooks:15:in `<main>'
LoadError
Concerns::Approval has the following errors:
undefined method `to_a' for false:FalseClass
warn
undefined method `to_a' for false:FalseClass
~/.rvm/gems/ruby-2.2.4/gems/dissociated_introspection-0.4.1/lib/dissociated_introspection/ruby_class.rb:34:in `class_name'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/parent_class.rb:57:in `class_name'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/parent_class.rb:16:in `call'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/mock_creator.rb:91:in `verify_class'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/mock_creator.rb:26:in `create'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:53:in `create_mock'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:24:in `block (2 levels) in call'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:22:in `open'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:22:in `block in call'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:15:in `each'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:15:in `call'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/public_methods.rb:30:in `create_mocks'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/task.rake:12:in `block (2 levels) in <top (required)>'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:240:in `call'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:240:in `block in execute'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:235:in `each'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:235:in `execute'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:179:in `block in invoke_with_call_chain'
~/.rvm/rubies/ruby-2.2.4/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:172:in `invoke_with_call_chain'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:165:in `invoke'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:150:in `invoke_task'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:106:in `block (2 levels) in top_level'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:106:in `each'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:106:in `block in top_level'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:115:in `run_with_threads'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:100:in `top_level'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:78:in `block in run'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:176:in `standard_exception_handling'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:75:in `run'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/bin/rake:33:in `<top (required)>'
~/.rvm/gems/ruby-2.2.4/bin/rake:23:in `load'
~/.rvm/gems/ruby-2.2.4/bin/rake:23:in `<main>'
~/.rvm/gems/ruby-2.2.4/bin/ruby_executable_hooks:15:in `eval'
~/.rvm/gems/ruby-2.2.4/bin/ruby_executable_hooks:15:in `<main>'
NoMethodError
Concerns::RecordChanges has the following errors:
Unable to autoload constant Concerns::RecordChanges, expected ~/myproj/app/models/concerns/record_changes.rb to define it
warn
Unable to autoload constant Concerns::RecordChanges, expected ~/myproj/app/models/concerns/record_changes.rb to define it
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:495:in `load_missing_constant'
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:184:in `const_missing'
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/inflector/methods.rb:276:in `const_get'
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/inflector/methods.rb:276:in `block in constantize'
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/inflector/methods.rb:259:in `each'
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/inflector/methods.rb:259:in `inject'
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/inflector/methods.rb:259:in `constantize'
~/.rvm/gems/ruby-2.2.4/gems/activesupport-4.2.5/lib/active_support/core_ext/string/inflections.rb:66:in `constantize'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:38:in `get_model_const'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:17:in `block in call'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:15:in `each'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:15:in `call'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/public_methods.rb:30:in `create_mocks'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/task.rake:12:in `block (2 levels) in <top (required)>'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:240:in `call'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:240:in `block in execute'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:235:in `each'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:235:in `execute'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:179:in `block in invoke_with_call_chain'
~/.rvm/rubies/ruby-2.2.4/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:172:in `invoke_with_call_chain'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:165:in `invoke'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:150:in `invoke_task'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:106:in `block (2 levels) in top_level'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:106:in `each'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:106:in `block in top_level'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:115:in `run_with_threads'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:100:in `top_level'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:78:in `block in run'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:176:in `standard_exception_handling'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:75:in `run'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/bin/rake:33:in `<top (required)>'
~/.rvm/gems/ruby-2.2.4/bin/rake:23:in `load'
~/.rvm/gems/ruby-2.2.4/bin/rake:23:in `<main>'
~/.rvm/gems/ruby-2.2.4/bin/ruby_executable_hooks:15:in `eval'
~/.rvm/gems/ruby-2.2.4/bin/ruby_executable_hooks:15:in `<main>'
LoadError
Concerns::RecordChanges has the following errors:
undefined method `to_a' for false:FalseClass
warn
undefined method `to_a' for false:FalseClass
~/.rvm/gems/ruby-2.2.4/gems/dissociated_introspection-0.4.1/lib/dissociated_introspection/ruby_class.rb:34:in `class_name'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/parent_class.rb:57:in `class_name'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/parent_class.rb:16:in `call'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/mock_creator.rb:91:in `verify_class'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/mock_creator.rb:26:in `create'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:53:in `create_mock'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:24:in `block (2 levels) in call'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:22:in `open'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:22:in `block in call'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:15:in `each'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/generate.rb:15:in `call'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/public_methods.rb:30:in `create_mocks'
~/.rvm/gems/ruby-2.2.4/gems/active_mocker-2.1.3/lib/active_mocker/task.rake:12:in `block (2 levels) in <top (required)>'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:240:in `call'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:240:in `block in execute'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:235:in `each'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:235:in `execute'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:179:in `block in invoke_with_call_chain'
~/.rvm/rubies/ruby-2.2.4/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:172:in `invoke_with_call_chain'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/task.rb:165:in `invoke'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:150:in `invoke_task'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:106:in `block (2 levels) in top_level'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:106:in `each'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:106:in `block in top_level'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:115:in `run_with_threads'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:100:in `top_level'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:78:in `block in run'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:176:in `standard_exception_handling'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/lib/rake/application.rb:75:in `run'
~/.rvm/gems/ruby-2.2.4/gems/rake-10.5.0/bin/rake:33:in `<top (required)>'
~/.rvm/gems/ruby-2.2.4/bin/rake:23:in `load'
~/.rvm/gems/ruby-2.2.4/bin/rake:23:in `<main>'
~/.rvm/gems/ruby-2.2.4/bin/ruby_executable_hooks:15:in `eval'
~/.rvm/gems/ruby-2.2.4/bin/ruby_executable_hooks:15:in `<main>'
NoMethodError
Error Summary
errors: 0, warn: 4, info: 0
Failed models: Concerns::Approval, Concerns::RecordChanges
2 mock(s) out of 21 failed.
To see more/less detail set error_verbosity = 0, 1, 2, 3

from active_mocker.

fatuhoku avatar fatuhoku commented on July 2, 2024

@zeisler The line ActiveMocker::Config.disable_modules_and_constants = true doesn't seem to have helped with the error.

from active_mocker.

zeisler avatar zeisler commented on July 2, 2024

I failed to mention that you need to run rake active_mocker:build again after adding that to config/initailizers/active_mocker.rb

from active_mocker.

markburns avatar markburns commented on July 2, 2024

We've been seeing this with any of our modules in a namespace too. Was going to maybe look at what the fix was next week.

e.g.

#app/models/product.rb
class Product < ActiveRecord::Base
  # implicit -> Product::SomeNamespacedModule
  include SomeNamespacedModule
end

#app/models/product/some_namespaced_module.rb
class Product
  module SomeNamespaceModule
    def some_method
    end
  end
end

We've hacked a fix which is to edit the actual models to say include Product::SomeNamespacedModule. But that is obviously temporary whilst we look into the real solution.

from active_mocker.

fatuhoku avatar fatuhoku commented on July 2, 2024

Also when I try to run my test I get:

~/myproj/spec/mocks/booking_mock.rb:5:in `<class:BookingMock>': uninitialized constant BookingMock::RecordChanges (NameError)

Hmm.

from active_mocker.

zeisler avatar zeisler commented on July 2, 2024

The solution here is make all modules fully specify there namespace. These changes will take place in both/either https://github.com/zeisler/active_mocker/blob/master/lib/active_mocker/mock_creator.rb or https://github.com/zeisler/dissociated_introspection.

from active_mocker.

zeisler avatar zeisler commented on July 2, 2024

The reason this is happening is because in dissociated_introspection the module inclusion is being done in complete isolation without any context of where things are defined. There is no good reason to keep doing it that way, I should be able to compare the dissociated_introspection class version and the real model to determine the full name of included modules.

from active_mocker.

markburns avatar markburns commented on July 2, 2024

Sweet. So @zeisler I'm guessing this project is something you look at on weekends? We'll probably be wanting to fix (and provide a PR) for this issue during the next week. Do you have any particular pointers to look at for a fix? I've had a glance over the dissociated_introspection gem and it seems like it might be tricky.

The thing that makes me uncomfortable is the cyclic dependencies.
So in this scenario the Rails app depends on the gem, but also provides code which the gem (would) depend on. The dissociated_introspection gem seems like a really sweet solution to a tricky dependency problem.

I like the philosophy (and speed) of explicit dependencies. What I don't want to do is end up triggering loads of unnecessary (read slow) Rails autoloading at any point. But perhaps it is unavoidable with implicit module namespaces.

Do you have any thoughts on the matter, or a particular solution in mind?

from active_mocker.

zeisler avatar zeisler commented on July 2, 2024

There are two explicit phases of ActiveMocker the generation phase and running of the mocks phase. For the generation phase rails is loaded, it's necessary to get the schema information, because not everyone has a schema.rb. The purpose of dissociated_introspection is because of the difficulty to know what methods are user defined and what are ActiveRecord defined, through meta programming. So removing ActiveRecord from the picture is what dissociated_introspection does. The reason I think it may be necessary to use dissociated_introspection version of module inclusion is because ActiveRecord may include any number of modules dynamically. (There may be a way other than a blacklist to find the user defined modules in the hierarchy, worth looking into.) So I am suggesting that a fuzzy search be done from dissociated_introspection module list to the included modules on the ActiveRecord to obtain the correct namespace. That being the case the change would take place in ActiveMocker::MockCreator class and no change would be needed in dissociated_introspection.

from active_mocker.

markburns avatar markburns commented on July 2, 2024

Interesting idea. I'll take a good look at it next week.
It may be possible to use source location info too to determine user code vs framework code

from active_mocker.

zeisler avatar zeisler commented on July 2, 2024

With this PR #62 it should address @markburns example not sure if it will also fix @fatuhoku issue. Let me know.

from active_mocker.

fatuhoku avatar fatuhoku commented on July 2, 2024

I've switched over to using Zeus to achieve fast tests for the time being. We also have been moving away from using Concerns :P

from active_mocker.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.