From e3ed5d83fcbd2d94ea1f1d0af6d5b6a278bb201c Mon Sep 17 00:00:00 2001
From: yasushiito
Date: Mon, 20 Aug 2012 19:07:52 +0900
Subject: [PATCH] t#29312:any update
---
.gitignore | 6 +
.rspec | 2 +-
Gemfile | 7 +-
Gemfile.lock | 17 +-
app/assets/javascripts/ie5.js | 78 +++++++
app/controllers/application_controller.rb | 4 +-
app/controllers/artists_controller.rb | 17 +-
app/controllers/colors_controller.rb | 16 ++
app/controllers/comics_controller.rb | 36 ++--
app/controllers/ground_colors_controller.rb | 17 ++
app/controllers/ground_pictures_controller.rb | 18 ++
app/controllers/original_pictures_controller.rb | 17 +-
app/controllers/panel_colors_controller.rb | 18 ++
app/controllers/panels_controller.rb | 18 +-
app/controllers/pictures_controller.rb | 1 +
app/controllers/stories_controller.rb | 2 +-
app/helpers/colors_helper.rb | 2 +
app/helpers/ground_colors_helper.rb | 2 +
app/helpers/ground_pictures_helper.rb | 2 +
app/helpers/panel_colors_helper.rb | 2 +
app/models/artist.rb | 18 +-
app/models/author.rb | 45 ++++
app/models/color.rb | 61 ++++++
app/models/comic.rb | 13 +-
app/models/ground_color.rb | 58 +++++
app/models/ground_picture.rb | 58 +++++
app/models/license_group.rb | 11 +
app/models/original_picture.rb | 36 +++-
app/models/panel.rb | 58 ++++-
app/models/panel_color.rb | 57 +++++
app/models/panel_picture.rb | 1 +
app/models/picture.rb | 26 ++-
app/models/resource_picture.rb | 7 +-
app/models/system_picture.rb | 2 +-
app/views/artists/_form.html.erb | 2 -
app/views/artists/list.html.erb | 2 -
app/views/colors/index.html.erb | 19 ++
app/views/comics/_form.html.erb | 8 -
app/views/comics/browse.html.erb | 10 -
app/views/comics/list.html.erb | 4 -
app/views/comics/show.html.erb | 10 -
app/views/ground_colors/index.html.erb | 19 ++
app/views/ground_pictures/index.html.erb | 19 ++
app/views/home/step3.html.erb | 3 -
app/views/layouts/system.html.erb | 2 +-
app/views/layouts/test.html.erb | 2 +
.../original_pictures/_artist_register.html.erb | 2 -
app/views/original_pictures/_exist.html.erb | 4 +
app/views/original_pictures/_history_list.html.erb | 6 +
app/views/original_pictures/browse.html.erb | 8 +-
app/views/original_pictures/history.html.erb | 2 +
app/views/original_pictures/index.html.erb | 8 +-
app/views/original_pictures/list.html.erb | 2 +
app/views/original_pictures/show.html.erb | 12 ++
app/views/panel_colors/index.html.erb | 19 ++
app/views/pictures/_head.html.erb | 3 +
app/views/pictures/_tail.html.erb | 2 +
app/views/pictures/show.html.erb | 36 ++++
app/views/resource_pictures/index.html.erb | 2 +-
app/views/resource_pictures/show.html.erb | 10 +-
app/views/system/browse.html.erb | 5 +
config/environment.rb | 6 +-
config/routes.rb | 29 +++
db/colors.json | 10 +
db/migrate/20120815021444_add_md5.rb | 13 ++
.../20120815043236_rm_default_ls_on_artist.rb | 9 +
.../20120815045014_rm_default_size_on_comic.rb | 11 +
db/migrate/20120816022713_create_colors.rb | 11 +
db/migrate/20120816024744_create_ground_colors.rb | 12 ++
db/migrate/20120816024915_create_panel_colors.rb | 11 +
.../20120816025308_create_ground_pictures.rb | 11 +
lib/tasks/licenses.rake | 20 ++
lib/validators/resize_validator.rb | 2 +-
lib/validators/reverse_validator.rb | 2 +-
lib/validators/sync_vh_validator.rb | 2 +-
script/gem_builder.rb | 23 ++
script/ls_helper.rb | 40 ++++
spec/cli/u/panels/create.json | 22 +-
spec/controllers/colors_controller_spec.rb | 95 +++++++++
spec/controllers/comics_controller_spec.rb | 41 ++--
spec/controllers/ground_colors_controller_spec.rb | 115 ++++++++++
.../controllers/ground_pictures_controller_spec.rb | 117 ++++++++++
.../original_pictures_controller_spec.rb | 124 +++++++++--
spec/controllers/panel_colors_controller_spec.rb | 114 ++++++++++
spec/controllers/panels_controller_spec.rb | 10 +-
spec/controllers/pictures_controller_spec.rb | 168 ++++++++-------
spec/controllers/stories_controller_spec.rb | 140 ++++++------
spec/factories.rb | 29 ++-
spec/helpers/artists_helper_spec.rb | 3 +-
spec/helpers/authors_helper_spec.rb | 3 +-
spec/helpers/balloons_helper_spec.rb | 3 +-
spec/helpers/colors_helper_spec.rb | 16 ++
spec/helpers/comics_helper_spec.rb | 3 +-
spec/helpers/ground_colors_helper_spec.rb | 16 ++
spec/helpers/ground_pictures_helper_spec.rb | 14 ++
spec/helpers/home_helper_spec.rb | 3 +-
spec/helpers/license_groups_helper_spec.rb | 3 +-
spec/helpers/licenses_helper_spec.rb | 3 +-
.../original_picture_license_groups_helper_spec.rb | 3 +-
spec/helpers/original_pictures_helper_spec.rb | 3 +-
spec/helpers/panel_colors_helper_spec.rb | 16 ++
spec/helpers/panel_pictures_helper_spec.rb | 3 +-
spec/helpers/panels_helper_spec.rb | 3 +-
spec/helpers/pictures_helper_spec.rb | 3 +-
spec/helpers/resource_pictures_helper_spec.rb | 3 +-
.../speech_balloon_templates_helper_spec.rb | 3 +-
spec/helpers/speech_balloons_helper_spec.rb | 3 +-
spec/helpers/speeches_helper_spec.rb | 3 +-
spec/helpers/system_helper_spec.rb | 3 +-
spec/helpers/system_pictures_helper_spec.rb | 3 +-
spec/json/color.json | 6 +
spec/json/colors.json | 10 +
spec/json/license_group.json | 2 +-
spec/json/license_groups.json | 4 +-
spec/models/admin_spec.rb | 3 +-
spec/models/artist_spec.rb | 35 ++-
spec/models/color_spec.rb | 224 +++++++++++++++++++
spec/models/comic_spec.rb | 61 +++---
spec/models/ground_color_spec.rb | 222 +++++++++++++++++++
spec/models/ground_picture_spec.rb | 237 +++++++++++++++++++++
spec/models/original_picture_spec.rb | 198 +++++++++++------
spec/models/panel_color_spec.rb | 217 +++++++++++++++++++
spec/models/panel_picture_spec.rb | 35 +--
spec/models/panel_spec.rb | 200 ++++++++++++-----
spec/models/picture_spec.rb | 130 +++++++++++
spec/models/resource_picture_spec.rb | 38 +++-
spec/models/story_spec.rb | 2 +-
127 files changed, 3350 insertions(+), 531 deletions(-)
create mode 100644 app/assets/javascripts/ie5.js
create mode 100644 app/controllers/colors_controller.rb
create mode 100644 app/controllers/ground_colors_controller.rb
create mode 100644 app/controllers/ground_pictures_controller.rb
create mode 100644 app/controllers/panel_colors_controller.rb
create mode 100644 app/helpers/colors_helper.rb
create mode 100644 app/helpers/ground_colors_helper.rb
create mode 100644 app/helpers/ground_pictures_helper.rb
create mode 100644 app/helpers/panel_colors_helper.rb
create mode 100644 app/models/color.rb
create mode 100644 app/models/ground_color.rb
create mode 100644 app/models/ground_picture.rb
create mode 100644 app/models/panel_color.rb
create mode 100644 app/views/colors/index.html.erb
create mode 100644 app/views/ground_colors/index.html.erb
create mode 100644 app/views/ground_pictures/index.html.erb
create mode 100644 app/views/original_pictures/_exist.html.erb
create mode 100644 app/views/original_pictures/_history_list.html.erb
create mode 100644 app/views/original_pictures/history.html.erb
create mode 100644 app/views/panel_colors/index.html.erb
create mode 100644 app/views/pictures/_head.html.erb
create mode 100644 app/views/pictures/_tail.html.erb
create mode 100644 app/views/pictures/show.html.erb
create mode 100644 db/colors.json
create mode 100644 db/migrate/20120815021444_add_md5.rb
create mode 100644 db/migrate/20120815043236_rm_default_ls_on_artist.rb
create mode 100644 db/migrate/20120815045014_rm_default_size_on_comic.rb
create mode 100644 db/migrate/20120816022713_create_colors.rb
create mode 100644 db/migrate/20120816024744_create_ground_colors.rb
create mode 100644 db/migrate/20120816024915_create_panel_colors.rb
create mode 100644 db/migrate/20120816025308_create_ground_pictures.rb
create mode 100644 lib/tasks/licenses.rake
create mode 100644 script/gem_builder.rb
create mode 100644 script/ls_helper.rb
create mode 100644 spec/controllers/colors_controller_spec.rb
create mode 100644 spec/controllers/ground_colors_controller_spec.rb
create mode 100644 spec/controllers/ground_pictures_controller_spec.rb
create mode 100644 spec/controllers/panel_colors_controller_spec.rb
create mode 100644 spec/helpers/colors_helper_spec.rb
create mode 100644 spec/helpers/ground_colors_helper_spec.rb
create mode 100644 spec/helpers/ground_pictures_helper_spec.rb
create mode 100644 spec/helpers/panel_colors_helper_spec.rb
create mode 100644 spec/json/color.json
create mode 100644 spec/json/colors.json
create mode 100644 spec/models/color_spec.rb
create mode 100644 spec/models/ground_color_spec.rb
create mode 100644 spec/models/ground_picture_spec.rb
create mode 100644 spec/models/panel_color_spec.rb
diff --git a/.gitignore b/.gitignore
index 012febfd..7d019e64 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,9 @@ config/picture_io.yml
config/license.yml
config/test_layout
lib/test/temp/
+db/migrate/*_creative_commons_v??_licenses_attributes.rb
+db/migrate/*_pettan_commons_v??_licenses_attributes.rb
+db/migrate/*_pettan_protected_v??_licenses_attributes.rb
+db/migrate/*_pettan_public_v??_licenses_attributes.rb
+db/migrate/*_public_domain_v??_licenses_attributes.rb
+db/migrate/*_unknown_v??_licenses_attributes.rb
diff --git a/.rspec b/.rspec
index 53607ea5..38dcdb57 100644
--- a/.rspec
+++ b/.rspec
@@ -1 +1 @@
---colour
+--no-colour
diff --git a/Gemfile b/Gemfile
index b44c1f7a..258ae6df 100644
--- a/Gemfile
+++ b/Gemfile
@@ -6,7 +6,12 @@ gem 'aws-s3'
gem 'validates_existence'
gem "validate_url"
gem "standard_licenses"
-gem "creative_commons_v30_licenses", '>= 0.0.4'
+gem "creative_commons_v30_licenses"
+gem 'pettan_commons_v01_licenses'
+gem 'pettan_protected_v01_licenses'
+gem 'pettan_public_v01_licenses'
+gem 'public_domain_v01_licenses'
+gem 'unknown_v01_licenses'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
diff --git a/Gemfile.lock b/Gemfile.lock
index 5158c6c7..34911c79 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -99,8 +99,16 @@ GEM
multi_json (1.3.6)
nokogiri (1.5.5-x86-mingw32)
orm_adapter (0.0.7)
+ pettan_commons_v01_licenses (0.0.5)
+ rails (~> 3.1.1)
+ pettan_protected_v01_licenses (0.0.5)
+ rails (~> 3.1.1)
+ pettan_public_v01_licenses (0.0.5)
+ rails (~> 3.1.1)
pg (0.14.0-x86-mingw32)
polyglot (0.3.3)
+ public_domain_v01_licenses (0.0.5)
+ rails (~> 3.1.1)
rack (1.3.6)
rack-cache (1.2)
rack (>= 0.4)
@@ -177,6 +185,8 @@ GEM
uglifier (1.2.6)
execjs (>= 0.3.0)
multi_json (~> 1.3)
+ unknown_v01_licenses (0.0.5)
+ rails (~> 3.1.1)
validate_url (0.2.0)
activemodel (>= 3.0.0)
validates_existence (0.7.1)
@@ -197,7 +207,7 @@ DEPENDENCIES
autotest
aws-s3
coffee-rails (~> 3.1.1)
- creative_commons_v30_licenses (>= 0.0.4)
+ creative_commons_v30_licenses
cucumber
cucumber-rails
database_cleaner
@@ -205,7 +215,11 @@ DEPENDENCIES
factory_girl
jquery-rails
moro-miso
+ pettan_commons_v01_licenses
+ pettan_protected_v01_licenses
+ pettan_public_v01_licenses
pg
+ public_domain_v01_licenses
rails (= 3.1.1)
rails-erd
rmagick
@@ -216,6 +230,7 @@ DEPENDENCIES
standard_licenses
therubyracer-heroku
uglifier (>= 1.0.3)
+ unknown_v01_licenses
validate_url
validates_existence
webrat
diff --git a/app/assets/javascripts/ie5.js b/app/assets/javascripts/ie5.js
new file mode 100644
index 00000000..c404f21a
--- /dev/null
+++ b/app/assets/javascripts/ie5.js
@@ -0,0 +1,78 @@
+/**
+ * http://d.hatena.ne.jp/ofk/20080904/1220485969
+ * @author ofk
+ */
+
+Function.prototype.apply || (Function.prototype.apply = function (x, y) {
+ x = x || window;
+ y = y ||[];
+ x.__apply = this;
+ if (!x.__apply) x.constructor.prototype.__apply = this;
+ var r, j = y.length;
+ switch (j) {
+ case 0: r = x.__apply(); break;
+ case 1: r = x.__apply(y[0]); break;
+ case 2: r = x.__apply(y[0], y[1]); break;
+ case 3: r = x.__apply(y[0], y[1], y[2]); break;
+ case 4: r = x.__apply(y[0], y[1], y[2], y[3]); break;
+ case 5: r = x.__apply(y[0], y[1], y[2], y[3], y[4]); break;
+ case 6: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5]); break;
+ case 7: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5], y[6]); break;
+ case 8: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7]); break;
+ case 9: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7], y[8]); break;
+ default:
+ var a = [];
+ for (var i = 0; i < j; ++i)
+ a[i] = 'y[' + i + ']';
+ r = eval('x.__apply(' + a.join(',') + ')');
+ break;
+ }
+ delete x.__apply ? x.__apply : x.constructor.prototype.__apply;
+ return r;
+});
+Function.prototype.call || (Function.prototype.call = function () {
+ var a = arguments, x = a[0], y = [];
+ for (var i = 1, j = a.length; i < j; ++i)
+ y[i - 1] = a[i]
+ return this.apply(x, y);
+});
+Array.prototype.pop || (Array.prototype.pop = function () {
+ var r = this[this.length - 1];
+ --this.length;
+ return r;
+});
+Array.prototype.push || (Array.prototype.push = function () {
+ for (var a = arguments, i = 0, j = a.length, l = this.length; i < j; ++i)
+ this[l + i] = a[i];
+ return this.length;
+});
+Array.prototype.shift || (Array.prototype.shift = function () {
+ var r = this[0];
+ for(var i = 1, j = this.length; i < j; ++i)
+ this[i - 1] = this[i];
+ --this.length;
+ return r;
+});
+Array.prototype.unshift || (Array.prototype.unshift = function () {
+ var a = arguments, l = a.length, j = this.length += l - 1;
+ for (var i = j; i >= l; --i)
+ this[i] = this[i - l];
+ for (var i = 0; i < l; ++i)
+ this[i] = a[i];
+ return j;
+});
+Array.prototype.splice || (Array.prototype.splice = function (x, y) {
+ var a = arguments, s = a.length - 2 - y, r = this.slice(x, x + y);
+ if (s > 0) {
+ for (var i = this.length - 1, j = x + y; i >= j; --i)
+ this[i + s] = this[i];
+ }
+ else if (s < 0) {
+ for (var i = x + y, j = this.length; i < j; ++i)
+ this[i + s] = this[i];
+ this.length += s;
+ }
+ for (var i = 2, j = a.length; i < j; ++i)
+ this[i - 2 + x] = a[i];
+ return r;
+});
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index f108ef90..125b159b 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -15,7 +15,7 @@ class ApplicationController < ActionController::Base
@artist = if @author and @author.artist?
@author.artist
else
- Artist.new author_id: @author.id, email: @user.email, name: @author.name, default_license_id: 1
+ Artist.new author_id: @author.id, email: @user.email, name: @author.name
end
end
end
@@ -26,7 +26,7 @@ class ApplicationController < ActionController::Base
true
else
respond_to do |format|
- format.html { redirect_to new_artist_path, :status => :found }
+ format.html { redirect_to main_app.new_artist_path, :status => :found }
format.js { render "artists/new" }
format.json {
raise ActiveRecord::Forbidden
diff --git a/app/controllers/artists_controller.rb b/app/controllers/artists_controller.rb
index ae96dd99..dec44edd 100644
--- a/app/controllers/artists_controller.rb
+++ b/app/controllers/artists_controller.rb
@@ -56,6 +56,7 @@ layout 'test'
# GET /artists/new.json
def new
@artist = Artist.new
+ @artist.supply_default
respond_to do |format|
format.html # new.html.erb
@@ -66,14 +67,16 @@ layout 'test'
# GET /artists/1/edit
def edit
- @artist = Artist.find(params[:id])
+ @artist = Artist.edit(params[:id], @author)
end
# POST /artists
# POST /artists.json
def create
- @artist = Artist.new(params[:artist])
- @artist.author_id = @author.id
+ @artist = Artist.new()
+ @artist.supply_default
+ @artist.attributes = params[:artist]
+ @artist.overwrite @author
respond_to do |format|
if @artist.save
format.html { redirect_to @artist, notice: 'Artist was successfully created.' }
@@ -88,10 +91,12 @@ layout 'test'
# PUT /artists/1
# PUT /artists/1.json
def update
- @artist = Artist.find(params[:id])
+ @artist = Artist.edit(params[:id], @author)
+ @artist.attributes = params[:artist]
+ @artist.overwrite @author
respond_to do |format|
- if @artist.update_attributes(params[:artist])
+ if @artist.save
format.html { redirect_to @artist, notice: 'Artist was successfully updated.' }
format.json { head :ok }
else
@@ -104,7 +109,7 @@ layout 'test'
# DELETE /artists/1
# DELETE /artists/1.json
def destroy
- @artist = Artist.find(params[:id])
+ @artist = Artist.edit(params[:id], @author)
@artist.destroy
respond_to do |format|
diff --git a/app/controllers/colors_controller.rb b/app/controllers/colors_controller.rb
new file mode 100644
index 00000000..9a936ffb
--- /dev/null
+++ b/app/controllers/colors_controller.rb
@@ -0,0 +1,16 @@
+class ColorsController < ApplicationController
+ layout 'test' if Pettanr::TestLayout
+
+ # GET /colors
+ # GET /colors.json
+ def index
+ @page = PanelColor.page params[:page]
+ @page_size = PanelColor.page_size params[:page_size]
+ @colors = Color.list({}, @page, @page_size)
+
+ respond_to do |format|
+ format.html # index.html.erb
+ format.json { render json: @colors.to_json(Color.list_json_opt) }
+ end
+ end
+end
diff --git a/app/controllers/comics_controller.rb b/app/controllers/comics_controller.rb
index ae1459d1..4444e834 100644
--- a/app/controllers/comics_controller.rb
+++ b/app/controllers/comics_controller.rb
@@ -7,14 +7,6 @@ class ComicsController < ApplicationController
end
before_filter :authenticate_admin!, :only => [:list, :browse]
- private
-
- def treat_param comic
- comic.author_id = @author.id
- end
-
- public
-
def top
@new_comics = Comic.find(:all,
:include => :author, :conditions => ['visible > 0'], :order => 'updated_at desc', :limit => 5
@@ -88,7 +80,7 @@ class ComicsController < ApplicationController
# GET /comics/1/edit
# GET /comics/1.js/edit
def edit
- @comic = Comic.show(params[:id], @author)
+ @comic = Comic.edit(params[:id], @author)
@comic.supply_default
respond_to do |format|
format.html
@@ -100,8 +92,10 @@ class ComicsController < ApplicationController
# POST /comics.json
def create
params[:comic].merge! author_id: @author.id
- @comic = Comic.new params[:comic]
+ @comic = Comic.new
@comic.supply_default
+ @comic.attributes = params[:comic]
+ @comic.overwrite @author
respond_to do |format|
if @comic.save
@@ -117,10 +111,11 @@ class ComicsController < ApplicationController
# PUT /comics/1
# PUT /comics/1.json
def update
- params[:comic].merge! author_id: @author.id
- @comic = Comic.show(params[:id], @author)
+ @comic = Comic.edit(params[:id], @author)
+ @comic.attributes = params[:comic]
+ @comic.overwrite @author
respond_to do |format|
- if @comic.update_attributes(params[:comic])
+ if @comic.save
format.html { redirect_to @comic, notice: 'Comic was successfully updated.' }
format.json { head :ok }
else
@@ -133,16 +128,11 @@ class ComicsController < ApplicationController
# DELETE /comics/1
# DELETE /comics/1.json
def destroy
- @comic = Comic.find(params[:id])
- if @comic.own? @author
- @comic.destroy
- respond_to do |format|
- format.html { redirect_to comics_url }
- format.json { head :ok }
- end
- else
- format.html { render action: "edit" }
- format.json { render json: @comic.errors, status: :unprocessable_entity }
+ @comic = Comic.edit(params[:id], @author)
+ @comic.destroy
+ respond_to do |format|
+ format.html { redirect_to comics_url }
+ format.json { head :ok }
end
end
end
diff --git a/app/controllers/ground_colors_controller.rb b/app/controllers/ground_colors_controller.rb
new file mode 100644
index 00000000..db1f252a
--- /dev/null
+++ b/app/controllers/ground_colors_controller.rb
@@ -0,0 +1,17 @@
+class GroundColorsController < ApplicationController
+ layout 'test' if Pettanr::TestLayout
+ before_filter :authenticate_user!, :only => [:index]
+
+ # GET /ground_colors
+ # GET /ground_colors.json
+ def index
+ @page = GroundColor.page params[:page]
+ @page_size = GroundColor.page_size params[:page_size]
+ @ground_colors = GroundColor.list({}, @page, @page_size)
+
+ respond_to do |format|
+ format.html # index.html.erb
+ format.json { render :json => @ground_colors.to_json(GroundColor.list_json_opt) }
+ end
+ end
+end
diff --git a/app/controllers/ground_pictures_controller.rb b/app/controllers/ground_pictures_controller.rb
new file mode 100644
index 00000000..28de1711
--- /dev/null
+++ b/app/controllers/ground_pictures_controller.rb
@@ -0,0 +1,18 @@
+class GroundPicturesController < ApplicationController
+ layout 'test' if Pettanr::TestLayout
+ before_filter :authenticate_user!, :only => [:index]
+
+ # GET /ground_pictures
+ # GET /ground_pictures.json
+ def index
+ @page = GroundPicture.page params[:page]
+ @page_size = GroundPicture.page_size params[:page_size]
+ @ground_pictures = GroundPicture.list({}, @page, @page_size)
+
+ respond_to do |format|
+ format.html # index.html.erb
+ format.json { render :json => @ground_pictures.to_json(GroundPicture.list_json_opt) }
+ end
+ end
+
+end
diff --git a/app/controllers/original_pictures_controller.rb b/app/controllers/original_pictures_controller.rb
index c211d867..eaa3a847 100644
--- a/app/controllers/original_pictures_controller.rb
+++ b/app/controllers/original_pictures_controller.rb
@@ -1,9 +1,9 @@
#åç»
class OriginalPicturesController < ApplicationController
layout 'test' if Pettanr::TestLayout
- before_filter :authenticate_user!, :only => [:index, :show, :new, :edit, :create, :update, :destroy]
+ before_filter :authenticate_user!, :only => [:index, :show, :history, :new, :edit, :create, :update, :destroy]
before_filter :authenticate_admin!, :only => [:list, :browse]
- before_filter :authenticate_artist, :only => [:index, :show, :new, :edit, :create, :update, :destroy]
+ before_filter :authenticate_artist, :only => [:index, :show, :history, :new, :edit, :create, :update, :destroy]
private
@@ -49,6 +49,16 @@ class OriginalPicturesController < ApplicationController
end
end
+ def history
+ @original_picture = OriginalPicture.show(params[:id], @artist)
+ @history = @original_picture.history
+
+ respond_to do |format|
+ format.html # index.html.erb
+ format.json { render json: @history.to_json }
+ end
+ end
+
def list
@original_pictures = OriginalPicture.all
@@ -91,7 +101,7 @@ class OriginalPicturesController < ApplicationController
# GET /original_pictures/1/edit
def edit
- @original_picture = OriginalPicture.show(params[:id], @author)
+ @original_picture = OriginalPicture.edit(params[:id], @author)
respond_to do |format|
format.html
format.js
@@ -121,7 +131,6 @@ class OriginalPicturesController < ApplicationController
def update
@picture_data = set_image params[:original_picture][:file]
@original_picture = OriginalPicture.edit(params[:id], @author)
- @original_picture.supply_default @artist
respond_to do |format|
if @original_picture.store(@picture_data, @artist)
diff --git a/app/controllers/panel_colors_controller.rb b/app/controllers/panel_colors_controller.rb
new file mode 100644
index 00000000..c701e771
--- /dev/null
+++ b/app/controllers/panel_colors_controller.rb
@@ -0,0 +1,18 @@
+class PanelColorsController < ApplicationController
+ layout 'test' if Pettanr::TestLayout
+ before_filter :authenticate_user!, :only => [:index]
+
+ # GET /ground_pictures
+ # GET /ground_pictures.json
+ def index
+ @page = PanelColor.page params[:page]
+ @page_size = PanelColor.page_size params[:page_size]
+ @panel_colors = PanelColor.list({}, @page, @page_size)
+
+ respond_to do |format|
+ format.html # index.html.erb
+ format.json { render :json => @panel_colors.to_json(PanelColor.list_json_opt) }
+ end
+ end
+
+end
diff --git a/app/controllers/panels_controller.rb b/app/controllers/panels_controller.rb
index abae3f71..29390ce4 100644
--- a/app/controllers/panels_controller.rb
+++ b/app/controllers/panels_controller.rb
@@ -68,7 +68,7 @@ class PanelsController < ApplicationController
end
def edit
- @panel = Panel.show(params[:id], @author)
+ @panel = Panel.edit(params[:id], @author)
respond_to do |format|
format.html
format.js
@@ -131,20 +131,4 @@ class PanelsController < ApplicationController
end
end
- def move
- @panel = Panel.find(params[:id])
- @new_seq = params[:panel][:t].to_i
- respond_to do |format|
- Panel.transaction do
- if @panel.move_to(@new_t)
- format.html { redirect_to @panel, notice: 'Panel was successfully moved.' }
- format.json { head :ok }
- else
- format.html { render action: "show" }
- format.json { render json: @panel.errors, status: :unprocessable_entity }
- end
- end
- end
- end
-
end
diff --git a/app/controllers/pictures_controller.rb b/app/controllers/pictures_controller.rb
index 4661dbfd..4ebe33a3 100644
--- a/app/controllers/pictures_controller.rb
+++ b/app/controllers/pictures_controller.rb
@@ -10,6 +10,7 @@ class PicturesController < ApplicationController
format.png { send_data(@picture.restore(params[:subdir]), opt ) }
format.gif { send_data(@picture.restore(params[:subdir]), opt ) }
format.jpeg { send_data(@picture.restore(params[:subdir]), opt ) }
+ format.html
format.json { render :json => @picture.to_json}
end
end
diff --git a/app/controllers/stories_controller.rb b/app/controllers/stories_controller.rb
index f2ee0825..4f41dc16 100644
--- a/app/controllers/stories_controller.rb
+++ b/app/controllers/stories_controller.rb
@@ -58,7 +58,7 @@ class StoriesController < ApplicationController
# GET /stories/1/edit
# GET /stories/1.js/edit
def edit
- @story = Story.show(params[:id], @author)
+ @story = Story.edit(params[:id], @author)
respond_to do |format|
format.html
format.js
diff --git a/app/helpers/colors_helper.rb b/app/helpers/colors_helper.rb
new file mode 100644
index 00000000..f74a8a76
--- /dev/null
+++ b/app/helpers/colors_helper.rb
@@ -0,0 +1,2 @@
+module ColorsHelper
+end
diff --git a/app/helpers/ground_colors_helper.rb b/app/helpers/ground_colors_helper.rb
new file mode 100644
index 00000000..99eb4ee6
--- /dev/null
+++ b/app/helpers/ground_colors_helper.rb
@@ -0,0 +1,2 @@
+module GroundColorsHelper
+end
diff --git a/app/helpers/ground_pictures_helper.rb b/app/helpers/ground_pictures_helper.rb
new file mode 100644
index 00000000..76df63c5
--- /dev/null
+++ b/app/helpers/ground_pictures_helper.rb
@@ -0,0 +1,2 @@
+module GroundPicturesHelper
+end
diff --git a/app/helpers/panel_colors_helper.rb b/app/helpers/panel_colors_helper.rb
new file mode 100644
index 00000000..f554e630
--- /dev/null
+++ b/app/helpers/panel_colors_helper.rb
@@ -0,0 +1,2 @@
+module PanelColorsHelper
+end
diff --git a/app/models/artist.rb b/app/models/artist.rb
index db85188d..093983a0 100644
--- a/app/models/artist.rb
+++ b/app/models/artist.rb
@@ -4,11 +4,27 @@ class Artist < ActiveRecord::Base
validates :name, :presence => true, :length => {:maximum => 30}
# validates :default_license_id, :presence => true, :numericality => true, :existence => true
-
+
def supply_default
self.name = 'no name' if self.name.blank?
end
+ def overwrite au
+ return false unless au
+ self.author_id = au.id
+ end
+
+ def own? author
+ return false unless author
+ self.author_id == author.id
+ end
+
+ def self.edit sid, au
+ res = Artist.find sid
+ raise ActiveRecord::Forbidden unless res.own?(au)
+ res
+ end
+
def self.find_by_author author
Artist.find( :first, :conditions => ['author_id = ?', author.id])
end
diff --git a/app/models/author.rb b/app/models/author.rb
index 980da84e..a6db5c2f 100644
--- a/app/models/author.rb
+++ b/app/models/author.rb
@@ -112,6 +112,51 @@ class Author < ActiveRecord::Base
page_size
end
+ def self.default_ground_picture_page_size
+ 30
+ end
+
+ def self.ground_picture_max_page_size
+ 200
+ end
+
+ def self.ground_picture_page_size prm = self.default_ground_picture_page_size
+ page_size = prm.to_i
+ page_size = self.ground_picture_max_page_size if page_size > self.ground_picture_max_page_size
+ page_size = self.default_ground_picture_page_size if page_size < 1
+ page_size
+ end
+
+ def self.default_ground_color_page_size
+ 30
+ end
+
+ def self.ground_color_max_page_size
+ 200
+ end
+
+ def self.ground_color_page_size prm = self.default_ground_color_page_size
+ page_size = prm.to_i
+ page_size = self.ground_color_max_page_size if page_size > self.ground_color_max_page_size
+ page_size = self.default_ground_color_page_size if page_size < 1
+ page_size
+ end
+
+ def self.default_panel_color_page_size
+ 30
+ end
+
+ def self.panel_color_max_page_size
+ 200
+ end
+
+ def self.panel_color_page_size prm = self.default_panel_color_page_size
+ page_size = prm.to_i
+ page_size = self.panel_color_max_page_size if page_size > self.panel_color_max_page_size
+ page_size = self.default_panel_color_page_size if page_size < 1
+ page_size
+ end
+
def self.show aid, opt = {}
a = Author.find(aid, :include => self.show_include_opt(opt))
# raise ActiveRecord::Forbidden unless c.visible?(au)
diff --git a/app/models/color.rb b/app/models/color.rb
new file mode 100644
index 00000000..d09ae2c2
--- /dev/null
+++ b/app/models/color.rb
@@ -0,0 +1,61 @@
+class Color < ActiveRecord::Base
+ belongs_to :ground_color
+
+ validates :name, :presence => true, :length => {:maximum => 50}, :uniqueness => true
+ validates :code, :presence => true, :numericality => {:greater_than_or_equal_to => 0, :less_than => 0x1000000}
+ validates :t, :presence => true, :numericality => {:greater_than_or_equal_to => 0}
+
+ def self.import filename
+ Color.import_file(filename) {|name, attr| Color.store(name, attr)}
+ end
+
+ def self.store name, attr
+ r = Color.modify_object name, attr
+ r.save
+ r
+ end
+
+ def self.default_page_size
+ 25
+ end
+
+ def self.max_page_size
+ 100
+ end
+
+ def self.default_panel_size
+ 30
+ end
+
+ def self.page prm = nil
+ page = prm.to_i
+ page = 1 if page < 1
+ page
+ end
+
+ def self.page_size prm = self.default_page_size
+ page_size = prm.to_i
+ page_size = self.max_page_size if page_size > self.max_page_size
+ page_size = self.default_page_size if page_size < 1
+ page_size
+ end
+
+ def self.list opt = {}, page = 1, page_size = self.default_page_size
+ opt.merge!({:order => 'colors.t', :limit => page_size, :offset => (page -1) * page_size})
+ Color.find(:all, opt)
+ end
+
+ def self.list_opt
+ {:include => {:ground_color => {:panel => {:author => {}}} }}
+ end
+
+ def self.list_json_opt
+ {:include => {:ground_color => {:panel => {:author => {}}} }}
+ end
+
+ def self.show cid
+ c = Color.find(cid)
+ c
+ end
+
+end
diff --git a/app/models/comic.rb b/app/models/comic.rb
index 13ef9c76..6a1e92b8 100644
--- a/app/models/comic.rb
+++ b/app/models/comic.rb
@@ -4,8 +4,6 @@ class Comic < ActiveRecord::Base
belongs_to :author
validates :title, :presence => true, :length => {:maximum => 100}
- validates :width, :presence => true, :numericality => true, :natural_number => true
- validates :height, :presence => true, :numericality => true, :natural_number => true
validates :visible, :presence => true, :numericality => true, :inclusion => {:in => 0..3}
before_save do |r|
@@ -16,6 +14,11 @@ class Comic < ActiveRecord::Base
self.visible = 0 if self.visible.blank?
end
+ def overwrite au
+ return false unless au
+ self.author_id = au.id
+ end
+
def own? author
return false unless author
self.author_id == author.id
@@ -84,6 +87,12 @@ class Comic < ActiveRecord::Base
c
end
+ def self.edit cid, au, opt = {}
+ c = Comic.find(cid, :include => self.show_include_opt(opt))
+ raise ActiveRecord::Forbidden unless c.own?(au)
+ c
+ end
+
def self.show_include_opt opt = {}
res = {:stories => {:panel => {}}, :author => {}}
res.push(opt[:include]) if opt[:include]
diff --git a/app/models/ground_color.rb b/app/models/ground_color.rb
new file mode 100644
index 00000000..c8af47ed
--- /dev/null
+++ b/app/models/ground_color.rb
@@ -0,0 +1,58 @@
+class GroundColor < ActiveRecord::Base
+ belongs_to :panel
+ belongs_to :color
+
+ validates :panel_id, :numericality => {:allow_blank => true}
+ validates :color_id, :numericality => true, :existence => true
+ validates :z, :presence => true, :numericality => {:greater_than => 0}
+
+ def self.default_page_size
+ 25
+ end
+
+ def self.max_page_size
+ 100
+ end
+
+ def self.page prm = nil
+ page = prm.to_i
+ page = 1 if page < 1
+ page
+ end
+
+ def self.page_size prm = self.default_page_size
+ page_size = prm.to_i
+ page_size = self.max_page_size if page_size > self.max_page_size
+ page_size = self.default_page_size if page_size < 1
+ page_size
+ end
+
+ def self.offset cnt, prm = nil
+ offset = prm.to_i
+ offset = cnt - 1 if offset >= cnt
+ offset = cnt - offset.abs if offset < 0
+ offset = 0 if offset < 0
+ offset
+ end
+
+ def self.list opt = {}, page = 1, page_size = self.default_page_size
+ opt.merge!(self.list_opt) unless opt[:include]
+ opt.merge!({:conditions => 'panels.publish > 0', :order => 'ground_colors.updated_at desc', :limit => page_size, :offset => (page -1) * page_size})
+ GroundColor.find(:all, opt)
+ end
+
+ def self.list_opt
+ {:include => {:panel => {:author => {}}, :color => {} }}
+ end
+
+ def self.list_json_opt
+ {:include => {:panel => {:author => {}}, :color => {} }}
+ end
+
+ def self.mylist au, opt = {}, page = 1, ground_color_page_size = Author.default_ground_color_page_size
+ opt.merge!(self.list_opt) unless opt[:include]
+ opt.merge!({:conditions => ['panels.author_id = ?', au.id], :order => 'ground_colors.updated_at desc', :limit => page_size, :offset => (page -1) * ground_color_page_size})
+ GroundColor.find(:all, opt)
+ end
+
+end
diff --git a/app/models/ground_picture.rb b/app/models/ground_picture.rb
new file mode 100644
index 00000000..207b2083
--- /dev/null
+++ b/app/models/ground_picture.rb
@@ -0,0 +1,58 @@
+class GroundPicture < ActiveRecord::Base
+ belongs_to :panel
+ belongs_to :picture
+
+ validates :panel_id, :numericality => {:allow_blank => true}
+ validates :picture_id, :numericality => true, :existence => true
+ validates :z, :presence => true, :numericality => {:greater_than => 0}
+
+ def self.default_page_size
+ 25
+ end
+
+ def self.max_page_size
+ 100
+ end
+
+ def self.page prm = nil
+ page = prm.to_i
+ page = 1 if page < 1
+ page
+ end
+
+ def self.page_size prm = self.default_page_size
+ page_size = prm.to_i
+ page_size = self.max_page_size if page_size > self.max_page_size
+ page_size = self.default_page_size if page_size < 1
+ page_size
+ end
+
+ def self.offset cnt, prm = nil
+ offset = prm.to_i
+ offset = cnt - 1 if offset >= cnt
+ offset = cnt - offset.abs if offset < 0
+ offset = 0 if offset < 0
+ offset
+ end
+
+ def self.list opt = {}, page = 1, page_size = self.default_page_size
+ opt.merge!(self.list_opt) unless opt[:include]
+ opt.merge!({:conditions => 'panels.publish > 0', :order => 'ground_pictures.updated_at desc', :limit => page_size, :offset => (page -1) * page_size})
+ GroundPicture.find(:all, opt)
+ end
+
+ def self.list_opt
+ {:include => {:panel => {:author => {}}, :picture => {:artist => {}, :license => {}}}}
+ end
+
+ def self.list_json_opt
+ {:include => {:panel => {:author => {}}, :picture => {:artist => {}, :license => {}}}}
+ end
+
+ def self.mylist au, opt = {}, page = 1, ground_picture_page_size = Author.default_ground_picture_page_size
+ opt.merge!(self.list_opt) unless opt[:include]
+ opt.merge!({:conditions => ['panels.author_id = ?', au.id], :order => 'ground_pictures.updated_at desc', :limit => page_size, :offset => (page -1) * ground_picture_page_size})
+ GroundPicture.find(:all, opt)
+ end
+
+end
diff --git a/app/models/license_group.rb b/app/models/license_group.rb
index fa67c7b8..7d7f13df 100644
--- a/app/models/license_group.rb
+++ b/app/models/license_group.rb
@@ -55,4 +55,15 @@ class LicenseGroup < ActiveRecord::Base
{:include => {:licenses => {}}}
end
+ def self.disp_import_error r
+ if r == false
+ puts "json file error. file does not exist or broken"
+ else
+ unless r.empty?
+ r.each do |lg|
+ put lg.errors.full_messages
+ end
+ end
+ end
+ end
end
diff --git a/app/models/original_picture.rb b/app/models/original_picture.rb
index a2606bf4..497fa646 100644
--- a/app/models/original_picture.rb
+++ b/app/models/original_picture.rb
@@ -2,18 +2,25 @@ class OriginalPicture < ActiveRecord::Base
belongs_to :artist
belongs_to :original_picture_license_group
has_one :resource_picture
+ has_many :pictures
- validates :ext, :presence => true, :length => {:maximum => 4}, :inclusion => {:in => ['png', 'jpeg', 'gif']}
+ validates :ext, :presence => true, :length => {:maximum => 4}, :inclusion => {:in => ['png', 'jpeg', 'gif']}
validates :width, :presence => true, :numericality => true, :natural_number => true
validates :height, :presence => true, :numericality => true, :natural_number => true
validates :filesize, :presence => true, :numericality => {:greater_than => 0, :less_than_or_equal_to => 2000000}, :natural_number => true
validates :artist_id, :presence => true, :numericality => true, :existence => true
+ validates :md5, :presence => true, :length => {:maximum => 32}
before_destroy :destroy_with_file
def supply_default art
end
+ def overwrite art
+ return false unless art
+ self.artist_id = art.id
+ end
+
def self.default_page_size
25
end
@@ -43,34 +50,36 @@ class OriginalPicture < ActiveRecord::Base
OriginalPicture.find(:all, opt)
end
+ def history
+ Picture.find(:all, {:conditions => ['pictures.original_picture_id = ?', self.id], :order => 'pictures.revision desc'} )
+ end
+
def self.list_opt
- {:include => {:resource_picture => {}}}
+ {:include => {:resource_picture => {}, :pictures => {}}}
end
def self.list_json_opt
- {:include => {:resource_picture => {}}}
+ {:include => {:resource_picture => {}, :pictures => {}}}
end
def self.show cid, artist, opt = {}
- pic = OriginalPicture.find(cid, :include => self.show_include_opt(opt))
+ pic = OriginalPicture.find(cid, self.show_include_opt)
raise ActiveRecord::Forbidden unless pic.own?(artist)
pic
end
def self.edit cid, artist, opt = {}
- pic = OriginalPicture.find(cid, :include => self.show_include_opt(opt))
+ pic = OriginalPicture.find(cid, self.show_include_opt)
raise ActiveRecord::Forbidden unless pic.own?(artist)
pic
end
- def self.show_include_opt opt = {}
- res = {:resource_picture => {}}
- res.merge!(opt[:include]) if opt[:include]
- res
+ def self.show_include_opt
+ {:include => {:resource_picture => {}, :pictures => {}}}
end
def self.show_json_include_opt
- {:include => {:resource_picture => {}}}
+ {:include => {:resource_picture => {}, :pictures => {}}}
end
def destroy_with_file
@@ -94,6 +103,11 @@ class OriginalPicture < ActiveRecord::Base
'/original_pictures/' + filename
end
+ def opt_img_tag
+ tw, th = ResourcePicture.fix_size_both(MagicNumber['thumbnail_width'], MagicNumber['thumbnail_height'], self.width, self.height)
+ {:src => self.url, :width => tw, :height => th}
+ end
+
def data_to_mgk picture_data
begin
mgk = Magick::Image.from_blob(picture_data).shift
@@ -111,6 +125,8 @@ class OriginalPicture < ActiveRecord::Base
self.attributes = {:ext => mgk.format.downcase, :width => mgk.columns, :height => mgk.rows,
:filesize => mgk.filesize, :artist_id => art.id
}
+ self.md5 = Digest::MD5.hexdigest(picture_data)
+ self.overwrite art
OriginalPicture.transaction do
if res = self.save
if res = PictureIO.original_picture_io.put(picture_data, self.filename)
diff --git a/app/models/panel.rb b/app/models/panel.rb
index 4328e91d..db740ffa 100644
--- a/app/models/panel.rb
+++ b/app/models/panel.rb
@@ -2,12 +2,17 @@
class Panel < ActiveRecord::Base
belongs_to :author
belongs_to :resource_picture
-# belongs_to :background_picture, :class_name => 'ResourcePicture'
has_many :stories
has_many :panel_pictures, :dependent => :destroy
has_many :speech_balloons, :dependent => :destroy
+ has_many :ground_pictures, :dependent => :destroy
+ has_many :ground_colors, :dependent => :destroy
+ has_many :panel_colors, :dependent => :destroy
accepts_nested_attributes_for :panel_pictures, :allow_destroy => true
accepts_nested_attributes_for :speech_balloons, :allow_destroy => true
+ accepts_nested_attributes_for :ground_pictures, :allow_destroy => true
+ accepts_nested_attributes_for :ground_colors, :allow_destroy => true
+ accepts_nested_attributes_for :panel_colors, :allow_destroy => true
validates :width, :presence => true, :numericality => true, :natural_number => true
validates :height, :presence => true, :numericality => true, :natural_number => true
@@ -144,6 +149,14 @@ class Panel < ActiveRecord::Base
:picture => {:artist => {}, :license => {}}
},
:speech_balloons => {:balloons => {}, :speeches => {}},
+ :ground_pictures => {
+ :picture => {:artist => {}, :license => {}}
+ },
+ :ground_colors => {
+ :color => {}
+ },
+ :panel_colors => {
+ },
:author => {}
}}
end
@@ -154,6 +167,14 @@ class Panel < ActiveRecord::Base
:picture => {:artist => {}, :license => {}}
},
:speech_balloons => {:balloons => {}, :speeches => {}},
+ :ground_pictures => {
+ :picture => {:artist => {}, :license => {}}
+ },
+ :ground_colors => {
+ :color => {}
+ },
+ :panel_colors => {
+ },
:author => {}
}}
end
@@ -182,6 +203,14 @@ class Panel < ActiveRecord::Base
:picture => {:artist => {}, :license => {}}
},
:speech_balloons => {:balloons => {}, :speeches => {}},
+ :ground_pictures => {
+ :picture => {:artist => {}, :license => {}}
+ },
+ :ground_colors => {
+ :color => {}
+ },
+ :panel_colors => {
+ },
:author => {}
}
res.merge!(opt[:include]) if opt[:include]
@@ -194,6 +223,14 @@ class Panel < ActiveRecord::Base
:picture => {:artist => {}, :license => {}}
},
:speech_balloons => {:balloons => {}, :speeches => {}},
+ :ground_pictures => {
+ :picture => {:artist => {}, :license => {}}
+ },
+ :ground_colors => {
+ :color => {}
+ },
+ :panel_colors => {
+ },
:author => {}
}}
end
@@ -227,6 +264,12 @@ class Panel < ActiveRecord::Base
pe
end
+ def each_ground
+ (self.ground_colors || []) + (self.ground_pictures || []) + (self.panel_colors || []).each do |e|
+ yield e
+ end
+ end
+
def each_element
self.sort_by_time.each do |e|
yield e
@@ -237,12 +280,23 @@ class Panel < ActiveRecord::Base
res = []
self.each_element do |elm|
if elm.kind_of?(PanelPicture)
- res[elm.t] = elm.to_json({:include => :resource_picture})
+ res[elm.t] = elm.to_json({:include => {:picture => {:artist => {}, :license => {}}}})
end
if elm.kind_of?(SpeechBalloon)
res[elm.t] = elm.to_json({:include => {:balloons => {}, :speeches => {}}})
end
end
+ self.each_ground do |elm|
+ if elm.kind_of?(GroundColor)
+ res << elm.to_json({:include => :color})
+ end
+ if elm.kind_of?(GroundPicture)
+ res << elm.to_json({:include => {:picture => {:artist => {}, :license => {}}}})
+ end
+ if elm.kind_of?(PanelColor)
+ res << elm.to_json({:include => {}})
+ end
+ end
res
end
diff --git a/app/models/panel_color.rb b/app/models/panel_color.rb
new file mode 100644
index 00000000..820a541f
--- /dev/null
+++ b/app/models/panel_color.rb
@@ -0,0 +1,57 @@
+class PanelColor < ActiveRecord::Base
+ belongs_to :panel
+
+ validates :panel_id, :numericality => {:allow_blank => true}
+ validates :z, :presence => true, :numericality => {:greater_than => 0}
+ validates :code, :presence => true, :numericality => {:greater_than_or_equal_to => 0, :less_than => 0x1000000}
+
+ def self.default_page_size
+ 25
+ end
+
+ def self.max_page_size
+ 100
+ end
+
+ def self.page prm = nil
+ page = prm.to_i
+ page = 1 if page < 1
+ page
+ end
+
+ def self.page_size prm = self.default_page_size
+ page_size = prm.to_i
+ page_size = self.max_page_size if page_size > self.max_page_size
+ page_size = self.default_page_size if page_size < 1
+ page_size
+ end
+
+ def self.offset cnt, prm = nil
+ offset = prm.to_i
+ offset = cnt - 1 if offset >= cnt
+ offset = cnt - offset.abs if offset < 0
+ offset = 0 if offset < 0
+ offset
+ end
+
+ def self.list opt = {}, page = 1, page_size = self.default_page_size
+ opt.merge!(self.list_opt) unless opt[:include]
+ opt.merge!({:conditions => 'panels.publish > 0', :order => 'panel_colors.updated_at desc', :limit => page_size, :offset => (page -1) * page_size})
+ PanelColor.find(:all, opt)
+ end
+
+ def self.list_opt
+ {:include => {:panel => {:author => {}} }}
+ end
+
+ def self.list_json_opt
+ {:include => {:panel => {:author => {}} }}
+ end
+
+ def self.mylist au, opt = {}, page = 1, panel_color_page_size = Author.default_panel_color_page_size
+ opt.merge!(self.list_opt) unless opt[:include]
+ opt.merge!({:conditions => ['panels.author_id = ?', au.id], :order => 'panel_colors.updated_at desc', :limit => page_size, :offset => (page -1) * panel_color_page_size})
+ PanelColor.find(:all, opt)
+ end
+
+end
diff --git a/app/models/panel_picture.rb b/app/models/panel_picture.rb
index a26e0a2f..afbe97f1 100644
--- a/app/models/panel_picture.rb
+++ b/app/models/panel_picture.rb
@@ -3,6 +3,7 @@ class PanelPicture < ActiveRecord::Base
belongs_to :picture
validates :panel_id, :numericality => {:allow_blank => true}
+ validates :picture_id, :numericality => true, :existence => true
validates :link, :length => {:maximum => 200}
validates :x, :presence => true, :numericality => true
validates :y, :presence => true, :numericality => true
diff --git a/app/models/picture.rb b/app/models/picture.rb
index 1c1ff83b..38305a19 100644
--- a/app/models/picture.rb
+++ b/app/models/picture.rb
@@ -11,6 +11,7 @@ class Picture < ActiveRecord::Base
validates :width, :presence => true, :numericality => true, :natural_number => true
validates :height, :presence => true, :numericality => true, :natural_number => true
validates :filesize, :presence => true, :numericality => {:greater_than => 0, :less_than_or_equal_to => 2000000}, :natural_number => true
+ validates :md5, :presence => true, :length => {:maximum => 32}
validates :license_id, :presence => true, :numericality => true, :existence => true
validates :artist_id, :presence => true, :numericality => true, :existence => true
validates :artist_name, :presence => true
@@ -32,6 +33,27 @@ class Picture < ActiveRecord::Base
"image/#{self.dext}"
end
+ def dext
+ self.ext.downcase
+ end
+
+ def url
+ '/pictures/' + filename
+ end
+
+ def self.list_by_md5 md5, opid
+ r = Picture.find :all, :conditions => ['pictures.md5 = ? and pictures.original_picture_id <> ?', md5, opid], :order => 'pictures.updated_at desc'
+ end
+
+ def self.exist_by_md5 md5, opid
+ Picture.list_by_md5(md5, opid).empty? ? false : true
+ end
+
+ def head?
+ r = self.resource_picture
+ r ? true : false
+ end
+
def new_revision
Picture.maximum(:revision, :conditions => ['original_picture_id = ?', self.original_picture_id]).to_i + 1
end
@@ -71,7 +93,7 @@ class Picture < ActiveRecord::Base
def copy_data(rp)
attr = {:width => rp.width, :height => rp.height, :ext => rp.ext, :filesize => rp.filesize,
:original_picture_id => rp.original_picture_id, :license_id => rp.license_id, :artist_id => rp.artist_id,
- :artist_name => rp.artist_name, :classname => rp.classname, :credit => rp.credit, :settings => rp.settings
+ :md5 => rp.md5, :artist_name => rp.artist_name, :classname => rp.classname, :credit => rp.credit, :settings => rp.settings
}
self.attributes = attr
end
@@ -104,7 +126,7 @@ class Picture < ActiveRecord::Base
end
def restore(subdir = nil)
- PictureIO.resource_picture_io.get self.filename, subdir
+ PictureIO.picture_io.get self.filename, subdir
end
def self.show pid
diff --git a/app/models/resource_picture.rb b/app/models/resource_picture.rb
index 5e1b4f75..9c1514f3 100644
--- a/app/models/resource_picture.rb
+++ b/app/models/resource_picture.rb
@@ -78,9 +78,14 @@ class ResourcePicture < ActiveRecord::Base
ResourcePicture.resize(rimg.to_blob, tw, th).to_blob
end
+ def opt_img_tag
+ tw, th = ResourcePicture.fix_size_both(MagicNumber['thumbnail_width'], MagicNumber['thumbnail_height'], self.width, self.height)
+ {:src => self.url, :width => tw, :height => th}
+ end
+
def copy_data(op)
attr = {:width => op.width, :height => op.height, :ext => op.ext, :filesize => op.filesize,
- :original_picture_id => op.id, :artist_id => op.artist_id
+ :original_picture_id => op.id, :artist_id => op.artist_id, :md5 => op.md5
}
self.attributes = attr
end
diff --git a/app/models/system_picture.rb b/app/models/system_picture.rb
index a2dea479..ccfe6af2 100644
--- a/app/models/system_picture.rb
+++ b/app/models/system_picture.rb
@@ -48,7 +48,7 @@ class SystemPicture < ActiveRecord::Base
self.attributes = {:ext => mgk.format.downcase, :width => mgk.columns, :height => mgk.rows,
:filesize => mgk.filesize
}
- self.md5 = Digest::MD5.hexdigest(picture_data) unless self.md5
+ self.md5 = Digest::MD5.hexdigest(picture_data)
SystemPicture.transaction do
if res = self.save
res = PictureIO.system_picture_io.put(picture_data, self.filename)
diff --git a/app/views/artists/_form.html.erb b/app/views/artists/_form.html.erb
index 5a0690b6..b91ef8a8 100644
--- a/app/views/artists/_form.html.erb
+++ b/app/views/artists/_form.html.erb
@@ -18,8 +18,6 @@
<%= f.label :name %>
<%= f.text_field :name %>
- <%= f.label :default_license_id %>
- <%= f.number_field :default_license_id %>
<%= f.submit %>
diff --git a/app/views/artists/list.html.erb b/app/views/artists/list.html.erb
index dcb90be7..de4e1df0 100644
--- a/app/views/artists/list.html.erb
+++ b/app/views/artists/list.html.erb
@@ -7,7 +7,6 @@
name |
homepage_url |
api_url |
-
default_license |
crowled_at |
author_id |
created_at |
@@ -21,7 +20,6 @@
<%= h artist.name %> |
<%= h artist.homepage_url %> |
<%= h artist.api_url %> |
-
<%= link_to artist.default_license_id, :controller => 'licenses', :action => :browse, :id => artist.default_license_id %> |
<%= artist.crowled_at %> |
<%= link_to artist.author_id, :controller => 'authors', :action => :browse, :id => artist.author_id %> |
<%= artist.created_at %> |
diff --git a/app/views/colors/index.html.erb b/app/views/colors/index.html.erb
new file mode 100644
index 00000000..907e97f7
--- /dev/null
+++ b/app/views/colors/index.html.erb
@@ -0,0 +1,19 @@
+
Listing Colors
+
+
+
+ id |
+ name |
+ code |
+ t |
+
+
+<% @colors.each do |c| %>
+
+ <%= c.id %> |
+ <%= h c.name %> |
+ <%= c.code %>***** |
+ <%= c.t %> |
+
+<% end -%>
+
diff --git a/app/views/comics/_form.html.erb b/app/views/comics/_form.html.erb
index c8e1fb64..21a7d4f9 100644
--- a/app/views/comics/_form.html.erb
+++ b/app/views/comics/_form.html.erb
@@ -16,14 +16,6 @@
<%= f.text_field :title %>
- <%= f.label :width %>
- <%= f.number_field :width %>
-
-
- <%= f.label :height %>
- <%= f.number_field :height %>
-
-
<%= f.label :visible %>
<%= f.collection_select :visible, [['only me', 0], ['everyone', 3]], :last, :first, :html => {:selected => @comic.visible} %>
diff --git a/app/views/comics/browse.html.erb b/app/views/comics/browse.html.erb
index c9861b96..6e781df9 100644
--- a/app/views/comics/browse.html.erb
+++ b/app/views/comics/browse.html.erb
@@ -6,16 +6,6 @@
- width:
- <%= @comic.width %>
-
-
-
- height:
- <%= @comic.height %>
-
-
-
visible:
<%= @comic.visible %>
diff --git a/app/views/comics/list.html.erb b/app/views/comics/list.html.erb
index 189ada4f..f7b7e62b 100644
--- a/app/views/comics/list.html.erb
+++ b/app/views/comics/list.html.erb
@@ -4,8 +4,6 @@
id |
Title |
- width |
- height |
visible |
author_id |
created_at |
@@ -17,8 +15,6 @@
<%= link_to comic.id, :action => :browse, :id => comic.id %> |
<%= h comic.title %> |
- <%= comic.width %> |
- <%= comic.height %> |
<%= comic.visible %> |
<%= link_to comic.author_id, :controller => '/authors', :action => :browse, :id => comic.author_id %> |
<%= comic.created_at %> |
diff --git a/app/views/comics/show.html.erb b/app/views/comics/show.html.erb
index f77abc22..15154295 100644
--- a/app/views/comics/show.html.erb
+++ b/app/views/comics/show.html.erb
@@ -6,16 +6,6 @@
- width:
- <%= @comic.width %>
-
-
-
- height:
- <%= @comic.height %>
-
-
-
visible:
<%= @comic.visible %>
diff --git a/app/views/ground_colors/index.html.erb b/app/views/ground_colors/index.html.erb
new file mode 100644
index 00000000..fed3158d
--- /dev/null
+++ b/app/views/ground_colors/index.html.erb
@@ -0,0 +1,19 @@
+Listing Ground Colors
+
+
+
+ id |
+ panel_id |
+ color_id |
+ z |
+
+
+<% @ground_colors.each do |gc| %>
+
+ <%= gc.id %> |
+ <%= link_to gc.panel_id, panel_path(gc.panel_id) %> |
+ <%= link_to gc.color_id, color_path(gc.color_id) %> |
+ <%= gc.z %> |
+
+<% end -%>
+
diff --git a/app/views/ground_pictures/index.html.erb b/app/views/ground_pictures/index.html.erb
new file mode 100644
index 00000000..32f741c6
--- /dev/null
+++ b/app/views/ground_pictures/index.html.erb
@@ -0,0 +1,19 @@
+Listing Ground Pictures
+
+
+
+ id |
+ panel_id |
+ picture_id |
+ z |
+
+
+<% @ground_pictures.each do |gp| %>
+
+ <%= gp.id %> |
+ <%= link_to gp.panel_id, panel_path(gp.panel_id) %> |
+ <%= link_to gp.picture_id, color_path(gp.picture_id) %> |
+ <%= gp.z %> |
+
+<% end -%>
+
diff --git a/app/views/home/step3.html.erb b/app/views/home/step3.html.erb
index 9c1941ca..bc604f0d 100644
--- a/app/views/home/step3.html.erb
+++ b/app/views/home/step3.html.erb
@@ -19,9 +19,6 @@
<%= f.label :name %>
<%= f.text_field :name %>
- ç´ æãã¢ãããã¼ãããã¨ãã®ããã©ã«ãã©ã¤ã»ã³ã¹ãé¸æãã¾ãã
- <%= f.label :default_license_id %>
- <%= f.select :default_license_id, License.all.map {|l| [l.name, l.id] }, :html => {:selected => @artist.default_license_id} %>
<%= f.hidden_field :author_id, :value => @artist.author_id %>
diff --git a/app/views/layouts/system.html.erb b/app/views/layouts/system.html.erb
index 9cb2930e..97ced9d8 100644
--- a/app/views/layouts/system.html.erb
+++ b/app/views/layouts/system.html.erb
@@ -3,7 +3,7 @@
Pettanr
<%= stylesheet_link_tag "application" %>
- <%# javascript_include_tag "application" %>
+ <%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
diff --git a/app/views/layouts/test.html.erb b/app/views/layouts/test.html.erb
index 0c1a06ec..ff14561c 100644
--- a/app/views/layouts/test.html.erb
+++ b/app/views/layouts/test.html.erb
@@ -3,6 +3,7 @@
Pettanr
<%= stylesheet_link_tag "application" %>
+ <%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
@@ -36,6 +37,7 @@
<%= link_to 'speeches', main_app.speeches_path %>
:
<%= link_to 'speech_balloon_templates', main_app.speech_balloon_templates_path %>
+<%= link_to 'colors', main_app.colors_path %>
:
<%= link_to 'artists', main_app.artists_path %>
<%= link_to 'system_pictures', main_app.system_pictures_path %>
diff --git a/app/views/original_pictures/_artist_register.html.erb b/app/views/original_pictures/_artist_register.html.erb
index c07140c4..4fc44453 100644
--- a/app/views/original_pictures/_artist_register.html.erb
+++ b/app/views/original_pictures/_artist_register.html.erb
@@ -18,8 +18,6 @@
<%= f.label :name %>
<%= f.text_field :name %>
- <%= f.label :default_license_id %>
- <%= f.number_field :default_license_id %>
<%= f.hidden_field :author_id, :value => @artist.author_id %>
diff --git a/app/views/original_pictures/_exist.html.erb b/app/views/original_pictures/_exist.html.erb
new file mode 100644
index 00000000..8129f4fb
--- /dev/null
+++ b/app/views/original_pictures/_exist.html.erb
@@ -0,0 +1,4 @@
+<% case exist -%>
+<% when true -%>
+ ãã®ç»åã¯æ¢ã«å
¬éããã¦ãã¾ã
+<% end -%>
diff --git a/app/views/original_pictures/_history_list.html.erb b/app/views/original_pictures/_history_list.html.erb
new file mode 100644
index 00000000..8fd4c22e
--- /dev/null
+++ b/app/views/original_pictures/_history_list.html.erb
@@ -0,0 +1,6 @@
+<% history.each do |picture| -%>
+
revision:<%= picture.revision %>
+
licensed at <%= picture.created_at %>
+
+ <%= render picture.credit_template, :picture => picture %>
+<% end -%>
diff --git a/app/views/original_pictures/browse.html.erb b/app/views/original_pictures/browse.html.erb
index 9142c7de..03ea4843 100644
--- a/app/views/original_pictures/browse.html.erb
+++ b/app/views/original_pictures/browse.html.erb
@@ -25,14 +25,16 @@
<%= @original_picture.artist_id %>
+
+ md5:
+ <%= @original_picture.md5 %>
+
+
browse picture
-
-<%= link_to 'åçæ', :action => :refresh, :id => @original_picture.id %>
-
<% if @original_picture.own? @author -%>
Replace picture
diff --git a/app/views/original_pictures/history.html.erb b/app/views/original_pictures/history.html.erb
new file mode 100644
index 00000000..4a1396ac
--- /dev/null
+++ b/app/views/original_pictures/history.html.erb
@@ -0,0 +1,2 @@
+History of Original Picture <%= @original_picture.id %>
+<%= render 'history_list', :history => @history %>
diff --git a/app/views/original_pictures/index.html.erb b/app/views/original_pictures/index.html.erb
index 8411ea1e..0089f094 100644
--- a/app/views/original_pictures/index.html.erb
+++ b/app/views/original_pictures/index.html.erb
@@ -4,22 +4,28 @@
picture |
+ revisions |
filename |
Width |
Height |
filesize |
+ md5 |
+ history |
<% @original_pictures.each do |original_picture| %>
- <%= link_to tag(:img, :src => original_picture.url, :width => 50, :height => 50), original_picture %>
+ <%= link_to tag(:img, original_picture.opt_img_tag), original_picture %>
|
+ <%= original_picture.pictures.empty? ? '' : original_picture.history.first.revision %> |
<%= original_picture.filename %> |
<%= original_picture.width %> |
<%= original_picture.height %> |
<%= original_picture.filesize %> |
+ <%= original_picture.md5 %> |
+ <%= link_to '...', :controller => 'original_pictures', :action => :history, :id => original_picture.id %> |
<% end %>
diff --git a/app/views/original_pictures/list.html.erb b/app/views/original_pictures/list.html.erb
index 0727ed19..f9a69df4 100644
--- a/app/views/original_pictures/list.html.erb
+++ b/app/views/original_pictures/list.html.erb
@@ -9,6 +9,7 @@
Height |
filesize |
artist |
+
md5 |
created_at |
updated_at |
|
@@ -22,6 +23,7 @@
<%= original_picture.height %> |
<%= original_picture.filesize %> |
<%= link_to original_picture.artist_id, :controller => 'artists', :action => :browse, :id => original_picture.artist_id %> |
+
<%= original_picture.md5 %> |
<%= original_picture.created_at %> |
<%= original_picture.updated_at %> |
diff --git a/app/views/original_pictures/show.html.erb b/app/views/original_pictures/show.html.erb
index 5d32979c..89ce57c5 100644
--- a/app/views/original_pictures/show.html.erb
+++ b/app/views/original_pictures/show.html.erb
@@ -1,3 +1,4 @@
+<%= render 'exist', :exist => Picture.exist_by_md5(@original_picture.md5, @original_picture.id) %>
<%= notice %>
@@ -21,6 +22,11 @@
+ md5:
+ <%= @original_picture.md5 %>
+
+
+
artist:
<%= @original_picture.artist_id %>
@@ -45,5 +51,11 @@ Replace picture
<%= f.submit 'replace' %>
<% end %>
+
+
+ History
+
+ <%= render 'history_list', :history => @original_picture.history %>
+
<%= link_to 'Back', original_pictures_path %>
diff --git a/app/views/panel_colors/index.html.erb b/app/views/panel_colors/index.html.erb
new file mode 100644
index 00000000..e6a9fa21
--- /dev/null
+++ b/app/views/panel_colors/index.html.erb
@@ -0,0 +1,19 @@
+Listing Panel Colors
+
+
+
+ id |
+ panel_id |
+ code |
+ z |
+
+
+<% @panel_colors.each do |pc| %>
+
+ <%= pc.id %> |
+ <%= link_to pc.panel_id, panel_path(pc.panel_id) %> |
+ <%= pc.code %>***** |
+ <%= pc.z %> |
+
+<% end -%>
+
diff --git a/app/views/pictures/_head.html.erb b/app/views/pictures/_head.html.erb
new file mode 100644
index 00000000..ac14f8f0
--- /dev/null
+++ b/app/views/pictures/_head.html.erb
@@ -0,0 +1,3 @@
+
+<%= render picture.credit_template, :picture => picture %>
+revision:<%= picture.revision %>
diff --git a/app/views/pictures/_tail.html.erb b/app/views/pictures/_tail.html.erb
new file mode 100644
index 00000000..d080031f
--- /dev/null
+++ b/app/views/pictures/_tail.html.erb
@@ -0,0 +1,2 @@
+ãã®ç»åã¯æ¢ã«æ¹è¨ããã¦ãã¾ã <%= link_to 'Head', resource_picture_path(picture.resource_picture ) %>
+revision:<%= picture.revision %>
diff --git a/app/views/pictures/show.html.erb b/app/views/pictures/show.html.erb
new file mode 100644
index 00000000..952542ac
--- /dev/null
+++ b/app/views/pictures/show.html.erb
@@ -0,0 +1,36 @@
+
+ Ext:
+ <%= @original_picture.ext %>
+
+
+
+ Width:
+ <%= @original_picture.width %>
+
+
+
+ Height:
+ <%= @original_picture.height %>
+
+
+
+ filesize:
+ <%= @original_picture.filesize %>
+
+
+
+ md5:
+ <%= @original_picture.md5 %>
+
+
+
+ artist:
+ <%= @original_picture.artist_id %>
+
+
+<% if @picture.head? %>
+ <%= render 'head', :picture => @picture %>
+<% else %>
+ <%= render 'tail', :picture => @picture %>
+<% end %>
+
diff --git a/app/views/resource_pictures/index.html.erb b/app/views/resource_pictures/index.html.erb
index 76defae4..71e75669 100644
--- a/app/views/resource_pictures/index.html.erb
+++ b/app/views/resource_pictures/index.html.erb
@@ -3,7 +3,7 @@
<% @resource_picture = resource_picture %>
<%= link_to resource_picture.filename, resource_picture_path(resource_picture) %>
- <%= tag :img, :src => resource_picture.url, :width => MagicNumber['thumbnail_width'], :height => MagicNumber['thumbnail_height'] %>
+ <%= tag :img, resource_picture.opt_img_tag %>
<%= resource_picture.width %>x<%= resource_picture.height %>
<%= resource_picture.filesize %>bytes
<%= render resource_picture.credit_template, :picture => resource_picture %>
diff --git a/app/views/resource_pictures/show.html.erb b/app/views/resource_pictures/show.html.erb
index 0839b2dd..6827972a 100644
--- a/app/views/resource_pictures/show.html.erb
+++ b/app/views/resource_pictures/show.html.erb
@@ -1,11 +1,3 @@
<%= notice %>
-<%= render @resource_picture.credit_template, :picture => @resource_picture %>
-
- ãã¼ãã«
-
-
-
- ãµã ã
-
-
+ <%= render 'pictures/head', :picture => @resource_picture.picture %>
<%= link_to 'Back', resource_pictures_path %>
diff --git a/app/views/system/browse.html.erb b/app/views/system/browse.html.erb
index d8c3075f..e857e0dc 100644
--- a/app/views/system/browse.html.erb
+++ b/app/views/system/browse.html.erb
@@ -48,6 +48,11 @@
<%= link_to 'speeches', :controller => 'speeches', :action => :list %>
|
+
+
+ <%= link_to 'colors', :controller => 'colors' %>
+ |
+
ãããã·ãã³ãã¬ã¼ãé¢é£
diff --git a/config/environment.rb b/config/environment.rb
index a32bd2f8..aa0ff2ef 100644
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -1,10 +1,6 @@
# Load the rails application
require File.expand_path('../application', __FILE__)
-begin
- require 'RMagick'
-rescue LoadError
- require 'DMagick'
-end
+require 'RMagick'
# Initialize the rails application
Pettanr::Application.initialize!
diff --git a/config/routes.rb b/config/routes.rb
index bcdc2705..6a1e38c7 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -109,6 +109,7 @@ Pettanr::Application.routes.draw do
collection do
get :index
get :show
+ get :history
post :create
get :list
get :browse
@@ -127,6 +128,34 @@ Pettanr::Application.routes.draw do
post :create
end
end
+ resources :colors do
+ collection do
+ get :index
+ end
+ member do
+ end
+ end
+ resources :panel_colors do
+ collection do
+ get :index
+ end
+ member do
+ end
+ end
+ resources :ground_colors do
+ collection do
+ get :index
+ end
+ member do
+ end
+ end
+ resources :ground_pictures do
+ collection do
+ get :index
+ end
+ member do
+ end
+ end
resources :panels do
new do
get :new
diff --git a/db/colors.json b/db/colors.json
new file mode 100644
index 00000000..fba582f0
--- /dev/null
+++ b/db/colors.json
@@ -0,0 +1,10 @@
+{
+ "white": {
+ "code": 255,
+ "t": 0
+ },
+ "black": {
+ "code": 0,
+ "t": 1
+ }
+}
diff --git a/db/migrate/20120815021444_add_md5.rb b/db/migrate/20120815021444_add_md5.rb
new file mode 100644
index 00000000..51c26846
--- /dev/null
+++ b/db/migrate/20120815021444_add_md5.rb
@@ -0,0 +1,13 @@
+class AddMd5 < ActiveRecord::Migration
+ def up
+ add_column :original_pictures, :md5, :string, :null => false, :limit => 32, :default => '00000000000000000000000000000000'
+ add_column :pictures, :md5, :string, :null => false, :limit => 32, :default => '00000000000000000000000000000000'
+ add_column :resource_pictures, :md5, :string, :null => false, :limit => 32, :default => '00000000000000000000000000000000'
+ end
+
+ def down
+ remove_column :original_pictures, :md5
+ remove_column :pictures, :md5
+ remove_column :resource_pictures, :md5
+ end
+end
diff --git a/db/migrate/20120815043236_rm_default_ls_on_artist.rb b/db/migrate/20120815043236_rm_default_ls_on_artist.rb
new file mode 100644
index 00000000..9b01e60a
--- /dev/null
+++ b/db/migrate/20120815043236_rm_default_ls_on_artist.rb
@@ -0,0 +1,9 @@
+class RmDefaultLsOnArtist < ActiveRecord::Migration
+ def up
+ remove_column :artists, :default_license_id
+ end
+
+ def down
+ remove_column :artists, :default_license_id, :integer , :null => false, :default => 0
+ end
+end
diff --git a/db/migrate/20120815045014_rm_default_size_on_comic.rb b/db/migrate/20120815045014_rm_default_size_on_comic.rb
new file mode 100644
index 00000000..0aca16a1
--- /dev/null
+++ b/db/migrate/20120815045014_rm_default_size_on_comic.rb
@@ -0,0 +1,11 @@
+class RmDefaultSizeOnComic < ActiveRecord::Migration
+ def up
+ remove_column :comics, :width
+ remove_column :comics, :height
+ end
+
+ def down
+ add_column :comics, :width, :integer , :null => false, :default => 0
+ add_column :comics, :height, :integer , :null => false, :default => 0
+ end
+end
diff --git a/db/migrate/20120816022713_create_colors.rb b/db/migrate/20120816022713_create_colors.rb
new file mode 100644
index 00000000..6b4a7064
--- /dev/null
+++ b/db/migrate/20120816022713_create_colors.rb
@@ -0,0 +1,11 @@
+class CreateColors < ActiveRecord::Migration
+ def change
+ create_table :colors do |t|
+ t.string :name, :null => false, :limit => 50, :default => 'no name'
+ t.integer :code, :null => false, :default => 0
+ t.integer :t, :null => false, :default => 0
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20120816024744_create_ground_colors.rb b/db/migrate/20120816024744_create_ground_colors.rb
new file mode 100644
index 00000000..b6294ae9
--- /dev/null
+++ b/db/migrate/20120816024744_create_ground_colors.rb
@@ -0,0 +1,12 @@
+class CreateGroundColors < ActiveRecord::Migration
+ def change
+ create_table :ground_colors do |t|
+ t.integer :panel_id, :null => false, :default => 0
+ t.integer :color_id, :null => false, :default => 0
+ t.integer :author_id, :null => false, :default => 0
+ t.integer :z, :null => false, :default => 0
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20120816024915_create_panel_colors.rb b/db/migrate/20120816024915_create_panel_colors.rb
new file mode 100644
index 00000000..32433c00
--- /dev/null
+++ b/db/migrate/20120816024915_create_panel_colors.rb
@@ -0,0 +1,11 @@
+class CreatePanelColors < ActiveRecord::Migration
+ def change
+ create_table :panel_colors do |t|
+ t.integer :panel_id, :null => false, :default => 0
+ t.integer :z, :null => false, :default => 0
+ t.integer :code, :null => false, :default => 0
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20120816025308_create_ground_pictures.rb b/db/migrate/20120816025308_create_ground_pictures.rb
new file mode 100644
index 00000000..27852f3b
--- /dev/null
+++ b/db/migrate/20120816025308_create_ground_pictures.rb
@@ -0,0 +1,11 @@
+class CreateGroundPictures < ActiveRecord::Migration
+ def change
+ create_table :ground_pictures do |t|
+ t.integer :panel_id, :null => false, :default => 0
+ t.integer :picture_id, :null => false, :default => 0
+ t.integer :z, :null => false, :default => 0
+
+ t.timestamps
+ end
+ end
+end
diff --git a/lib/tasks/licenses.rake b/lib/tasks/licenses.rake
new file mode 100644
index 00000000..8caed780
--- /dev/null
+++ b/lib/tasks/licenses.rake
@@ -0,0 +1,20 @@
+namespace :licenses do
+ desc "Import json format license data in license engine"
+ task :import => :environment do
+ licenses = YAML.load(open(Rails.root + 'config/license.yml').read)
+ licenses.each do |name, klass|
+ puts name + "\n"
+ system 'rake ' + name + ':import'
+ end
+ end
+
+ desc "Copy migration file for license "
+ task :install => :environment do
+ licenses = YAML.load(open(Rails.root + 'config/license.yml').read)
+ licenses.each do |name, klass|
+ puts name + "\n"
+ system 'rake ' + name + ':install:migrations'
+ end
+ puts "run 'rake db:migrate' if you can migrate database\n"
+ end
+end
diff --git a/lib/validators/resize_validator.rb b/lib/validators/resize_validator.rb
index 59b62650..be01eeb6 100644
--- a/lib/validators/resize_validator.rb
+++ b/lib/validators/resize_validator.rb
@@ -1,6 +1,6 @@
class ResizeValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
- if record.picture.flag_resize < 0
+ if record.picture and record.picture.flag_resize < 0
record.errors[attribute] << (options[:message] || "no resize") unless value == record.picture[attribute]
end
end
diff --git a/lib/validators/reverse_validator.rb b/lib/validators/reverse_validator.rb
index 638e5b99..b52f6975 100644
--- a/lib/validators/reverse_validator.rb
+++ b/lib/validators/reverse_validator.rb
@@ -1,6 +1,6 @@
class ReverseValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
- if record.picture.flag_reverse < 0
+ if record.picture and record.picture.flag_reverse < 0
record.errors[attribute] << (options[:message] || "no reverse") if value < 0
end
end
diff --git a/lib/validators/sync_vh_validator.rb b/lib/validators/sync_vh_validator.rb
index 928d957e..04425fdf 100644
--- a/lib/validators/sync_vh_validator.rb
+++ b/lib/validators/sync_vh_validator.rb
@@ -1,6 +1,6 @@
class SyncVhValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
- if record.picture.flag_sync_vh < 0
+ if record.picture and record.picture.flag_sync_vh < 0
record.errors[attribute] << (options[:message] || "sync_vh") unless sync?(record)
end
end
diff --git a/script/gem_builder.rb b/script/gem_builder.rb
new file mode 100644
index 00000000..6866ae6c
--- /dev/null
+++ b/script/gem_builder.rb
@@ -0,0 +1,23 @@
+#ã©ã¤ã»ã³ã¹ã®gemãã¡ã¤ã«ãä½ããµãã¼ããã¼ã«
+#Yamlãã¡ã¤ã«ããã³ã³ãã¼ããã
+if ARGV.size < 1
+ puts "gem_builder.rb dir"
+ puts "build to gem on child dirs"
+ exit
+end
+
+dirname = File.expand_path ARGV[0]
+Dir.glob dirname + '/*' do |filename|
+ if File.directory?(filename)
+ fn = Dir.glob(filename + '/*.gemspec').first
+ c = "gem build " + fn
+ Dir.chdir filename do
+ puts c
+ system c
+ end
+ gem = Dir.glob(filename + '/*.gem').sort.last
+ c = "gem install " + gem
+ puts c
+ system c
+ end
+end
diff --git a/script/ls_helper.rb b/script/ls_helper.rb
new file mode 100644
index 00000000..4ea1a668
--- /dev/null
+++ b/script/ls_helper.rb
@@ -0,0 +1,40 @@
+#ã©ã¤ã»ã³ã¹ã®jsonãã¡ã¤ã«ãä½ããµãã¼ããã¼ã«
+#Yamlãã¡ã¤ã«ããã³ã³ãã¼ããã
+if ARGV.size < 1
+ puts "ls_helper.rb ls.yml [work dir=current dir]"
+ puts "generate to ls.json"
+ exit
+end
+
+require 'yaml'
+require 'json'
+require 'base64'
+
+filename = ARGV[0]
+lg = YAML.load(open(filename).read)
+fn = File.basename filename, ".*"
+wd = ARGV[1] ? File.expand_path(ARGV[1]) : File.dirname(filename)
+o = wd + '/' + fn + '.json'
+
+lg.each do |k, g|
+ puts k
+ g['licenses_attributes'].each do |lk, l|
+ puts lk
+ if l['settings']
+ puts 'settings to json'
+ l['settings'] = l['settings'].to_json.to_s
+ end
+ if l['system_picture_file']
+ fn = File.expand_path(wd + '/' + l['system_picture_file'])
+ puts 'open system picture file ' + fn
+ d = File.open(fn, 'rb').read
+ b = Base64.encode64(d).gsub(/\r/, '').gsub(/\n/, '')
+ l['system_picture'] = b
+ l.delete 'system_picture_file'
+ end
+ end
+end
+puts "generating " + o
+File.open(o, 'wb') do |f|
+ f.write lg.to_json.to_s
+end
diff --git a/spec/cli/u/panels/create.json b/spec/cli/u/panels/create.json
index 9b610c9b..53014549 100644
--- a/spec/cli/u/panels/create.json
+++ b/spec/cli/u/panels/create.json
@@ -9,7 +9,7 @@
"publish": 1,
"panel_pictures_attributes": {
"new1": {
- "resource_picture_id": 3,
+ "picture_id": 3,
"x": 10,
"y": 135,
"z": 3,
@@ -17,7 +17,25 @@
"width": 100,
"height": 103
}
+ },
+ "ground_pictures_attributes": {
+ "new1": {
+ "picture_id": 1,
+ "z": 1
+ }
+ },
+ "ground_colors_attributes": {
+ "new1": {
+ "color_id": 1,
+ "z": 1
+ }
+ },
+ "panel_colors_attributes": {
+ "new1": {
+ "code": 1,
+ "z": 1
+ }
}
},
- "auth_token": "vX7rc33zxVJSQPKjp2vc"
+ "auth_token": "3d3Fvz9RafTPcpzLrYSW"
}
\ No newline at end of file
diff --git a/spec/controllers/colors_controller_spec.rb b/spec/controllers/colors_controller_spec.rb
new file mode 100644
index 00000000..c0a301ef
--- /dev/null
+++ b/spec/controllers/colors_controller_spec.rb
@@ -0,0 +1,95 @@
+# -*- encoding: utf-8 -*-
+require 'spec_helper'
+#è²ãã¹ã¿ã¼
+
+describe ColorsController do
+ before do
+ @admin = FactoryGirl.create :admin
+ @user = FactoryGirl.create( :user_yas)
+ @sp = FactoryGirl.create :system_picture
+ @lg = FactoryGirl.create :license_group, :name => 'peta'
+ @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
+ end
+
+ describe 'ä¸è¦§è¡¨ç¤ºã«æ¼ãã¦' do
+ before do
+ sign_in @user
+ @color = FactoryGirl.create :color
+ Color.stub(:list).and_return([@color, @color, @color])
+ end
+ context 'ãã©ã¡ã¼ã¿pageã«ã¤ãã¦' do
+ it '@pageã«å¤ãå
¥ã' do
+ get :index, :page => 5
+ assigns(:page).should eq 5
+ end
+ it 'çç¥ãããã¨@pageã«1å¤ãå
¥ã' do
+ get :index
+ assigns(:page).should eq 1
+ end
+ it 'ä¸ããããpage_sizeãã»ããããã¦ãã' do
+ get :index, :page_size => 15
+ assigns(:page_size).should eq 15
+ end
+ it 'çç¥ãããã¨@page_sizeã«ããã©ã«ãå¤ãå
¥ã' do
+ get :index
+ assigns(:page_size).should eq Color.default_page_size
+ end
+ it 'æ大ãè¶
ããã¨@page_sizeã«ããã©ã«ãæ大å¤ãå
¥ã' do
+ get :index, :page_size => 1500
+ assigns(:page_size).should eq Color.max_page_size
+ end
+ it 'ä¸æ£ãªå¤ãå
¥ãã¨@page_sizeã«ããã©ã«ãæ大å¤ãå
¥ã' do
+ get :index, :page_size => 0
+ assigns(:page_size).should eq Color.default_page_size
+ end
+ end
+ context 'ã¤ã¤ããªãçµããã¨ã' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã200 OKãè¿ã' do
+ get :index
+ response.should be_success
+ end
+ it 'è²ã¢ãã«ã«ä¸è¦§ãåãåããã¦ãã' do
+ Color.should_receive(:list).exactly(1)
+ get :index
+ end
+ it '@colorsã«ãªã¹ããåå¾ãã¦ãã' do
+ get :index
+ assigns(:colors).should have_at_least(3).items
+ end
+ context 'htmlå½¢å¼' do
+ it 'indexãã³ãã¬ã¼ããæç»ãã' do
+ get :index
+ response.should render_template("index")
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'jsonãã¼ã¿ãè¿ã' do
+ get :index, :format => :json
+ lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
+ end
+ it 'ãã¼ã¿ããªã¹ãæ§é ã«ãªã£ã¦ãã' do
+ get :index, :format => :json
+ json = JSON.parse response.body
+ json.should have_at_least(3).items
+ end
+ it 'ãªã¹ãã®å
é ãããã¯è²ã£ã½ããã®ã§ãã£ã¦æ¬²ãã' do
+ get :index, :format => :json
+ json = JSON.parse response.body
+ json.first.has_key?("name").should be_true
+ json.first.has_key?("code").should be_true
+ json.first.has_key?("t").should be_true
+ end
+ end
+ end
+ context 'ä½å®¶æ¨©éããªãã¨ã' do
+ before do
+ sign_out @user
+ end
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã200 okãè¿ã' do
+ get :index
+ response.status.should eq 200
+ end
+ end
+ end
+
+end
diff --git a/spec/controllers/comics_controller_spec.rb b/spec/controllers/comics_controller_spec.rb
index 4f937d8b..5d2f639a 100644
--- a/spec/controllers/comics_controller_spec.rb
+++ b/spec/controllers/comics_controller_spec.rb
@@ -1,12 +1,12 @@
# -*- encoding: utf-8 -*-
-require 'spec_helper'
-
-describe ComicsController do
- before do
- FactoryGirl.create :admin
- @sp = FactoryGirl.create :system_picture
- @lg = FactoryGirl.create :license_group
- @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
+require 'spec_helper'
+
+describe ComicsController do
+ before do
+ FactoryGirl.create :admin
+ @sp = FactoryGirl.create :system_picture
+ @lg = FactoryGirl.create :license_group
+ @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
@user = FactoryGirl.create :user_yas
@author = @user.author #ã¦ã¼ã¶ä½ææã«é£åãã¦ä½æããã
end
@@ -392,15 +392,15 @@ describe ComicsController do
before do
@comic = FactoryGirl.create :comic, :author_id => @user.author.id
sign_in @user
- Comic.stub(:show).and_return(@comic)
+ Comic.stub(:edit).and_return(@comic)
end
context 'ã¤ã¤ããªãçµããã¨ã' do
it 'ã¹ãã¼ã¿ã¹ã³ã¼ã200 OKãè¿ã' do
get :edit, :id => @comic.id
response.should be_success
end
- it 'ã³ããã¯ã¢ãã«ã«åä½åå¾ãåãåããã¦ãã' do
- Comic.should_receive(:show).exactly(1)
+ it 'ã³ããã¯ã¢ãã«ã«ç·¨éåå¾ãåãåããã¦ãã' do
+ Comic.should_receive(:edit).exactly(1)
get :edit, :id => @comic.id
end
it '@comicã«ãã¼ã¿ãç¨æãã¦ãã' do
@@ -454,13 +454,14 @@ describe ComicsController do
sign_in @user
end
context 'äºåãã§ãã¯ãã¦ãã' do
- it 'ã³ããã¯ã¢ãã«ã«åä½åå¾ãåãåããã¦ãã' do
- Comic.stub(:show).with(any_args()).and_return @comic
- Comic.should_receive(:show).exactly(1)
+ it 'ã³ããã¯ã¢ãã«ã«ç·¨éåå¾ãåãåããã¦ãã' do
+ Comic.stub(:edit).with(any_args()).and_return @comic
+ Comic.should_receive(:edit).exactly(1)
put :update, :id => @comic.id, :comic => @attr
end
it 'ã¢ãã«ã«æ´æ°ãä¾é ¼ãã' do
- Comic.any_instance.should_receive(:update_attributes).with(any_args)
+ Comic.any_instance.stub(:save).with(any_args).and_return true
+ Comic.any_instance.should_receive(:save).exactly(1)
put :update, :id => @comic.id, :comic => @attr
end
it '@comicã«ã¢ã¬ãåå¾ãã¦ãã' do
@@ -475,7 +476,7 @@ describe ComicsController do
end
context 'htmlå½¢å¼' do
it 'ã¹ãã¼ã¿ã¹ã³ã¼ã302 Foundãè¿ã' do
- Comic.any_instance.stub(:update_attributes).with(any_args()).and_return(true)
+ Comic.any_instance.stub(:save).with(any_args()).and_return(true)
put :update, :id => @comic.id, :comic => @attr
response.status.should eq 302
end
@@ -486,12 +487,12 @@ describe ComicsController do
end
context 'jsonå½¢å¼' do
it 'ã¹ãã¼ã¿ã¹ã³ã¼ã200 OKãè¿ã' do
- Comic.any_instance.stub(:update_attributes).with(any_args()).and_return(true)
+ Comic.any_instance.stub(:save).with(any_args()).and_return(true)
put :update, :id => @comic.id, :comic => @attr, :format => :json
response.should be_success
end
it 'ãã¼ã¸æ¬ä½ã¯ç¹ã«è¿ããªã' do
- Comic.any_instance.stub(:update_attributes).with(any_args()).and_return(true)
+ Comic.any_instance.stub(:save).with(any_args()).and_return(true)
put :update, :id => @comic.id, :comic => @attr, :format => :json
response.body.should match /./
end
@@ -520,7 +521,7 @@ describe ComicsController do
end
context 'æ¤è¨¼ãä¿åã«å¤±æããã¨ã' do
before do
- Comic.any_instance.stub(:update_attributes).and_return(false)
+ Comic.any_instance.stub(:save).and_return(false)
end
context 'htmlå½¢å¼' do
it 'ã¹ãã¼ã¿ã¹ã³ã¼ã200 Okãè¿ã' do
@@ -534,7 +535,7 @@ describe ComicsController do
end
context 'jsonå½¢å¼' do
it 'ã¹ãã¼ã¿ã¹ã³ã¼ã422 unprocessable_entity ãè¿ã' do
- Comic.any_instance.stub(:update_attributes).and_return(false)
+ Comic.any_instance.stub(:save).and_return(false)
put :update, :id => @comic.id, :comic => @attr, :format => :json
response.status.should eq 422
end
diff --git a/spec/controllers/ground_colors_controller_spec.rb b/spec/controllers/ground_colors_controller_spec.rb
new file mode 100644
index 00000000..8d40002a
--- /dev/null
+++ b/spec/controllers/ground_colors_controller_spec.rb
@@ -0,0 +1,115 @@
+# -*- encoding: utf-8 -*-
+require 'spec_helper'
+#ã³ãã®éæ¥èæ¯
+
+describe GroundColorsController do
+ before do
+ @admin = FactoryGirl.create :admin
+ @user = FactoryGirl.create( :user_yas)
+ @sp = FactoryGirl.create :system_picture
+ @lg = FactoryGirl.create :license_group, :name => 'peta'
+ @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
+ @author = @user.author
+ @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
+ @panel = FactoryGirl.create :panel, :author_id => @author.id
+ @color = FactoryGirl.create :color
+ end
+
+ describe 'ä¸è¦§è¡¨ç¤ºã«æ¼ãã¦' do
+ before do
+ sign_in @user
+ @gc = FactoryGirl.create :ground_color
+ GroundColor.stub(:list).and_return([@gc, @gc, @gc])
+ end
+ context 'ãã©ã¡ã¼ã¿pageã«ã¤ãã¦' do
+ it '@pageã«å¤ãå
¥ã' do
+ get :index, :page => 5
+ assigns(:page).should eq 5
+ end
+ it 'çç¥ãããã¨@pageã«1å¤ãå
¥ã' do
+ get :index
+ assigns(:page).should eq 1
+ end
+ it 'ä¸ããããpage_sizeãã»ããããã¦ãã' do
+ get :index, :page_size => 15
+ assigns(:page_size).should eq 15
+ end
+ it 'çç¥ãããã¨@page_sizeã«ããã©ã«ãå¤ãå
¥ã' do
+ get :index
+ assigns(:page_size).should eq GroundColor.default_page_size
+ end
+ it 'æ大ãè¶
ããã¨@page_sizeã«ããã©ã«ãæ大å¤ãå
¥ã' do
+ get :index, :page_size => 1500
+ assigns(:page_size).should eq GroundColor.max_page_size
+ end
+ it 'ä¸æ£ãªå¤ãå
¥ãã¨@page_sizeã«ããã©ã«ãæ大å¤ãå
¥ã' do
+ get :index, :page_size => 0
+ assigns(:page_size).should eq GroundColor.default_page_size
+ end
+ end
+ context 'ã¤ã¤ããªãçµããã¨ã' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã200 OKãè¿ã' do
+ get :index
+ response.should be_success
+ end
+ it 'éæ¥èæ¯ã¢ãã«ã«ä¸è¦§ãåãåããã¦ãã' do
+ GroundColor.should_receive(:list).exactly(1)
+ get :index
+ end
+ it '@ground_colorsã«ãªã¹ããåå¾ãã¦ãã' do
+ get :index
+ assigns(:ground_colors).should have_at_least(3).items
+ end
+ context 'htmlå½¢å¼' do
+ it 'indexãã³ãã¬ã¼ããæç»ãã' do
+ get :index
+ response.should render_template("index")
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'jsonãã¼ã¿ãè¿ã' do
+ get :index, :format => :json
+ lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
+ end
+ it 'ãã¼ã¿ããªã¹ãæ§é ã«ãªã£ã¦ãã' do
+ get :index, :format => :json
+ json = JSON.parse response.body
+ json.should have_at_least(3).items
+ end
+ it 'ãªã¹ãã®å
é ãããã¯éæ¥èæ¯ã£ã½ããã®ã§ãã£ã¦æ¬²ãã' do
+ get :index, :format => :json
+ json = JSON.parse response.body
+ json.first.has_key?("panel").should be_true
+ json.first.has_key?("color_id").should be_true
+ json.first.has_key?("z").should be_true
+ end
+ end
+ end
+ context 'ä½å®¶æ¨©éããªãã¨ã' do
+ before do
+ sign_out @user
+ end
+ context 'htmlå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã302 Foundãè¿ã' do
+ get :index
+ response.status.should eq 302
+ end
+ it 'ãµã¤ã³ã¤ã³ãã¼ã¸ã¸é·ç§»ãã' do
+ get :index
+ response.should redirect_to '/users/sign_in'
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã401 Unauthorizedãè¿ã' do
+ get :index, :format => :json
+ response.status.should eq 401
+ end
+ it 'å¿çã¡ãã»ã¼ã¸ã«Unauthorizedãè¿ã' do
+ get :index, :format => :json
+ response.message.should match(/Unauthorized/)
+ end
+ end
+ end
+ end
+
+end
diff --git a/spec/controllers/ground_pictures_controller_spec.rb b/spec/controllers/ground_pictures_controller_spec.rb
new file mode 100644
index 00000000..e150928a
--- /dev/null
+++ b/spec/controllers/ground_pictures_controller_spec.rb
@@ -0,0 +1,117 @@
+# -*- encoding: utf-8 -*-
+require 'spec_helper'
+#ã³ãã®ç»åèæ¯
+
+describe GroundPicturesController do
+ before do
+ @admin = FactoryGirl.create :admin
+ @user = FactoryGirl.create( :user_yas)
+ @sp = FactoryGirl.create :system_picture
+ @lg = FactoryGirl.create :license_group, :name => 'peta'
+ @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
+ @author = @user.author
+ @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
+ @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
+ @panel = FactoryGirl.create :panel, :author_id => @author.id
+ end
+
+ describe 'ä¸è¦§è¡¨ç¤ºã«æ¼ãã¦' do
+ before do
+ sign_in @user
+ @gp = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
+ GroundPicture.stub(:list).and_return([@gp, @gp, @gp])
+ end
+ context 'ãã©ã¡ã¼ã¿pageã«ã¤ãã¦' do
+ it '@pageã«å¤ãå
¥ã' do
+ get :index, :page => 5
+ assigns(:page).should eq 5
+ end
+ it 'çç¥ãããã¨@pageã«1å¤ãå
¥ã' do
+ get :index
+ assigns(:page).should eq 1
+ end
+ it 'ä¸ããããpage_sizeãã»ããããã¦ãã' do
+ get :index, :page_size => 15
+ assigns(:page_size).should eq 15
+ end
+ it 'çç¥ãããã¨@page_sizeã«ããã©ã«ãå¤ãå
¥ã' do
+ get :index
+ assigns(:page_size).should eq GroundPicture.default_page_size
+ end
+ it 'æ大ãè¶
ããã¨@page_sizeã«ããã©ã«ãæ大å¤ãå
¥ã' do
+ get :index, :page_size => 1500
+ assigns(:page_size).should eq GroundPicture.max_page_size
+ end
+ it 'ä¸æ£ãªå¤ãå
¥ãã¨@page_sizeã«ããã©ã«ãæ大å¤ãå
¥ã' do
+ get :index, :page_size => 0
+ assigns(:page_size).should eq GroundPicture.default_page_size
+ end
+ end
+ context 'ã¤ã¤ããªãçµããã¨ã' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã200 OKãè¿ã' do
+ get :index
+ response.should be_success
+ end
+ it 'ã³ãã®ç»åèæ¯ã¢ãã«ã«ä¸è¦§ãåãåããã¦ãã' do
+ GroundPicture.should_receive(:list).exactly(1)
+ get :index
+ end
+ it '@ground_picturesã«ãªã¹ããåå¾ãã¦ãã' do
+ get :index
+ assigns(:ground_pictures).should have_at_least(3).items
+ end
+ context 'htmlå½¢å¼' do
+ it 'indexãã³ãã¬ã¼ããæç»ãã' do
+ get :index
+ response.should render_template("index")
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'jsonãã¼ã¿ãè¿ã' do
+ get :index, :format => :json
+ lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
+ end
+ it 'ãã¼ã¿ããªã¹ãæ§é ã«ãªã£ã¦ãã' do
+ get :index, :format => :json
+ json = JSON.parse response.body
+ json.should have_at_least(3).items
+ end
+ it 'ãªã¹ãã®å
é ãããã¯ç»åèæ¯ã£ã½ããã®ã§ãã£ã¦æ¬²ãã' do
+ get :index, :format => :json
+ json = JSON.parse response.body
+ json.first.has_key?("panel_id").should be_true
+ json.first.has_key?("picture_id").should be_true
+ json.first.has_key?("z").should be_true
+ end
+ end
+ end
+ context 'ä½å®¶æ¨©éããªãã¨ã' do
+ before do
+ sign_out @user
+ end
+ context 'htmlå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã302 Foundãè¿ã' do
+ get :index
+ response.status.should eq 302
+ end
+ it 'ãµã¤ã³ã¤ã³ãã¼ã¸ã¸é·ç§»ãã' do
+ get :index
+ response.should redirect_to '/users/sign_in'
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã401 Unauthorizedãè¿ã' do
+ get :index, :format => :json
+ response.status.should eq 401
+ end
+ it 'å¿çã¡ãã»ã¼ã¸ã«Unauthorizedãè¿ã' do
+ get :index, :format => :json
+ response.message.should match(/Unauthorized/)
+ end
+ end
+ end
+ end
+
+end
diff --git a/spec/controllers/original_pictures_controller_spec.rb b/spec/controllers/original_pictures_controller_spec.rb
index a81df829..351ffd9d 100644
--- a/spec/controllers/original_pictures_controller_spec.rb
+++ b/spec/controllers/original_pictures_controller_spec.rb
@@ -34,7 +34,7 @@ describe OriginalPicturesController do
end
it 'çç¥ãããã¨@page_sizeã«ããã©ã«ãå¤ãå
¥ã' do
get :index
- assigns(:page_size).should eq OriginalPicture.default_page_size
+ assigns(:page_size).should eq OriginalPicture.default_page_size
end
it 'æ大ãè¶
ããã¨@page_sizeã«ããã©ã«ãæ大å¤ãå
¥ã' do
get :index, :page_size => 1500
@@ -51,7 +51,7 @@ describe OriginalPicturesController do
response.should be_success
end
it 'åç»ã¢ãã«ã«ä¸è¦§ãåãåããã¦ãã' do
- OriginalPicture.should_receive(:list).exactly(1)
+ OriginalPicture.should_receive(:list).exactly(1)
get :index
end
it '@original_picturesã«ãªã¹ããåå¾ãã¦ãã' do
@@ -142,7 +142,7 @@ describe OriginalPicturesController do
response.should be_success
end
it 'åç»ã¢ãã«ã«åä½åå¾ãåãåããã¦ãã' do
- OriginalPicture.should_receive(:show).exactly(1)
+ OriginalPicture.should_receive(:show).exactly(1)
get :show
end
it '@original_pictureã«ã¢ã¬ãåå¾ãã¦ãã' do
@@ -171,33 +171,33 @@ describe OriginalPicturesController do
#ã¹ã¿ããããã¦send_dataããã¼ã¿ãè¿ãä½è£ã§ãã¹ãããã
context 'pngå½¢å¼' do
it 'ç»åã¢ãã«ã«ç»åãã¼ã¿ãåãåããã' do
- OriginalPicture.any_instance.should_receive(:restore).exactly(1)
+ OriginalPicture.any_instance.should_receive(:restore).exactly(1)
get :show, :id => @pic.id, :format => :png
end
it 'ç»åãéä¿¡ãã' do
- OriginalPicture.any_instance.stub(:restore).and_return('aaa')
+ OriginalPicture.any_instance.stub(:restore).and_return('aaa')
get :show, :id => @pic.id, :format => :png
response.body.should eq 'aaa'
end
end
context 'gifå½¢å¼' do
it 'ç»åã¢ãã«ã«ç»åãã¼ã¿ãåãåããã' do
- OriginalPicture.any_instance.should_receive(:restore).exactly(1)
+ OriginalPicture.any_instance.should_receive(:restore).exactly(1)
get :show, :id => @pic.id, :format => :gif
end
it 'ç»åãéä¿¡ãã' do
- OriginalPicture.any_instance.stub(:restore).and_return('bbb')
+ OriginalPicture.any_instance.stub(:restore).and_return('bbb')
get :show, :id => @pic.id, :format => :gif
response.body.should eq 'bbb'
end
end
context 'jpegå½¢å¼' do
it 'ç»åã¢ãã«ã«ç»åãã¼ã¿ãåãåããã' do
- OriginalPicture.any_instance.should_receive(:restore).exactly(1)
+ OriginalPicture.any_instance.should_receive(:restore).exactly(1)
get :show, :id => @pic.id, :format => :jpeg
end
it 'ç»åãéä¿¡ãã' do
- OriginalPicture.any_instance.stub(:restore).and_return('ccc')
+ OriginalPicture.any_instance.stub(:restore).and_return('ccc')
get :show, :id => @pic.id, :format => :jpeg
response.body.should eq 'ccc'
end
@@ -293,6 +293,104 @@ describe OriginalPicturesController do
=end
end
+ describe 'å±¥æ´ä¸è¦§è¡¨ç¤ºã«æ¼ãã¦' do
+ before do
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 0,
+ :original_picture_id => @op.id
+ sign_in @user
+ OriginalPicture.stub(:show).and_return(@op)
+ OriginalPicture.any_instance.stub(:history).and_return([@p, @p, @p])
+ end
+ context 'ã¤ã¤ããªãçµããã¨ã' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã200 OKãè¿ã' do
+ get :history, :id => @op.id
+ response.should be_success
+ end
+ it 'åç»ã¢ãã«ã«åä½åå¾ãåãåããã¦ãã' do
+ OriginalPicture.should_receive(:show).exactly(1)
+ get :history, :id => @op.id
+ end
+ it 'èªèº«ã«å±¥æ´ä¸è¦§ãåãåããã¦ãã' do
+ OriginalPicture.any_instance.should_receive(:history).exactly(1)
+ get :history
+ end
+ it '@historyã«ãªã¹ããåå¾ãã¦ãã' do
+ get :history, :id => @op.id
+ assigns(:history).should have_at_least(3).items
+ end
+ context 'htmlå½¢å¼' do
+ it 'historyãã³ãã¬ã¼ããæç»ãã' do
+ get :history, :id => @op.id
+ response.should render_template("history")
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'jsonãã¼ã¿ãè¿ã' do
+ get :history, :id => @op.id, :format => :json
+ lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
+ end
+ it 'ãã¼ã¿ããªã¹ãæ§é ã«ãªã£ã¦ãã' do
+ get :history, :id => @op.id, :format => :json
+ json = JSON.parse response.body
+ json.should have_at_least(3).items
+ end
+ it 'ãªã¹ãã®å
é ãããã¯åç»ã£ã½ããã®ã§ãã£ã¦æ¬²ãã' do
+ get :history, :id => @op.id, :format => :json
+ json = JSON.parse response.body
+ json.first.has_key?("ext").should be_true
+ end
+ end
+ end
+ context 'ä½å®¶æ¨©éããªãã¨ã' do
+ before do
+ sign_out @user
+ end
+ context 'htmlå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã302 Foundãè¿ã' do
+ get :history, :id => @op.id
+ response.status.should eq 302
+ end
+ it 'ãµã¤ã³ã¤ã³ãã¼ã¸ã¸é·ç§»ãã' do
+ get :history, :id => @op.id
+ response.should redirect_to '/users/sign_in'
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã401 Unauthorizedãè¿ã' do
+ get :history, :id => @op.id, :format => :json
+ response.status.should eq 401
+ end
+ it 'å¿çã¡ãã»ã¼ã¸ã«Unauthorizedãè¿ã' do
+ get :history, :id => @op.id, :format => :json
+ response.message.should match(/Unauthorized/)
+ end
+ end
+ end
+ context 'ä½å®¶ã絵師ã§ãªãã¨ã' do
+ before do
+ Author.any_instance.stub(:artist?).and_return(false)
+ end
+ context 'htmlå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã302 Foundãè¿ã' do
+ get :history, :id => @op.id
+ response.status.should eq 302
+ end
+ it '絵師ç»é²ãã¼ã¸ã¸é·ç§»ãã' do
+ get :history, :id => @op.id
+ response.should redirect_to new_artist_path
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'ä¾å¤403 forbiddenãè¿ã' do
+ lambda{
+ get :history, :id => @op.id, :format => :json
+ }.should raise_error(ActiveRecord::Forbidden)
+ end
+ end
+ end
+ end
+
describe 'æ°è¦ä½æãã©ã¼ã 表示ã«æ¼ãã¦' do
before do
sign_in @user
@@ -307,7 +405,7 @@ describe OriginalPicturesController do
assigns(:original_picture).should be_a_new(OriginalPicture)
end
it 'åç»ã¢ãã«ã«ããã©ã«ãå¤è£å
ãä¾é ¼ãã¦ãã' do
- OriginalPicture.any_instance.should_receive(:supply_default).exactly(1)
+ OriginalPicture.any_instance.should_receive(:supply_default).exactly(1)
get :new
end
context 'htmlå½¢å¼' do
@@ -519,8 +617,8 @@ describe OriginalPicturesController do
get :edit, :id => @pic.id
response.should be_success
end
- it 'åç»ã¢ãã«ã«åä½åå¾ãåãåããã¦ãã' do
- OriginalPicture.should_receive(:show).exactly(1)
+ it 'åç»ã¢ãã«ã«ç·¨éåå¾ãåãåããã¦ãã' do
+ OriginalPicture.should_receive(:edit).exactly(1)
get :edit, :id => @pic.id
end
it '@original_pictureã«ãã¼ã¿ãç¨æãã¦ãã' do
@@ -603,7 +701,7 @@ describe OriginalPicturesController do
OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
end
it 'åç»ã¢ãã«ã«åä½åå¾ãåãåããã¦ãã' do
- OriginalPicture.should_receive(:edit).exactly(1)
+ OriginalPicture.should_receive(:edit).exactly(1)
put :update, :id => @pic.id, :original_picture => FactoryGirl.attributes_for(:original_picture)
end
it 'ã¢ãã«ã«æ´æ°ãä¾é ¼ãã' do
diff --git a/spec/controllers/panel_colors_controller_spec.rb b/spec/controllers/panel_colors_controller_spec.rb
new file mode 100644
index 00000000..102009d1
--- /dev/null
+++ b/spec/controllers/panel_colors_controller_spec.rb
@@ -0,0 +1,114 @@
+# -*- encoding: utf-8 -*-
+require 'spec_helper'
+#ã³ãã®è²èæ¯
+
+describe PanelColorsController do
+ before do
+ @admin = FactoryGirl.create :admin
+ @user = FactoryGirl.create( :user_yas)
+ @sp = FactoryGirl.create :system_picture
+ @lg = FactoryGirl.create :license_group, :name => 'peta'
+ @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
+ @author = @user.author
+ @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
+ @panel = FactoryGirl.create :panel, :author_id => @author.id
+ end
+
+ describe 'ä¸è¦§è¡¨ç¤ºã«æ¼ãã¦' do
+ before do
+ sign_in @user
+ @pc = FactoryGirl.create :panel_color, :panel_id => @panel.id
+ PanelColor.stub(:list).and_return([@pc, @pc, @pc])
+ end
+ context 'ãã©ã¡ã¼ã¿pageã«ã¤ãã¦' do
+ it '@pageã«å¤ãå
¥ã' do
+ get :index, :page => 5
+ assigns(:page).should eq 5
+ end
+ it 'çç¥ãããã¨@pageã«1å¤ãå
¥ã' do
+ get :index
+ assigns(:page).should eq 1
+ end
+ it 'ä¸ããããpage_sizeãã»ããããã¦ãã' do
+ get :index, :page_size => 15
+ assigns(:page_size).should eq 15
+ end
+ it 'çç¥ãããã¨@page_sizeã«ããã©ã«ãå¤ãå
¥ã' do
+ get :index
+ assigns(:page_size).should eq PanelColor.default_page_size
+ end
+ it 'æ大ãè¶
ããã¨@page_sizeã«ããã©ã«ãæ大å¤ãå
¥ã' do
+ get :index, :page_size => 1500
+ assigns(:page_size).should eq PanelColor.max_page_size
+ end
+ it 'ä¸æ£ãªå¤ãå
¥ãã¨@page_sizeã«ããã©ã«ãæ大å¤ãå
¥ã' do
+ get :index, :page_size => 0
+ assigns(:page_size).should eq PanelColor.default_page_size
+ end
+ end
+ context 'ã¤ã¤ããªãçµããã¨ã' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã200 OKãè¿ã' do
+ get :index
+ response.should be_success
+ end
+ it 'è²èæ¯ã¢ãã«ã«ä¸è¦§ãåãåããã¦ãã' do
+ PanelColor.should_receive(:list).exactly(1)
+ get :index
+ end
+ it '@panel_colorsã«ãªã¹ããåå¾ãã¦ãã' do
+ get :index
+ assigns(:panel_colors).should have_at_least(3).items
+ end
+ context 'htmlå½¢å¼' do
+ it 'indexãã³ãã¬ã¼ããæç»ãã' do
+ get :index
+ response.should render_template("index")
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'jsonãã¼ã¿ãè¿ã' do
+ get :index, :format => :json
+ lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
+ end
+ it 'ãã¼ã¿ããªã¹ãæ§é ã«ãªã£ã¦ãã' do
+ get :index, :format => :json
+ json = JSON.parse response.body
+ json.should have_at_least(3).items
+ end
+ it 'ãªã¹ãã®å
é ãããã¯è²èæ¯ã£ã½ããã®ã§ãã£ã¦æ¬²ãã' do
+ get :index, :format => :json
+ json = JSON.parse response.body
+ json.first.has_key?("panel_id").should be_true
+ json.first.has_key?("code").should be_true
+ json.first.has_key?("z").should be_true
+ end
+ end
+ end
+ context 'ä½å®¶æ¨©éããªãã¨ã' do
+ before do
+ sign_out @user
+ end
+ context 'htmlå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã302 Foundãè¿ã' do
+ get :index
+ response.status.should eq 302
+ end
+ it 'ãµã¤ã³ã¤ã³ãã¼ã¸ã¸é·ç§»ãã' do
+ get :index
+ response.should redirect_to '/users/sign_in'
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã401 Unauthorizedãè¿ã' do
+ get :index, :format => :json
+ response.status.should eq 401
+ end
+ it 'å¿çã¡ãã»ã¼ã¸ã«Unauthorizedãè¿ã' do
+ get :index, :format => :json
+ response.message.should match(/Unauthorized/)
+ end
+ end
+ end
+ end
+
+end
diff --git a/spec/controllers/panels_controller_spec.rb b/spec/controllers/panels_controller_spec.rb
index 7f1770b5..485b04d6 100644
--- a/spec/controllers/panels_controller_spec.rb
+++ b/spec/controllers/panels_controller_spec.rb
@@ -4,9 +4,9 @@ require 'spec_helper'
describe PanelsController do
before do
FactoryGirl.create :admin
- @sp = FactoryGirl.create :system_picture
- @lg = FactoryGirl.create :license_group
- @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
+ @sp = FactoryGirl.create :system_picture
+ @lg = FactoryGirl.create :license_group
+ @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
@user = FactoryGirl.create :user_yas
@author = @user.author #ã¦ã¼ã¶ä½ææã«é£åãã¦ä½æããã
end
@@ -430,8 +430,8 @@ describe PanelsController do
get :edit, :id => @panel.id
response.should be_success
end
- it 'ã³ãã¢ãã«ã«åä½åå¾ãåãåããã¦ãã' do
- Panel.should_receive(:show).exactly(1)
+ it 'ã³ãã¢ãã«ã«ç·¨éåå¾ãåãåããã¦ãã' do
+ Panel.should_receive(:edit).exactly(1)
get :edit, :id => @panel.id
end
it '@panelã«ãã¼ã¿ãç¨æãã¦ãã' do
diff --git a/spec/controllers/pictures_controller_spec.rb b/spec/controllers/pictures_controller_spec.rb
index b61f9200..6fdc26ec 100644
--- a/spec/controllers/pictures_controller_spec.rb
+++ b/spec/controllers/pictures_controller_spec.rb
@@ -33,6 +33,12 @@ describe PicturesController do
get :show, :id => @p.id, :format => :json
assigns(:picture).id.should eq(@p.id)
end
+ context 'htmlå½¢å¼' do
+ it 'showãã³ãã¬ã¼ããæç»ãã' do
+ get :show, :id => @p.id
+ response.should render_template("show")
+ end
+ end
context 'jsonå½¢å¼' do
it 'jsonãã¼ã¿ãè¿ã' do
get :show, :id => @p.id, :format => :json
@@ -149,89 +155,89 @@ describe PicturesController do
=end
end
- describe 'ã¯ã¬ã¸ãã表示ã«æ¼ãã¦' do
- before do
+ describe 'ã¯ã¬ã¸ãã表示ã«æ¼ãã¦' do
+ before do
@p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
sign_in @user
Picture.stub(:show).and_return(@p)
- end
- context 'ã¤ã¤ããªãçµããã¨ã' do
- it 'ã¹ãã¼ã¿ã¹ã³ã¼ã200 OKãè¿ã' do
- get :credit, :id => @p.id
- response.should be_success
- end
- it 'å®ç´ æã¢ãã«ã«åä½åå¾ãåãåããã¦ãã' do
- Picture.should_receive(:show).exactly(1)
- get :credit, :id => @p.id
- end
- it '@pictureã«ã¢ã¬ãåå¾ãã¦ãã' do
- get :credit, :id => @p.id
- assigns(:picture).id.should eq(@p.id)
- end
- context 'htmlå½¢å¼' do
- it 'creditãã³ãã¬ã¼ããæç»ãã' do
- get :credit, :id => @p.id
- response.should render_template("credit")
- end
- end
- context 'jsonå½¢å¼' do
- it 'jsonãã¼ã¿ãè¿ã' do
- get :credit, :id => @p.id, :format => :json
- lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
- end
- it 'ãã¼ã¿ãã¢ã¬ã«ãªã£ã¦ãã' do
- get :credit, :id => @p.id, :format => :json
- json = JSON.parse response.body
- json["ext"].should match(/png/)
- end
- end
- end
- context 'ä½å®¶æ¨©éããªãã¨ã' do
- before do
- sign_out @user
- end
- context 'htmlå½¢å¼' do
- it 'ã¹ãã¼ã¿ã¹ã³ã¼ã302 Foundãè¿ã' do
- get :credit, :id => @p.id
- response.status.should eq 302
- end
- it 'ãµã¤ã³ã¤ã³ãã¼ã¸ã¸é·ç§»ãã' do
- get :credit, :id => @p.id
- response.body.should redirect_to '/users/sign_in'
- end
- end
- context 'jsonå½¢å¼' do
- it 'ã¹ãã¼ã¿ã¹ã³ã¼ã401 Unauthorizedãè¿ã' do
- get :credit, :id => @p.id, :format => :json
- response.status.should eq 401
- end
- it 'å¿çã¡ãã»ã¼ã¸ã«Unauthorizedãè¿ã' do
- get :credit, :id => @p.id, :format => :json
- response.message.should match(/Unauthorized/)
- end
- end
- end
-=begin
- context 'å¯¾è±¡ç´ æããªãã¨ã' do
- before do
- Picture.unstub(:show)
- end
- context 'htmlå½¢å¼' do
- it 'ä¾å¤404 not_foundãè¿ã' do
- lambda{
- get :show, :id => 0
- }.should raise_error(ActiveRecord::RecordNotFound)
- end
- end
- context 'jsonå½¢å¼' do
- it 'ä¾å¤404 not_foundãè¿ã' do
- lambda{
- get :show, :id => 0, :format => :json
- }.should raise_error(ActiveRecord::RecordNotFound)
- end
- end
- end
-=end
- end
+ end
+ context 'ã¤ã¤ããªãçµããã¨ã' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã200 OKãè¿ã' do
+ get :credit, :id => @p.id
+ response.should be_success
+ end
+ it 'å®ç´ æã¢ãã«ã«åä½åå¾ãåãåããã¦ãã' do
+ Picture.should_receive(:show).exactly(1)
+ get :credit, :id => @p.id
+ end
+ it '@pictureã«ã¢ã¬ãåå¾ãã¦ãã' do
+ get :credit, :id => @p.id
+ assigns(:picture).id.should eq(@p.id)
+ end
+ context 'htmlå½¢å¼' do
+ it 'creditãã³ãã¬ã¼ããæç»ãã' do
+ get :credit, :id => @p.id
+ response.should render_template("credit")
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'jsonãã¼ã¿ãè¿ã' do
+ get :credit, :id => @p.id, :format => :json
+ lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
+ end
+ it 'ãã¼ã¿ãã¢ã¬ã«ãªã£ã¦ãã' do
+ get :credit, :id => @p.id, :format => :json
+ json = JSON.parse response.body
+ json["ext"].should match(/png/)
+ end
+ end
+ end
+ context 'ä½å®¶æ¨©éããªãã¨ã' do
+ before do
+ sign_out @user
+ end
+ context 'htmlå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã302 Foundãè¿ã' do
+ get :credit, :id => @p.id
+ response.status.should eq 302
+ end
+ it 'ãµã¤ã³ã¤ã³ãã¼ã¸ã¸é·ç§»ãã' do
+ get :credit, :id => @p.id
+ response.body.should redirect_to '/users/sign_in'
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã401 Unauthorizedãè¿ã' do
+ get :credit, :id => @p.id, :format => :json
+ response.status.should eq 401
+ end
+ it 'å¿çã¡ãã»ã¼ã¸ã«Unauthorizedãè¿ã' do
+ get :credit, :id => @p.id, :format => :json
+ response.message.should match(/Unauthorized/)
+ end
+ end
+ end
+=begin
+ context 'å¯¾è±¡ç´ æããªãã¨ã' do
+ before do
+ Picture.unstub(:show)
+ end
+ context 'htmlå½¢å¼' do
+ it 'ä¾å¤404 not_foundãè¿ã' do
+ lambda{
+ get :show, :id => 0
+ }.should raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'ä¾å¤404 not_foundãè¿ã' do
+ lambda{
+ get :show, :id => 0, :format => :json
+ }.should raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+ end
+=end
+ end
end
diff --git a/spec/controllers/stories_controller_spec.rb b/spec/controllers/stories_controller_spec.rb
index 878be3b3..0ac61e4b 100644
--- a/spec/controllers/stories_controller_spec.rb
+++ b/spec/controllers/stories_controller_spec.rb
@@ -209,8 +209,8 @@ describe StoriesController do
get :edit, :id => @story.id
response.should be_success
end
- it 'ã³ãã¢ãã«ã«åä½åå¾ãåãåããã¦ãã' do
- Story.should_receive(:show).exactly(1)
+ it 'ã³ãã¢ãã«ã«ç·¨éåå¾ãåãåããã¦ãã' do
+ Story.should_receive(:edit).exactly(1)
get :edit, :id => @story.id
end
it '@storyã«ãã¼ã¿ãç¨æãã¦ãã' do
@@ -363,74 +363,74 @@ describe StoriesController do
end
end
- describe 'åé¤ã«æ¼ãã¦' do
- before do
+ describe 'åé¤ã«æ¼ãã¦' do
+ before do
@story = FactoryGirl.create :story, :author_id => @author.id
sign_in @user
- Story.stub(:edit).and_return(@story)
- end
- context 'ã¤ã¤ããªãçµããã¨ã' do
- it 'ã¹ãã¼ãªã¼ã¢ãã«ã«ç·¨éåå¾ãåãåããã¦ãã' do
- Story.should_receive(:edit).exactly(1)
- delete :destroy, :id => @story.id
- end
- it '@storyã«ã¢ã¬ãåå¾ãã¦ãã' do
- delete :destroy, :id => @story.id
- assigns(:story).id.should eq(@story.id)
- end
- it 'ãã®ã¹ãã¼ãªã¼ãä¸ã¤ã®ãã©ã³ã¶ã¯ã·ã§ã³ã§åé¤ãã' do
- lambda {
- delete :destroy, :id => @story.id
- }.should change(Story, :count)
- end
- context 'htmlå½¢å¼' do
- it 'ã¹ãã¼ã¿ã¹ã³ã¼ã302 Foundãè¿ã' do
- delete :destroy, :id => @story.id
- response.status.should eq 302
- end
- it 'ã¹ãã¼ãªã¼ä¸è¦§ãã¼ã¸ã¸é·ç§»ãã' do
- delete :destroy, :id => @story.id
- response.should redirect_to(story_path(@story.comic_id))
- end
- end
- context 'jsonå½¢å¼' do
- it 'ã¹ãã¼ã¿ã¹ã³ã¼ã200 OKãè¿ã' do
- delete :destroy, :id => @story.id, :format => :json
- response.should be_success
- end
- end
- end
- context 'ä½å®¶æ¨©éããªãã¨ã' do
- before do
- sign_out @user
- end
- context 'htmlå½¢å¼' do
- it 'ã¹ãã¼ã¿ã¹ã³ã¼ã302 Foundãè¿ã' do
- delete :destroy, :id => @story.id
- response.status.should eq 302
- end
- it 'ãµã¤ã³ã¤ã³ãã¼ã¸ã¸é·ç§»ãã' do
- delete :destroy, :id => @story.id
- response.body.should redirect_to '/users/sign_in'
- end
- end
- context 'jsonå½¢å¼' do
- it 'ã¹ãã¼ã¿ã¹ã³ã¼ã401 Unauthorizedãè¿ã' do
- delete :destroy, :id => @story.id, :format => :json
- response.status.should eq 401
- end
- it 'å¿çã¡ãã»ã¼ã¸ã«Unauthorizedãè¿ã' do
- delete :destroy, :id => @story.id, :format => :json
- response.message.should match(/Unauthorized/)
- end
- end
- end
-=begin
- context '対象ã¹ãã¼ãªã¼ããªãã¨ã' do
- end
- context 'ä»äººã®ã¹ãã¼ãªã¼ã ã£ãã¨ã' do
- end
-=end
- end
-
+ Story.stub(:edit).and_return(@story)
+ end
+ context 'ã¤ã¤ããªãçµããã¨ã' do
+ it 'ã¹ãã¼ãªã¼ã¢ãã«ã«ç·¨éåå¾ãåãåããã¦ãã' do
+ Story.should_receive(:edit).exactly(1)
+ delete :destroy, :id => @story.id
+ end
+ it '@storyã«ã¢ã¬ãåå¾ãã¦ãã' do
+ delete :destroy, :id => @story.id
+ assigns(:story).id.should eq(@story.id)
+ end
+ it 'ãã®ã¹ãã¼ãªã¼ãä¸ã¤ã®ãã©ã³ã¶ã¯ã·ã§ã³ã§åé¤ãã' do
+ lambda {
+ delete :destroy, :id => @story.id
+ }.should change(Story, :count)
+ end
+ context 'htmlå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã302 Foundãè¿ã' do
+ delete :destroy, :id => @story.id
+ response.status.should eq 302
+ end
+ it 'ã¹ãã¼ãªã¼ä¸è¦§ãã¼ã¸ã¸é·ç§»ãã' do
+ delete :destroy, :id => @story.id
+ response.should redirect_to(story_path(@story.comic_id))
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã200 OKãè¿ã' do
+ delete :destroy, :id => @story.id, :format => :json
+ response.should be_success
+ end
+ end
+ end
+ context 'ä½å®¶æ¨©éããªãã¨ã' do
+ before do
+ sign_out @user
+ end
+ context 'htmlå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã302 Foundãè¿ã' do
+ delete :destroy, :id => @story.id
+ response.status.should eq 302
+ end
+ it 'ãµã¤ã³ã¤ã³ãã¼ã¸ã¸é·ç§»ãã' do
+ delete :destroy, :id => @story.id
+ response.body.should redirect_to '/users/sign_in'
+ end
+ end
+ context 'jsonå½¢å¼' do
+ it 'ã¹ãã¼ã¿ã¹ã³ã¼ã401 Unauthorizedãè¿ã' do
+ delete :destroy, :id => @story.id, :format => :json
+ response.status.should eq 401
+ end
+ it 'å¿çã¡ãã»ã¼ã¸ã«Unauthorizedãè¿ã' do
+ delete :destroy, :id => @story.id, :format => :json
+ response.message.should match(/Unauthorized/)
+ end
+ end
+ end
+=begin
+ context '対象ã¹ãã¼ãªã¼ããªãã¨ã' do
+ end
+ context 'ä»äººã®ã¹ãã¼ãªã¼ã ã£ãã¨ã' do
+ end
+=end
+ end
+
end
diff --git a/spec/factories.rb b/spec/factories.rb
index b8c0dfdd..ff13301b 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -52,10 +52,14 @@ FactoryGirl.define do
license.system_picture_id 1
end
+ factory :color, :class => Color do |color|
+ color.name 'black'
+ color.code 0
+ color.t 0
+ end
+
factory :comic, :class => Comic do |comic|
comic.title "comic"
- comic.width 100
- comic.height 10
comic.visible 3
end
@@ -65,6 +69,7 @@ FactoryGirl.define do
op.height 111
op.filesize 100000
op.artist_id 1
+ op.md5 'op8f6bcd4621d373cade4e832627b4f6'
end
factory :oplg, :class => OriginalPictureLicenseGroup do |oplg|
@@ -77,6 +82,7 @@ FactoryGirl.define do
rp.width 222
rp.height 111
rp.filesize 100000
+ rp.md5 'rp8f6bcd4621d373cade4e832627b4f6'
rp.artist_id 1
rp.license_id 1
rp.classname 'StandardLicense'
@@ -90,6 +96,7 @@ FactoryGirl.define do
p.width 222
p.height 111
p.filesize 100000
+ p.md5 'ap8f6bcd4621d373cade4e832627b4f6'
p.artist_id 1
p.license_id 1
p.artist_name 'no name'
@@ -156,6 +163,24 @@ FactoryGirl.define do
pp.height 300
end
+ factory :panel_color, :class => PanelColor do |pc|
+ pc.panel_id 1
+ pc.z 1
+ pc.code 1
+ end
+
+ factory :ground_color, :class => GroundColor do |gc|
+ gc.panel_id 1
+ gc.color_id 1
+ gc.z 1
+ end
+
+ factory :ground_picture, :class => GroundPicture do |gp|
+ gp.panel_id 1
+ gp.picture_id 1
+ gp.z 1
+ end
+
factory :panel, :class => Panel do |panel|
panel.border 1
panel.x nil
diff --git a/spec/helpers/artists_helper_spec.rb b/spec/helpers/artists_helper_spec.rb
index 7a1305af..f66b09fc 100644
--- a/spec/helpers/artists_helper_spec.rb
+++ b/spec/helpers/artists_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe ArtistsHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/authors_helper_spec.rb b/spec/helpers/authors_helper_spec.rb
index 09acc33b..9c0a8cba 100644
--- a/spec/helpers/authors_helper_spec.rb
+++ b/spec/helpers/authors_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe AuthorsHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/balloons_helper_spec.rb b/spec/helpers/balloons_helper_spec.rb
index c8b66059..5a4a680a 100644
--- a/spec/helpers/balloons_helper_spec.rb
+++ b/spec/helpers/balloons_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe BalloonsHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/colors_helper_spec.rb b/spec/helpers/colors_helper_spec.rb
new file mode 100644
index 00000000..9e0d6e50
--- /dev/null
+++ b/spec/helpers/colors_helper_spec.rb
@@ -0,0 +1,16 @@
+# -*- encoding: utf-8 -*-
+#ã
+require 'spec_helper'
+
+# Specs in this file have access to a helper object that includes
+# the ColorsHelper. For example:
+#
+# describe ColorsHelper do
+# describe "string concat" do
+# it "concats two strings with spaces" do
+# helper.concat_strings("this","that").should == "this that"
+# end
+# end
+# end
+describe ColorsHelper do
+end
diff --git a/spec/helpers/comics_helper_spec.rb b/spec/helpers/comics_helper_spec.rb
index 30bdaafa..3ffabda5 100644
--- a/spec/helpers/comics_helper_spec.rb
+++ b/spec/helpers/comics_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe ComicsHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/ground_colors_helper_spec.rb b/spec/helpers/ground_colors_helper_spec.rb
new file mode 100644
index 00000000..612d2801
--- /dev/null
+++ b/spec/helpers/ground_colors_helper_spec.rb
@@ -0,0 +1,16 @@
+# -*- encoding: utf-8 -*-
+#ã
+require 'spec_helper'
+
+# Specs in this file have access to a helper object that includes
+# the GroundColorsHelper. For example:
+#
+# describe GroundColorsHelper do
+# describe "string concat" do
+# it "concats two strings with spaces" do
+# helper.concat_strings("this","that").should == "this that"
+# end
+# end
+# end
+describe GroundColorsHelper do
+end
diff --git a/spec/helpers/ground_pictures_helper_spec.rb b/spec/helpers/ground_pictures_helper_spec.rb
new file mode 100644
index 00000000..49bac834
--- /dev/null
+++ b/spec/helpers/ground_pictures_helper_spec.rb
@@ -0,0 +1,14 @@
+require 'spec_helper'
+
+# Specs in this file have access to a helper object that includes
+# the GroundPicturesHelper. For example:
+#
+# describe GroundPicturesHelper do
+# describe "string concat" do
+# it "concats two strings with spaces" do
+# helper.concat_strings("this","that").should == "this that"
+# end
+# end
+# end
+describe GroundPicturesHelper do
+end
diff --git a/spec/helpers/home_helper_spec.rb b/spec/helpers/home_helper_spec.rb
index 4a376330..85739de7 100644
--- a/spec/helpers/home_helper_spec.rb
+++ b/spec/helpers/home_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe HomeHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/license_groups_helper_spec.rb b/spec/helpers/license_groups_helper_spec.rb
index 5b68da92..086a88c2 100644
--- a/spec/helpers/license_groups_helper_spec.rb
+++ b/spec/helpers/license_groups_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe LicenseGroupsHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/licenses_helper_spec.rb b/spec/helpers/licenses_helper_spec.rb
index 832b7963..727c0565 100644
--- a/spec/helpers/licenses_helper_spec.rb
+++ b/spec/helpers/licenses_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe LicensesHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/original_picture_license_groups_helper_spec.rb b/spec/helpers/original_picture_license_groups_helper_spec.rb
index 85b259bb..dcc573e7 100644
--- a/spec/helpers/original_picture_license_groups_helper_spec.rb
+++ b/spec/helpers/original_picture_license_groups_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe OriginalPictureLicenseGroupsHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/original_pictures_helper_spec.rb b/spec/helpers/original_pictures_helper_spec.rb
index b5062052..fe678c18 100644
--- a/spec/helpers/original_pictures_helper_spec.rb
+++ b/spec/helpers/original_pictures_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe OriginalPicturesHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/panel_colors_helper_spec.rb b/spec/helpers/panel_colors_helper_spec.rb
new file mode 100644
index 00000000..2f2d8178
--- /dev/null
+++ b/spec/helpers/panel_colors_helper_spec.rb
@@ -0,0 +1,16 @@
+# -*- encoding: utf-8 -*-
+#ã
+require 'spec_helper'
+
+# Specs in this file have access to a helper object that includes
+# the PanelColorsHelper. For example:
+#
+# describe PanelColorsHelper do
+# describe "string concat" do
+# it "concats two strings with spaces" do
+# helper.concat_strings("this","that").should == "this that"
+# end
+# end
+# end
+describe PanelColorsHelper do
+end
diff --git a/spec/helpers/panel_pictures_helper_spec.rb b/spec/helpers/panel_pictures_helper_spec.rb
index fb0c201c..622414f8 100644
--- a/spec/helpers/panel_pictures_helper_spec.rb
+++ b/spec/helpers/panel_pictures_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe PanelPicturesHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/panels_helper_spec.rb b/spec/helpers/panels_helper_spec.rb
index 8a383885..a3cff28b 100644
--- a/spec/helpers/panels_helper_spec.rb
+++ b/spec/helpers/panels_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe PanelsHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/pictures_helper_spec.rb b/spec/helpers/pictures_helper_spec.rb
index d0a47d3a..ebaaea89 100644
--- a/spec/helpers/pictures_helper_spec.rb
+++ b/spec/helpers/pictures_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe PicturesHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/resource_pictures_helper_spec.rb b/spec/helpers/resource_pictures_helper_spec.rb
index 1da55083..2ce12b2a 100644
--- a/spec/helpers/resource_pictures_helper_spec.rb
+++ b/spec/helpers/resource_pictures_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe ResourcePicturesHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/speech_balloon_templates_helper_spec.rb b/spec/helpers/speech_balloon_templates_helper_spec.rb
index 6134c6da..ed083a43 100644
--- a/spec/helpers/speech_balloon_templates_helper_spec.rb
+++ b/spec/helpers/speech_balloon_templates_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe SpeechBalloonTemplatesHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/speech_balloons_helper_spec.rb b/spec/helpers/speech_balloons_helper_spec.rb
index 041cfcf1..d89b38cb 100644
--- a/spec/helpers/speech_balloons_helper_spec.rb
+++ b/spec/helpers/speech_balloons_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe SpeechBalloonsHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/speeches_helper_spec.rb b/spec/helpers/speeches_helper_spec.rb
index 0de28b6f..e0582b8c 100644
--- a/spec/helpers/speeches_helper_spec.rb
+++ b/spec/helpers/speeches_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe SpeechesHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/system_helper_spec.rb b/spec/helpers/system_helper_spec.rb
index 8f363454..39b804fd 100644
--- a/spec/helpers/system_helper_spec.rb
+++ b/spec/helpers/system_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe SystemHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/system_pictures_helper_spec.rb b/spec/helpers/system_pictures_helper_spec.rb
index 839a2e7d..6b0acadd 100644
--- a/spec/helpers/system_pictures_helper_spec.rb
+++ b/spec/helpers/system_pictures_helper_spec.rb
@@ -1,3 +1,5 @@
+# -*- encoding: utf-8 -*-
+#ã
require 'spec_helper'
# Specs in this file have access to a helper object that includes
@@ -11,5 +13,4 @@ require 'spec_helper'
# end
# end
describe SystemPicturesHelper do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/json/color.json b/spec/json/color.json
new file mode 100644
index 00000000..e9b2ddc2
--- /dev/null
+++ b/spec/json/color.json
@@ -0,0 +1,6 @@
+{
+ "white": {
+ "code": 0,
+ "t": 0
+ }
+}
diff --git a/spec/json/colors.json b/spec/json/colors.json
new file mode 100644
index 00000000..fba582f0
--- /dev/null
+++ b/spec/json/colors.json
@@ -0,0 +1,10 @@
+{
+ "white": {
+ "code": 255,
+ "t": 0
+ },
+ "black": {
+ "code": 0,
+ "t": 1
+ }
+}
diff --git a/spec/json/license_group.json b/spec/json/license_group.json
index 3cfb5ab8..fec9dbaf 100644
--- a/spec/json/license_group.json
+++ b/spec/json/license_group.json
@@ -8,7 +8,7 @@
"PublicDomain": {
"caption": "Public Domain",
"url": "http://test.com/",
- "system_picture": "Data"
+ "system_picture": "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"
}
}
}
diff --git a/spec/json/license_groups.json b/spec/json/license_groups.json
index fe31ec72..e8b082a9 100644
--- a/spec/json/license_groups.json
+++ b/spec/json/license_groups.json
@@ -12,12 +12,12 @@
"UnknownF1": {
"caption": "Unknown Flag1",
"url": "http://test.com/f1",
- "system_picture": "Dataf1"
+ "system_picture": "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"
},
"UnknownF2": {
"caption": "Unknown Flag2",
"url": "http://test.com/f2",
- "system_picture": "Dataf2"
+ "system_picture": "iVBORw0KGgoAAAANSUhEUgAAAHkAAAB6CAIAAAAUDGuwAAAgAElEQVR4nM196VcUSdZ+ZFYVS1GAArLvi6CyiIjiK9i2jQug3a2t0zNzzvwT80fNnD7dtjbgLj1to4i4sAnKvoNQ7DtVlZnvh9uGt+6NrHY+/M7vjQ91sjIjbtz73HufyCUyUvvnP/9ZVVUl/n+Xvb09IYTP55udnQ0EAoFAYGRkxDCM/0qIZVmpqan79+8XQiQkJOzbt08I4XQ6HQ7H/wud/6vS3t7urKqqunHjhmVZcq+maZZlaZqGq+I9dkexECyHHCXyl5eXNzY2nj59quu6rOZyuYqKimCb9GWnA1FD0zSHw2EYRmZm5sGDB2NiYlwul+wdK4kb2tmO1ZB/yQYWqNTQaQcNqU1EEEG8Gv6Lf0HCzs6O3+/v7+/f2Nh48eJFIBDgxnMsuOVEGWy21+tdWFgQQgwPDz98+LCgoCAtLS0/Pz82NtbtduNIx82JCeRQ6IJ7V4aCkzWhjbHxmqaFVoiHAKm5srLi9Xr7+vrm5+cXFhYCgYDD4eDOUPoMbysDglTGmg8MDAwMDHR3d0dHRx89ejQ+Pj4tLc3pdBIzpQLEWGIXVliZfCQUKNY4EXhOyTYk4rCunGdkq62tra2trf7+/t7eXq/XC3QhhABrSb925CCYX3lNu7zUdV0IsbKysrKyMj4+Hh4enp2d/cUXX0RERMTHx3M3hyBScggjo0w+WcFJ/MA9rHQmcQ/vQypkmub79++7u7tnZma2t7cNw5D4En5XWkjMCxH7WIhg6Y/rOxwOv9//7t27mZmZiIiIqqqqwsLC2NhYYqOSJLka/ChRXu50kjYYbp4IdpkigkMPju7t7Y2Njb18+XJyctLn84GKDofDjgSxGWQg5W4gyWQXIoQNsOZOp3N7e3tra+vu3bvPnz8/fvz4oUOH4BxGyU7E6yG4i58jwIZibFR6jDiKyOJss7Gx8ezZs46ODsMwdF2XEHMUlNArt0PYxj2hrMObQ8OlpaXHjx93dXV9++23SUlJOPPsZNpphXcSoBRjIx/olY0J7cjoXllZGRsba21tXV9ftyxLnskpM5rEpp3qdpgSnTmnYW1DxCOEwsLCwr/+9a+ioqLS0tL09HQ5qAiWZ3ZKkgAilYP4mmQoV5HjhcPc7/d7vd6Wlpbh4WEYi3jKC5bgnLXFn+WvCA6IELmIMcIBIWyCaWtr6+XLlwMDA+fPn8/Ly/N4PFyZEIUEO2FXehqgxF3YhJuEwDTN7e3t169ft7e37+zsyIhQClQqxyELzQnK0OaMYecGpYOh6Lq+ubn5yy+/5Obmnj9/Pj4+npwsKaWF1gdKEDGRvMZW8STC+6empn799deZmRm4KiGEwAcxKc1uGIFiGEYIUJQwhYgJO1CEjW+GhoYWFxcrKytPnDgB15y4mjLviUW4jgCsseUcHf6X0NDMzExTU9PCwoKk5j8dAO3iC9pGRETouq7renFxcVxc3GcCHQgEuru719fXhRA+n880TXlImdoCJRA5KpVcWVn57bffhBCVlZUul4vHCikccVzZyVURLL6IM6Xcvb29/v7+tra2hYUFu/s7HFwSCwCKpmmxsbFZWVmapp04ccLtdgshPB6Py+XiTbhhcKi0tNTv91uW9fbt26WlpY2NjdHRUU3T4Fzoc4iIH/X7/S0tLbu7u0eOHElKSlIiq0ScM+GnuCbkYAeQ3OPz+VpaWl69egUnG1hX7nZlkkLZv39/TEzMqVOnYmJiDhw4oGma0+nk4HLS5xEUHR0N9U+fPm2a5u7u7tzc3Pj4eF9f3+7u7u7urhyxlQO1Xaemaba2tg4ODl69ehXgtlOM/BJpTq60cpgmqmxtbbW0tLx58wZLJ1HPcYFimqZlWeHh4eXl5dHR0SdOnHA6neS8JUQUcyV5RzCahYWFRUdHHzx48Ny5cyMjI1NTU8PDwwsLC4Zh8CxU0iOOnrm5uZ9++umbb75JS0sjA4PSTzy8nHKvkmGxBlLW3t7ekydPOjs7cRJgtYSqwH7DMCIjI/Pz848dO5aVlSUpQgSfqnOIlbTG3aN0lcvlKiwsPHjwYHl5eW9v79u3b+fn5+WNJ6UvuSd0Xfd6vc3NzV9//XVqaqpd5RCKOW7cuHHkyBGCOIZewqd9PAN99OjRq1ev8O3mz8kjy7LcbndJScm5c+dqamri4uJwcGkfiwj2NIkAjqMIphFuObYrKioqJyfn0KFDkZGRcIGOe7cTguusr69PTk6mpqZGR0cTYznEWHJ/f7/OK0losCzY6ff7W1tbIaJFMGnwv3KPZVmGYcTFxV29evXChQt5eXlKY4hh3E58CCcQ9grfg2vCRkxMTHV19ffff3/48GE4SbXTnB9yOByLi4t37tyBm+O4vlKHoLYyrrm1uBtN03Z3dx89evTixQsypuNwE8EsBH8PHDhQU1NTW1ubnp4OJ6p2OPIzKi6cgB4i9wmN4laapgGV5efnLy8v7+7uyudtJFR5Mmmatra2NjExkZGR4fF4cH0+qMhWQXEt0LmBQI7S0Fj8+vVrGMRw1HPzZAXTNDMyMr7//vuTJ0/u27eP5wEfTjFBEzuxSaQ7Ipa04mELrSIiInJycm7cuFFTUyOY17nz5FGn0wnRvbS0hOtj9bhun7DmfI376+joePbsWQhmJPtN03S73X//+9//8Y9/JCQkwGmcCMZXaZjGzgR4Xxoaq+10wIZwksGV3W53VFQUAZc4VanD5OTk7du35aWytIVkhiy6tJ9kjSyWZXm93t7eXqwBDn9cEzYCgYDb7b548WJhYWF4eHjoZA9NArwOyQa7ooxorL8U2NfX19LSwh3/p4o5HI6FhYW+vj64l4DJU4mPEx8mEjVNM03zw4cPt27dmp+fxxcCgrkEA1pWVlZeXp6Xl8cr81Y840ITBadggkJo+sbyDcPo7+9vamqSD5dDNOfGCiF8Pl9TU5PP56usrOSGED11O0Hwu729/fjxYwAaQ8DhEB/jpby8vKGhQQKNeQmbzZma40KgIURMyDG0QKWZfX199+/fDwQCSiVFcFTahePe3l5XV9f29jZ3P5Gp82NSdCAQ6Ovrm56eVp544G3ZTUVFxcWLFyMjI/F+DgdhTzKIKZGyG7hI6nxO3oBpb9++bWpqkqfYysLHGEIOlmU5nc7p6enm5uaVlRWppDLngp4VEF2Xl5d//fXXvb09XddJNIngBAG2KS8v//LLL8PCwkRw+JOsJw05J2AdpqenJX3ZFcuyIiIi8vLywsLCSMhj+RjBt2/fPnz40O/3g2lcIAkp7n5iWm9vb1JS0hdffMFNCMJaGUebm5vPnj2D+zUEC8Kk4Opjx45duHBBRjQGjhClXY9QTNNcXl7e3t5++vRpIBBYXFxcXV39U0JwuVwpKSkOh+PIkSOZmZkOhyM+Pl6o4A4EAgMDA3fu3PH5fOQmDNENhxfZQ+AWQui63tnZmZ2dnZGRISODmEnvPUlZg4ODXV1dyhwkuWxZVklJSW1tbWRkpFJdHmu8O8jr/v7+paWlnp6era2tvb09y7Lkc2ERTBdEYCAQmJiYsCxramrK4XC43e7KyspDhw7t27ePVO7v73/w4IEEmsQEFo6h5OYTWHRdX15ebm1tvXr1KtwQJjwpyDMwKX1nZ+f58+dK0UQzOI8uKyuLiorCokkSEFbFQuBUZ2lp6c2bNzMzMz6fDw595h1nuQewMwzDMIy9vb3Hjx93dHRUVlYmJSVlZGSEh4ebpjk8PNzc3Ly3t0cAteuFZCTPUVxT1/Xx8fGxsbEjR47wXBFkzgJs+Hy+zs7O5eVlwll8w7Ist9t96dKlgoIC7AwCul1CCCG2t7dHRkYePny4sbEhISZokkFCqC4pCaXC39XV1cePHxuGcfHixZMnT75//55HdIhQ4ETHOyLF7/e/fv06IyMjJiZGsMhQTISYnp5+8uQJfoYkEBvgLi3LKi8vh9spJOMEigKlcnBu29vbOz4+7vf7SZjwQlhS6UKiqqZphmGkpKTk5+ePjY3duXMHnjsTWJVdE53BWB7vuMCe0dHRFy9efPXVV5i1g7DGjn358uXu7i6RxXPNNM3MzMyjR48q77srGUP27fV6379///jxYxH8QFZpD89fpVakdwA6PT29oaHB6/U+ePBgZ2eHJ75SAgkRy7IcDkdiYuL8/LxpmrwJcXx/f39paWlycjIxIehGkqZp4+Pjo6OjAuWpCE438dHJycnJly9fhqdW+LRJhgAZPWA/sPMPP/zwn//8B8a9P7Uca0hqgkwMsWxiGEZiYuLly5c3Nzfv3r27sbHB59bI7FQCJ49qmnbq1Km//e1vlZWV8FBJ6Rip4erqamdnJ6n2B9ZS752dHbgEImedxMlCCHjInZCQwA/Z5SZsTE5O/vzzz16vF9uMKyj/YhyVNIq3waMZGRlXr15dWlpqbGwEi3hloTpbIH91Xa+urv7iiy9iYmLKyspgiiXHETvGsqze3t6lpSWCQNCzgtXV1ZGREcIJykHD4/EUFRWRGeOCBbVAoQfUAbMbZEPsJBGcQDji+LhHwMJKmqaZmJj49ddf7+zs3L9/f3Nzk4+3OO04cHK/ZVlVVVWnT592Op2WZcXHx+fn53NvEbGapm1sbAwNDVmoCHJPdXp6end3VwTnBS9ut7uhoeHAgQOkA64BDvmpqamffvoJJl9jB1hslJMCcbBgPUl9EtcZGRnXr19fWlq6ffs2AM1zFPdllyUQ0WfPno2IiICaYWFhZ8+ezc/P5y/yYOaBMj09vb29jbv4xNe7u7u9vb3wjhBhRhJimZmZmZmZpBvOYtiwpaWlpqam+fl5iGgNFREczqSQYYMnjUChbRhGfHx8Q0PDzs4OcDR2HpbJVSU2mqZ54sSJ6upquOUgG8bGxhYXF0OYh6A1XddHR0enp6fx/k9xPTk5Kec8ChY+EpTIyMiqqiq4Fsc2EG7CZkxNTf3www/z8/MkPDFYgiUjl6OsiVMkNTX1u+++W1tbu3nzJgDNA58XHI/Wx9Gopqbmq6++gith4uCioqKcnBwchbwXoJHXr1/jnX+MjT6fDwedHXZ+vz87Ozs1NVWw9LczA57zY47GEcFTGBdJdpJVOFdCMQxj//799fX1fr8fRzSuZoc42W8YRmVlZXV1NcynEIwkw8PDS0pKCAVh9aTD1tfX4RoNyh9RvLCw8OrVK5gygVODpFV0dPSpU6fCwsKUSvAwh0tQuCsrgiOIG6k0npOMxQpcsFy/fn1ra+vHH39cW1vjkyg56fP9lmUBR58/fz4iIoJnnlSpsLCwoKAA5rNxbeHX4XBMTEzMzMx8Qh8qDQ0Nra2tWWhEEsHhANsFBQXJycm4b6wowdE0zZ6enq6uLkx5WC0SCBx9maQEawyZaZpxcXGXL1/2+/337t3b3NzEJzl28pXBaBjG8ePHz5w5I5+OKtNO0zSY6CLHTOIwWdPlck1MTMgLwz8CORAIWGhaHs5ZDGtOTg7cIyauVv7d3Nzs7Ozc2trC78hgmKQlxHM4Pw4cOBATE3PixAl52kOKZVkul2t2dvbOnTtra2t2Ly7i8MT75VFd10+ePFlbW0uSW6Awwr7Jzs52u91ra2syaLiBuq4PDw+fPHkyPDz8D6w3NzeHhoZwtpIch8hKTEzMyMggZghVlkGZnp6enJyUYwBpQiILNzdNMxAIHD58+NChQ6mpqXFxcTAfV7DAhDIxMXHv3r319XUyn4IkPs88uQERXV1dzd1PmstWkZGRRUVFHR0dRB/CqBsbG+Pj4+Xl5X9gvbOz8+HDB37jnBBcbGxsXFwcCXnif7lnbGzswYMHcAmupDy8gX0A522HDh06c+aMTFIRnAeysmVZo6OjTU1N8nmC0vE86OR+qHzy5Mnq6uonT54UFBQcPHiQJzSX4HQ6U1NTdV0nd0iwC4UQ29vbCwsLcCNPh9uASlbCxO9wOI4dO6a8ACPawPbU1NTKygpBVmkq7kXTtKSkpCtXrshHPMQrhH+npqbu3LmzuroKgyGnV+UYiEsgEACOfvHixatXr7q6unw+n3Ig5WNJTk5OUlIS2Y8raJqm63pfXx+cjTjhmZMIDi6eRy6XC+5+CBaMHNCdnZ3h4WEehqQL7BvQuKampqqqCp5r8LzBfZmmOTY21tzcDPfZSYXQ0S03gKOrq6tfvHgBz0bg1ltRURHXUzCHeTyemJiYmZkZEssimMdWV1f9fr8QQtfY7XmNjf6WZRUXF8fGxnLLlecGExMTk5OT3HJMeVg4KAqMGRUVRdAhBQ5NTExgoLEasibWiuwBsqqoqPjyyy8BaKiwtbUlL55FcDJx5+m6fuLECXzdQOrIPYCwPjs7OzMzQ4Ri0GE7MjKSvztOBlIou7u7HR0dxE5hky5Q/H7/sWPHzp07J8/cibr4r2mao6OjjY2NS0tLnDo46MQQqVJFRcWZM2devXrV1tYmH4zouv7+/XuYyEACSLCiaZqcO8ktxVq9efPG5/Ppm5ub8toGkyPGxe12p6SkyJ3Yz7Ka3B4ZGZEXL3ZaEuWioqJKSkrII1HuEiiTk5MQ0fKZL2F8EcxLcr/MJ4jo2trajo6O33//XbBgHBsbI2MjpyPYiIyMhKtoAjTRZ35+3jAMHSNoRxFutzszM1MaoAwW2dzv9xuGQfTjcSc71XX9woULWVlZWBSGW/Zimubk5GRTUxO+Ncy5UrB0JiRWVlZWU1Pz5s2bp0+fQkTjHDUMY2BgAKNBkMFuiIqKwpqLYGfLnZB/zg8fPqSkpFg2w7T28VE3UZ2zElTY29uD+7Y4KCw2EmLv5ufn5+XlyTufnNOlqKmpqcbGxsXFRTLdAENpqUYz2Z281/Hs2bPnz58rc86yrLm5uenpabiXadkP0VDgSQ3OG8Euuefn52dnZ53Ly8vAD0rs4G9qaiq+EYNxJFoGAgE8LvNqBOiwsLCGhgblU2csxDTN2dnZ5ubmxcVF4jw7uEnXUKG0tPT8+fPr6+vb29tlZWV2NCWCI53AgtXTNC0xMTEiIkIOpyI4nuB3dXV1fHz807wnPnZZH5+QlpaWynk2vGCeWl9fl29FhMBOlpiYGDlVSikWioxozi1a8NkF0Uf+mqZ5/PhxuE0aGRl5/fr1EFqFVobsLygoePbsmZxzgusTl+v8ACduSWpyD8l32by3txeulZXKSctlk+PHj8vXj7FkuWGa5szMTHNzs9fr1T4WgcJKsOEU6yO7O3LkyPnz591ut5KF5bYVXIi9uLKUz5/2EmRksV3vidTG/ud5IM0zDEM5sQS2CSJutxvWRiECccDCYOj1euE0Vpl8SuUxUx07dkxOgSPkQDC1E0uImKDEO1UqqcD6TzOaG8YrkCGCqAglKSlJPkuz2PBiWdb8/Pzdu3cBaCkkxGDAFbMsq7CwsLa2Vr6lQXoRDHQcGbgmjgO73jncuJqCr0MXEs44qZVKKONO1rGbiCOEgIiGJQVI7yHyAEuDacqSOuzSiytMSOkzg484iSOm4OsQhZsnQqKJlVASpdxPYm1xcREiWjqD/BJyUwJ98ODB8+fPw6ROJWNwViVCOI8TNP+UwXBlNV+T2gRcoiuJF1KUWc8pEu+cmpqCiCZJQ0iT+FsZ0QA0zwO7nSQdSS/EcOV+JW1+imviNA40MY/AxBFUejt03kjllpeX7969ix+6c7NBW7lB5BiGUVBQIIEWLHH5TuIqaS9RG8cyN4cctVCBCkELL/I4tcsv7AyS/naV+X5im/h4904+0ZeFgyXh5gqUl5dfvHjR7Xbb2aXEiyvGCxcVgj+5NB0fwGHPBdnli13KkMpYS5IQIGFxcfHevXsYaB6/JFKIkoZh5OXlQUQLBB9OSiVYxHCieQgQiCFcMi5Ba3zyMOE6YdEhFOVUGMIAy7LgVaq5ubkQEU0ImvRlWVZJScmlS5fwCgh/qhKRhkPHjqmVycTrkO4EmRPMeyU2K5FSFoKvcjyQZWVl5e7duwA0rhkiRohwwzDy8/MvXrwIS+NwHuetBMoSmaCyGqZdXFkLHiSU2cAjTJPn1/hYCM5SqkJU5/3xv4RtZ2Zm7ty5Mzs7K184k9JCxybut7i4+NKlSzExMaSCcpsHtbIaqUPMV/IkDw4MlGLRBMxrBEeea0SinMCJ6QVrKVV3uVyVlZVbW1vNzc3ywRDRm3fKtYKIvnTpUmxsrNI3gvmYwIE1JEATOXZ/+U4pEwtXLxxKiAa3JAoRD+fk5HR3d8v3X5T+h7lqkO+3b9+enZ3FnuOEGMJOy7IOHz5cV1cHz0LtuFXTtJ2dHXjD7HOKpmkRERHypVjsY42RfggyICopxkZsDwhaXFz0+/14eTGlLPFxNtDq6irWDKtomqbL5aqrq0tKSrp58+bMzIy88U8ymjQU7BTTNM2CgoL6+noJNKZBotvLly97e3s/88MFmqadPXu2sLBQmklswaCtrKyAF/lRLXiYdXIESQcOh6Ozs7O0tBTf0SdAYN/AfCrBoh6A9ng8tbW1+/bta2xsnJmZsVtPjEQTySTYX1hYWF9fj7Uidsq2Y2Nj3d3dcFf2c7B2uVxy5QWOHf4LD8xgtiZRFTdxuVwRERF6bm5uiCE7BFcSVoGjEREReMoONtg0zfDw8MuXL2dkZDQ3N4+PjytfFuEDLGEYIYRpmnl5eQ0NDfKWrJ0EIPTHjx/DpGRYzlLTNP1j0VCBPZZlZWRk8Hc1ZMIR3lASIG5iWVZmZuaZM2d0sso6/pUSA4HA5uYmrmYXILqux8XFwdwwYnZUVFRDQ8O+fftgMJT3o5XOw5Zwm/Pz84E6cEPC72BkIBDo6Oggp+2Ef0nGaJqGZxDKTgkvgwSJDE8sLNzpdEZEROgOh0M5xV36RAixtrbW19eHn/CS2MHd5ObmpqSk4MoyotPT05ubm0dHR/kLnUSg7JpEClwZXrlyBWYWEqC5qLm5udbWVh5upDJ2kq7rVVVV8qUerCePjNXVVVgxSJkE8i88rdXT09MzMjK4qSR/Obhcbyi6rsPDYglWZGTkhQsXEhIS7t69K1cj4dZigTjcBMq2vLy8+vp6+UY/lsATbmNj47fffpOvkBIsyLbsKCEhQQ45wiYaMJrKRJf6w1GYFqy7XC45Fx1TB/HhwMAArNNONONpBZPk4ELZNE14Up6VldXY2Ajv45CksfsrgqMDzqO/+eYb/NkMDAFpuLq62tzcLOc68/rKhk6n8/jx47DEuBJB0qqzs1P5Thj5CzfC6CMPgrj8u7S0JF8RI/wogplHCOF2u0tLS4E6vvrqq6SkpPv3709OTvL6xCTibOz17Ozsurq6/fv3Y2KVlTEopmn29fXduXNncHAQT1yXrXgTaVFcXBzMCRaskPizLMs0zbm5OWXAEXPgr+5yuaqqqkg68OwwTfP58+f4mTGuhgNTCKHr+v79+6OjoxsaGnJychobGwcHB/GoQMKW8AZxvGmaubm5165dS0hIINAQ8zRN83q9ra2tt27dGhgY4JCRHCIlEAhUVVXBSSTHgSf00NAQzFsnFXA0wFMLkOkEXOTcOGwMjjvTNFdWVuQKuwRxPLbATniD2uPxPHz4cHJykiyGzHMTQ4xBtCwrIyOjrq4OPqTG08L6eBbo9/vhyRm8DsTPr3DycQ60LCs1NTU3N5fM2sWWkiDY2NiAaSE8AnDl2NhYmJfhFELExsZWVlY+f/5cZhxGEFrquj4zM/Pu3buysjKlXCxd07TIyMjY2Nhbt25NTEzg6QakIQEX6219vNdx+fLl6OhomMIshICwkDMjDMMYGxtbXFx88+bN9vY2rE7FHckjSaDIBbElJSXKGVg8FDRN29jYaG9vJ97CpAclISGhuLj4j8FACKHrenR0NLyLKuHgCJqmubGxYZomv1Th/lxfX3/w4MHExISyMmdqnrCmaaampl68eHFhYeH+/fsS2ZycnO3tbXkRaBgGrKZDJh3yQtgTK2CaZmxsbGFhIZlFRAzEmOzs7CjfJyfoezweuRrkH4lWUlLS09MDyx+QiJZ/Lct6/vx5UVFRQkKCcmCUaq2urt6+fXt8fJxPSVAKx9ktMc3Pz29oaJicnLx//z5ez2RkZISACBL4LGRMF5zicXexsbFXr16F9TnsXIVbBQKBp0+frq+vk29GEOv8fv+pU6fglEzIZ2BOpzMuLo57nrDwxsbG27dvsQGyD6n3xsbGw4cPx8bGuN68oTLBTdNMSUm5ePHi0tLSo0ePgBbI9bQWfJ3NUSa5zHvBA/KZM2fS09NDA411/vDhw+joKJ78LwdDzCQejwfO9oKwjoqKqqiokJxIdMIjbE9Pz4cPHwi+Utzy8vLNmzf7+vrwBQsJNGwz3zYMIzc39y9/+cvc3NzNmzfhSoRAg6FUEnGIv4SpAoFASUkJsAcxigzRUs7e3t7r1683NzcJE5LuAoFATk4Ovk78RKYxMTFxcXFymiQWJFGDldHev38Pd6ixdE3T1tfXHz16BJfg3GEkokkvck9ycnJdXd3q6ipENLaEGK+xoZXkJYlroWKSgoKC2tpamebEKOXO+fn54eFh62OxkxwWFkYmW3/iuKSkpMOHD2MDeOyA9J6enpWVFbJzeXn51q1bfX198E4j5haCKd5JNrKzs2/cuOH1em/evLm1tWU3UuFI53aK4EwSKDBJnZKSkm+//RaAJtiRIpv7fL63b9+urKxw7iLCk5KSiouLsdpB6+IUFxfL990EOyeV1ZaXl1taWra3t2UcbW5uPnr0aGRkxO4FSAIBkSk+LmbT0NCwsbFx7949vhQsyW4LDUekI+5aHqpwfXThwgUS0VwIzhXTNLu6urq6usjq9DhltY9nq0VFReRDREHQREdHy3MMThFY3MjIyPj4OOixsrLS2NjY399P1hLGrchOwieBQCArK+vatWvz8/M3b94EKuRUQPQhjEG6k3UIfJZlmaZZXFz8zTffREdHS3RIbGIhsvn6+npPT4+c1k6SAP+NiIhITk4mPg66H7Jv3z54swF3zF5I+voAAAvMSURBVINL0zS/39/d3e3z+TY2Nh49ejQ4OMijwI4usSghhGEYSUlJ9fX1m5ubsFACD0PCyFiaFVyEqsjogXthBQUF8lmwtCgEy8vu4L1N7FGS8VKftLQ0eV9FKhb03SQhRGlp6cuXL2EGAQkTEeztoaGhBw8ebG9vA9AEIM6eHEEAOisrq66ubmlp6f79+0AdJGZDRK4VfGLLe8eIGIbh8XiuXbsGS37KCpgwOfnAr2EYw8PDLS0tmCS5elDCw8Nramp48AUtYiE+3lTkD03INtR/9erVu3fvrOBRlEcKd4P18UL0wIEDV65c2d3dlYvZ2BmgLCESCPvMNE04lWxoaCgoKMDrfthBZgWfIKyvr8NSDiSZSBP4zc3NTUtLI0oK8r1dOFBQUFBQUDA4OMitwhJF8P0dQs1YV14HSDM9Pb2+vn53d7epqUkuOIZbKYc1JeKyR2K8ZVlOpzM9Pb24uLi0tBSv6COCGUD+5UJ8Pt/Lly9hKQdiEdHEsiyPx1NZWQnL6pBQCPpOE5TY2Ni6urrJyUm43ieylP7HISCCQwZXkE1M00xISPj2228PHDiwubl59OjR+fn50dHR3d1d3AVHnNARiT6plbxKyMrKKisrKywslOcbpIQeWjRN29vba21txasmk8DCilmWdfr06by8PE7igny/UTaOjY2tqKhobW3lZ7gcRKIcEYU3ZEanpqbW19fD/Yfo6Ojq6mq/37+wsNDe3j4/P7+2tgbfEFA6VYkIzjbQ3+PxVFRU5OfnezwevII2lqa0XSCPWpa1tLTU1dUFd9x49mDc4dbCwYMHhU2q0TWZpUmHDh0aHBz0er2kAaE53muIkRCAjo+Pv3r1amJi4iciczqdTmdWVlZaWpphGF1dXWtra93d3YFAwOfzyakaRE+yE1gYnizDKuPw+TylPiQClBFjWRbcEMeronG7ZFY5nc6ysjL4ZJFMZSyccojsOzU1tba29t///reUyOvw6MDOECzHTdNMTk6ur68nH52UEgD0EydOGIZx9OhRy7LevXs3NjaGZxysr687HA6y9EVUVNTx48cjIyPhdg/HURkKRE+is9frvXv37tTUFMknbJTcHwgESktLKyoq5Gq8ar7m4xhok5GRUVxc3NfXRwjRrj6HG+c4cPR3332XmJhI9OYSnE4nMAz+4AKUpaUll8slJ4cok1o5xnIWUrIBbC8vLzc2Nsr1qnB9wpZgaXJycllZGZ4CyHux/U6npmlut7umpgZ/x0v7WIRNNpEAx/sTExOvXLkC1KEcOmRNro/sUdO0+Ph4mMDHKRgrjxncLgWxztjlKysrd+7ckStz2DWR9U3TrKqqys7OJhGGmwhyjS71k7Li4uJqampgsX/SE9GAo4+lxcfH37hxIycnh7sB15c0h/0hUAQQr3PLsTIkipV4kQp7e3vj4+M///zz0NCQCM5LgdyJ9TdNs7S01G7VZGxv0DdPuGYul6u0tBQ+rQt3t5Upj3eSDBJCwFqF8ku1XAm+M0QFQqxYB86/3DTCbxgUy7La29vb2tp2d3flCmzYIs7pQojDhw/X1tbClBKOA64Z9B4YF6RpmtPprKys3NnZgZXYSX2iN/Y5JBdENKxWyd2g5GuiDEGc1CF0QUxVOkkZ7HNzc729vW1tbQIlDfEfaS4X2o6MjCRewTrLhkEPXkkyyp26rh85ciQxMVEyCZZIpGPDYH11AJprTHLcLq6VuuFW0irMKiTklfwm9Zyfn//pp5/a2tq04Ne2lfpIWF0u14kTJ/BqH7wXrEnQeYhgSSf7SExM/Otf/3rr1i1Y01lJdtwSp9PZ3d3tdDrhWwl8fVASDrx3JUacOpSacLEEFMMwYCHSrq4uuP2vNIf3CFO66uvrS0pKcIUQ3CX4O9IEBewDWMb75s2bCwsLfCaJ0jxo+/Lly6GhocOHD585cwZWZlE2FMFRo0SH/A3NNoQ9uZz+/v7nz5/Pzs7aeUtZINHPnj1bXFysfEOQ9wUbjhs3bhw+fDiEPThDPR5PVlbW7OwsuScn7ST+lxt7e3vT09OQE263W07QDt2vMiq14MEqhG+UZy9CCJ/PNzEx0dbW9ttvv8EdpRDSeMCGhYXV1dVVVFSQ5+hK3aSQ/v5+xb0nEUyOOEKFEPCk6vbt23j9FIK4YDEFv6Ojo7OzsxkZGZWVlXl5efJJEpFAelQSDidQUtNu1J2bm+vr63vz5g08zyRv69hFt+xR1/UzZ86UlZXJqUukAnEbFqK4p8p9go3UNC09Pf3atWuNjY0fPnzAscwVJQnudDr9fv/IyMjY2FhycvK5c+c8Hk9SUpIkKx6/8m9oiPl5EcAtt9fW1tbW1np6et6/fw9X+XJ2MjZBOQ7JCAgPD6+trS0vL4e566Tf0EIEv/dE/iqJTNO0lJSUy5cv//LLL/D6OO+Vn0jIQ3B0enr6xx9/dLlcx44di46OPnr0qFzh2w5uoifujsSXbAUz0IaHhycnJ+fm5mBdWpz7yh651w3DcDqdZ8+ePXbsGI5oZfragR50LRPCV6Toup6enn79+vVff/11YmKCT9fkcBBpDofD5/P5fL4nT544HI62trbk5OSjR4+CZKAXiD5OuyI466V8udrU/Pz8zs6O1+vt6Ojw+XzwICJEdtsVGdEZGRlHjx6FgCA22jEe9sEnrAk0PHmVeGmalpSUdOPGjY6OjpaWFrkMNAk0ohD/BTRXVlZWV1cHBgaEEPD1afg0E3nsb1mW2+02DIO/GBoIBHp6etbW1oQQ4+Pj6+vrQgi470zuvXHr7OIDxBYWFl6+fBleHOH+UOaZcrRQXDdyKVgt8heuKoUQv//+O56mxAcKu/GHs+379+/hEMzswZUNw8jIyNjd3ZXLfGJ99vb2yMrfeHkMbnxotoXJq0VFRadOnbID2g4rUix5jU76ECy0hYqP5HZYWBh8T6C9vX1gYADeViOIK3lQZoyyIyGE8q3m4eHhELbxBQQIFji0uZnyqN/vj42NvXDhwqFDh/CLAKQ574VAhHun30HANmPjBXMDJgqXy1VQUBAXF5ednd3R0UE+WEROHrB8pdI8o5WK2Q33IZrz0ObNgdaAnXNycsinBXgWEnyVZkKh35HmflMmmhKp+Pj46urq+Pj4zs5OmF3IiZtozGn085OdAIRVUoKIK9sdgmkUhw8f/p//+Z8Qy5piK0KEC+mI8rUyTIipSsSh6LpeVFSUnZ09PDwMl7+hPzlBOgphGD8JCVE/tCjBoIENp9N57ty5wsLCuLg4OLFT2oh1ECrEOWLQhMa1CJnIypGE7NR1PSoqCm42tbW1DQ4OwixLfmdHSaxY1z9NUk6dOH+V2clbmabpcDhyc3NLS0tLSkrs1mKwoyMsk4Qs6Vo9NpI9dl4lp1Ak3BITE+vr6+Gtp7GxMfxlUEIFdpz7OZEbgq9JLnIDDcPQdT07O7u8vLygoECuMceZKkQuklMGDpHco34u8zk+FDbew03Cw8PT09Nv3LgBX8YaHBycmpra29sLcalpF7Ok5p8mhF0uWpYFEHs8npMnT3o8nrKyMj4AEkyxSpxVSOTZBcqnqyCSYiEIkQi1Ox/AWmZlZWVmZh45cmRwcHBsbGxycnJ1dZV/uIsUTIVCRSa8X6WdctQFujh48GBCQkJJSUlKSgpONc45/ExBhKQ7YgtpQj+tIasq2V3JM8om3HJN0+BFyuPHj3/48GF9fR3ODuHtG/IWlxLN0DZzfeQe0zThPeLS0tIDBw6kpaXBPFXlOQ8uoY9yG3n444b0Gp3rSsyWsCqBCGE53khJSUlJSUlLS4N53Ovr62/evMHoSDlKQuDbuHd86QgP4fLy8nJycuLj491ut/ykaAj4lOQr9cHd8aiSwrkQGtd2vfJDPLk4k9oRPfzCs+ezZ89alnX69GkhBHzL0+/3BwKBsbEx+T0P5fimNCkpKWn//v2maRYWFmZnZ1uWFRUVJVcZV5pgF5LKnTzIBIszu4HH2d7eLv7PFMuy4Lbn7u4uvG32XzWHO03gwqGhIfjQ+/+R0t7e/r/EJS/D7Vqp8gAAAABJRU5ErkJggg=="
}
}
}
diff --git a/spec/models/admin_spec.rb b/spec/models/admin_spec.rb
index ccc4624d..745094ea 100644
--- a/spec/models/admin_spec.rb
+++ b/spec/models/admin_spec.rb
@@ -1,5 +1,6 @@
+# -*- encoding: utf-8 -*-
+#管çè
require 'spec_helper'
describe Admin do
- pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/models/artist_spec.rb b/spec/models/artist_spec.rb
index b1b088bc..f7797cf0 100644
--- a/spec/models/artist_spec.rb
+++ b/spec/models/artist_spec.rb
@@ -17,17 +17,17 @@ describe Artist do
end
it 'ãªã¼ã½ããã¯ã¹ãªãã¼ã¿ãªãéã' do
- @artist = FactoryGirl.build :artist, :author_id => @author.id, :default_license_id => @license.id
+ @artist = FactoryGirl.build :artist, :author_id => @author.id
@artist.should be_valid
end
context 'nameãæ¤è¨¼ããã¨ã' do
it 'nullãªã失æãã' do
- @artist = FactoryGirl.build :artist, :author_id => @author.id, :default_license_id => @license.id, :name => nil
+ @artist = FactoryGirl.build :artist, :author_id => @author.id, :name => nil
@artist.should_not be_valid
end
it '30æå以ä¸ãªã失æãã' do
- @artist = FactoryGirl.build :artist, :author_id => @author.id, :default_license_id => @license.id, :name => 'a'*31
+ @artist = FactoryGirl.build :artist, :author_id => @author.id, :name => 'a'*31
@artist.should_not be_valid
end
end
@@ -43,7 +43,7 @@ describe Artist do
describe 'åä½åå¾ã«æ¼ãã¦' do
before do
- @artist = FactoryGirl.create :artist, :author_id => @author.id, :default_license_id => @license.id
+ @artist = FactoryGirl.create :artist, :author_id => @author.id
end
it 'æå®ã®çµµå¸«ãè¿ã' do
a = Artist.show @artist.id
@@ -62,9 +62,34 @@ describe Artist do
end
end
end
+ describe 'ç·¨éåå¾ã«æ¼ãã¦' do
+ before do
+ @artist = FactoryGirl.create :artist, :author_id => @author.id
+ end
+ it 'æå®ã®çµµå¸«ãè¿ã' do
+ Artist.any_instance.stub(:own?).and_return(true)
+ r = Artist.edit @artist.id, @author.id
+ r.should eq @artist
+ end
+ context 'ä»äººã®çµµå¸«ãéããã¨ããã¨ã' do
+ it '403Forbiddenä¾å¤ãè¿ã' do
+ Artist.any_instance.stub(:own?).and_return(false)
+ lambda{
+ Artist.edit @artist.id, @author
+ }.should raise_error(ActiveRecord::Forbidden)
+ end
+ end
+ context 'åå¨ããªã絵師ãéããã¨ããã¨ã' do
+ it '404RecordNotFoundä¾å¤ãè¿ã' do
+ lambda{
+ Artist.edit 110, @author
+ }.should raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+ end
describe 'ä¸è¦§åå¾ã«æ¼ãã¦' do
before do
- @artist = FactoryGirl.create :artist, :author_id => @author.id, :default_license_id => @license.id
+ @artist = FactoryGirl.create :artist, :author_id => @author.id
end
context 'pageè£æ£ã«ã¤ãã¦' do
it 'æååããæ°å¤ã«å¤æããã' do
diff --git a/spec/models/color_spec.rb b/spec/models/color_spec.rb
new file mode 100644
index 00000000..bbb61261
--- /dev/null
+++ b/spec/models/color_spec.rb
@@ -0,0 +1,224 @@
+# -*- encoding: utf-8 -*-
+require 'spec_helper'
+#è²ãã¹ã¿ã¼
+
+describe Color do
+ before do
+ @f = Rails.root + 'spec/json/color.json'
+ @fs = Rails.root + 'spec/json/colors.json'
+ FactoryGirl.create :admin
+ @user = FactoryGirl.create( :user_yas)
+ @author = @user.author
+ @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
+ @other_user = FactoryGirl.create( :user_yas)
+ @other_author = @other_user.author
+ @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id
+ @sp = FactoryGirl.create :system_picture
+ @lg = FactoryGirl.create :license_group
+ @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
+ end
+
+ describe 'æ¤è¨¼ã«æ¼ãã¦' do
+ before do
+ end
+
+ it 'ãªã¼ã½ããã¯ã¹ãªãã¼ã¿ãªãéã' do
+ @c = FactoryGirl.build :color
+ @c.should be_valid
+ end
+
+ context 'nameãæ¤è¨¼ããã¨ã' do
+ before do
+ @c = FactoryGirl.build :color
+ end
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @c.name = 'a'*50
+ @c.should be_valid
+ end
+ it 'nullãªã失æãã' do
+ @c.name = ''
+ @c.should_not be_valid
+ end
+ it '51æå以ä¸ãªã失æãã' do
+ @c.name = 'a'*51
+ @c.should_not be_valid
+ end
+ it 'éè¤ãã¦ããã失æãã' do
+ l = FactoryGirl.create :color
+ @c.should_not be_valid
+ end
+ end
+ context 'codeãæ¤è¨¼ããã¨ã' do
+ before do
+ @c = FactoryGirl.build :color
+ end
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @c.code = 0xffffff
+ @c.should be_valid
+ end
+ it 'nullãªã失æãã' do
+ @c.code = nil
+ @c.should_not be_valid
+ end
+ it 'æ°å¤ã§ãªããã°å¤±æãã' do
+ @c.code = 'a'
+ @c.should_not be_valid
+ end
+ it 'è² ãªã失æãã' do
+ @c.code = -1
+ @c.should_not be_valid
+ end
+ it '24bit colorã§ãªããã°å¤±æãã' do
+ @c.code = 0x1000000
+ @c.should_not be_valid
+ end
+ end
+ context 'tãæ¤è¨¼ããã¨ã' do
+ before do
+ @c = FactoryGirl.build :color
+ end
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @c.t = '1'
+ @c.should be_valid
+ end
+ it 'æ°å¤ã§ãªããã°å¤±æãã' do
+ @c.t = 'a'
+ @c.should_not be_valid
+ end
+ it '0ãªãéã' do
+ @c.t = '0'
+ @c.should be_valid
+ end
+ it 'è² ãªã失æãã' do
+ @c.t = -1
+ @c.should_not be_valid
+ end
+ end
+ end
+
+ describe 'ã¤ã³ãã¼ãã«æ¼ãã¦' do
+ before do
+ end
+ context 'ã¤ã¤ããªãçµããã¨ã' do
+ it 'ãã¡ã¤ã«ã¤ã³ãã¼ããä¾é ¼ãã' do
+ Color.should_receive(:import_file).with(any_args).exactly(1)
+ Color.stub(:import_file).with(any_args).and_return([])
+ Color.import(@f)
+ end
+ it 'è²æ´æ°ãä¸åä¾é ¼ãã' do
+ Color.stub(:store).with(any_args).and_return(Color.new)
+ Color.should_receive(:store).with(any_args).exactly(1)
+ Color.import(@f)
+ end
+ it 'è²ã追å ããã' do
+ lambda {
+ Color.import(@f)
+ }.should change Color, :count
+ end
+ it '[]ãè¿ã' do
+ r = Color.import(@f)
+ r.should eq []
+ end
+ end
+ context 'è¤æ°ãã¼ã¿ãã¤ã¤ããªãçµããã¨ã' do
+ it 'è²æ´æ°ãäºåä¾é ¼ãã' do
+ Color.stub(:store).with(any_args).and_return(Color.new)
+ Color.should_receive(:store).with(any_args).exactly(2)
+ Color.import(@fs)
+ end
+ it 'è²ãäºå追å ããã' do
+ lambda {
+ r = Color.import(@fs)
+ }.should change(Color, :count).by 2
+ end
+ it '[]ãè¿ã' do
+ r = Color.import(@fs)
+ r.should eq []
+ end
+ end
+ end
+
+ describe 'åä½åå¾ã«æ¼ãã¦' do
+ before do
+ @c = FactoryGirl.create :color
+ end
+ it 'æå®ã®è²ãè¿ã' do
+ c = Color.show @c.id
+ c.should eq @c
+ end
+ context 'åå¨ããªãè²ãéããã¨ããã¨ã' do
+ it '404RecordNotFoundä¾å¤ãè¿ã' do
+ lambda{
+ Color.show 110
+ }.should raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+ end
+
+ describe 'ä¸è¦§åå¾ã«æ¼ãã¦' do
+ before do
+ @color = FactoryGirl.create :color
+ end
+ context 'pageè£æ£ã«ã¤ãã¦' do
+ it 'æååããæ°å¤ã«å¤æããã' do
+ Color.page('8').should eq 8
+ end
+ it 'nilã®å ´åã¯1ã«ãªã' do
+ Color.page().should eq 1
+ end
+ it '0以ä¸ã®å ´åã¯1ã«ãªã' do
+ Color.page('0').should eq 1
+ end
+ end
+ context 'page_sizeè£æ£ã«ã¤ãã¦' do
+ it 'æååããæ°å¤ã«å¤æããã' do
+ Color.page_size('7').should eq 7
+ end
+ it 'nilã®å ´åã¯Color.default_page_sizeã«ãªã' do
+ Color.page_size().should eq Color.default_page_size
+ end
+ it '0以ä¸ã®å ´åã¯Color.default_page_sizeã«ãªã' do
+ Color.page_size('0').should eq Color.default_page_size
+ end
+ it 'Color.max_page_sizeãè¶
ããå ´åã¯Color.max_page_sizeã«ãªã' do
+ Color.page_size('1000').should eq Color.max_page_size
+ end
+ end
+ it 'ãªã¹ããè¿ã' do
+ cl = Color.list
+ cl.should eq [@color]
+ end
+ it 'tã§ä¸¦ãã§ãã' do
+ ncl = FactoryGirl.create :color, :t => 1, :name => 'name a'
+ cl = Color.list
+ cl.should eq [@color, ncl]
+ end
+ context 'DBã«5件ãã£ã¦1ãã¼ã¸ã®ä»¶æ°ã2件ã«å¤ããã¨ãã¦' do
+ before do
+ @nc2 = FactoryGirl.create :color, :t => 1, :name => 'name a'
+ @nc3 = FactoryGirl.create :color, :t => 3, :name => 'name b'
+ @nc4 = FactoryGirl.create :color, :t => 2, :name => 'name c'
+ @nc5 = FactoryGirl.create :color, :t => 4, :name => 'name d'
+ Color.stub(:default_page_size).and_return(2)
+ end
+ it 'é常ã¯2件ãè¿ã' do
+ cl = Color.list
+ cl.should have(2).items
+ end
+ it 'page=1ãªãæ«å°¾2件ãè¿ã' do
+ #æç³»åã§ä¸¦ãã§ãã
+ cl = Color.list( {}, 1)
+ cl.should eq [@color, @nc2]
+ end
+ it 'page=2ãªãä¸é2件ãè¿ã' do
+ cl = Color.list({}, 2)
+ cl.should eq [@nc4, @nc3]
+ end
+ it 'page=3ãªãå
é 1件ãè¿ã' do
+ cl = Color.list({}, 3)
+ cl.should eq [@nc5]
+ end
+ end
+ end
+
+end
diff --git a/spec/models/comic_spec.rb b/spec/models/comic_spec.rb
index b4d9f423..c73ec3b0 100644
--- a/spec/models/comic_spec.rb
+++ b/spec/models/comic_spec.rb
@@ -35,42 +35,6 @@ describe Comic do
@comic.should_not be_valid
end
end
- context 'widthãæ¤è¨¼ããã¨ã' do
- it 'nullãªã失æãã' do
- @comic = FactoryGirl.build :comic, :author_id => @author.id, :width => nil
- @comic.should_not be_valid
- end
- it '0ãªã失æãã' do
- @comic = FactoryGirl.build :comic, :author_id => @author.id, :width => 0
- @comic.should_not be_valid
- end
- it 'è² ã§ã失æãã' do
- @comic = FactoryGirl.build :comic, :author_id => @author.id, :width => -1
- @comic.should_not be_valid
- end
- it 'æ£ãªãéã' do
- @comic = FactoryGirl.build :comic, :author_id => @author.id, :width => 1
- @comic.should be_valid
- end
- end
- context 'heightãæ¤è¨¼ããã¨ã' do
- it 'nullãªã失æãã' do
- @comic = FactoryGirl.build :comic, :author_id => @author.id, :height => nil
- @comic.should_not be_valid
- end
- it '0ãªã失æãã' do
- @comic = FactoryGirl.build :comic, :author_id => @author.id, :height => 0
- @comic.should_not be_valid
- end
- it 'è² ã§ã失æãã' do
- @comic = FactoryGirl.build :comic, :author_id => @author.id, :height => -1
- @comic.should_not be_valid
- end
- it 'æ£ãªãéã' do
- @comic = FactoryGirl.build :comic, :author_id => @author.id, :height => 1
- @comic.should be_valid
- end
- end
context 'visibleãæ¤è¨¼ããã¨ã' do
it 'nullãªã失æãã' do
@comic = FactoryGirl.build :comic, :author_id => @author.id, :visible => nil
@@ -153,6 +117,31 @@ describe Comic do
c.should eq @comic
end
end
+ describe 'ç·¨éåå¾ã«æ¼ãã¦' do
+ before do
+ @comic = FactoryGirl.create :comic, :author_id => @author.id
+ end
+ it 'æå®ã®ã³ããã¯ãè¿ã' do
+ Comic.any_instance.stub(:own?).and_return(true)
+ c = Comic.edit @comic.id, @author.id
+ c.should eq @comic
+ end
+ context 'ä»äººã®ã³ããã¯ãéããã¨ããã¨ã' do
+ it '403Forbiddenä¾å¤ãè¿ã' do
+ Comic.any_instance.stub(:own?).and_return(false)
+ lambda{
+ Comic.edit @comic.id, @author
+ }.should raise_error(ActiveRecord::Forbidden)
+ end
+ end
+ context 'åå¨ããªãã³ããã¯ãéããã¨ããã¨ã' do
+ it '404RecordNotFoundä¾å¤ãè¿ã' do
+ lambda{
+ Comic.edit 110, @author
+ }.should raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+ end
describe 'é¢é£ãã¼ãã«ãã·ã§ã³ã«æ¼ãã¦' do
context 'ãªãã·ã§ã³ããªãã¨ã' do
it '2ã¤ã®é
ç®ãå«ãã§ãã' do
diff --git a/spec/models/ground_color_spec.rb b/spec/models/ground_color_spec.rb
new file mode 100644
index 00000000..556956e9
--- /dev/null
+++ b/spec/models/ground_color_spec.rb
@@ -0,0 +1,222 @@
+# -*- encoding: utf-8 -*-
+require 'spec_helper'
+#ã³ãã®èæ¯éæ¥
+
+describe GroundColor do
+ before do
+ FactoryGirl.create :admin
+ @user = FactoryGirl.create( :user_yas)
+ @author = @user.author
+ @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
+ @other_user = FactoryGirl.create( :user_yas)
+ @other_author = @other_user.author
+ @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id
+ @sp = FactoryGirl.create :system_picture
+ @lg = FactoryGirl.create :license_group
+ @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
+ @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
+ @panel = FactoryGirl.create :panel, :author_id => @author.id
+ @color = FactoryGirl.create :color
+ end
+
+ describe 'æ¤è¨¼ã«æ¼ãã¦' do
+ before do
+ @gc = FactoryGirl.build :ground_color, :panel_id => @panel.id, :color_id => @color.id
+ end
+ it 'ãªã¼ã½ããã¯ã¹ãªãã¼ã¿ãªãéã' do
+ @gc.save
+ @gc.should be_valid
+ end
+
+ context 'panel_idãæ¤è¨¼ããã¨ã' do
+ #ãã¹ãã®ä¿åã¯nilã許å¯ããªããã°ãªããªãã®ã§æ°å¤ãã§ãã¯ã ã
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @gc.panel_id = @panel.id
+ @gc.should be_valid
+ end
+ it 'æ°å¤ã§ãªããã°å¤±æãã' do
+ @gc.panel_id = 'a'
+ @gc.should_not be_valid
+ end
+ end
+ context 'color_idãæ¤è¨¼ããã¨ã' do
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @gc.color_id = @color.id
+ @gc.should be_valid
+ end
+ it 'nullãªã失æãã' do
+ @gc.color_id = nil
+ @gc.should_not be_valid
+ end
+ it 'æ°å¤ã§ãªããã°å¤±æãã' do
+ @gc.color_id = 'a'
+ @gc.should_not be_valid
+ end
+ it 'åå¨ããå®ç´ æã§ãªããã°å¤±æãã' do
+ @gc.color_id = 0
+ @gc.should_not be_valid
+ end
+ end
+ context 'zãæ¤è¨¼ããã¨ã' do
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @gc.z = 1
+ @gc.should be_valid
+ end
+ it 'nullãªã失æãã' do
+ @gc.z = nil
+ @gc.should_not be_valid
+ end
+ it 'æ°å¤ã§ãªããã°å¤±æãã' do
+ @gc.z = 'a'
+ @gc.should_not be_valid
+ end
+ it 'è² ãªã失æãã' do
+ @gc.z = -1
+ @gc.should_not be_valid
+ end
+ it 'è² ãªã失æãã' do
+ @gc.z = 0
+ @gc.should_not be_valid
+ end
+ end
+ end
+ describe 'ä¸è¦§åå¾ã«æ¼ãã¦' do
+ before do
+ @gc = FactoryGirl.create :ground_color, :panel_id => @panel.id, :color_id => @color.id
+ end
+ context 'pageè£æ£ã«ã¤ãã¦' do
+ it 'æååããæ°å¤ã«å¤æããã' do
+ GroundColor.page('8').should eq 8
+ end
+ it 'nilã®å ´åã¯1ã«ãªã' do
+ GroundColor.page().should eq 1
+ end
+ it '0以ä¸ã®å ´åã¯1ã«ãªã' do
+ GroundColor.page('0').should eq 1
+ end
+ end
+ context 'page_sizeè£æ£ã«ã¤ãã¦' do
+ it 'æååããæ°å¤ã«å¤æããã' do
+ GroundColor.page_size('7').should eq 7
+ end
+ it 'nilã®å ´åã¯GroundColor.default_page_sizeã«ãªã' do
+ GroundColor.page_size().should eq GroundColor.default_page_size
+ end
+ it '0以ä¸ã®å ´åã¯GroundColor.default_page_sizeã«ãªã' do
+ GroundColor.page_size('0').should eq GroundColor.default_page_size
+ end
+ it 'GroundColor.max_page_sizeãè¶
ããå ´åã¯GroundColor.max_page_sizeã«ãªã' do
+ GroundColor.page_size('1000').should eq GroundColor.max_page_size
+ end
+ end
+ it 'ãªã¹ããè¿ã' do
+ pl = GroundColor.list
+ pl.should eq [@gc]
+ end
+ it 'æç³»åã§ä¸¦ãã§ãã' do
+ npl = FactoryGirl.create :ground_color, :panel_id => @panel.id, :color_id => @color.id, :z => 2, :updated_at => Time.now + 100
+ pl = GroundColor.list
+ pl.should eq [npl, @gc]
+ end
+ it 'éå
¬éã®ã³ãã®æ¯è²ã¯å«ã¾ãªã' do
+ hpl = FactoryGirl.create :panel, :author_id => @author.id, :publish => 0
+ npl = FactoryGirl.create :ground_color, :panel_id => hpl.id, :color_id => @color.id, :updated_at => Time.now + 100
+ pl = GroundColor.list
+ pl.should eq [@gc]
+ end
+ context 'DBã«5件ãã£ã¦1ãã¼ã¸ã®ä»¶æ°ã2件ã«å¤ããã¨ãã¦' do
+ before do
+ @npl2 = FactoryGirl.create :ground_color, :panel_id => @panel.id, :z => 1, :color_id => @color.id, :updated_at => Time.now + 100
+ @npl3 = FactoryGirl.create :ground_color, :panel_id => @panel.id, :z => 2, :color_id => @color.id, :updated_at => Time.now + 200
+ @npl4 = FactoryGirl.create :ground_color, :panel_id => @panel.id, :z => 3, :color_id => @color.id, :updated_at => Time.now + 300
+ @npl5 = FactoryGirl.create :ground_color, :panel_id => @panel.id, :z => 4, :color_id => @color.id, :updated_at => Time.now + 400
+ GroundColor.stub(:default_page_size).and_return(2)
+ end
+ it 'é常ã¯2件ãè¿ã' do
+ pl = GroundColor.list
+ pl.should have(2).items
+ end
+ it 'page=1ãªãæ«å°¾2件ãè¿ã' do
+ #æç³»åã§ä¸¦ãã§ãã
+ pl = GroundColor.list( {}, 1)
+ pl.should eq [@npl5, @npl4]
+ end
+ it 'page=2ãªãä¸é2件ãè¿ã' do
+ pl = GroundColor.list({}, 2)
+ pl.should eq [@npl3, @npl2]
+ end
+ it 'page=3ãªãå
é 1件ãè¿ã' do
+ pl = GroundColor.list({}, 3)
+ pl.should eq [@gc]
+ end
+ end
+ end
+ describe 'listé¢é£ãã¼ãã«ãã·ã§ã³ã«æ¼ãã¦' do
+ it 'includeãã¼ãå«ãã§ãã' do
+ r = GroundColor.list_opt
+ r.has_key?(:include).should be_true
+ end
+ it '2ã¤ã®é
ç®ãå«ãã§ãã' do
+ r = GroundColor.list_opt[:include]
+ r.should have(2).items
+ end
+ it 'ã³ããå«ãã§ãã' do
+ r = GroundColor.list_opt[:include]
+ r.has_key?(:panel).should be_true
+ end
+ it 'ã³ãã¯ä½å®¶ãå«ãã§ãã' do
+ r = GroundColor.list_opt[:include]
+ r[:panel].has_key?(:author).should be_true
+ end
+ it 'è²ãå«ãã§ãã' do
+ r = GroundColor.list_opt[:include]
+ r.has_key?(:color).should be_true
+ end
+ end
+ describe 'jsonä¸è¦§åºåãªãã·ã§ã³ã«æ¼ãã¦' do
+ it 'includeãã¼ãå«ãã§ãã' do
+ r = GroundColor.list_json_opt
+ r.has_key?(:include).should be_true
+ end
+ it '2ã¤ã®é
ç®ãå«ãã§ãã' do
+ r = GroundColor.list_json_opt[:include]
+ r.should have(2).items
+ end
+ it 'ã³ããå«ãã§ãã' do
+ r = GroundColor.list_json_opt[:include]
+ r.has_key?(:panel).should be_true
+ end
+ it 'ã³ãã¯ä½å®¶ãå«ãã§ãã' do
+ r = GroundColor.list_json_opt[:include]
+ r[:panel].has_key?(:author).should be_true
+ end
+ it 'è²ãå«ãã§ãã' do
+ r = GroundColor.list_json_opt[:include]
+ r.has_key?(:color).should be_true
+ end
+ end
+
+ describe 'èªåã®ã³ãã§ä½¿ã£ãè²ä¸è¦§åå¾ã«æ¼ãã¦' do
+ before do
+ @gc = FactoryGirl.create :ground_color, :panel_id => @panel.id, :color_id => @color.id
+ end
+ it 'ãªã¹ããè¿ã' do
+ pl = GroundColor.mylist @author
+ pl.should eq [@gc]
+ end
+ it 'æç³»åã§ä¸¦ãã§ãã' do
+ npl = FactoryGirl.create :ground_color, :panel_id => @panel.id, :color_id => @color.id, :z => 2, :updated_at => Time.now + 100
+ pl = GroundColor.mylist @author
+ pl.should eq [npl, @gc]
+ end
+ it 'ä»äººã®ã³ãã®æ¯è²ã¯å
¬éã§ãå«ã¾ãªã' do
+ hpl = FactoryGirl.create :panel, :author_id => @other_author.id, :publish => 1
+ npl = FactoryGirl.create :ground_color, :panel_id => hpl.id, :color_id => @color.id
+ pl = GroundColor.mylist @author
+ pl.should eq [@gc]
+ end
+ end
+
+end
diff --git a/spec/models/ground_picture_spec.rb b/spec/models/ground_picture_spec.rb
new file mode 100644
index 00000000..9a45e754
--- /dev/null
+++ b/spec/models/ground_picture_spec.rb
@@ -0,0 +1,237 @@
+# -*- encoding: utf-8 -*-
+require 'spec_helper'
+#ã³ãã®ç»åèæ¯
+
+describe GroundPicture do
+ before do
+ FactoryGirl.create :admin
+ @user = FactoryGirl.create( :user_yas)
+ @author = @user.author
+ @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
+ @other_user = FactoryGirl.create( :user_yas)
+ @other_author = @other_user.author
+ @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id
+ @sp = FactoryGirl.create :system_picture
+ @lg = FactoryGirl.create :license_group
+ @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
+ @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
+ @panel = FactoryGirl.create :panel, :author_id => @author.id
+ end
+
+ describe 'æ¤è¨¼ã«æ¼ãã¦' do
+ before do
+ @gp = FactoryGirl.build :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
+ end
+ it 'ãªã¼ã½ããã¯ã¹ãªãã¼ã¿ãªãéã' do
+ @gp.save
+ @gp.should be_valid
+ end
+
+ context 'panel_idãæ¤è¨¼ããã¨ã' do
+ #ãã¹ãã®ä¿åã¯nilã許å¯ããªããã°ãªããªãã®ã§æ°å¤ãã§ãã¯ã ã
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @gp.panel_id = @panel.id
+ @gp.should be_valid
+ end
+ it 'æ°å¤ã§ãªããã°å¤±æãã' do
+ @gp.panel_id = 'a'
+ @gp.should_not be_valid
+ end
+ end
+ context 'picture_idãæ¤è¨¼ããã¨ã' do
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @gp.picture_id = @panel.id
+ @gp.should be_valid
+ end
+ it 'nullãªã失æãã' do
+ @gp.picture_id = nil
+ @gp.should_not be_valid
+ end
+ it 'æ°å¤ã§ãªããã°å¤±æãã' do
+ @gp.picture_id = 'a'
+ @gp.should_not be_valid
+ end
+ it 'åå¨ããå®ç´ æã§ãªããã°å¤±æãã' do
+ @gp.picture_id = 0
+ @gp.should_not be_valid
+ end
+ end
+ context 'zãæ¤è¨¼ããã¨ã' do
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @gp.z = 1
+ @gp.should be_valid
+ end
+ it 'nullãªã失æãã' do
+ @gp.z = nil
+ @gp.should_not be_valid
+ end
+ it 'æ°å¤ã§ãªããã°å¤±æãã' do
+ @gp.z = 'a'
+ @gp.should_not be_valid
+ end
+ it 'è² ãªã失æãã' do
+ @gp.z = -1
+ @gp.should_not be_valid
+ end
+ it 'è² ãªã失æãã' do
+ @gp.z = 0
+ @gp.should_not be_valid
+ end
+ end
+ end
+ describe 'ä¸è¦§åå¾ã«æ¼ãã¦' do
+ before do
+ @gp = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
+ end
+ context 'pageè£æ£ã«ã¤ãã¦' do
+ it 'æååããæ°å¤ã«å¤æããã' do
+ GroundPicture.page('8').should eq 8
+ end
+ it 'nilã®å ´åã¯1ã«ãªã' do
+ GroundPicture.page().should eq 1
+ end
+ it '0以ä¸ã®å ´åã¯1ã«ãªã' do
+ GroundPicture.page('0').should eq 1
+ end
+ end
+ context 'page_sizeè£æ£ã«ã¤ãã¦' do
+ it 'æååããæ°å¤ã«å¤æããã' do
+ GroundPicture.page_size('7').should eq 7
+ end
+ it 'nilã®å ´åã¯GroundPicture.default_page_sizeã«ãªã' do
+ GroundPicture.page_size().should eq GroundPicture.default_page_size
+ end
+ it '0以ä¸ã®å ´åã¯GroundPicture.default_page_sizeã«ãªã' do
+ GroundPicture.page_size('0').should eq GroundPicture.default_page_size
+ end
+ it 'GroundPicture.max_page_sizeãè¶
ããå ´åã¯GroundPicture.max_page_sizeã«ãªã' do
+ GroundPicture.page_size('1000').should eq GroundPicture.max_page_size
+ end
+ end
+ it 'ãªã¹ããè¿ã' do
+ pl = GroundPicture.list
+ pl.should eq [@gp]
+ end
+ it 'æç³»åã§ä¸¦ãã§ãã' do
+ npl = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id, :z => 2, :updated_at => Time.now + 100
+ pl = GroundPicture.list
+ pl.should eq [npl, @gp]
+ end
+ it 'éå
¬éã®ã³ãã®æ¯è²ã¯å«ã¾ãªã' do
+ hpl = FactoryGirl.create :panel, :author_id => @author.id, :publish => 0
+ npl = FactoryGirl.create :ground_picture, :panel_id => hpl.id, :picture_id => @p.id, :updated_at => Time.now + 100
+ pl = GroundPicture.list
+ pl.should eq [@gp]
+ end
+ context 'DBã«5件ãã£ã¦1ãã¼ã¸ã®ä»¶æ°ã2件ã«å¤ããã¨ãã¦' do
+ before do
+ @npl2 = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :z => 1, :picture_id => @p.id, :updated_at => Time.now + 100
+ @npl3 = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :z => 2, :picture_id => @p.id, :updated_at => Time.now + 200
+ @npl4 = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :z => 3, :picture_id => @p.id, :updated_at => Time.now + 300
+ @npl5 = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :z => 4, :picture_id => @p.id, :updated_at => Time.now + 400
+ GroundPicture.stub(:default_page_size).and_return(2)
+ end
+ it 'é常ã¯2件ãè¿ã' do
+ pl = GroundPicture.list
+ pl.should have(2).items
+ end
+ it 'page=1ãªãæ«å°¾2件ãè¿ã' do
+ #æç³»åã§ä¸¦ãã§ãã
+ pl = GroundPicture.list( {}, 1)
+ pl.should eq [@npl5, @npl4]
+ end
+ it 'page=2ãªãä¸é2件ãè¿ã' do
+ pl = GroundPicture.list({}, 2)
+ pl.should eq [@npl3, @npl2]
+ end
+ it 'page=3ãªãå
é 1件ãè¿ã' do
+ pl = GroundPicture.list({}, 3)
+ pl.should eq [@gp]
+ end
+ end
+ end
+ describe 'listé¢é£ãã¼ãã«ãã·ã§ã³ã«æ¼ãã¦' do
+ it 'includeãã¼ãå«ãã§ãã' do
+ r = GroundPicture.list_opt
+ r.has_key?(:include).should be_true
+ end
+ it '2ã¤ã®é
ç®ãå«ãã§ãã' do
+ r = GroundPicture.list_opt[:include]
+ r.should have(2).items
+ end
+ it 'ã³ããå«ãã§ãã' do
+ r = GroundPicture.list_opt[:include]
+ r.has_key?(:panel).should be_true
+ end
+ it 'ã³ãã¯ä½å®¶ãå«ãã§ãã' do
+ r = GroundPicture.list_opt[:include]
+ r[:panel].has_key?(:author).should be_true
+ end
+ it 'å®ç´ æãå«ãã§ãã' do
+ r = GroundPicture.list_opt[:include]
+ r.has_key?(:picture).should be_true
+ end
+ it 'å®ç´ æã¯çµµå¸«ãå«ãã§ãã' do
+ r = GroundPicture.list_opt[:include]
+ r[:picture].has_key?(:artist).should be_true
+ end
+ it 'å®ç´ æã¯ã©ã¤ã»ã³ã¹ãå«ãã§ãã' do
+ r = GroundPicture.list_opt[:include]
+ r[:picture].has_key?(:license).should be_true
+ end
+ end
+ describe 'jsonä¸è¦§åºåãªãã·ã§ã³ã«æ¼ãã¦' do
+ it 'includeãã¼ãå«ãã§ãã' do
+ r = GroundPicture.list_json_opt
+ r.has_key?(:include).should be_true
+ end
+ it '2ã¤ã®é
ç®ãå«ãã§ãã' do
+ r = GroundPicture.list_json_opt[:include]
+ r.should have(2).items
+ end
+ it 'ã³ããå«ãã§ãã' do
+ r = GroundPicture.list_json_opt[:include]
+ r.has_key?(:panel).should be_true
+ end
+ it 'ã³ãã¯ä½å®¶ãå«ãã§ãã' do
+ r = GroundPicture.list_json_opt[:include]
+ r[:panel].has_key?(:author).should be_true
+ end
+ it 'å®ç´ æãå«ãã§ãã' do
+ r = GroundPicture.list_json_opt[:include]
+ r.has_key?(:picture).should be_true
+ end
+ it 'å®ç´ æã¯çµµå¸«ãå«ãã§ãã' do
+ r = GroundPicture.list_json_opt[:include]
+ r[:picture].has_key?(:artist).should be_true
+ end
+ it 'å®ç´ æã¯ã©ã¤ã»ã³ã¹ãå«ãã§ãã' do
+ r = GroundPicture.list_json_opt[:include]
+ r[:picture].has_key?(:license).should be_true
+ end
+ end
+
+ describe 'èªåã®ã³ãã§ä½¿ã£ãæ¯è²ç»åä¸è¦§åå¾ã«æ¼ãã¦' do
+ before do
+ @gp = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
+ end
+ it 'ãªã¹ããè¿ã' do
+ pl = GroundPicture.mylist @author
+ pl.should eq [@gp]
+ end
+ it 'æç³»åã§ä¸¦ãã§ãã' do
+ npl = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id, :z => 2, :updated_at => Time.now + 100
+ pl = GroundPicture.mylist @author
+ pl.should eq [npl, @gp]
+ end
+ it 'ä»äººã®ã³ãã®æ¯è²ã¯å
¬éã§ãå«ã¾ãªã' do
+ hpl = FactoryGirl.create :panel, :author_id => @other_author.id, :publish => 1
+ npl = FactoryGirl.create :ground_picture, :panel_id => hpl.id, :picture_id => @p.id
+ pl = GroundPicture.mylist @author
+ pl.should eq [@gp]
+ end
+ end
+
+end
diff --git a/spec/models/original_picture_spec.rb b/spec/models/original_picture_spec.rb
index cea37e9e..4314fd3f 100644
--- a/spec/models/original_picture_spec.rb
+++ b/spec/models/original_picture_spec.rb
@@ -1,4 +1,5 @@
# -*- encoding: utf-8 -*-
+#åç»
require 'spec_helper'
describe OriginalPicture do
@@ -141,6 +142,23 @@ describe OriginalPicture do
@op.should_not be_valid
end
end
+ context 'md5ãæ¤è¨¼ããã¨ã' do
+ before do
+ @op = FactoryGirl.build :original_picture
+ end
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @op.md5 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
+ @op.should be_valid
+ end
+ it 'nullãªã失æãã' do
+ @op.md5 = ''
+ @op.should_not be_valid
+ end
+ it '32æå以ä¸ãªã失æãã' do
+ @op.md5 = 'a'*33
+ @op.should_not be_valid
+ end
+ end
end
describe 'ãã¼ã¿è£å
ã«æ¼ãã¦' do
@@ -216,19 +234,41 @@ describe OriginalPicture do
end
end
end
+ describe 'åä½åºåãªãã·ã§ã³ã«æ¼ãã¦' do
+ it 'includeãã¼ãå«ãã§ãã' do
+ r = OriginalPicture.show_include_opt
+ r.has_key?(:include).should be_true
+ end
+ it '2ã¤ã®é
ç®ãå«ãã§ãã' do
+ r = OriginalPicture.show_include_opt[:include]
+ r.should have(2).items
+ end
+ it 'ç´ æãå«ãã§ãã' do
+ r = OriginalPicture.show_include_opt[:include]
+ r.has_key?(:resource_picture).should be_true
+ end
+ it 'å®ç´ æãå«ãã§ãã' do
+ r = OriginalPicture.show_include_opt[:include]
+ r.has_key?(:pictures).should be_true
+ end
+ end
describe 'jsonåä½åºåãªãã·ã§ã³ã«æ¼ãã¦' do
- it 'includeãã¼ãå«ãã§ãã' do
- r = OriginalPicture.show_json_include_opt
- r.has_key?(:include).should be_true
- end
- it '1ã¤ã®é
ç®ãå«ãã§ãã' do
- r = OriginalPicture.show_json_include_opt[:include]
- r.should have(1).items
- end
- it 'ç´ æãå«ãã§ãã' do
- r = OriginalPicture.show_json_include_opt[:include]
- r.has_key?(:resource_picture).should be_true
- end
+ it 'includeãã¼ãå«ãã§ãã' do
+ r = OriginalPicture.show_json_include_opt
+ r.has_key?(:include).should be_true
+ end
+ it '2ã¤ã®é
ç®ãå«ãã§ãã' do
+ r = OriginalPicture.show_json_include_opt[:include]
+ r.should have(2).items
+ end
+ it 'ç´ æãå«ãã§ãã' do
+ r = OriginalPicture.show_json_include_opt[:include]
+ r.has_key?(:resource_picture).should be_true
+ end
+ it 'å®ç´ æãå«ãã§ãã' do
+ r = OriginalPicture.show_json_include_opt[:include]
+ r.has_key?(:pictures).should be_true
+ end
end
describe 'ä¸è¦§åå¾ã«æ¼ãã¦' do
before do
@@ -300,34 +340,66 @@ describe OriginalPicture do
end
end
end
- describe 'listé¢é£ãã¼ãã«ãã·ã§ã³ã«æ¼ãã¦' do
- it 'includeãã¼ãå«ãã§ãã' do
- r = OriginalPicture.list_opt
- r.has_key?(:include).should be_true
- end
- it '1ã¤ã®é
ç®ãå«ãã§ãã' do
- r = OriginalPicture.list_opt[:include]
- r.should have(1).items
- end
- it 'ç´ æãå«ãã§ãã' do
- r = OriginalPicture.list_opt[:include]
- r.has_key?(:resource_picture).should be_true
- end
+ describe 'listé¢é£ãã¼ãã«ãã·ã§ã³ã«æ¼ãã¦' do
+ it 'includeãã¼ãå«ãã§ãã' do
+ r = OriginalPicture.list_opt
+ r.has_key?(:include).should be_true
+ end
+ it '2ã¤ã®é
ç®ãå«ãã§ãã' do
+ r = OriginalPicture.list_opt[:include]
+ r.should have(2).items
+ end
+ it 'ç´ æãå«ãã§ãã' do
+ r = OriginalPicture.list_opt[:include]
+ r.has_key?(:resource_picture).should be_true
+ end
+ it 'å®ç´ æãå«ãã§ãã' do
+ r = OriginalPicture.list_opt[:include]
+ r.has_key?(:pictures).should be_true
+ end
+ end
+ describe 'jsonä¸è¦§åºåãªãã·ã§ã³ã«æ¼ãã¦' do
+ it 'includeãã¼ãå«ãã§ãã' do
+ r = OriginalPicture.list_json_opt
+ r.has_key?(:include).should be_true
+ end
+ it '2ã¤ã®é
ç®ãå«ãã§ãã' do
+ r = OriginalPicture.list_json_opt[:include]
+ r.should have(2).items
+ end
+ it 'ç´ æãå«ãã§ãã' do
+ r = OriginalPicture.list_json_opt[:include]
+ r.has_key?(:resource_picture).should be_true
+ end
+ it 'å®ç´ æãå«ãã§ãã' do
+ r = OriginalPicture.list_json_opt[:include]
+ r.has_key?(:pictures).should be_true
+ end
+ end
+ describe 'æ´æ°å±¥æ´ä¸è¦§åå¾ã«æ¼ãã¦' do
+ before do
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 0,
+ :original_picture_id => @op.id
+ @op2 = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ end
+ it 'ãªã¹ããè¿ã' do
+ r = @op.history
+ r.should eq [@p]
+ end
+ it 'ä»ã®åç»ã®å®ç´ æã¯å«ãã§ããªã' do
+ @p2 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 0,
+ :original_picture_id => @op2.id
+ r = @op.history
+ r.should eq [@p]
+ end
+ it 'revisionã§ä¸¦ãã§ãã' do
+ @p2 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op.id
+ r = @op.history
+ r.should eq [@p2, @p]
+ end
end
- describe 'jsonä¸è¦§åºåãªãã·ã§ã³ã«æ¼ãã¦' do
- it 'includeãã¼ãå«ãã§ãã' do
- r = OriginalPicture.list_json_opt
- r.has_key?(:include).should be_true
- end
- it '1ã¤ã®é
ç®ãå«ãã§ãã' do
- r = OriginalPicture.list_json_opt[:include]
- r.should have(1).items
- end
- it 'ç´ æãå«ãã§ãã' do
- r = OriginalPicture.list_json_opt[:include]
- r.has_key?(:resource_picture).should be_true
- end
- end
describe 'RMagickå¤æã«æ¼ãã¦' do
before do
@op = FactoryGirl.build :original_picture, :artist_id => @artist.id
@@ -375,36 +447,36 @@ describe OriginalPicture do
#ãã¹ã¦ã®å¦çãæ£å¸¸ãã¿ã¼ã³ã§ééããã°ãä¸çªæ·±ãåå²ã¾ã§éãã
#ããã§å¤é¨ã®ã¡ã½ããå¼ã³åºãã ãã«çç®ãã¦ãã¹ãããã
OriginalPicture.any_instance.stub(:data_to_mgk).with(any_args).and_return(Mgk.new)
- OriginalPicture.any_instance.stub(:save).with(any_args).and_return(true)
+ OriginalPicture.any_instance.stub(:save).with(any_args).and_return(true)
PictureIO::LocalPicture.any_instance.stub(:put).with(any_args).and_return(true)
end
it 'RMagickå¤æãä¾é ¼ãã¦ãã' do
OriginalPicture.any_instance.should_receive(:data_to_mgk).exactly(1)
- @op.store 'bindata', @artist
+ @op.store 'bindata', @artist
end
it 'èªèº«ã«å±æ§ãã»ãããã¦ãã' do
OriginalPicture.any_instance.should_receive(:attributes=).exactly(1)
- @op.store 'bindata', @artist
+ @op.store 'bindata', @artist
end
it 'èªèº«ãä¿åããã¦ãã' do
- OriginalPicture.any_instance.should_receive(:save).exactly(1)
- @op.store 'bindata', @artist
+ OriginalPicture.any_instance.should_receive(:save).exactly(1)
+ @op.store 'bindata', @artist
end
it 'PictureIoã«ç»åãã¼ã¿ã®ä¿åãä¾é ¼ãã¦ãã' do
PictureIO::LocalPicture.any_instance.should_receive(:put).with(any_args).exactly(1)
- @op.store 'bindata', @artist
+ @op.store 'bindata', @artist
end
end
context 'ã¤ã¤ããªãçµããã¨ã' do
before do
#ãã¹ã¦ã®å¦çãæ£å¸¸ãã¿ã¼ã³ã§ééãããä¿åæ©è½ããã§ãã¯ããã
OriginalPicture.any_instance.stub(:data_to_mgk).with(any_args).and_return(Mgk.new)
-# OriginalPicture.any_instance.stub(:save).with(any_args).and_return(true)
+# OriginalPicture.any_instance.stub(:save).with(any_args).and_return(true)
PictureIO::LocalPicture.any_instance.stub(:put).with(any_args).and_return(true)
end
it 'èªèº«ã«å±æ§ãã»ãããã¦ãã' do
lambda {
- @op.store 'bindata', @artist
+ @op.store 'bindata', @artist
}.should change @op, :filesize
end
it 'åç»ã¢ãã«ãä½æããã¦ãã' do
@@ -414,10 +486,10 @@ describe OriginalPicture do
end
it 'åç»ãä¿åããã¦ãã' do
@op.store 'bindata', @artist
- OriginalPicture.find(@op).should_not be_nil
+ OriginalPicture.find(@op).should_not be_nil
end
it 'Trueãè¿ã' do
- @op.store('bindata', @artist).should eq true
+ @op.store('bindata', @artist).should eq true
end
end
#以ä¸ããä¾å¤ã±ã¼ã¹ãå¦çå
é ãã失æããã¦ãã
@@ -426,49 +498,49 @@ describe OriginalPicture do
OriginalPicture.any_instance.stub(:data_to_mgk).with(any_args).and_return(false)
end
it 'falseãè¿ã' do
- @op.store('bindata', @artist).should be_false
+ @op.store('bindata', @artist).should be_false
end
it 'èªèº«ã®ä¿åã¯å¼ã°ãã¦ããªã' do
- OriginalPicture.any_instance.should_not_receive(:save)
- @op.store('bindata', @artist)
+ OriginalPicture.any_instance.should_not_receive(:save)
+ @op.store('bindata', @artist)
end
end
context 'èªèº«ã®ä¿åã«å¤±æããã¨ã' do
before do
OriginalPicture.any_instance.stub(:data_to_mgk).with(any_args).and_return(Mgk.new)
- OriginalPicture.any_instance.stub(:save).with(any_args).and_return(false)
+ OriginalPicture.any_instance.stub(:save).with(any_args).and_return(false)
end
it 'falseãè¿ã' do
- @op.store('bindata', @artist).should be_false
+ @op.store('bindata', @artist).should be_false
end
it 'æ´æ°ããã¦ããªã' do
@op.store('bindata', @artist)
- @op.should be_a_new OriginalPicture
+ @op.should be_a_new OriginalPicture
end
it 'åç»ã®ä¿åã¯å¼ã°ãã¦ããªã' do
- PictureIO::LocalPicture.any_instance.should_not_receive(:put)
+ PictureIO::LocalPicture.any_instance.should_not_receive(:put)
end
end
context 'åç»ã®ä¿åã«å¤±æããã¨ã' do
before do
OriginalPicture.any_instance.stub(:data_to_mgk).with(any_args).and_return(Mgk.new)
- OriginalPicture.any_instance.stub(:save).with(any_args).and_return(true)
+ OriginalPicture.any_instance.stub(:save).with(any_args).and_return(true)
PictureIO::LocalPicture.any_instance.stub(:put).with(any_args).and_return(false)
end
it 'falseãè¿ã' do
- @op.store('bindata', @artist).should be_false
+ @op.store('bindata', @artist).should be_false
end
it 'æ´æ°ããã¦ããªã' do
- @op.store('bindata', @artist)
- @op.should be_a_new OriginalPicture
+ @op.store('bindata', @artist)
+ @op.should be_a_new OriginalPicture
end
it 'å¯¾è±¡ç´ æãªãã¸ã§ã¯ãã®ä¿åã¯å¼ã°ãã¦ããªã' do
- ResourcePicture.any_instance.should_not_receive(:save)
- @op.store('bindata', @artist)
+ ResourcePicture.any_instance.should_not_receive(:save)
+ @op.store('bindata', @artist)
end
it 'å
¨ä½ã¨ã©ã¼ã¡ãã»ã¼ã¸ãã»ããããã¦ãã' do
lambda {
- @op.store('bindata', @artist)
+ @op.store('bindata', @artist)
}.should change(@op.errors[:base], :count)
end
end
diff --git a/spec/models/panel_color_spec.rb b/spec/models/panel_color_spec.rb
new file mode 100644
index 00000000..7f0c5b5c
--- /dev/null
+++ b/spec/models/panel_color_spec.rb
@@ -0,0 +1,217 @@
+# -*- encoding: utf-8 -*-
+require 'spec_helper'
+#ã³ãã®è²èæ¯
+
+describe PanelColor do
+ before do
+ FactoryGirl.create :admin
+ @user = FactoryGirl.create( :user_yas)
+ @author = @user.author
+ @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
+ @other_user = FactoryGirl.create( :user_yas)
+ @other_author = @other_user.author
+ @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id
+ @sp = FactoryGirl.create :system_picture
+ @lg = FactoryGirl.create :license_group
+ @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
+ @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
+ @panel = FactoryGirl.create :panel, :author_id => @author.id
+ end
+
+ describe 'æ¤è¨¼ã«æ¼ãã¦' do
+ before do
+ @pc = FactoryGirl.build :panel_color, :panel_id => @panel.id
+ end
+ it 'ãªã¼ã½ããã¯ã¹ãªãã¼ã¿ãªãéã' do
+ @pc.save
+ @pc.should be_valid
+ end
+
+ context 'panel_idãæ¤è¨¼ããã¨ã' do
+ #ãã¹ãã®ä¿åã¯nilã許å¯ããªããã°ãªããªãã®ã§æ°å¤ãã§ãã¯ã ã
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @pc.panel_id = @panel.id
+ @pc.should be_valid
+ end
+ it 'æ°å¤ã§ãªããã°å¤±æãã' do
+ @pc.panel_id = 'a'
+ @pc.should_not be_valid
+ end
+ end
+ context 'codeãæ¤è¨¼ããã¨ã' do
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @pc.code = 0xffffff
+ @pc.should be_valid
+ end
+ it 'nullãªã失æãã' do
+ @pc.code = nil
+ @pc.should_not be_valid
+ end
+ it 'æ°å¤ã§ãªããã°å¤±æãã' do
+ @pc.code = 'a'
+ @pc.should_not be_valid
+ end
+ it 'è² ãªã失æãã' do
+ @pc.code = -1
+ @pc.should_not be_valid
+ end
+ it '24bit colorã§ãªããã°å¤±æãã' do
+ @pc.code = 0x1000000
+ @pc.should_not be_valid
+ end
+ end
+ context 'zãæ¤è¨¼ããã¨ã' do
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @pc.z = 1
+ @pc.should be_valid
+ end
+ it 'nullãªã失æãã' do
+ @pc.z = nil
+ @pc.should_not be_valid
+ end
+ it 'æ°å¤ã§ãªããã°å¤±æãã' do
+ @pc.z = 'a'
+ @pc.should_not be_valid
+ end
+ it 'è² ãªã失æãã' do
+ @pc.z = -1
+ @pc.should_not be_valid
+ end
+ it 'è² ãªã失æãã' do
+ @pc.z = 0
+ @pc.should_not be_valid
+ end
+ end
+ end
+ describe 'ä¸è¦§åå¾ã«æ¼ãã¦' do
+ before do
+ @pc = FactoryGirl.create :panel_color, :panel_id => @panel.id
+ end
+ context 'pageè£æ£ã«ã¤ãã¦' do
+ it 'æååããæ°å¤ã«å¤æããã' do
+ PanelColor.page('8').should eq 8
+ end
+ it 'nilã®å ´åã¯1ã«ãªã' do
+ PanelColor.page().should eq 1
+ end
+ it '0以ä¸ã®å ´åã¯1ã«ãªã' do
+ PanelColor.page('0').should eq 1
+ end
+ end
+ context 'page_sizeè£æ£ã«ã¤ãã¦' do
+ it 'æååããæ°å¤ã«å¤æããã' do
+ PanelColor.page_size('7').should eq 7
+ end
+ it 'nilã®å ´åã¯PanelColor.default_page_sizeã«ãªã' do
+ PanelColor.page_size().should eq PanelColor.default_page_size
+ end
+ it '0以ä¸ã®å ´åã¯PanelColor.default_page_sizeã«ãªã' do
+ PanelColor.page_size('0').should eq PanelColor.default_page_size
+ end
+ it 'PanelColor.max_page_sizeãè¶
ããå ´åã¯PanelColor.max_page_sizeã«ãªã' do
+ PanelColor.page_size('1000').should eq PanelColor.max_page_size
+ end
+ end
+ it 'ãªã¹ããè¿ã' do
+ pl = PanelColor.list
+ pl.should eq [@pc]
+ end
+ it 'æç³»åã§ä¸¦ãã§ãã' do
+ npl = FactoryGirl.create :panel_color, :panel_id => @panel.id, :z => 2, :updated_at => Time.now + 100
+ pl = PanelColor.list
+ pl.should eq [npl, @pc]
+ end
+ it 'éå
¬éã®ã³ãã®æ¯è²ã¯å«ã¾ãªã' do
+ hpl = FactoryGirl.create :panel, :author_id => @author.id, :publish => 0
+ npl = FactoryGirl.create :panel_color, :panel_id => hpl.id, :updated_at => Time.now + 100
+ pl = PanelColor.list
+ pl.should eq [@pc]
+ end
+ context 'DBã«5件ãã£ã¦1ãã¼ã¸ã®ä»¶æ°ã2件ã«å¤ããã¨ãã¦' do
+ before do
+ @npl2 = FactoryGirl.create :panel_color, :panel_id => @panel.id, :z => 1, :updated_at => Time.now + 100
+ @npl3 = FactoryGirl.create :panel_color, :panel_id => @panel.id, :z => 2, :updated_at => Time.now + 200
+ @npl4 = FactoryGirl.create :panel_color, :panel_id => @panel.id, :z => 3, :updated_at => Time.now + 300
+ @npl5 = FactoryGirl.create :panel_color, :panel_id => @panel.id, :z => 4, :updated_at => Time.now + 400
+ PanelColor.stub(:default_page_size).and_return(2)
+ end
+ it 'é常ã¯2件ãè¿ã' do
+ pl = PanelColor.list
+ pl.should have(2).items
+ end
+ it 'page=1ãªãæ«å°¾2件ãè¿ã' do
+ #æç³»åã§ä¸¦ãã§ãã
+ pl = PanelColor.list( {}, 1)
+ pl.should eq [@npl5, @npl4]
+ end
+ it 'page=2ãªãä¸é2件ãè¿ã' do
+ pl = PanelColor.list({}, 2)
+ pl.should eq [@npl3, @npl2]
+ end
+ it 'page=3ãªãå
é 1件ãè¿ã' do
+ pl = PanelColor.list({}, 3)
+ pl.should eq [@pc]
+ end
+ end
+ end
+ describe 'listé¢é£ãã¼ãã«ãã·ã§ã³ã«æ¼ãã¦' do
+ it 'includeãã¼ãå«ãã§ãã' do
+ r = PanelColor.list_opt
+ r.has_key?(:include).should be_true
+ end
+ it '1ã¤ã®é
ç®ãå«ãã§ãã' do
+ r = PanelColor.list_opt[:include]
+ r.should have(1).items
+ end
+ it 'ã³ããå«ãã§ãã' do
+ r = PanelColor.list_opt[:include]
+ r.has_key?(:panel).should be_true
+ end
+ it 'ã³ãã¯ä½å®¶ãå«ãã§ãã' do
+ r = PanelColor.list_opt[:include]
+ r[:panel].has_key?(:author).should be_true
+ end
+ end
+ describe 'jsonä¸è¦§åºåãªãã·ã§ã³ã«æ¼ãã¦' do
+ it 'includeãã¼ãå«ãã§ãã' do
+ r = PanelColor.list_json_opt
+ r.has_key?(:include).should be_true
+ end
+ it '1ã¤ã®é
ç®ãå«ãã§ãã' do
+ r = PanelColor.list_json_opt[:include]
+ r.should have(1).items
+ end
+ it 'ã³ããå«ãã§ãã' do
+ r = PanelColor.list_json_opt[:include]
+ r.has_key?(:panel).should be_true
+ end
+ it 'ã³ãã¯ä½å®¶ãå«ãã§ãã' do
+ r = PanelColor.list_json_opt[:include]
+ r[:panel].has_key?(:author).should be_true
+ end
+ end
+
+ describe 'èªåã®ã³ãã§ä½¿ã£ãè²ä¸è¦§åå¾ã«æ¼ãã¦' do
+ before do
+ @pc = FactoryGirl.create :panel_color, :panel_id => @panel.id
+ end
+ it 'ãªã¹ããè¿ã' do
+ pl = PanelColor.mylist @author
+ pl.should eq [@pc]
+ end
+ it 'æç³»åã§ä¸¦ãã§ãã' do
+ npl = FactoryGirl.create :panel_color, :panel_id => @panel.id, :z => 2, :updated_at => Time.now + 100
+ pl = PanelColor.mylist @author
+ pl.should eq [npl, @pc]
+ end
+ it 'ä»äººã®ã³ãã®æ¯è²ã¯å
¬éã§ãå«ã¾ãªã' do
+ hpl = FactoryGirl.create :panel, :author_id => @other_author.id, :publish => 1
+ npl = FactoryGirl.create :panel_color, :panel_id => hpl.id
+ pl = PanelColor.mylist @author
+ pl.should eq [@pc]
+ end
+ end
+
+end
diff --git a/spec/models/panel_picture_spec.rb b/spec/models/panel_picture_spec.rb
index 09a3a474..f3a70a30 100644
--- a/spec/models/panel_picture_spec.rb
+++ b/spec/models/panel_picture_spec.rb
@@ -23,9 +23,12 @@ describe PanelPicture do
before do
@pp = FactoryGirl.build :panel_picture, :panel_id => @panel.id, :picture_id => @p.id,
:width => @p.width, :height => @p.height
+ Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(0)
+ Picture.any_instance.stub(:flag_resize).with(any_args).and_return(0)
+ Picture.any_instance.stub(:flag_sync_vh).with(any_args).and_return(0)
end
it 'ãªã¼ã½ããã¯ã¹ãªãã¼ã¿ãªãéã' do
- @pp.save!
+ @pp.save
@pp.should be_valid
end
@@ -100,9 +103,6 @@ describe PanelPicture do
end
context 'widthãæ¤è¨¼ããã¨ã' do
before do
- Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(0)
- Picture.any_instance.stub(:flag_resize).with(any_args).and_return(0)
- Picture.any_instance.stub(:flag_sync_vh).with(any_args).and_return(0)
end
it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
@pp.width = 1
@@ -122,7 +122,6 @@ describe PanelPicture do
end
context 'å転許å¯ã®ã¨ã' do
before do
- Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(0)
end
it 'è² ã§ãéã' do
@pp.width = -1
@@ -140,7 +139,6 @@ describe PanelPicture do
end
context 'ãµã¤ãºå¤æ´è¨±å¯ã®ã¨ã' do
before do
- Picture.any_instance.stub(:flag_resize).with(any_args).and_return(0)
end
it 'å®ç´ æã®ãµã¤ãºã¨éã£ã¦ãéã' do
@pp.width = @p.width-1
@@ -158,7 +156,6 @@ describe PanelPicture do
end
context '縦横æ¯å¤æ´è¨±å¯ã®ã¨ã' do
before do
- Picture.any_instance.stub(:flag_sync_vh).with(any_args).and_return(0)
end
it 'å®ç´ æã®ç¸¦æ¨ªæ¯ã¨éã£ã¦ãéã' do
@pp.width = @p.width / 2
@@ -177,9 +174,6 @@ describe PanelPicture do
end
context 'heightãæ¤è¨¼ããã¨ã' do
before do
- Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(0)
- Picture.any_instance.stub(:flag_resize).with(any_args).and_return(0)
- Picture.any_instance.stub(:flag_sync_vh).with(any_args).and_return(0)
end
it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
@pp.height = '1'
@@ -203,7 +197,6 @@ describe PanelPicture do
end
context 'å転許å¯ã®ã¨ã' do
before do
- Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(0)
end
it 'è² ã§ãéã' do
@pp.height = -1
@@ -221,7 +214,6 @@ describe PanelPicture do
end
context 'ãµã¤ãºå¤æ´è¨±å¯ã®ã¨ã' do
before do
- Picture.any_instance.stub(:flag_resize).with(any_args).and_return(0)
end
it 'å®ç´ æã®ãµã¤ãºã¨éã£ã¦ãéã' do
@pp.height = @p.height-1
@@ -239,7 +231,6 @@ describe PanelPicture do
end
context '縦横æ¯å¤æ´è¨±å¯ã®ã¨ã' do
before do
- Picture.any_instance.stub(:flag_sync_vh).with(any_args).and_return(0)
end
it 'å®ç´ æã®ç¸¦æ¨ªæ¯ã¨éã£ã¦ãéã' do
@pp.height = @p.height / 2
@@ -296,6 +287,24 @@ describe PanelPicture do
@pp.should_not be_valid
end
end
+ context 'picture_idãæ¤è¨¼ããã¨ã' do
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @pp.picture_id = @p.id
+ @pp.should be_valid
+ end
+ it 'nullãªã失æãã' do
+ @pp.picture_id = nil
+ @pp.should_not be_valid
+ end
+ it 'æ°å¤ã§ãªããã°å¤±æãã' do
+ @pp.picture_id = 'a'
+ @pp.should_not be_valid
+ end
+ it 'åå¨ããå®ç´ æã§ãªããã°å¤±æãã' do
+ @pp.picture_id = 0
+ @pp.should_not be_valid
+ end
+ end
end
describe 'ä¸è¦§åå¾ã«æ¼ãã¦' do
before do
diff --git a/spec/models/panel_spec.rb b/spec/models/panel_spec.rb
index ba2a3860..ecf150a4 100644
--- a/spec/models/panel_spec.rb
+++ b/spec/models/panel_spec.rb
@@ -288,7 +288,7 @@ describe Panel do
end
end
end
- describe 'åä½åå¾ã«æ¼ãã¦' do
+ describe 'ç·¨éåå¾ã«æ¼ãã¦' do
before do
@panel = FactoryGirl.create :panel, :author_id => @author.id
end
@@ -314,53 +314,69 @@ describe Panel do
end
end
describe 'é¢é£ãã¼ãã«ãã·ã§ã³ã«æ¼ãã¦' do
- context 'ãªãã·ã§ã³ããªãã¨ã' do
- it '3ã¤ã®é
ç®ãå«ãã§ãã' do
- r = Panel.show_include_opt
- r.should have(3).items
- end
- it 'ã³ãçµµãå«ãã§ãã' do
+ it '6ã¤ã®é
ç®ãå«ãã§ãã' do
+ r = Panel.show_include_opt
+ r.should have(6).items
+ end
+ it 'ã³ãçµµãå«ãã§ãã' do
+ r = Panel.show_include_opt
+ r.has_key?(:panel_pictures).should be_true
+ end
+ it 'ã³ãçµµã¯å®ç´ æãå«ãã§ãã' do
r = Panel.show_include_opt
- r.has_key?(:panel_pictures).should be_true
+ r[:panel_pictures].has_key?(:picture).should be_true
end
- it 'ã³ãçµµã¯å®ç´ æãå«ãã§ãã' do
+ it 'å®ç´ æã¯çµµå¸«ãå«ãã§ãã' do
r = Panel.show_include_opt
- r[:panel_pictures].has_key?(:picture).should be_true
+ r[:panel_pictures][:picture].has_key?(:artist).should be_true
end
- it 'å®ç´ æã¯çµµå¸«ãå«ãã§ãã' do
- r = Panel.show_include_opt
- r[:panel_pictures][:picture].has_key?(:artist).should be_true
- end
- it 'å®ç´ æã¯ã©ã¤ã»ã³ã¹ãå«ãã§ãã' do
- r = Panel.show_include_opt
- r[:panel_pictures][:picture].has_key?(:license).should be_true
- end
- it 'ãããã·ãå«ãã§ãã' do
+ it 'å®ç´ æã¯ã©ã¤ã»ã³ã¹ãå«ãã§ãã' do
+ r = Panel.show_include_opt
+ r[:panel_pictures][:picture].has_key?(:license).should be_true
+ end
+ it 'ãããã·ãå«ãã§ãã' do
+ r = Panel.show_include_opt
+ r.has_key?(:speech_balloons).should be_true
+ end
+ it 'ãããã·ã¯ãããã·æ ãå«ãã§ãã' do
+ r = Panel.show_include_opt
+ r[:speech_balloons].has_key?(:balloons).should be_true
+ end
+ it 'ãããã·ã¯ã»ãªããå«ãã§ãã' do
r = Panel.show_include_opt
- r.has_key?(:speech_balloons).should be_true
+ r[:speech_balloons].has_key?(:speeches).should be_true
end
- it 'ãããã·ã¯ãããã·æ ãå«ãã§ãã' do
+ it 'æ¯è²ç»åãå«ãã§ãã' do
+ r = Panel.show_include_opt
+ r.has_key?(:ground_pictures).should be_true
+ end
+ it 'æ¯è²ç»åã¯å®ç´ æãå«ãã§ãã' do
+ r = Panel.show_include_opt
+ r[:ground_pictures].has_key?(:picture).should be_true
+ end
+ it 'å®ç´ æã¯çµµå¸«ãå«ãã§ãã' do
r = Panel.show_include_opt
- r[:speech_balloons].has_key?(:balloons).should be_true
+ r[:ground_pictures][:picture].has_key?(:artist).should be_true
end
- it 'ãããã·ã¯ã»ãªããå«ãã§ãã' do
+ it 'å®ç´ æã¯ã©ã¤ã»ã³ã¹ãå«ãã§ãã' do
r = Panel.show_include_opt
- r[:speech_balloons].has_key?(:speeches).should be_true
+ r[:ground_pictures][:picture].has_key?(:license).should be_true
end
- it 'ä½å®¶ãå«ãã§ãã' do
+ it 'éæ¥è²ãå«ãã§ãã' do
+ r = Panel.show_include_opt
+ r.has_key?(:ground_colors).should be_true
+ end
+ it 'éæ¥è²ã¯è²ãå«ãã§ãã' do
r = Panel.show_include_opt
- r.has_key?(:author).should be_true
+ r[:ground_colors].has_key?(:color).should be_true
end
+ it 'æ¯è²ãå«ãã§ãã' do
+ r = Panel.show_include_opt
+ r.has_key?(:panel_colors).should be_true
end
- context 'ãªãã·ã§ã³ã§åç»ãå«ã¾ããã¨ã' do
- it '4ã¤ã®é
ç®ãå«ãã§ãã' do
- r = Panel.show_include_opt(:include => {:test => {}})
- r.should have(4).items
- end
- it 'testãå«ãã§ãã' do
- r = Panel.show_include_opt(:include => {:test => {}})
- r.has_key?(:test).should be_true
- end
+ it 'ä½å®¶ãå«ãã§ãã' do
+ r = Panel.show_include_opt
+ r.has_key?(:author).should be_true
end
end
describe 'jsonåä½åºåãªãã·ã§ã³ã«æ¼ãã¦' do
@@ -368,9 +384,9 @@ describe Panel do
r = Panel.show_json_include_opt
r.has_key?(:include).should be_true
end
- it '3ã¤ã®é
ç®ãå«ãã§ãã' do
+ it '6ã¤ã®é
ç®ãå«ãã§ãã' do
r = Panel.show_json_include_opt[:include]
- r.should have(3).items
+ r.should have(6).items
end
it 'ã³ãçµµãå«ãã§ãã' do
r = Panel.show_json_include_opt[:include]
@@ -389,17 +405,45 @@ describe Panel do
r[:panel_pictures][:picture].has_key?(:license).should be_true
end
it 'ãããã·ãå«ãã§ãã' do
- r = Panel.show_include_opt
+ r = Panel.show_json_include_opt[:include]
r.has_key?(:speech_balloons).should be_true
end
it 'ãããã·ã¯ãããã·æ ãå«ãã§ãã' do
- r = Panel.show_include_opt
+ r = Panel.show_json_include_opt[:include]
r[:speech_balloons].has_key?(:balloons).should be_true
end
it 'ãããã·ã¯ã»ãªããå«ãã§ãã' do
- r = Panel.show_include_opt
+ r = Panel.show_json_include_opt[:include]
r[:speech_balloons].has_key?(:speeches).should be_true
end
+ it 'æ¯è²ç»åãå«ãã§ãã' do
+ r = Panel.show_json_include_opt[:include]
+ r.has_key?(:ground_pictures).should be_true
+ end
+ it 'æ¯è²ç»åã¯å®ç´ æãå«ãã§ãã' do
+ r = Panel.show_json_include_opt[:include]
+ r[:ground_pictures].has_key?(:picture).should be_true
+ end
+ it 'å®ç´ æã¯çµµå¸«ãå«ãã§ãã' do
+ r = Panel.show_json_include_opt[:include]
+ r[:ground_pictures][:picture].has_key?(:artist).should be_true
+ end
+ it 'å®ç´ æã¯ã©ã¤ã»ã³ã¹ãå«ãã§ãã' do
+ r = Panel.show_json_include_opt[:include]
+ r[:ground_pictures][:picture].has_key?(:license).should be_true
+ end
+ it 'éæ¥è²ãå«ãã§ãã' do
+ r = Panel.show_json_include_opt[:include]
+ r.has_key?(:ground_colors).should be_true
+ end
+ it 'éæ¥è²ã¯è²ãå«ãã§ãã' do
+ r = Panel.show_json_include_opt[:include]
+ r[:ground_colors].has_key?(:color).should be_true
+ end
+ it 'æ¯è²ãå«ãã§ãã' do
+ r = Panel.show_json_include_opt[:include]
+ r.has_key?(:panel_colors).should be_true
+ end
it 'ä½å®¶ãå«ãã§ãã' do
r = Panel.show_json_include_opt[:include]
r.has_key?(:author).should be_true
@@ -480,9 +524,9 @@ describe Panel do
r = Panel.list_opt
r.has_key?(:include).should be_true
end
- it '3ã¤ã®é
ç®ãå«ãã§ãã' do
+ it '6ã¤ã®é
ç®ãå«ãã§ãã' do
r = Panel.list_opt[:include]
- r.should have(3).items
+ r.should have(6).items
end
it 'ã³ãçµµãå«ãã§ãã' do
r = Panel.list_opt[:include]
@@ -501,17 +545,45 @@ describe Panel do
r[:panel_pictures][:picture].has_key?(:license).should be_true
end
it 'ãããã·ãå«ãã§ãã' do
- r = Panel.show_include_opt
+ r = Panel.list_opt[:include]
r.has_key?(:speech_balloons).should be_true
end
it 'ãããã·ã¯ãããã·æ ãå«ãã§ãã' do
- r = Panel.show_include_opt
+ r = Panel.list_opt[:include]
r[:speech_balloons].has_key?(:balloons).should be_true
end
it 'ãããã·ã¯ã»ãªããå«ãã§ãã' do
- r = Panel.show_include_opt
+ r = Panel.list_opt[:include]
r[:speech_balloons].has_key?(:speeches).should be_true
end
+ it 'æ¯è²ç»åãå«ãã§ãã' do
+ r = Panel.list_opt[:include]
+ r.has_key?(:ground_pictures).should be_true
+ end
+ it 'æ¯è²ç»åã¯å®ç´ æãå«ãã§ãã' do
+ r = Panel.list_opt[:include]
+ r[:ground_pictures].has_key?(:picture).should be_true
+ end
+ it 'å®ç´ æã¯çµµå¸«ãå«ãã§ãã' do
+ r = Panel.list_opt[:include]
+ r[:ground_pictures][:picture].has_key?(:artist).should be_true
+ end
+ it 'å®ç´ æã¯ã©ã¤ã»ã³ã¹ãå«ãã§ãã' do
+ r = Panel.list_opt[:include]
+ r[:ground_pictures][:picture].has_key?(:license).should be_true
+ end
+ it 'éæ¥è²ãå«ãã§ãã' do
+ r = Panel.list_opt[:include]
+ r.has_key?(:ground_colors).should be_true
+ end
+ it 'éæ¥è²ã¯è²ãå«ãã§ãã' do
+ r = Panel.list_opt[:include]
+ r[:ground_colors].has_key?(:color).should be_true
+ end
+ it 'æ¯è²ãå«ãã§ãã' do
+ r = Panel.list_opt[:include]
+ r.has_key?(:panel_colors).should be_true
+ end
it 'ä½å®¶ãå«ãã§ãã' do
r = Panel.list_opt[:include]
r.has_key?(:author).should be_true
@@ -522,9 +594,9 @@ describe Panel do
r = Panel.list_json_opt
r.has_key?(:include).should be_true
end
- it '3ã¤ã®é
ç®ãå«ãã§ãã' do
+ it '6ã¤ã®é
ç®ãå«ãã§ãã' do
r = Panel.list_json_opt[:include]
- r.should have(3).items
+ r.should have(6).items
end
it 'ã³ãçµµãå«ãã§ãã' do
r = Panel.list_json_opt[:include]
@@ -543,17 +615,45 @@ describe Panel do
r[:panel_pictures][:picture].has_key?(:license).should be_true
end
it 'ãããã·ãå«ãã§ãã' do
- r = Panel.show_include_opt
+ r = Panel.list_json_opt[:include]
r.has_key?(:speech_balloons).should be_true
end
it 'ãããã·ã¯ãããã·æ ãå«ãã§ãã' do
- r = Panel.show_include_opt
+ r = Panel.list_json_opt[:include]
r[:speech_balloons].has_key?(:balloons).should be_true
end
it 'ãããã·ã¯ã»ãªããå«ãã§ãã' do
- r = Panel.show_include_opt
+ r = Panel.list_json_opt[:include]
r[:speech_balloons].has_key?(:speeches).should be_true
end
+ it 'æ¯è²ç»åãå«ãã§ãã' do
+ r = Panel.list_json_opt[:include]
+ r.has_key?(:ground_pictures).should be_true
+ end
+ it 'æ¯è²ç»åã¯å®ç´ æãå«ãã§ãã' do
+ r = Panel.list_json_opt[:include]
+ r[:ground_pictures].has_key?(:picture).should be_true
+ end
+ it 'å®ç´ æã¯çµµå¸«ãå«ãã§ãã' do
+ r = Panel.list_json_opt[:include]
+ r[:ground_pictures][:picture].has_key?(:artist).should be_true
+ end
+ it 'å®ç´ æã¯ã©ã¤ã»ã³ã¹ãå«ãã§ãã' do
+ r = Panel.list_json_opt[:include]
+ r[:ground_pictures][:picture].has_key?(:license).should be_true
+ end
+ it 'éæ¥è²ãå«ãã§ãã' do
+ r = Panel.list_json_opt[:include]
+ r.has_key?(:ground_colors).should be_true
+ end
+ it 'éæ¥è²ã¯è²ãå«ãã§ãã' do
+ r = Panel.list_json_opt[:include]
+ r[:ground_colors].has_key?(:color).should be_true
+ end
+ it 'æ¯è²ãå«ãã§ãã' do
+ r = Panel.list_json_opt[:include]
+ r.has_key?(:panel_colors).should be_true
+ end
it 'ä½å®¶ãå«ãã§ãã' do
r = Panel.list_json_opt[:include]
r.has_key?(:author).should be_true
diff --git a/spec/models/picture_spec.rb b/spec/models/picture_spec.rb
index b1d55fae..7177bfc0 100644
--- a/spec/models/picture_spec.rb
+++ b/spec/models/picture_spec.rb
@@ -181,6 +181,23 @@ describe Picture do
@p.should_not be_valid
end
end
+ context 'md5ãæ¤è¨¼ããã¨ã' do
+ before do
+ @p = FactoryGirl.build :picture
+ end
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @p.md5 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
+ @p.should be_valid
+ end
+ it 'nullãªã失æãã' do
+ @p.md5 = ''
+ @p.should_not be_valid
+ end
+ it '32æå以ä¸ãªã失æãã' do
+ @p.md5 = 'a'*33
+ @p.should_not be_valid
+ end
+ end
context 'license_idãæ¤è¨¼ããã¨ã' do
before do
@p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
@@ -298,6 +315,7 @@ describe Picture do
@p.height.should eq 265
@p.filesize.should eq 266
@p.artist_id.should eq @artist.id
+ @p.md5.should eq @rp.md5
@p.license_id.should eq @license.id
@p.original_picture_id.should eq @op.id
@p.artist_name.should eq 'tester'
@@ -307,6 +325,118 @@ describe Picture do
end
end
+ describe 'md5éè¤ãªã¹ãã«æ¼ãã¦' do
+ before do
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 0,
+ :original_picture_id => @op.id, :md5 => 'a' * 32
+ @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
+ @op2 = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p2 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 0,
+ :original_picture_id => @op2.id, :md5 => 'b' * 32
+ @op3 = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ end
+ it 'ãªã¹ããè¿ã' do
+ res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
+ res.is_a?(Array).should be_true
+ end
+ it 'md5ãéãã°å«ã¾ãªã' do
+ res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
+ res.include?(@p2).should be_false
+ end
+ it 'åä¸åç»ã¯å«ã¾ãªã' do
+ res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
+ res.empty?.should be_true
+ end
+ it 'åä¸åç»ã¯æ§çã§ãå«ã¾ãªã' do
+ @p3 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op.id, :md5 => 'a' * 32
+ res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
+ res.empty?.should be_true
+ end
+ it 'ä»æã®åç»ãªãå«ã' do
+ @p3 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op2.id, :md5 => 'a' * 32
+ res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
+ res.should eq [@p3]
+ end
+ it 'ä»æã®åç»ã§ãmd5ãéãã°å«ã¾ãªã' do
+ @p3 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op2.id, :md5 => 'c' * 32
+ res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
+ res.empty?.should be_true
+ end
+ it 'æ´æ°æ¥æé ' do
+ @p3 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op2.id, :md5 => 'a' * 32
+ @p4 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op3.id, :md5 => 'a' * 32, :updated_at => Time.now + 100
+ res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
+ res.should eq [@p4, @p3]
+ end
+ end
+
+ describe 'md5éè¤å¤å®ã«æ¼ãã¦' do
+ before do
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @op2 = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
+ @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
+ end
+ context 'åä¸åç»ä»¥å¤ã«åãå¤ãããã¨ã' do
+ before do
+ @p2 = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op2.id, :license_id => @license.id
+ end
+ it 'trueãè¿ã' do
+ res = Picture.exist_by_md5(@p.md5, @p.original_picture_id)
+ res.should be_true
+ end
+ end
+ context 'åä¸åç»ä»¥å¤ã«åãå¤ããªãã¨ã' do
+ it 'falseãè¿ã' do
+ res = Picture.exist_by_md5(@p.md5, @p.original_picture_id)
+ res.should be_false
+ end
+ end
+ context 'åä¸åç»ã«åãå¤ãããã¨ã' do
+ before do
+ @p2 = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 1
+ end
+ it 'falseãè¿ã' do
+ res = Picture.exist_by_md5(@p.md5, @p.original_picture_id)
+ res.should be_false
+ end
+ end
+ end
+
+ describe 'headå¤å®ã«æ¼ãã¦' do
+ before do
+ end
+ context 'èªèº«ã¨ãªã³ã¯ããç´ æãããã¨ã' do
+ before do
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id
+ @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
+ end
+ it 'trueãè¿ã' do
+ res = @p.head?
+ res.should be_true
+ end
+ end
+ context 'èªèº«ã¨ãªã³ã¯ããç´ æããªãã¨ã' do
+ before do
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
+ @p2 = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 1
+ @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p2.id
+ end
+ it 'falseãè¿ã' do
+ res = @p.head?
+ res.should be_false
+ end
+ end
+ end
+
describe 'ä½æã«æ¼ãã¦' do
before do
#RMagickã®ã¹ã¿ããããã¦ãã
diff --git a/spec/models/resource_picture_spec.rb b/spec/models/resource_picture_spec.rb
index 93bf1952..c8d377da 100644
--- a/spec/models/resource_picture_spec.rb
+++ b/spec/models/resource_picture_spec.rb
@@ -144,6 +144,23 @@ describe ResourcePicture do
@rp.should_not be_valid
end
end
+ context 'md5ãæ¤è¨¼ããã¨ã' do
+ before do
+ @rp = FactoryGirl.build :picture
+ end
+ it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
+ @rp.md5 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
+ @rp.should be_valid
+ end
+ it 'nullãªã失æãã' do
+ @rp.md5 = ''
+ @rp.should_not be_valid
+ end
+ it '32æå以ä¸ãªã失æãã' do
+ @rp.md5 = 'a'*33
+ @rp.should_not be_valid
+ end
+ end
context 'license_idãæ¤è¨¼ããã¨ã' do
it 'ãã¹ããã¼ã¿ã®ç¢ºèª' do
@rp.license_id = @license.id
@@ -440,6 +457,7 @@ describe ResourcePicture do
@rp.width.should eq 264
@rp.height.should eq 265
@rp.filesize.should eq 266
+ @rp.md5.should eq @op.md5
@rp.artist_id.should eq @artist.id
end
end
@@ -682,7 +700,7 @@ describe ResourcePicture do
ResourcePicture.stub(:png_to_gif).with(any_args).and_return(@gifmgk)
end
it 'ç»åãã¡ã¤ã«ã®ä½æã»æ´æ°æ©è½ã§ç»åãä¿åãã¦ãã' do
- ResourcePicture.any_instance.stub(:filename).with(any_args).and_return('1.png')
+ ResourcePicture.any_instance.stub(:filename).with(any_args).and_return('1.png')
ResourcePicture.any_instance.should_receive(:store_picture).with(@mgk, '1.png').exactly(1)
res = @rp.store_picture_with_gif @mgk
end
@@ -696,7 +714,7 @@ describe ResourcePicture do
end
it 'ç»åãã¡ã¤ã«ã®ä½æã»æ´æ°æ©è½ã§gifç»åãä¿åãã¦ãã' do
#äºåç®ã®ä¿åã¯gifå¤æã®çµæã渡ãã
- ResourcePicture.any_instance.stub(:gifname).with(any_args).and_return('1.gif')
+ ResourcePicture.any_instance.stub(:gifname).with(any_args).and_return('1.gif')
ResourcePicture.any_instance.should_receive(:store_picture).with(@gifmgk, '1.gif').exactly(1)
res = @rp.store_picture_with_gif @mgk
end
@@ -766,8 +784,8 @@ describe ResourcePicture do
end
context 'gifç»åã®ä¿åã«å¤±æããã¨ã' do
before do
- ResourcePicture.any_instance.stub(:filename).with(any_args).and_return('1.png')
- ResourcePicture.any_instance.stub(:gifname).with(any_args).and_return('1.gif')
+ ResourcePicture.any_instance.stub(:filename).with(any_args).and_return('1.png')
+ ResourcePicture.any_instance.stub(:gifname).with(any_args).and_return('1.gif')
@mgk = Mgk.new
ResourcePicture.any_instance.stub(:store_picture).with(@mgk, '1.png').and_return(true)
ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
@@ -821,20 +839,22 @@ describe ResourcePicture do
#ãã¹ã¦ã®å¦çãæ£å¸¸ãã¿ã¼ã³ã§ééãããä¿åæ©è½ããã§ãã¯ããã
PictureIO.resource_picture_io.stub(:put).with(any_args).and_return(true)
ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
+ ResourcePicture.any_instance.stub(:thumbnail).with(any_args).and_return('tmbdata')
end
it 'Trueãè¿ã' do
-# res = @rp.store_picture(Mgk.new, '1.gif')
-# res.should be_true
+ res = @rp.store_picture(Mgk.new, '1.gif')
+ res.should be_true
end
end
context 'ä¾å¤ã±ã¼ã¹' do
before do
ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
+ ResourcePicture.any_instance.stub(:thumbnail).with(any_args).and_return('tmbdata')
PictureIO.resource_picture_io.stub(:put).with(any_args).and_return(false)
end
- it 'Falseãè¿ã' do
- # res = @rp.store_picture(Mgk.new, '1.gif')
- # res.should be_false
+ it 'ç»åã®ä¿åã«å¤±æãããªãFalseãè¿ã' do
+ res = @rp.store_picture(Mgk.new, '1.gif')
+ res.should be_false
end
end
diff --git a/spec/models/story_spec.rb b/spec/models/story_spec.rb
index 1ba54ce6..4301a689 100644
--- a/spec/models/story_spec.rb
+++ b/spec/models/story_spec.rb
@@ -160,7 +160,7 @@ describe Story do
@story.own?(nil).should == false
end
end
- describe 'åä½åå¾ã«æ¼ãã¦' do
+ describe 'ç·¨éåå¾ã«æ¼ãã¦' do
before do
@comic = FactoryGirl.create :comic, :author_id => @author.id
@panel = FactoryGirl.create :panel, :author_id => @author.id
--
2.11.0