interpreter 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +11 -2
- data/app/controllers/interpreter/translations_controller.rb +23 -18
- data/app/models/interpreter_translation.rb +1 -6
- data/app/views/interpreter/shared/_css.html.haml +6 -17
- data/app/views/interpreter/translations/_form.html.haml +5 -8
- data/app/views/interpreter/translations/edit.html.haml +6 -0
- data/app/views/interpreter/translations/index.html.haml +13 -15
- data/app/views/interpreter/translations/new.html.haml +2 -0
- data/config/routes.rb +0 -1
- data/lib/interpreter.rb +1 -0
- data/lib/interpreter/base.rb +9 -72
- data/lib/interpreter/translation.rb +104 -0
- data/lib/interpreter/version.rb +1 -1
- data/test/compliance_test.rb +8 -0
- data/test/dummy/config/environment.rb +2 -0
- data/test/dummy/config/initializers/interpreter.rb +2 -2
- data/test/dummy/features/manage_translations.feature +30 -17
- data/test/dummy/features/step_definitions/translation_steps.rb +3 -5
- data/test/dummy/features/support/hooks.rb +4 -0
- data/test/dummy/lib/tasks/test.rake +1 -1
- data/test/test_helper.rb +22 -0
- metadata +10 -3
- data/app/views/interpreter/translations/show.html.haml +0 -9
    
        data/Rakefile
    CHANGED
    
    | @@ -1,11 +1,11 @@ | |
| 1 1 | 
             
            require 'bundler'
         | 
| 2 2 | 
             
            Bundler::GemHelper.install_tasks
         | 
| 3 3 |  | 
| 4 | 
            -
            task :default =>  | 
| 4 | 
            +
            task :default => :test
         | 
| 5 5 |  | 
| 6 6 | 
             
            namespace :test do
         | 
| 7 7 | 
             
              desc "Run all cucumber features"
         | 
| 8 | 
            -
              task : | 
| 8 | 
            +
              task :cukes do
         | 
| 9 9 | 
             
                system "cucumber test/dummy/features"
         | 
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| @@ -14,3 +14,12 @@ namespace :test do | |
| 14 14 | 
             
                system "rake test:prepare -f test/dummy/Rakefile"
         | 
| 15 15 | 
             
              end
         | 
| 16 16 | 
             
            end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            require 'rake/testtask'
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            Rake::TestTask.new(:test) do |t|
         | 
| 21 | 
            +
              t.libs << 'lib'
         | 
| 22 | 
            +
              t.libs << 'test'
         | 
| 23 | 
            +
              t.pattern = 'test/**/*_test.rb'
         | 
| 24 | 
            +
              t.verbose = false
         | 
| 25 | 
            +
            end
         | 
| @@ -2,17 +2,11 @@ class Interpreter::TranslationsController < ApplicationController | |
| 2 2 | 
             
              layout "translations"
         | 
| 3 3 |  | 
| 4 4 | 
             
              def index
         | 
| 5 | 
            -
                @ | 
| 6 | 
            -
                if params[:category]
         | 
| 7 | 
            -
                  @translations = InterpreterTranslation.find_like_key("en.#{params[:category]}.*")
         | 
| 8 | 
            -
                else
         | 
| 9 | 
            -
                  @translations = InterpreterTranslation.all
         | 
| 10 | 
            -
                end
         | 
| 5 | 
            +
                @translations = InterpreterTranslation.all
         | 
| 11 6 | 
             
              end
         | 
| 12 7 |  | 
| 13 8 | 
             
              def search
         | 
| 14 | 
            -
                @ | 
| 15 | 
            -
                @translations = InterpreterTranslation.find_like_key params[:query]
         | 
| 9 | 
            +
                @translations = InterpreterTranslation.find_all_by_value_like params[:query]
         | 
| 16 10 | 
             
                @search_notice = "#{@translations.length} translation#{'s' if @translations.length > 1} found."
         | 
| 17 11 | 
             
                render :action => :index
         | 
| 18 12 | 
             
              end
         | 
| @@ -21,16 +15,8 @@ class Interpreter::TranslationsController < ApplicationController | |
| 21 15 | 
             
                @translation = InterpreterTranslation.new
         | 
