# Generated from studio_game_2021-1.0.0.gem by gem2rpm -*- rpm-spec -*-
%global gem_name studio_game_2021
Name: rubygem-%{gem_name}
Version: 1.0.0
Release: 1%{?dist}
Summary: A text-based game
License: MIT
URL: https://gitlab.com/EssentialistDev/studio-game
Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem
BuildRequires: ruby(release)
BuildRequires: rubygems-devel
BuildRequires: ruby >= 1.9
# BuildRequires: rubygem(rspec) >= 2.8
# BuildRequires: rubygem(rspec) < 3
# BuildRequires: rubygem(rspec) >= 2.8.0
BuildArch: noarch
%description
Table of Contents
-
About The Project
-
Getting Started
- Usage
- Roadmap
- Contributing
- License
- Contact
- Acknowledgements
## About The Project
[![Product Name Screen Shot][Screenshot of gameplay and test
list]](https://www.dropbox.com/s/mu1rrbx2mqowjkn/studio-game.png?dl=0)
This game is a project built following the [Pragmatic Studio Ruby
Course](https://online.pragmaticstudio.com/courses/ruby/). I absolutely adored
going through this course, because it was unlike other courses in that the
main focus wasn't syntax, but how to build a principle-driven, object-oriented
program that contains many of the skills we'd need to build real-world
projects. The instructors purposefully created exercises to let us build a
program using the skills they demonstrated by building a different program.
This wasn't a copy and paste kind of course. This game was actually my second
run-through, where I test-drove everything from the start based on the
objectives only.
Skills I valued developing further with this project:
- Test-driven development (50+ tests).
- Using inheritance to model "is-a" relationships. For example, a clumsy
player *is a* kind of player.
- Using mixins (modules) to reuse behaviours that are common between classes,
but should not be modeled with an inheritance relationship. A good tip was to
look for 'able' behaviors in a class to extract, like 'playable', 'printable',
'taxable' etc.
- Using a file block which lets you add in class usage examples that are only
run when you run the class file specifically.
- Overriding default methods (like sort, and renaming things so that they keep
a specific format)
Things I struggled with:
- Testing behaviour that uses blocks. I had a lightbulb moment when I realised
I should test the behaviour performed inside the block on a single item.
Testing the output of an entire block is like testing Ruby syntax works.
Alternatively, test the before and after state of something that changes as a
result of using a block. Cooool.
- Puts. It felt wrong to use puts to show the output in the console. I'd like
to learn how to seperate the view logic for a command-line project later.
Things I did to make it my own:
- Wrote a lot more tests for my second run-through.
- Noticed and extracted further 'able' behaviours into modules (like printing
stats, formatting output and handling csv files).
### Built With
* [Ruby (language)](https://www.ruby-lang.org/en/)
* [RSpec (framework)](https://rspec.info/)
* [Vim (text-editor)](https://www.vim.org/)
## Getting Started
To get a local copy up and running follow these steps:
### Prerequisites
This is an example of how to list things you need to use the software and how
to install them.
* gem
```sh
npm install npm@latest -g
```
### Installation
1. Install the gem
```sh
gem install studio_game_2021
```
## Usage
To play a game from the command-line, open a new command project and run the
command-line script like so:
```sh
studio_game
```
Or, if you'd like to use the game as a library, here's an example of how to
use it in `irb`. You can also check the bottom of each class or module file
for further usage instructions
```
>> require 'studio_game/game'
=> true
>> game = StudioGame::Game.new("Knuckleheads")
=> #
>> player = StudioGame::Player.new("Moe", 90)
=> I'm Moe with health = 90, points = 0, and score = 90.
>> game.add_player(player)
=> [I'm Moe with health = 90, points = 0, and score = 90.]
>> game.play(1)
```
## Roadmap
I plan to customize this game further now that I have a solid foundation to
explore from. It'll be fun to let the players interact with each other more,
like swapping treasures, and maybe add some kind of board game with it's own
features. That's my next focus.
## Contributing
Feel free to fork this project and play around with it. Open to
feedback-related pr requests.
## License
Distributed under the MIT License. See `LICENSE` for more information.
## Contact
Becca - [@becca9941](https://twitter.com/Becca9941) -
becca@essentialistdev.com
Project Link:
[https://gitlab.com/EssentialistDev/studio-game](https://gitlab.com/EssentialistDev/studio-game)
## Acknowledgements
- [Pragmatic Studio](https://online.pragmaticstudio.com/courses/ruby/) for
empowering me with awesome new development skills.
- [Best-README-Template](https://github.com/Becca9941/Best-README-Template)
for helping me write a README for this project.
%package doc
Summary: Documentation for %{name}
Requires: %{name} = %{version}-%{release}
BuildArch: noarch
%description doc
Documentation for %{name}.
%prep
%setup -q -n %{gem_name}-%{version}
%build
# Create the gem as gem install only works on a gem file
gem build ../%{gem_name}-%{version}.gemspec
# %%gem_install compiles any C extensions and installs the gem into ./%%gem_dir
# by default, so that we can move it into the buildroot in %%install
%gem_install
%install
mkdir -p %{buildroot}%{gem_dir}
cp -a .%{gem_dir}/* \
%{buildroot}%{gem_dir}/
mkdir -p %{buildroot}%{_bindir}
cp -a .%{_bindir}/* \
%{buildroot}%{_bindir}/
find %{buildroot}%{gem_instdir}/bin -type f | xargs chmod a+x
%check
pushd .%{gem_instdir}
# rspec spec
popd
%files
%dir %{gem_instdir}
%{_bindir}/studio_game
%license %{gem_instdir}/LICENSE
%{gem_instdir}/bin
%{gem_libdir}
%exclude %{gem_cache}
%{gem_spec}
%files doc
%doc %{gem_docdir}
%doc %{gem_instdir}/README
%{gem_instdir}/spec
%changelog
* Thu Sep 16 2021 mockbuilder - 1.0.0-1
- Initial package