copycopter / copycopter-server Goto Github PK
View Code? Open in Web Editor NEWCopycopter Server is open source. Run it as a web service.
Home Page: http://copycopter.com
License: MIT License
Copycopter Server is open source. Run it as a web service.
Home Page: http://copycopter.com
License: MIT License
Use Jekyll or Sinatra w/ HTML page.
We're not using the asset pipeline yet in this app, so just use the generated jQuery and unobtrusive Javascript (which is used for things like deleting blurbs or any DELETE link).
Given that most users are going to fork this project, having a 'server' project in their organization is not clear. Granted they can rename the project but I feel we shouldn't have to require them to do this. I recommend changing the project names to 'copycopter.server' and 'copycopter.client'. Thoughts?
I'm writeing my app with :pl
locale and I've got custom plural method (because I must have one) that look like
def slavic(n)
if n == 1
:one
elsif [2, 3, 4].include?(n % 10) and ![12, 13, 14, 22, 23, 24].include?(n % 100)
:few
else
:other
end
end
{
pl: {
i18n: {
plural: {
keys: [:one, :few, :other],
rule: ->(n){ slavic n }
}
}
}
}
But when I use CopyCopter and try to translate with t MyModel.model_name.human count: 2
it return :other
key instead of :few
.
To avoid double render errors
As a user, when editing a copycopter key the editor slides to the right of the screen out of the container. This should not happen.
This did not get ported over from thoughtbot's service because it resided in Saucy.
Better to be explicit
This may require patching Capybara Webkit to support basic auth.
Use Mario Bros. footer on all pages b/c it's awesome.
Like doc
I'd like to be able to mix copycopter with some inline edit gem so that my clients can modify them inline on the copycopter client app.
I think that probably the best way to accomplish this is to ping copycopter with POST requests and GET back the updated text, but I don't see that there is an existing way to do this.
Would be nice to have a link back to the search results from a blurb. Another alternative would be to have the blurb edit box just above the search results (all changed through ajax).
When I'm going to blurb edit form sometimes text field is floating on right outside the main frame and screen. It look ugly.
It looks that it happens if I don't have translation for this blurb yet.
Ask Joe the history of why it's in the domain model but not interface.
It's a little bit odd but CopyCopter shouldn't be translated with itself? It will be nice :)
Currently anyone can create a project if they have the url for the copycopter instance. Basic auth should be added to the create project route.
Rather than statically using 'your-copycopter-server.herokuapp.com', we could tell where the app is deployed and use that to make the process smoother.
It currently points to coptercopter/server instead of copycopter/copycopter-server.
Currently, with opening the API it leaves us open for the ability for a key to never get created. Since the api skips the whole load process of the I18N methods that create the key if it does not exist. It leads to situations where we deploy to production without having the proper keys and then have to scramble to add them via console.
Using Rails 2.3 with Ruby 1.8.7, Bundler version 1.1.3
When doing a rake deploy to a Heroku Bamboo stack, after Rake Db:migrate, I get the following error:
WARNING: #<ArgumentError: Illformed requirement
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"]>
# -*- encoding: utf-8 -*-
Gem::Specification.new do |s|
s.name = %q{copycopter_client}
s.version = "2.0.0"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if
s.respond_to? :required_rubygems_version=
s.authors = ["thoughtbot"]
s.date = %q{2012-03-16}
s.email = %q{[email protected]}
s.files = [".gitignore", ".rspec", ".travis.yml", "Appraisals",
"Gemfile", "Gemfile.lock", "MIT-LICENSE", "README.md", "Rakefile",
"copycopter_client.gemspec", "features/rails.feature",
"features/step_definitions/copycopter_server_steps.rb",
"features/step_definitions/rails_steps.rb", "features/support/env.rb",
"features/support/rails_server.rb", "gemfiles/2.3.gemfile",
"gemfiles/2.3.gemfile.lock", "gemfiles/3.0.gemfile",
"gemfiles/3.0.gemfile.lock", "gemfiles/3.1.gemfile",
"gemfiles/3.1.gemfile.lock", "init.rb", "lib/copycopter_client.rb",
"lib/copycopter_client/cache.rb", "lib/copycopter_client/client.rb",
"lib/copycopter_client/configuration.rb",
"lib/copycopter_client/errors.rb",
"lib/copycopter_client/i18n_backend.rb",
"lib/copycopter_client/poller.rb",
"lib/copycopter_client/prefixed_logger.rb",
"lib/copycopter_client/process_guard.rb",
"lib/copycopter_client/rails.rb", "lib/copycopter_client/railtie.rb",
"lib/copycopter_client/request_sync.rb",
"lib/copycopter_client/version.rb",
"lib/tasks/copycopter_client_tasks.rake",
"spec/copycopter_client/cache_spec.rb",
"spec/copycopter_client/client_spec.rb",
"spec/copycopter_client/configuration_spec.rb",
"spec/copycopter_client/i18n_backend_spec.rb",
"spec/copycopter_client/poller_spec.rb",
"spec/copycopter_client/prefixed_logger_spec.rb",
"spec/copycopter_client/process_guard_spec.rb",
"spec/copycopter_client/request_sync_spec.rb",
"spec/copycopter_client_spec.rb", "spec/spec_helper.rb",
"spec/support/client_spec_helpers.rb",
"spec/support/defines_constants.rb", "spec/support/fake_client.rb",
"spec/support/fake_copycopter_app.rb",
"spec/support/fake_html_safe_string.rb",
"spec/support/fake_logger.rb", "spec/support/fake_passenger.rb",
"spec/support/fake_resque_job.rb", "spec/support/fake_unicorn.rb",
"spec/support/middleware_stack.rb", "spec/support/writing_cache.rb",
"tmp/projects.json"]
s.homepage = %q{http://github.com/copycopter/copycopter-ruby-client}
s.require_paths = ["lib"]
s.rubygems_version = %q{1.3.7}
s.summary = %q{Client for the Copycopter copy management service}
s.test_files = ["features/rails.feature",
"features/step_definitions/copycopter_server_steps.rb",
"features/step_definitions/rails_steps.rb", "features/support/env.rb",
"features/support/rails_server.rb",
"spec/copycopter_client/cache_spec.rb",
"spec/copycopter_client/client_spec.rb",
"spec/copycopter_client/configuration_spec.rb",
"spec/copycopter_client/i18n_backend_spec.rb",
"spec/copycopter_client/poller_spec.rb",
"spec/copycopter_client/prefixed_logger_spec.rb",
"spec/copycopter_client/process_guard_spec.rb",
"spec/copycopter_client/request_sync_spec.rb",
"spec/copycopter_client_spec.rb", "spec/spec_helper.rb",
"spec/support/client_spec_helpers.rb",
"spec/support/defines_constants.rb", "spec/support/fake_client.rb",
"spec/support/fake_copycopter_app.rb",
"spec/support/fake_html_safe_string.rb",
"spec/support/fake_logger.rb", "spec/support/fake_passenger.rb",
"spec/support/fake_resque_job.rb", "spec/support/fake_unicorn.rb",
"spec/support/middleware_stack.rb", "spec/support/writing_cache.rb"]
if s.respond_to? :specification_version then
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
s.specification_version = 3
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
s.add_runtime_dependency(%q<i18n>, [">= 0.5.0"])
s.add_runtime_dependency(%q<json>, [">= 0"])
s.add_development_dependency(%q<appraisal>, ["~> 0.4"])
s.add_development_dependency(%q<aruba>, ["~> 0.3.2"])
s.add_development_dependency(%q<bourne>, [">= 0"])
s.add_development_dependency(%q<cucumber>, ["~> 0.10.0"])
s.add_development_dependency(%q<i18n>, [">= 0"])
s.add_development_dependency(%q<rails>, ["~> 3.1.0"])
s.add_development_dependency(%q<rake>,
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"])
s.add_development_dependency(%q<rspec>, ["~> 2.3"])
s.add_development_dependency(%q<sham_rack>, [">= 0"])
s.add_development_dependency(%q<sinatra>, [">= 0"])
s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
s.add_development_dependency(%q<thin>, [">= 0"])
s.add_development_dependency(%q<webmock>, [">= 0"])
s.add_development_dependency(%q<yard>, [">= 0"])
else
s.add_dependency(%q<i18n>, [">= 0.5.0"])
s.add_dependency(%q<json>, [">= 0"])
s.add_dependency(%q<appraisal>, ["~> 0.4"])
s.add_dependency(%q<aruba>, ["~> 0.3.2"])
s.add_dependency(%q<bourne>, [">= 0"])
s.add_dependency(%q<cucumber>, ["~> 0.10.0"])
s.add_dependency(%q<i18n>, [">= 0"])
s.add_dependency(%q<rails>, ["~> 3.1.0"])
s.add_dependency(%q<rake>,
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"])
s.add_dependency(%q<rspec>, ["~> 2.3"])
s.add_dependency(%q<sham_rack>, [">= 0"])
s.add_dependency(%q<sinatra>, [">= 0"])
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
s.add_dependency(%q<thin>, [">= 0"])
s.add_dependency(%q<webmock>, [">= 0"])
s.add_dependency(%q<yard>, [">= 0"])
end
else
s.add_dependency(%q<i18n>, [">= 0.5.0"])
s.add_dependency(%q<json>, [">= 0"])
s.add_dependency(%q<appraisal>, ["~> 0.4"])
s.add_dependency(%q<aruba>, ["~> 0.3.2"])
s.add_dependency(%q<bourne>, [">= 0"])
s.add_dependency(%q<cucumber>, ["~> 0.10.0"])
s.add_dependency(%q<i18n>, [">= 0"])
s.add_dependency(%q<rails>, ["~> 3.1.0"])
s.add_dependency(%q<rake>,
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"])
s.add_dependency(%q<rspec>, ["~> 2.3"])
s.add_dependency(%q<sham_rack>, [">= 0"])
s.add_dependency(%q<sinatra>, [">= 0"])
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
s.add_dependency(%q<thin>, [">= 0"])
s.add_dependency(%q<webmock>, [">= 0"])
s.add_dependency(%q<yard>, [">= 0"])
end
end
WARNING: Invalid .gemspec format in
'/app/.bundle/gems/ruby/1.8/specifications/copycopter_client-2.0.0.gemspec'
WARNING: #<ArgumentError: Illformed requirement
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"]>
# -*- encoding: utf-8 -*-
Gem::Specification.new do |s|
s.name = %q{copycopter_client}
s.version = "2.0.0"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if
s.respond_to? :required_rubygems_version=
s.authors = ["thoughtbot"]
s.date = %q{2012-03-16}
s.email = %q{[email protected]}
s.files = [".gitignore", ".rspec", ".travis.yml", "Appraisals",
"Gemfile", "Gemfile.lock", "MIT-LICENSE", "README.md", "Rakefile",
"copycopter_client.gemspec", "features/rails.feature",
"features/step_definitions/copycopter_server_steps.rb",
"features/step_definitions/rails_steps.rb", "features/support/env.rb",
"features/support/rails_server.rb", "gemfiles/2.3.gemfile",
"gemfiles/2.3.gemfile.lock", "gemfiles/3.0.gemfile",
"gemfiles/3.0.gemfile.lock", "gemfiles/3.1.gemfile",
"gemfiles/3.1.gemfile.lock", "init.rb", "lib/copycopter_client.rb",
"lib/copycopter_client/cache.rb", "lib/copycopter_client/client.rb",
"lib/copycopter_client/configuration.rb",
"lib/copycopter_client/errors.rb",
"lib/copycopter_client/i18n_backend.rb",
"lib/copycopter_client/poller.rb",
"lib/copycopter_client/prefixed_logger.rb",
"lib/copycopter_client/process_guard.rb",
"lib/copycopter_client/rails.rb", "lib/copycopter_client/railtie.rb",
"lib/copycopter_client/request_sync.rb",
"lib/copycopter_client/version.rb",
"lib/tasks/copycopter_client_tasks.rake",
"spec/copycopter_client/cache_spec.rb",
"spec/copycopter_client/client_spec.rb",
"spec/copycopter_client/configuration_spec.rb",
"spec/copycopter_client/i18n_backend_spec.rb",
"spec/copycopter_client/poller_spec.rb",
"spec/copycopter_client/prefixed_logger_spec.rb",
"spec/copycopter_client/process_guard_spec.rb",
"spec/copycopter_client/request_sync_spec.rb",
"spec/copycopter_client_spec.rb", "spec/spec_helper.rb",
"spec/support/client_spec_helpers.rb",
"spec/support/defines_constants.rb", "spec/support/fake_client.rb",
"spec/support/fake_copycopter_app.rb",
"spec/support/fake_html_safe_string.rb",
"spec/support/fake_logger.rb", "spec/support/fake_passenger.rb",
"spec/support/fake_resque_job.rb", "spec/support/fake_unicorn.rb",
"spec/support/middleware_stack.rb", "spec/support/writing_cache.rb",
"tmp/projects.json"]
s.homepage = %q{http://github.com/copycopter/copycopter-ruby-client}
s.require_paths = ["lib"]
s.rubygems_version = %q{1.3.7}
s.summary = %q{Client for the Copycopter copy management service}
s.test_files = ["features/rails.feature",
"features/step_definitions/copycopter_server_steps.rb",
"features/step_definitions/rails_steps.rb", "features/support/env.rb",
"features/support/rails_server.rb",
"spec/copycopter_client/cache_spec.rb",
"spec/copycopter_client/client_spec.rb",
"spec/copycopter_client/configuration_spec.rb",
"spec/copycopter_client/i18n_backend_spec.rb",
"spec/copycopter_client/poller_spec.rb",
"spec/copycopter_client/prefixed_logger_spec.rb",
"spec/copycopter_client/process_guard_spec.rb",
"spec/copycopter_client/request_sync_spec.rb",
"spec/copycopter_client_spec.rb", "spec/spec_helper.rb",
"spec/support/client_spec_helpers.rb",
"spec/support/defines_constants.rb", "spec/support/fake_client.rb",
"spec/support/fake_copycopter_app.rb",
"spec/support/fake_html_safe_string.rb",
"spec/support/fake_logger.rb", "spec/support/fake_passenger.rb",
"spec/support/fake_resque_job.rb", "spec/support/fake_unicorn.rb",
"spec/support/middleware_stack.rb", "spec/support/writing_cache.rb"]
if s.respond_to? :specification_version then
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
s.specification_version = 3
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
s.add_runtime_dependency(%q<i18n>, [">= 0.5.0"])
s.add_runtime_dependency(%q<json>, [">= 0"])
s.add_development_dependency(%q<appraisal>, ["~> 0.4"])
s.add_development_dependency(%q<aruba>, ["~> 0.3.2"])
s.add_development_dependency(%q<bourne>, [">= 0"])
s.add_development_dependency(%q<cucumber>, ["~> 0.10.0"])
s.add_development_dependency(%q<i18n>, [">= 0"])
s.add_development_dependency(%q<rails>, ["~> 3.1.0"])
s.add_development_dependency(%q<rake>,
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"])
s.add_development_dependency(%q<rspec>, ["~> 2.3"])
s.add_development_dependency(%q<sham_rack>, [">= 0"])
s.add_development_dependency(%q<sinatra>, [">= 0"])
s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
s.add_development_dependency(%q<thin>, [">= 0"])
s.add_development_dependency(%q<webmock>, [">= 0"])
s.add_development_dependency(%q<yard>, [">= 0"])
else
s.add_dependency(%q<i18n>, [">= 0.5.0"])
s.add_dependency(%q<json>, [">= 0"])
s.add_dependency(%q<appraisal>, ["~> 0.4"])
s.add_dependency(%q<aruba>, ["~> 0.3.2"])
s.add_dependency(%q<bourne>, [">= 0"])
s.add_dependency(%q<cucumber>, ["~> 0.10.0"])
s.add_dependency(%q<i18n>, [">= 0"])
s.add_dependency(%q<rails>, ["~> 3.1.0"])
s.add_dependency(%q<rake>,
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"])
s.add_dependency(%q<rspec>, ["~> 2.3"])
s.add_dependency(%q<sham_rack>, [">= 0"])
s.add_dependency(%q<sinatra>, [">= 0"])
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
s.add_dependency(%q<thin>, [">= 0"])
s.add_dependency(%q<webmock>, [">= 0"])
s.add_dependency(%q<yard>, [">= 0"])
end
else
s.add_dependency(%q<i18n>, [">= 0.5.0"])
s.add_dependency(%q<json>, [">= 0"])
s.add_dependency(%q<appraisal>, ["~> 0.4"])
s.add_dependency(%q<aruba>, ["~> 0.3.2"])
s.add_dependency(%q<bourne>, [">= 0"])
s.add_dependency(%q<cucumber>, ["~> 0.10.0"])
s.add_dependency(%q<i18n>, [">= 0"])
s.add_dependency(%q<rails>, ["~> 3.1.0"])
s.add_dependency(%q<rake>,
["#<YAML::Syck::DefaultKey:0x2b11f8fbac68> 0.9.2"])
s.add_dependency(%q<rspec>, ["~> 2.3"])
s.add_dependency(%q<sham_rack>, [">= 0"])
s.add_dependency(%q<sinatra>, [">= 0"])
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
s.add_dependency(%q<thin>, [">= 0"])
s.add_dependency(%q<webmock>, [">= 0"])
s.add_dependency(%q<yard>, [">= 0"])
end
end
WARNING: Invalid .gemspec format in
'/app/.bundle/gems/ruby/1.8/specifications/copycopter_client-2.0.0.gemspec'
Developing Copycopter Server (TM) currently requires Bundler 1.0.
1.1 requires Syck and results in:
`dirname': can't convert nil into String (TypeError)
When I'm on blurb edit page I can edit blurb for selected language but on bar is always Locale: en
. It's a little bit annoying and bug-generating if I give it to non-team translator.
Is there a way to see what was saved as draft and is not yet published? Also any way to publish all?
Thanks!
I'm thinking of a particular use case where it would be awesome to let http://stattleship.com crowd-source translations of their stories to their users.
Convert both comparables to_i
Feature request from the blog post:
A dashboard page with percentage of translated blurbs will be nice, and also multiple accounts per app will be nice (for example for some freelancer translator or somebody like that).
There doesn't seem to be a way to add multiple users to a project. We need this for division of labor / collaborative editing.
Is it possible to change the username and password for an app once it's created?
Should let people deploying the application use some sort of queuing system if they so choose (DelayedJob / Resque)
Have Copycopter set certain, widely-used, keys with defaults unless otherwise specified by the user/developer.
Example keys would be:
activerecord.errors.messages.empty
activerecord.errors.messages.less_than_or_equal_to
datetime.distance_in_words.about_x_years.one
datetime.distance_in_words.less_than_x_minutes.other
This would allow users/developers/translators to not have to worry about widely used translations if they don't have to.
I understand that this approach is debatable but I wanted to open up a dialog around the idea.
Thanks!
I stumbled across this last night: https://github.com/ohler55/oj
I don't consider this to be something we actually pull in, just wanted to put it out there and get some thoughts on it.
Any way to set "Edit as HTML" as the default. The extra <p>
tags added seem to break some things.
EDIT: For now i'm using
def prefer_html?
#session[:html_preference] == 'true'
true
end
Thanks
Remove things like KISSMetrics, New Relic, accounts, subscriptions, plans, limits.
Enabling user to remove project from copycopter. How could you remove project from copycopter if it is wrong fro any reason?
Started GET "/localizations/3447/versions/new" for 74.118.27.66 at 2012-03-15 10:17:49 -0700
Processing by VersionsController#new as HTML
Parameters: {"localization_id"=>"3447"}
Completed 500 Internal Server Error in 8ms
AbstractController::DoubleRenderError (Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".):
app/controllers/versions_controller.rb:26:in `new'
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.