| 22 16 | 
             
              end
         | 
| 23 17 |  | 
| 24 | 
            -
              def show
         | 
| 25 | 
            -
                @key = params[:id].gsub('-','.')
         | 
| 26 | 
            -
                @translations = InterpreterTranslation.find_all_by_key(@key)
         | 
| 27 | 
            -
              end
         | 
| 28 | 
            -
             | 
| 29 18 | 
             
              def create
         | 
| 30 | 
            -
                @translation = InterpreterTranslation.new
         | 
| 31 | 
            -
                @translation.locale = params[:interpreter_translation][:locale]
         | 
| 32 | 
            -
                @translation.key = params[:interpreter_translation][:key]
         | 
| 33 | 
            -
                @translation.value = params[:interpreter_translation][:value]
         | 
| 19 | 
            +
                @translation = InterpreterTranslation.new params[:interpreter_translation]
         | 
| 34 20 | 
             
                if @translation.save
         | 
| 35 21 | 
             
                  redirect_to interpreter_translations_url, :notice => "Translation added."
         | 
| 36 22 | 
             
                else
         | 
| @@ -38,9 +24,28 @@ class Interpreter::TranslationsController < ApplicationController | |
| 38 24 | 
             
                end
         | 
| 39 25 | 
             
              end
         | 
| 40 26 |  | 
| 27 | 
            +
              def edit
         | 
| 28 | 
            +
                @translation = InterpreterTranslation.find_by_key(params[:id].gsub('-','.'))
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              def update
         | 
| 32 | 
            +
                @translation = InterpreterTranslation.find_by_key(parse_id(params[:id]))
         | 
| 33 | 
            +
                @translation.update_attributes(params[:interpreter_translation])
         | 
| 34 | 
            +
                if @translation.save
         | 
| 35 | 
            +
                  redirect_to interpreter_translations_url, :notice => "Translation updated."
         | 
| 36 | 
            +
                else
         | 
| 37 | 
            +
                  render :action => :edit
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
             | 
| 41 41 | 
             
              def destroy
         | 
| 42 42 | 
             
                count = InterpreterTranslation.destroy(params[:id].gsub('-','.'))
         | 
| 43 | 
            -
                redirect_to :back, :notice => " | 
| 43 | 
            +
                redirect_to :back, :notice => "Translation destroyed."
         | 
| 44 44 | 
             
              end
         | 
| 45 45 |  | 
| 46 | 
            +
              protected
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              def parse_id id
         | 
| 49 | 
            +
                id.gsub('-','.')
         | 
| 50 | 
            +
              end
         | 
| 46 51 | 
             
            end
         | 
| @@ -1,9 +1,4 @@ | |
| 1 | 
            -
            class InterpreterTranslation < Interpreter:: | 
| 2 | 
            -
              attributes :locale, :key, :value
         | 
| 3 | 
            -
             | 
| 4 | 
            -
              validates :locale, :presence => true
         | 
| 5 | 
            -
              validates :key, :presence => true
         | 
| 6 | 
            -
              validates :value, :presence => true
         | 
| 1 | 
            +
            class InterpreterTranslation < Interpreter::Translation
         | 
| 7 2 |  | 
| 8 3 | 
             
              def human_name
         | 
| 9 4 | 
             
                "Translation"
         | 
| @@ -1,25 +1,14 @@ | |
| 1 1 | 
             
            :css
         | 
| 2 | 
            -
               | 
| 3 | 
            -
                 | 
| 4 | 
            -
                width:400px;
         | 
| 2 | 
            +
              table#translations{
         | 
| 3 | 
            +
                width:100%;
         | 
| 5 4 | 
             
                overflow:hidden;
         | 
| 6 | 
            -
                padding-left:10px;
         | 
| 7 5 | 
             
              }
         | 
| 8 6 |  | 
| 9 | 
            -
               | 
| 10 | 
            -
                 | 
| 11 | 
            -
                 | 
| 12 | 
            -
                padding-left:10px;
         | 
| 7 | 
            +
              table#translations td{
         | 
| 8 | 
            +
                padding:0px;
         | 
| 9 | 
            +
                margin:0px;
         | 
| 13 10 | 
             
              }
         | 
| 14 11 |  | 
| 15 | 
            -
               | 
| 16 | 
            -
                float:right;
         | 
| 17 | 
            -
                padding-bottom:10px;
         | 
| 18 | 
            -
              }
         | 
| 19 | 
            -
              div.translation{
         | 
| 20 | 
            -
                overflow: auto;
         | 
| 21 | 
            -
                width: 100%
         | 
| 22 | 
            -
              }
         | 
| 23 | 
            -
              div.translation:hover{
         | 
| 12 | 
            +
              tr.translation:hover{
         | 
| 24 13 | 
             
                background:#eee;
         | 
| 25 14 | 
             
              }
         | 
| @@ -1,16 +1,13 @@ | |
| 1 1 | 
             
            = form_for @translation do |f|
         | 
| 2 2 | 
             
              = render :partial => 'errors', :locals => {:object => @translation}
         | 
| 3 | 
            -
              .field
         | 
| 4 | 
            -
                = f.label :locale
         | 
| 5 | 
            -
                %br
         | 
| 6 | 
            -
                = f.text_field :locale
         | 
| 7 3 | 
             
              .field
         | 
| 8 4 | 
             
                = f.label :key
         | 
| 9 5 | 
             
                %br
         | 
| 10 6 | 
             
                = f.text_field :key
         | 
| 11 | 
            -
              . | 
| 12 | 
            -
                 | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 7 | 
            +
              - InterpreterTranslation.available_locales.each do |locale|
         | 
| 8 | 
            +
                .field
         | 
| 9 | 
            +
                  = f.label locale
         | 
| 10 | 
            +
                  %br
         | 
| 11 | 
            +
                  = f.text_field locale
         | 
| 15 12 | 
             
              .actions
         | 
| 16 13 | 
             
                = f.submit "Save"
         | 
| @@ -9,20 +9,18 @@ | |
| 9 9 | 
             
                .actions
         | 
| 10 10 | 
             
                  = submit_tag "Search"
         | 
| 11 11 |  | 
| 12 | 
            -
            %h3 Categories
         | 
| 13 | 
            -
            #categories
         | 
| 14 | 
            -
              - @categories.each do |c|
         | 
| 15 | 
            -
                = link_to c.capitalize, category_interpreter_translations_path(c)
         | 
| 16 | 
            -
             | 
| 17 12 | 
             
            %p= link_to "New Translation", new_interpreter_translation_path
         | 
| 18 13 |  | 
| 19 | 
            -
            #translations
         | 
| 20 | 
            -
               | 
| 21 | 
            -
                 | 
| 22 | 
            -
                  . | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
            % | 
| 14 | 
            +
            %table#translations{:cellpadding => 0, :cellspacing => 0}
         | 
| 15 | 
            +
              %thead
         | 
| 16 | 
            +
                %tr
         | 
| 17 | 
            +
                  - InterpreterTranslation.available_locales.each do |locale|
         | 
| 18 | 
            +
                    %td= locale
         | 
| 19 | 
            +
              %tbody
         | 
| 20 | 
            +
                - @translations.each do |t|
         | 
| 21 | 
            +
                  %tr.translation{:id => t.key}
         | 
| 22 | 
            +
                    - InterpreterTranslation.available_locales.each do |locale|
         | 
| 23 | 
            +
                      %td.locale= t.send(locale)
         | 
| 24 | 
            +
                    %td.links
         | 
| 25 | 
            +
                      = link_to 'Edit', edit_interpreter_translation_path(t)
         | 
| 26 | 
            +
                      = link_to 'Remove', interpreter_translation_path(t), :method => :delete
         | 
    
        data/config/routes.rb
    CHANGED
    
    
    
        data/lib/interpreter.rb
    CHANGED
    
    
    
        data/lib/interpreter/base.rb
    CHANGED
    
    | @@ -16,6 +16,12 @@ class Interpreter::Base | |
| 16 16 | 
             
                self._attributes += names
         | 
| 17 17 | 
             
              end
         | 
| 18 18 |  | 
| 19 | 
            +
              def self.locales(*names)
         | 
| 20 | 
            +
                attr_accessor *names
         | 
| 21 | 
            +
                define_attribute_methods names
         | 
| 22 | 
            +
                self._attributes += names
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 19 25 | 
             
              def attributes
         | 
| 20 26 | 
             
                self._attributes.inject({}) do |hash, attr|
         | 
| 21 27 | 
             
                  hash[attr.to_s] = send(attr)
         | 
| @@ -24,80 +30,11 @@ class Interpreter::Base | |
| 24 30 | 
             
              end
         | 
| 25 31 |  | 
| 26 32 | 
             
              def persisted?
         | 
| 27 | 
            -
                 | 
| 28 | 
            -
                  Interpreter.backend.get(id).nil? ? false : true
         | 
| 29 | 
            -
                else
         | 
| 30 | 
            -
                  false
         | 
| 31 | 
            -
                end
         | 
| 32 | 
            -
              end
         | 
| 33 | 
            -
             | 
| 34 | 
            -
              def id
         | 
| 35 | 
            -
                locale + '.' + key
         | 
| 36 | 
            -
              end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
              def id?
         | 
| 39 | 
            -
                locale? and key?
         | 
| 40 | 
            -
              end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
              def save
         | 
| 43 | 
            -
                if self.valid?
         | 
| 44 | 
            -
                  Interpreter.backend.set("#{locale}.#{key}", value)
         | 
| 45 | 
            -
                else
         | 
| 46 | 
            -
                  return false
         | 
| 47 | 
            -
                end
         | 
| 48 | 
            -
              end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
              def ==(other)
         | 
| 51 | 
            -
                self.locale == other.locale and self.key == other.key and self.value == other.value
         | 
| 52 | 
            -
              end
         | 
| 53 | 
            -
             | 
| 54 | 
            -
              def self.all
         | 
| 55 | 
            -
                collection = []
         | 
| 56 | 
            -
                Interpreter.backend.keys.each do |k|
         | 
| 57 | 
            -
                  obj = find_by_key(k)
         | 
| 58 | 
            -
                  if obj and obj.valid?# and obj.child_keys.empty?
         | 
| 59 | 
            -
                    collection << obj
         | 
| 60 | 
            -
                  end
         | 
| 61 | 
            -
                end
         | 
| 62 | 
            -
                collection.sort{|a, b| a.key <=> b.key}
         | 
| 63 | 
            -
              end
         | 
| 64 | 
            -
             | 
| 65 | 
            -
              def self.find_all_by_key key
         | 
| 66 | 
            -
                result = {}
         | 
| 67 | 
            -
                Interpreter.backend.keys("*.#{key}").map{|k| find_by_key(k)}.compact.each do |t|
         | 
| 68 | 
            -
                  result[t.locale] = t.value
         | 
| 69 | 
            -
                end
         | 
| 70 | 
            -
                return result
         | 
| 71 | 
            -
              end
         | 
| 72 | 
            -
             | 
| 73 | 
            -
              def self.find_by_key full_key
         | 
| 74 | 
            -
                locale = full_key.split('.')[0]
         | 
| 75 | 
            -
                key = full_key.gsub("#{locale}.",'')
         | 
| 76 | 
            -
                obj = self.new
         | 
| 77 | 
            -
                obj.locale = locale
         | 
| 78 | 
            -
                obj.key = key
         | 
| 79 | 
            -
                obj.value = Interpreter.backend.get(full_key)
         | 
| 80 | 
            -
                obj.valid? ? obj : nil
         | 
| 81 | 
            -
              end
         | 
| 82 | 
            -
             | 
| 83 | 
            -
              def self.find_like_key str
         | 
| 84 | 
            -
                Interpreter.backend.keys("*#{str}*").map{|k| find_by_key(k)}.compact.sort{|a, b| a.locale <=> b.locale}
         | 
| 85 | 
            -
              end
         | 
| 86 | 
            -
             | 
| 87 | 
            -
              def child_keys
         | 
| 88 | 
            -
                Interpreter.backend.keys("#{id}.*")
         | 
| 89 | 
            -
              end
         | 
| 90 | 
            -
             | 
| 91 | 
            -
              def self.destroy key
         | 
| 92 | 
            -
                Interpreter.backend.keys("*.#{key}").sum{|k| Interpreter.backend.del(k)}
         | 
| 93 | 
            -
              end
         | 
| 94 | 
            -
             | 
| 95 | 
            -
              def self.categories
         | 
| 96 | 
            -
                Interpreter.backend.keys.map{|k| k.split('.')[1]}.uniq
         | 
| 33 | 
            +
                false
         | 
| 97 34 | 
             
              end
         | 
| 98 35 |  | 
| 99 | 
            -
              def  | 
| 100 | 
            -
                 | 
| 36 | 
            +
              def new_record?
         | 
| 37 | 
            +
                !persisted?
         | 
| 101 38 | 
             
              end
         | 
| 102 39 |  | 
| 103 40 | 
             
              protected
         | 
| @@ -0,0 +1,104 @@ | |
| 1 | 
            +
            class Interpreter::Translation < Interpreter::Base
         | 
| 2 | 
            +
              attributes :key
         | 
| 3 | 
            +
              locales *Interpreter.locales
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              validates :key, :presence => true
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              def initialize options={}
         | 
| 8 | 
            +
                self.key = options[:key]
         | 
| 9 | 
            +
                self.class.available_locales.each do |locale|
         | 
| 10 | 
            +
                  self.send("#{locale}=", options[locale])
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              def persisted?
         | 
| 15 | 
            +
                if key?
         | 
| 16 | 
            +
                  Interpreter.backend.keys("??.#{key}").present?
         | 
| 17 | 
            +
                else
         | 
| 18 | 
            +
                  super
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              def id
         | 
| 23 | 
            +
                self.key.gsub('.','-')
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def save
         | 
| 27 | 
            +
                if self.valid?
         | 
| 28 | 
            +
                  self.class.available_locales.each do |locale|
         | 
| 29 | 
            +
                    value = self.send(locale)
         | 
| 30 | 
            +
                    Interpreter.backend.set("#{locale}.#{key}", value.to_json) unless value.nil?
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
                else
         | 
| 33 | 
            +
                  return false
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              def update_attributes options={}
         | 
| 38 | 
            +
                self.key = options[:key]
         | 
| 39 | 
            +
                self.class.available_locales.each do |locale|
         | 
| 40 | 
            +
                  self.send("#{locale}=", options[locale])
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              def ==(other)
         | 
| 45 | 
            +
                self.key == other.key
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              def self.all
         | 
| 49 | 
            +
                result = []
         | 
| 50 | 
            +
                Interpreter.backend.keys("??.*").each do |full_key|
         | 
| 51 | 
            +
                  key, locale, value = parse_key(full_key)
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  obj = result.select{|r| r.key == key }.first || self.new
         | 
| 54 | 
            +
                  obj.send("#{locale}=", value)
         | 
| 55 | 
            +
                  obj.send('key=', key)
         | 
| 56 | 
            +
                  result << obj
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
                return result.uniq
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              def self.find_by_key key
         | 
| 62 | 
            +
                collection = Interpreter.backend.keys("??.#{key}")
         | 
| 63 | 
            +
                if collection.present?
         | 
| 64 | 
            +
                  obj = self.new
         | 
| 65 | 
            +
                  obj.send('key=', key)
         | 
| 66 | 
            +
                  collection.each do |full_key|
         | 
| 67 | 
            +
                    key, locale, value = parse_key(full_key)
         | 
| 68 | 
            +
                    obj.send("#{locale}=", value)
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
                  return obj
         | 
| 71 | 
            +
                else
         | 
| 72 | 
            +
                  return nil
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
              def self.find_all_by_value_like str
         | 
| 77 | 
            +
                keys = []
         | 
| 78 | 
            +
                Interpreter.backend.keys.each do |full_key|
         | 
| 79 | 
            +
                  if Interpreter.backend.get(full_key).downcase.include?(str.downcase)
         | 
| 80 | 
            +
                    keys << parse_key(full_key).first
         | 
| 81 | 
            +
                  end
         | 
| 82 | 
            +
                end
         | 
| 83 | 
            +
                keys.map{|k| find_by_key k}
         | 
| 84 | 
            +
              end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
              def self.destroy key
         | 
| 87 | 
            +
                Interpreter.backend.keys("??.#{key}").sum{|k| Interpreter.backend.del(k)}
         | 
| 88 | 
            +
              end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
              def self.available_locales
         | 
| 91 | 
            +
                Interpreter.locales
         | 
| 92 | 
            +
              end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
              protected
         | 
| 95 | 
            +
             | 
| 96 | 
            +
              def self.parse_key full_key
         | 
| 97 | 
            +
                arr = full_key.split('.')
         | 
| 98 | 
            +
                locale = arr.shift
         | 
| 99 | 
            +
                key = arr.join('.')
         | 
| 100 | 
            +
                value = Interpreter.backend.get(full_key)
         | 
| 101 | 
            +
                value = ActiveSupport::JSON.decode(value) unless value.nil?
         | 
| 102 | 
            +
                return [key, locale, value]
         | 
| 103 | 
            +
              end
         | 
| 104 | 
            +
            end
         | 
    
        data/lib/interpreter/version.rb
    CHANGED
    
    
| @@ -5,39 +5,52 @@ Feature: Manage translations | |
| 5 5 |  | 
| 6 6 | 
             
              Scenario: Add new translation
         | 
| 7 7 | 
             
                Given I am on the new interpreter translation page
         | 
| 8 | 
            -
                When I fill in " | 
| 9 | 
            -
                  And I fill in " | 
| 10 | 
            -
                  And I fill in " | 
| 8 | 
            +
                When I fill in "Key" with "key1"
         | 
| 9 | 
            +
                  And I fill in "En" with "value1"
         | 
| 10 | 
            +
                  And I fill in "Pt" with "value2"
         | 
| 11 | 
            +
                  And I fill in "Es" with "value3"
         | 
| 11 12 | 
             
                  And I press "Save"
         | 
| 12 13 | 
             
                Then I should see "Translation added."
         | 
| 13 | 
            -
                  And I should see " | 
| 14 | 
            -
                  And I should see " | 
| 15 | 
            -
                  And I should see " | 
| 14 | 
            +
                  And I should see "value1"
         | 
| 15 | 
            +
                  And I should see "value2"
         | 
| 16 | 
            +
                  And I should see "value3"
         | 
| 16 17 |  | 
| 17 18 | 
             
              Scenario: Edit translation
         | 
| 18 | 
            -
                Given a translation is present with key: hello,  | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
                  And I fill in " | 
| 22 | 
            -
                  And I fill in " | 
| 19 | 
            +
                Given a translation is present with key: "hello", en: "hello", pt: "hey" and es: "hoola"
         | 
| 20 | 
            +
                  And I am on the interpreter translations page
         | 
| 21 | 
            +
                When I follow "Edit" within "#hello"
         | 
| 22 | 
            +
                  And I fill in "En" with "hello again"
         | 
| 23 | 
            +
                  And I fill in "Pt" with "Hey there"
         | 
| 23 24 | 
             
                  And I press "Save"
         | 
| 24 | 
            -
                Then I should see " | 
| 25 | 
            +
                Then I should see "Translation updated."
         | 
| 25 26 | 
             
                  And I should see "hello again"
         | 
| 27 | 
            +
                  And I should see "Hey there"
         | 
| 26 28 |  | 
| 27 29 | 
             
              Scenario: Remove translation
         | 
| 28 | 
            -
                Given a translation is present with key: hello,  | 
| 30 | 
            +
                Given a translation is present with key: "hello", en: "hello", pt: "hey" and es: "hoola"
         | 
| 29 31 | 
             
                When I go to the interpreter translations page
         | 
| 30 | 
            -
                Then I should see "hello"
         | 
| 32 | 
            +
                Then I should see "hello" within "#translations"
         | 
| 31 33 | 
             
                  And I should see "Remove"
         | 
| 32 34 | 
             
                When I follow "Remove"
         | 
| 33 | 
            -
                Then I should not see "hello"
         | 
| 34 | 
            -
                  And I should see " | 
| 35 | 
            +
                Then I should not see "hello" within "#translations"
         | 
| 36 | 
            +
                  And I should see "Translation destroyed."
         | 
| 35 37 | 
             
                  And I should be on the interpreter translations page
         | 
| 36 38 |  | 
| 37 39 | 
             
              Scenario: Search translations
         | 
| 38 | 
            -
                Given a translation is present with key: hello,  | 
| 40 | 
            +
                Given a translation is present with key: "hello", en: "hello", pt: "hey" and es: "hoola"
         | 
| 39 41 | 
             
                When I go to the interpreter translations page
         | 
| 40 42 | 
             
                  And I fill in "query" with "hello" within "#search_translations"
         | 
| 41 43 | 
             
                  And I press "Search"
         | 
| 42 44 | 
             
                Then I should see "hello" within "#translations"
         | 
| 43 45 | 
             
                  And I should see "1 translation found."
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              Scenario: View all translations for each key on home page
         | 
| 48 | 
            +
                Given a translation is present with key: "key1", en: "hello1", pt: "hey1" and es: "hoola1"
         | 
| 49 | 
            +
                  And a translation is present with key: "key2", en: "hello2", pt: "hey2" and es: "hoola2"
         | 
| 50 | 
            +
                When I go to the interpreter translations page
         | 
| 51 | 
            +
                Then I should see "hello1" within "#key1"
         | 
| 52 | 
            +
                  And I should see "hey1" within "#key1"
         | 
| 53 | 
            +
                  And I should see "hoola1" within "#key1"
         | 
| 54 | 
            +
                  And I should see "hello2" within "#key2"
         | 
| 55 | 
            +
                  And I should see "hey2" within "#key2"
         | 
| 56 | 
            +
                  And I should see "hoola2" within "#key2"
         | 
| @@ -13,10 +13,8 @@ Then /^I should see the following translations:$/ do |expected_translations_tabl | |
| 13 13 | 
             
              expected_translations_table.diff!(tableish('table tr', 'td,th'))
         | 
| 14 14 | 
             
            end
         | 
| 15 15 |  | 
| 16 | 
            -
            Given /^a translation is present with key: ( | 
| 17 | 
            -
              i = InterpreterTranslation.new
         | 
| 18 | 
            -
              i.locale = locale
         | 
| 19 | 
            -
              i.key = key
         | 
| 20 | 
            -
              i.value = value
         | 
| 16 | 
            +
            Given /^a translation is present with key: "([^"]*)", en: "([^"]*)", pt: "([^"]*)" and es: "([^"]*)"$/ do |key, en, pt, es|
         | 
| 17 | 
            +
              i = InterpreterTranslation.new(:key => key, :en => en, :pt => pt, :es => es)
         | 
| 21 18 | 
             
              i.save
         | 
| 22 19 | 
             
            end
         | 
| 20 | 
            +
             | 
    
        data/test/test_helper.rb
    ADDED
    
    | @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            # Configure Rails Envinronment
         | 
| 2 | 
            +
            ENV["RAILS_ENV"] = "test"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require File.expand_path("../dummy/config/environment.rb",  __FILE__)
         | 
| 5 | 
            +
            require "rails/test_help"
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            ActionMailer::Base.delivery_method = :test
         | 
| 8 | 
            +
            ActionMailer::Base.perform_deliveries = true
         | 
| 9 | 
            +
            ActionMailer::Base.default_url_options[:host] = "test.com"
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            Rails.backtrace_cleaner.remove_silencers!
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            # Configure capybara for integration testing
         | 
| 14 | 
            +
            require "capybara/rails"
         | 
| 15 | 
            +
            Capybara.default_driver   = :rack_test
         | 
| 16 | 
            +
            Capybara.default_selector = :css
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            # Run any available migration
         | 
| 19 | 
            +
            ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            # Load support files
         | 
| 22 | 
            +
            Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
         | 
    
        metadata
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            name: interpreter
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 4 | 
             
              prerelease: 
         | 
| 5 | 
            -
              version: 0.0. | 
| 5 | 
            +
              version: 0.0.5
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors: 
         | 
| 8 8 | 
             
            - Jagdeep Singh
         | 
| @@ -10,7 +10,7 @@ autorequire: | |
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 12 |  | 
| 13 | 
            -
            date: 2011-05- | 
| 13 | 
            +
            date: 2011-05-21 00:00:00 +05:30
         | 
| 14 14 | 
             
            default_executable: 
         | 
| 15 15 | 
             
            dependencies: 
         | 
| 16 16 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -56,15 +56,17 @@ files: | |
| 56 56 | 
             
            - app/views/interpreter/shared/_css.html.haml
         | 
| 57 57 | 
             
            - app/views/interpreter/translations/_errors.html.haml
         | 
| 58 58 | 
             
            - app/views/interpreter/translations/_form.html.haml
         | 
| 59 | 
            +
            - app/views/interpreter/translations/edit.html.haml
         | 
| 59 60 | 
             
            - app/views/interpreter/translations/index.html.haml
         | 
| 60 61 | 
             
            - app/views/interpreter/translations/new.html.haml
         | 
| 61 | 
            -
            - app/views/interpreter/translations/show.html.haml
         | 
| 62 62 | 
             
            - app/views/layouts/translations.html.haml
         | 
| 63 63 | 
             
            - config/routes.rb
         | 
| 64 64 | 
             
            - interpreter.gemspec
         | 
| 65 65 | 
             
            - lib/interpreter.rb
         | 
| 66 66 | 
             
            - lib/interpreter/base.rb
         | 
| 67 | 
            +
            - lib/interpreter/translation.rb
         | 
| 67 68 | 
             
            - lib/interpreter/version.rb
         | 
| 69 | 
            +
            - test/compliance_test.rb
         | 
| 68 70 | 
             
            - test/dummy/.gitignore
         | 
| 69 71 | 
             
            - test/dummy/Gemfile
         | 
| 70 72 | 
             
            - test/dummy/Rakefile
         | 
| @@ -97,6 +99,7 @@ files: | |
| 97 99 | 
             
            - test/dummy/features/step_definitions/web_steps.rb
         | 
| 98 100 | 
             
            - test/dummy/features/support/env.rb
         | 
| 99 101 | 
             
            - test/dummy/features/support/factory_girl.rb
         | 
| 102 | 
            +
            - test/dummy/features/support/hooks.rb
         | 
| 100 103 | 
             
            - test/dummy/features/support/paths.rb
         | 
| 101 104 | 
             
            - test/dummy/features/support/pickle.rb
         | 
| 102 105 | 
             
            - test/dummy/features/support/selectors.rb
         | 
| @@ -117,6 +120,7 @@ files: | |
| 117 120 | 
             
            - test/dummy/script/cucumber
         | 
| 118 121 | 
             
            - test/dummy/script/rails
         | 
| 119 122 | 
             
            - test/dummy/vendor/plugins/.gitkeep
         | 
| 123 | 
            +
            - test/test_helper.rb
         | 
| 120 124 | 
             
            has_rdoc: true
         | 
| 121 125 | 
             
            homepage: https://github.com/jagdeep/interpreter
         | 
| 122 126 | 
             
            licenses: []
         | 
| @@ -146,6 +150,7 @@ signing_key: | |
| 146 150 | 
             
            specification_version: 3
         | 
| 147 151 | 
             
            summary: Provides an interface for managing translations
         | 
| 148 152 | 
             
            test_files: 
         | 
| 153 | 
            +
            - test/compliance_test.rb
         | 
| 149 154 | 
             
            - test/dummy/.gitignore
         | 
| 150 155 | 
             
            - test/dummy/Gemfile
         | 
| 151 156 | 
             
            - test/dummy/Rakefile
         | 
| @@ -178,6 +183,7 @@ test_files: | |
| 178 183 | 
             
            - test/dummy/features/step_definitions/web_steps.rb
         | 
| 179 184 | 
             
            - test/dummy/features/support/env.rb
         | 
| 180 185 | 
             
            - test/dummy/features/support/factory_girl.rb
         | 
| 186 | 
            +
            - test/dummy/features/support/hooks.rb
         | 
| 181 187 | 
             
            - test/dummy/features/support/paths.rb
         | 
| 182 188 | 
             
            - test/dummy/features/support/pickle.rb
         | 
| 183 189 | 
             
            - test/dummy/features/support/selectors.rb
         | 
| @@ -198,3 +204,4 @@ test_files: | |
| 198 204 | 
             
            - test/dummy/script/cucumber
         | 
| 199 205 | 
             
            - test/dummy/script/rails
         | 
| 200 206 | 
             
            - test/dummy/vendor/plugins/.gitkeep
         | 
| 207 | 
            +
            - test/test_helper.rb
         |